diff --git a/Task_B/src/main/IBuild.java b/Task_B/src/main/IBuild.java
new file mode 100644
index 0000000000000000000000000000000000000000..434f5f87bfb1e584830bb1fd674aa806e83f8c02
--- /dev/null
+++ b/Task_B/src/main/IBuild.java
@@ -0,0 +1,7 @@
+package main;
+
+import domain.BuildConfig;
+
+public interface IBuild {
+	public void build(int debuglevel);
+}
diff --git a/Task_B/src/main/IBuildConfigReader.java b/Task_B/src/main/IBuildConfigReader.java
new file mode 100644
index 0000000000000000000000000000000000000000..1e7c42002f29ec85131348e6b9f32635066fe69b
--- /dev/null
+++ b/Task_B/src/main/IBuildConfigReader.java
@@ -0,0 +1,7 @@
+package main;
+
+import domain.BuildConfig;
+
+public interface IBuildConfigReader {
+	public BuildConfig getBuildConfig();
+}
diff --git a/Task_B/src/main/IBuildConfigReaderFactory.java b/Task_B/src/main/IBuildConfigReaderFactory.java
new file mode 100644
index 0000000000000000000000000000000000000000..08ad6e0e6a5cd96377a58b6bb55d2cc72e92ee87
--- /dev/null
+++ b/Task_B/src/main/IBuildConfigReaderFactory.java
@@ -0,0 +1,5 @@
+package main;
+
+public interface IBuildConfigReaderFactory {
+	public IBuildConfigReader createBuildConfigReader(String buildFileName);
+}
diff --git a/Task_B/src/main/IBuildFactory.java b/Task_B/src/main/IBuildFactory.java
new file mode 100644
index 0000000000000000000000000000000000000000..f76947d9e583793a00e0757f3ae24b1b51d77121
--- /dev/null
+++ b/Task_B/src/main/IBuildFactory.java
@@ -0,0 +1,7 @@
+package main;
+
+import domain.BuildConfig;
+
+public interface IBuildFactory {
+	public IBuild createBuild(String buildFileName, BuildConfig buildConfig, String targetName);
+}
diff --git a/Task_B/src/main/Main.java b/Task_B/src/main/Main.java
index e67fc3c4e4d4cbc0e3c4ef9768ac706aa279f2b7..8e4c885d643fe52aac955f8aad67c58629cdb0be 100755
--- a/Task_B/src/main/Main.java
+++ b/Task_B/src/main/Main.java
@@ -10,13 +10,27 @@ import yaml.YamlBuildConfigurationReader;
 public class Main {
 	
 	public static void main(String[] args) {
-		XMLBuildConfigurationReader buildConfigurationReader = new XMLBuildConfigurationReader("build.xml");
-		final Project xmlProject = buildConfigurationReader.getProject();
-		Build build = new Build(xmlProject);
-		build.build(1, "dist");
-		YamlBuildConfigurationReader yamlConfigReader = new YamlBuildConfigurationReader("build.yaml");
-		final BuildConfig yamlBuildConfig = yamlConfigReader.getBuildConfig();
-		Compile compile = new Compile(yamlBuildConfig, "dist");
-		compile.build(1);
+		
+//		XMLBuildConfigurationReader buildConfigurationReader = new XMLBuildConfigurationReader("build.xml");
+//		final Project xmlProject = buildConfigurationReader.getProject();
+//		Build build = new Build(xmlProject);
+//		build.build(1, "dist");
+//		YamlBuildConfigurationReader yamlConfigReader = new YamlBuildConfigurationReader("build.yaml");
+//		final BuildConfig yamlBuildConfig = yamlConfigReader.getBuildConfig();
+//		Compile compile = new Compile(yamlBuildConfig, "dist");
+//		compile.build(1);
+		
+		final String target = "dist";
+	    buildTarget("build.xml", target);
+	    buildTarget("build.yaml", target);
+	}
+	
+	private static void buildTarget(String buildFileName, String target) {
+		MyBuildConfigReaderFactory buildConfigReaderFactory = new MyBuildConfigReaderFactory();
+		IBuildConfigReader buildConfigReader = buildConfigReaderFactory.createBuildConfigReader(buildFileName);
+		BuildConfig buildConfig = buildConfigReader.getBuildConfig();
+		MyBuildFactory builderFactory = new MyBuildFactory();
+		IBuild build = builderFactory.createBuild(buildFileName, buildConfig, target);
+		build.build(1);
 	}
 }
