diff --git a/src/aliensimulator/AlienSimulator.java b/src/aliensimulator/AlienSimulator.java
index b3551771bbc96780626a88f5a707e646d979047f..5a69d632147c0890812db54ff01583ae1e0e667f 100644
--- a/src/aliensimulator/AlienSimulator.java
+++ b/src/aliensimulator/AlienSimulator.java
@@ -6,6 +6,10 @@ 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.verhalten.ErdeFreundlichBesuchen;
 import aliensimulator.verhalten.ErdeNeutralAdapter;
 
@@ -51,5 +55,16 @@ public class AlienSimulator {
 		yautja.fliegen();
 		yautja.erdeBesuchen();
 
+		UfoFactory alienUfoFactory = new AlienUfoFactory();
+		Ufo alienSternenkreuzer = alienUfoFactory.createUfo("sternenkreuzer");
+		System.out.println(alienSternenkreuzer);
+		Ufo alienTransportschiff = alienUfoFactory.createUfo("transportschiff");
+		System.out.println(alienTransportschiff);
+
+		UfoFactory predatorUfoFactory = new PredatorUfoFactory();
+		Ufo predatorSternenkreuzer = predatorUfoFactory.createUfo("sternenkreuzer");
+		System.out.println(predatorSternenkreuzer);
+		Ufo predatorTransportschiff = predatorUfoFactory.createUfo("transportschiff");
+		System.out.println(predatorTransportschiff);
 	}
 }
diff --git a/src/aliensimulator/ufos/PredatorUfoFactory.java b/src/aliensimulator/ufos/PredatorUfoFactory.java
new file mode 100644
index 0000000000000000000000000000000000000000..ef8c1257aab925af153f226627e9a531b61224f9
--- /dev/null
+++ b/src/aliensimulator/ufos/PredatorUfoFactory.java
@@ -0,0 +1,26 @@
+package aliensimulator.ufos;
+
+import aliensimulator.ufos.komponenten.KomponentenFabrik;
+import aliensimulator.ufos.komponenten.PredatorKomponentenFabrik;
+
+public class PredatorUfoFactory implements UfoFactory {
+    @Override
+    public Ufo createUfo(String type) {
+        Ufo ufo = null;
+        KomponentenFabrik komponentenFabrik = new PredatorKomponentenFabrik();
+
+        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/Sternenkreuzer.java b/src/aliensimulator/ufos/Sternenkreuzer.java
new file mode 100644
index 0000000000000000000000000000000000000000..21c6877af0794c6e6158d70f753f1b6bb389f802
--- /dev/null
+++ b/src/aliensimulator/ufos/Sternenkreuzer.java
@@ -0,0 +1,21 @@
+package aliensimulator.ufos;
+
+import aliensimulator.ufos.komponenten.KomponentenFabrik;
+
+public class Sternenkreuzer extends Ufo {
+
+    public Sternenkreuzer(KomponentenFabrik komponentenFabrik) {
+        super();
+        setKomponentenFabrik(komponentenFabrik);
+    }
+
+    public void herstellen() {
+        setAntrieb(komponentenFabrik.createAntrieb());
+        setSchild(komponentenFabrik.createSchild());
+        setWaffe(komponentenFabrik.createWaffe());
+    }
+
+    public String toString() {
+        return "Sternenkreuzer\n" + super.toString();
+    }
+}
diff --git a/src/aliensimulator/ufos/Transportschiff.java b/src/aliensimulator/ufos/Transportschiff.java
new file mode 100644
index 0000000000000000000000000000000000000000..6d23b536f9eebc3e05a58111f4cdbdc12af4f5f2
--- /dev/null
+++ b/src/aliensimulator/ufos/Transportschiff.java
@@ -0,0 +1,20 @@
+package aliensimulator.ufos;
+
+import aliensimulator.ufos.komponenten.KomponentenFabrik;
+
+public class Transportschiff extends Ufo {
+
+    public Transportschiff(KomponentenFabrik komponentenFabrik) {
+        super();
+        setKomponentenFabrik(komponentenFabrik);
+    }
+
+    public void herstellen() {
+        setAntrieb(komponentenFabrik.createAntrieb());
+        setSchild(komponentenFabrik.createSchild());
+    }
+
+    public String toString() {
+        return "Transportschiff\n" + super.toString();
+    }
+}
diff --git a/src/aliensimulator/ufos/Ufo.java b/src/aliensimulator/ufos/Ufo.java
new file mode 100644
index 0000000000000000000000000000000000000000..6d2ef9d800482470839093b22e4f2990516ed42e
--- /dev/null
+++ b/src/aliensimulator/ufos/Ufo.java
@@ -0,0 +1,76 @@
+package aliensimulator.ufos;
+
+import aliensimulator.ufos.komponenten.Antrieb;
+import aliensimulator.ufos.komponenten.KomponentenFabrik;
+import aliensimulator.ufos.komponenten.Schild;
+import aliensimulator.ufos.komponenten.Waffe;
+
+public abstract class Ufo {
+    KomponentenFabrik komponentenFabrik;
+    String name;
+    Antrieb antrieb;
+    Schild schild;
+    Waffe waffe;
+
+    public abstract void herstellen();
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public Antrieb getAntrieb() {
+        return antrieb;
+    }
+
+    public void setAntrieb(Antrieb antrieb) {
+        this.antrieb = antrieb;
+    }
+
+    public Schild getSchild() {
+        return schild;
+    }
+
+    public void setSchild(Schild schild) {
+        this.schild = schild;
+    }
+
+    public Waffe getWaffe() {
+        return waffe;
+    }
+
+    public void setWaffe(Waffe waffe) {
+        this.waffe = waffe;
+    }
+
+    public KomponentenFabrik getKomponentenFabrik() {
+        return komponentenFabrik;
+    }
+
+    public void setKomponentenFabrik(KomponentenFabrik komponentenFabrik) {
+        this.komponentenFabrik = komponentenFabrik;
+    }
+
+    @Override
+    public String toString() {
+        StringBuffer result = new StringBuffer();
+        result.append("Name: " + name + "\n");
+
+        if (antrieb != null) {
+            result.append(antrieb + "\n");
+        }
+
+        if (schild != null) {
+            result.append(schild + "\n");
+        }
+
+        if (waffe != null) {
+            result.append(waffe + "\n");
+        }
+
+        return result.toString();
+    }
+}