diff --git a/src/aliensimulator/AlienSimulator.java b/src/aliensimulator/AlienSimulator.java
index 8814e44924d1ae71f4f6339b32046747e29b6ef8..b6d60725fd5572a79b01c5d0d2b8ea548a249d12 100644
--- a/src/aliensimulator/AlienSimulator.java
+++ b/src/aliensimulator/AlienSimulator.java
@@ -6,10 +6,12 @@ import aliensimulator.aliens.*;
 import aliensimulator.predators.Predator;
 import aliensimulator.predators.PredatorFactory;
 import aliensimulator.predators.Yautja;
-import aliensimulator.ufos.AlienUfoFactory;
 import aliensimulator.ufos.PredatorUfoFactory;
 import aliensimulator.ufos.Ufo;
 import aliensimulator.ufos.UfoFactory;
+import aliensimulator.ufos.komponenten.AlienKomponentenFabrik;
+import aliensimulator.ufos.komponenten.AlienUfoFactory;
+import aliensimulator.ufos.komponenten.PredatorKomponentenFabrik;
 import aliensimulator.verhalten.ErdeFreundlichBesuchen;
 import aliensimulator.verhalten.ErdeNeutralAdapter;
 
@@ -62,13 +64,13 @@ public class AlienSimulator {
 		yautja.fliegen();
 		yautja.erdeBesuchen();
 
-		UfoFactory alienUfoFactory = new AlienUfoFactory();
+		UfoFactory alienUfoFactory = new AlienUfoFactory(new AlienKomponentenFabrik());
 		Ufo alienSternenkreuzer = alienUfoFactory.createUfo("sternenkreuzer");
 		System.out.println(alienSternenkreuzer);
 		Ufo alienTransportschiff = alienUfoFactory.createUfo("transportschiff");
 		System.out.println(alienTransportschiff);
 
-		UfoFactory predatorUfoFactory = new PredatorUfoFactory();
+		UfoFactory predatorUfoFactory = new PredatorUfoFactory(new PredatorKomponentenFabrik());
 		Ufo predatorSternenkreuzer = predatorUfoFactory.createUfo("sternenkreuzer");
 		System.out.println(predatorSternenkreuzer);
 		Ufo predatorTransportschiff = predatorUfoFactory.createUfo("transportschiff");
diff --git a/src/aliensimulator/ufos/PredatorUfoFactory.java b/src/aliensimulator/ufos/PredatorUfoFactory.java
index ef8c1257aab925af153f226627e9a531b61224f9..fa8e0e1cbcf4cc246a1693e183af876a4e8cf217 100644
--- a/src/aliensimulator/ufos/PredatorUfoFactory.java
+++ b/src/aliensimulator/ufos/PredatorUfoFactory.java
@@ -4,10 +4,15 @@ import aliensimulator.ufos.komponenten.KomponentenFabrik;
 import aliensimulator.ufos.komponenten.PredatorKomponentenFabrik;
 
 public class PredatorUfoFactory implements UfoFactory {
+    private KomponentenFabrik komponentenFabrik;
+
+    public PredatorUfoFactory(KomponentenFabrik komponentenFabrik) {
+        this.komponentenFabrik = komponentenFabrik;
+    }
+
     @Override
     public Ufo createUfo(String type) {
         Ufo ufo = null;
-        KomponentenFabrik komponentenFabrik = new PredatorKomponentenFabrik();
 
         switch (type) {
             case "sternenkreuzer" :
diff --git a/src/aliensimulator/ufos/UfoFactory.java b/src/aliensimulator/ufos/UfoFactory.java
new file mode 100644
index 0000000000000000000000000000000000000000..9bf492b586b775a140d0b014653a91267318fb1a
--- /dev/null
+++ b/src/aliensimulator/ufos/UfoFactory.java
@@ -0,0 +1,7 @@
+package aliensimulator.ufos;
+
+public interface UfoFactory {
+
+    public Ufo createUfo(String type);
+
+}
diff --git a/src/aliensimulator/ufos/komponenten/AlienKomponentenFabrik.java b/src/aliensimulator/ufos/komponenten/AlienKomponentenFabrik.java
new file mode 100644
index 0000000000000000000000000000000000000000..c17af0bd15de28d85460e0516b9f20564096facf
--- /dev/null
+++ b/src/aliensimulator/ufos/komponenten/AlienKomponentenFabrik.java
@@ -0,0 +1,19 @@
+package aliensimulator.ufos.komponenten;
+
+public class AlienKomponentenFabrik implements KomponentenFabrik {
+    @Override
+    public Antrieb createAntrieb() {
+        return new Hyperantrieb();
+    }
+
+    @Override
+    public Schild createSchild() {
+        return new Verteidigungsschild();
+    }
+
+    @Override
+    public Waffe createWaffe() {
+        return new Phaserkanone();
+    }
+
+}
diff --git a/src/aliensimulator/ufos/komponenten/AlienUfoFactory.java b/src/aliensimulator/ufos/komponenten/AlienUfoFactory.java
new file mode 100644
index 0000000000000000000000000000000000000000..b958278e50e684c9777e45ea37c885e3751b31ad
--- /dev/null
+++ b/src/aliensimulator/ufos/komponenten/AlienUfoFactory.java
@@ -0,0 +1,35 @@
+package aliensimulator.ufos.komponenten;
+
+import aliensimulator.ufos.Sternenkreuzer;
+import aliensimulator.ufos.Transportschiff;
+import aliensimulator.ufos.Ufo;
+import aliensimulator.ufos.UfoFactory;
+
+
+public class AlienUfoFactory implements UfoFactory {
+
+    private KomponentenFabrik komponentenFabrik;
+
+    public AlienUfoFactory(KomponentenFabrik komponentenFabrik) {
+        this.komponentenFabrik = komponentenFabrik;
+    }
+
+    @Override
+    public Ufo createUfo(String type) {
+        Ufo ufo = null;
+
+        switch (type) {
+            case "sternenkreuzer" :
+                ufo = new Sternenkreuzer(komponentenFabrik);
+                ufo.setName("Alien Sternenkreuzer");
+                ufo.herstellen();
+                break;
+            case "transportschiff" :
+                ufo = new Transportschiff(komponentenFabrik);
+                ufo.setName("Alien Transportschiff");
+                ufo.herstellen();
+                break;
+        }
+        return ufo;
+    }
+}
diff --git a/src/aliensimulator/ufos/komponenten/Antrieb.java b/src/aliensimulator/ufos/komponenten/Antrieb.java
new file mode 100644
index 0000000000000000000000000000000000000000..d7f7fdc8c0f38fa0eb0841546886254569003954
--- /dev/null
+++ b/src/aliensimulator/ufos/komponenten/Antrieb.java
@@ -0,0 +1,5 @@
+package aliensimulator.ufos.komponenten;
+
+public interface Antrieb {
+    public String toString();
+}
diff --git a/src/aliensimulator/ufos/komponenten/Hyperantrieb.java b/src/aliensimulator/ufos/komponenten/Hyperantrieb.java
new file mode 100644
index 0000000000000000000000000000000000000000..a2e8d0ad1d07cfc229d3a89c86da9dbdcd32bfdb
--- /dev/null
+++ b/src/aliensimulator/ufos/komponenten/Hyperantrieb.java
@@ -0,0 +1,8 @@
+package aliensimulator.ufos.komponenten;
+
+public class Hyperantrieb implements Antrieb {
+    @Override
+    public String toString() {
+        return "Hyperantrieb";
+    }
+}
diff --git a/src/aliensimulator/ufos/komponenten/KomponentenFabrik.java b/src/aliensimulator/ufos/komponenten/KomponentenFabrik.java
new file mode 100644
index 0000000000000000000000000000000000000000..2bbdb415ac5a7d241dc6574ad974a76869b11adf
--- /dev/null
+++ b/src/aliensimulator/ufos/komponenten/KomponentenFabrik.java
@@ -0,0 +1,9 @@
+package aliensimulator.ufos.komponenten;
+
+public interface KomponentenFabrik {
+
+    public Antrieb createAntrieb();
+    public Schild createSchild();
+    public Waffe createWaffe();
+}
+
diff --git a/src/aliensimulator/ufos/komponenten/Laserkanone.java b/src/aliensimulator/ufos/komponenten/Laserkanone.java
new file mode 100644
index 0000000000000000000000000000000000000000..04def289cf1a52ebfb164bef4568fe883ceb4057
--- /dev/null
+++ b/src/aliensimulator/ufos/komponenten/Laserkanone.java
@@ -0,0 +1,8 @@
+package aliensimulator.ufos.komponenten;
+
+public class Laserkanone implements Waffe {
+    @Override
+    public String toString() {
+        return "Laserkanone";
+    }
+}
\ No newline at end of file
diff --git a/src/aliensimulator/ufos/komponenten/Metaphasenschild.java b/src/aliensimulator/ufos/komponenten/Metaphasenschild.java
new file mode 100644
index 0000000000000000000000000000000000000000..7139e8864c324f5cd06e33cb79141b444574ba2e
--- /dev/null
+++ b/src/aliensimulator/ufos/komponenten/Metaphasenschild.java
@@ -0,0 +1,8 @@
+package aliensimulator.ufos.komponenten;
+
+public class Metaphasenschild implements Schild {
+    @Override
+    public String toString() {
+        return "Metaphasenschild";
+    }
+}
\ No newline at end of file
diff --git a/src/aliensimulator/ufos/komponenten/Phaserkanone.java b/src/aliensimulator/ufos/komponenten/Phaserkanone.java
new file mode 100644
index 0000000000000000000000000000000000000000..ff2b82c3cb9ca8d973a175bafd86a0b2ae0c112f
--- /dev/null
+++ b/src/aliensimulator/ufos/komponenten/Phaserkanone.java
@@ -0,0 +1,8 @@
+package aliensimulator.ufos.komponenten;
+
+public class Phaserkanone implements Waffe {
+    @Override
+    public String toString() {
+        return "Phaserkanone";
+    }
+}
\ No newline at end of file
diff --git a/src/aliensimulator/ufos/komponenten/PredatorKomponentenFabrik.java b/src/aliensimulator/ufos/komponenten/PredatorKomponentenFabrik.java
new file mode 100644
index 0000000000000000000000000000000000000000..f09d47cf34cb62df71ea125a3b49891cadec3b25
--- /dev/null
+++ b/src/aliensimulator/ufos/komponenten/PredatorKomponentenFabrik.java
@@ -0,0 +1,18 @@
+package aliensimulator.ufos.komponenten;
+
+public class PredatorKomponentenFabrik implements KomponentenFabrik {
+    @Override
+    public Antrieb createAntrieb() {
+        return new Warpantrieb();
+    }
+
+    @Override
+    public Schild createSchild() {
+        return new Metaphasenschild();
+    }
+
+    @Override
+    public Waffe createWaffe() {
+        return new Laserkanone();
+    }
+}
diff --git a/src/aliensimulator/ufos/komponenten/PredatorUfoFactory.java b/src/aliensimulator/ufos/komponenten/PredatorUfoFactory.java
new file mode 100644
index 0000000000000000000000000000000000000000..e006f183385c1922b1a2ae027d50c70534b6c9ad
--- /dev/null
+++ b/src/aliensimulator/ufos/komponenten/PredatorUfoFactory.java
@@ -0,0 +1,35 @@
+package aliensimulator.ufos.komponenten;
+
+import aliensimulator.ufos.Sternenkreuzer;
+import aliensimulator.ufos.Transportschiff;
+import aliensimulator.ufos.Ufo;
+import aliensimulator.ufos.UfoFactory;
+
+
+public class PredatorUfoFactory implements UfoFactory {
+
+    private KomponentenFabrik komponentenFabrik;
+
+    public PredatorUfoFactory(KomponentenFabrik komponentenFabrik) {
+        this.komponentenFabrik = komponentenFabrik;
+    }
+
+    @Override
+    public Ufo createUfo(String type) {
+        Ufo ufo = null;
+
+        switch (type) {
+            case "sternenkreuzer" :
+                ufo = new Sternenkreuzer(komponentenFabrik);
+                ufo.setName("Predator Sternenkreuzer");
+                ufo.herstellen();
+                break;
+            case "transportschiff" :
+                ufo = new Transportschiff(komponentenFabrik);
+                ufo.setName("Predator Transportschiff");
+                ufo.herstellen();
+                break;
+        }
+        return ufo;
+    }
+}
diff --git a/src/aliensimulator/ufos/komponenten/Schild.java b/src/aliensimulator/ufos/komponenten/Schild.java
new file mode 100644
index 0000000000000000000000000000000000000000..ccb0c1c155184d3a222546178aa911341850618d
--- /dev/null
+++ b/src/aliensimulator/ufos/komponenten/Schild.java
@@ -0,0 +1,5 @@
+package aliensimulator.ufos.komponenten;
+
+public interface Schild {
+    public String toString();
+}
diff --git a/src/aliensimulator/ufos/komponenten/Verteidigungsschild.java b/src/aliensimulator/ufos/komponenten/Verteidigungsschild.java
new file mode 100644
index 0000000000000000000000000000000000000000..8b29b17c44cfb379b906eae178025a8ebc2ac0b2
--- /dev/null
+++ b/src/aliensimulator/ufos/komponenten/Verteidigungsschild.java
@@ -0,0 +1,8 @@
+package aliensimulator.ufos.komponenten;
+
+public class Verteidigungsschild implements Schild {
+    @Override
+    public String toString() {
+        return "Verteidigungsschild";
+    }
+}
\ No newline at end of file
diff --git a/src/aliensimulator/ufos/komponenten/Waffe.java b/src/aliensimulator/ufos/komponenten/Waffe.java
new file mode 100644
index 0000000000000000000000000000000000000000..02cb6a7f56d442cd73aaebddab22531bc44c77cc
--- /dev/null
+++ b/src/aliensimulator/ufos/komponenten/Waffe.java
@@ -0,0 +1,5 @@
+package aliensimulator.ufos.komponenten;
+
+public interface Waffe {
+    public String toString();
+}
diff --git a/src/aliensimulator/ufos/komponenten/Warpantrieb.java b/src/aliensimulator/ufos/komponenten/Warpantrieb.java
new file mode 100644
index 0000000000000000000000000000000000000000..c2faa88ebca1bad16e495889a4f266940f4fe848
--- /dev/null
+++ b/src/aliensimulator/ufos/komponenten/Warpantrieb.java
@@ -0,0 +1,8 @@
+package aliensimulator.ufos.komponenten;
+
+public class Warpantrieb implements Antrieb {
+    @Override
+    public String toString() {
+        return "Warpantrieb";
+    }
+}