diff --git a/src/main/java/org/apache/easyant/tasks/SubModule.java b/src/main/java/org/apache/easyant/tasks/SubModule.java
index 7d05658..b53a4ff 100644
--- a/src/main/java/org/apache/easyant/tasks/SubModule.java
+++ b/src/main/java/org/apache/easyant/tasks/SubModule.java
@@ -307,7 +307,7 @@
      * Filter the active set of targets to only those defined in the given project.
      */
     private String filterTargets(Project subProject) {
-        Set<String> filteredTargets = new HashSet<String>();
+        List<String> filteredTargets = new ArrayList<String>();
         Set<?> keys = subProject.getTargets().keySet();
 
         for (String target : targets) {
diff --git a/src/test/java/org/apache/easyant/tasks/SubModuleTest.java b/src/test/java/org/apache/easyant/tasks/SubModuleTest.java
index a0f3c4d..22a9a1f 100644
--- a/src/test/java/org/apache/easyant/tasks/SubModuleTest.java
+++ b/src/test/java/org/apache/easyant/tasks/SubModuleTest.java
@@ -18,8 +18,16 @@
 
 package org.apache.easyant.tasks;
 
+import static org.hamcrest.CoreMatchers.notNullValue;
+import static org.junit.Assert.assertThat;
+
+import java.io.File;
+import java.io.IOException;
+import java.net.URISyntaxException;
+
 import org.apache.easyant.core.EasyAntMagicNames;
 import org.apache.easyant.core.ant.listerners.MultiModuleLogger;
+import org.apache.easyant.tasks.SubModule.TargetList;
 import org.apache.tools.ant.Project;
 import org.apache.tools.ant.types.FileSet;
 import org.apache.tools.ant.types.Path;
@@ -29,13 +37,6 @@
 import org.junit.rules.ExpectedException;
 import org.junit.rules.TemporaryFolder;
 
-import java.io.File;
-import java.io.IOException;
-import java.net.URISyntaxException;
-
-import static org.hamcrest.CoreMatchers.notNullValue;
-import static org.junit.Assert.assertThat;
-
 public class SubModuleTest extends AntTaskBaseTest {
 
     private SubModule submodule;
@@ -159,4 +160,29 @@
         assertThat(submodule.getProject().getReference(MultiModuleLogger.EXECUTION_TIMER_BUILD_RESULTS),
                 notNullValue());
     }
+        
+    @Test
+    public void shouldRunTargetInRightOrder() throws URISyntaxException {
+        configureBuildLogger(submodule.getProject(), Project.MSG_DEBUG);
+        
+        Path path = new Path(submodule.getProject());
+        FileSet fs = new FileSet();
+        File multimodule = new File(this.getClass().getResource("multimodule").toURI());
+        fs.setDir(multimodule);
+        path.addFileset(fs);
+        path.createPath();
+        
+        submodule.setBuildpath(path);
+        submodule.setTargets(new TargetList("modulewithtarget:firstTarget", "modulewithtarget:secondTarget", "modulewithtarget:thirdTarget"));
+        submodule.execute();
+                
+        assertLogContaining("Executing [modulewithtarget:firstTarget, modulewithtarget:secondTarget, modulewithtarget:thirdTarget] on module1");
+        assertLogContaining("Executing [modulewithtarget:firstTarget, modulewithtarget:secondTarget, modulewithtarget:thirdTarget] on module2");
+        assertLogContaining("ant.project.invoked-targets -> modulewithtarget:firstTarget,modulewithtarget:secondTarget,modulewithtarget:thirdTarget");
+        assertLogContaining("project.executed.targets -> modulewithtarget:firstTarget,modulewithtarget:secondTarget,modulewithtarget:thirdTarget");
+        assertLogContaining("firstProperty=first secondProperty=second thirdProperty=third");
+        
+        assertThat(submodule.getProject().getReference(MultiModuleLogger.EXECUTION_TIMER_BUILD_RESULTS),
+                notNullValue());
+    }
 }
diff --git a/src/test/resources/repositories/plugins/mycompany/modulewithtarget/ants/modulewithtarget-0.1.ant b/src/test/resources/repositories/plugins/mycompany/modulewithtarget/ants/modulewithtarget-0.1.ant
index cf1c9bb..9f45420 100644
--- a/src/test/resources/repositories/plugins/mycompany/modulewithtarget/ants/modulewithtarget-0.1.ant
+++ b/src/test/resources/repositories/plugins/mycompany/modulewithtarget/ants/modulewithtarget-0.1.ant
@@ -19,4 +19,22 @@
 	    <echo>a message from mytarget</echo>
 		<property name="apropertyinmytarget" value="foobar"/>
 	</target>
+	
+	<target name="modulewithtarget:firstTarget">
+		<property name="firstProperty" value="first"/>
+	</target>
+	
+	<target name="modulewithtarget:secondTarget">
+		<property name="firstProperty" value="invalid"/>
+		<property name="secondProperty" value="second"/>
+	</target>
+	
+	<target name="modulewithtarget:thirdTarget">	    
+		<property name="firstProperty" value="invalid"/>
+		<property name="secondProperty" value="invalid"/>
+		<property name="thirdProperty" value="third"/>
+		
+		<echo>firstProperty=${firstProperty} secondProperty=${secondProperty} thirdProperty=${thirdProperty}</echo>
+	</target>
+	
 </project>
\ No newline at end of file