diff --git a/Task_B/src/main/MyBuildConfigReaderFactory.java b/Task_B/src/main/MyBuildConfigReaderFactory.java
new file mode 100644
index 0000000000000000000000000000000000000000..5dddcd888a57aaccd5450d8f595919175f536b05
--- /dev/null
+++ b/Task_B/src/main/MyBuildConfigReaderFactory.java
@@ -0,0 +1,22 @@
+package main;
+
+import xml.XMLBuildConfigurationReader;
+import yaml.YamlBuildConfigurationReader;
+
+public class MyBuildConfigReaderFactory implements IBuildConfigReaderFactory {
+
+	@Override
+	public IBuildConfigReader createBuildConfigReader(String buildFileName) {
+		String fileNameExtension = buildFileName.substring(buildFileName.lastIndexOf("."));
+		if (fileNameExtension.equals(".yaml")) {
+			return new MyYamlBuildConfigReader(new YamlBuildConfigurationReader(buildFileName));
+			
+		} else if (fileNameExtension.equals(".xml")) {
+			return new MyXMLBuildConfigReader(new XMLBuildConfigurationReader(buildFileName));
+			
+		} else {
+			return null;
+		}
+	}
+
+}
diff --git a/Task_B/src/main/MyBuildFactory.java b/Task_B/src/main/MyBuildFactory.java
new file mode 100644
index 0000000000000000000000000000000000000000..4d301e76ebf52466bcea22ce600d50bc95b880fe
--- /dev/null
+++ b/Task_B/src/main/MyBuildFactory.java
@@ -0,0 +1,22 @@
+package main;
+
+import domain.BuildConfig;
+import xml.Build;
+import yaml.Compile;
+
+public class MyBuildFactory implements IBuildFactory {
+
+	@Override
+	public IBuild createBuild(String buildFileName, BuildConfig buildConfig, String targetName) {
+		String fileNameExtension = buildFileName.substring(buildFileName.lastIndexOf("."));
+		if (fileNameExtension.equals(".yaml")) {
+			return new MyYamlBuild(new Compile(buildConfig, targetName));
+			
+		} else if (fileNameExtension.equals(".xml")) {
+			return new MyXMLBuild(new Build(buildConfig.getProject()), targetName);
+			
+		} else {
+			return null;
+		}
+	}
+}
diff --git a/Task_B/src/main/MyXMLBuild.java b/Task_B/src/main/MyXMLBuild.java
new file mode 100644
index 0000000000000000000000000000000000000000..8d094a540fd5dced5d6e69709d5098b7bd6335ae
--- /dev/null
+++ b/Task_B/src/main/MyXMLBuild.java
@@ -0,0 +1,19 @@
+package main;
+
+import xml.Build;
+
+public class MyXMLBuild implements IBuild {
+	
+	Build adaptee;
+	String targetName;
+	
+	public MyXMLBuild(Build xmlBuild, String targetName) {
+		adaptee = xmlBuild;
+		this.targetName = targetName;
+	}
+
+	public void build(int debuglevel) {
+		adaptee.build(debuglevel, targetName);
+	}
+
+}
diff --git a/Task_B/src/main/MyXMLBuildConfigReader.java b/Task_B/src/main/MyXMLBuildConfigReader.java
new file mode 100644
index 0000000000000000000000000000000000000000..4aad5be985c77bfd4b7362bf3dd7e8e2d5e2c11d
--- /dev/null
+++ b/Task_B/src/main/MyXMLBuildConfigReader.java
@@ -0,0 +1,22 @@
+package main;
+
+import domain.BuildConfig;
+import xml.XMLBuildConfigurationReader;
+
+public class MyXMLBuildConfigReader implements IBuildConfigReader {
+
+	private XMLBuildConfigurationReader adaptee;
+
+	public MyXMLBuildConfigReader(XMLBuildConfigurationReader buildConfigReader) {
+		adaptee = buildConfigReader;
+	}
+	
+	@Override
+	public BuildConfig getBuildConfig() {
+		BuildConfig buildConfig = new BuildConfig();
+		buildConfig.setProject(adaptee.getProject());
+		
+		return buildConfig;
+	}
+
+}
diff --git a/Task_B/src/main/MyYamlBuild.java b/Task_B/src/main/MyYamlBuild.java
new file mode 100644
index 0000000000000000000000000000000000000000..7e1027b6f3c68c99f9445f846c368768e45aae71
--- /dev/null
+++ b/Task_B/src/main/MyYamlBuild.java
@@ -0,0 +1,17 @@
+package main;
+
+import yaml.Compile;
+
+public class MyYamlBuild implements IBuild {
+	
+	Compile adaptee;
+	
+	public MyYamlBuild(Compile yamlCompile) {
+		adaptee = yamlCompile;
+	}
+
+	public void build(int debuglevel) {
+		adaptee.build(debuglevel);
+	}
+
+}
diff --git a/Task_B/src/main/MyYamlBuildConfigReader.java b/Task_B/src/main/MyYamlBuildConfigReader.java
new file mode 100644
index 0000000000000000000000000000000000000000..9e4d4fd8c5460806e00c446e9857de6365808ee8
--- /dev/null
+++ b/Task_B/src/main/MyYamlBuildConfigReader.java
@@ -0,0 +1,20 @@
+package main;
+
+import domain.BuildConfig;
+import yaml.YamlBuildConfigurationReader;
+
+public class MyYamlBuildConfigReader implements IBuildConfigReader {
+	
+	private YamlBuildConfigurationReader adaptee;
+
+	public MyYamlBuildConfigReader(YamlBuildConfigurationReader buildConfigReader) {
+		adaptee = buildConfigReader;
+	}
+	
+	@Override
+	public BuildConfig getBuildConfig() {
+		
+		return adaptee.getBuildConfig();
+	}
+
+}