diff --git a/lib/guava-21.0.jar b/lib/guava-21.0.jar
new file mode 100644
index 0000000000000000000000000000000000000000..0618195945f19848b80cbdcc56d7f05d913c6f64
Binary files /dev/null and b/lib/guava-21.0.jar differ
diff --git a/lib/guice-4.1.0-no_aop.jar b/lib/guice-4.1.0-no_aop.jar
new file mode 100644
index 0000000000000000000000000000000000000000..5d19a30dd234b53193d68bf7b69862919c5024ff
Binary files /dev/null and b/lib/guice-4.1.0-no_aop.jar differ
diff --git a/lib/javax.inject-1.jar b/lib/javax.inject-1.jar
new file mode 100644
index 0000000000000000000000000000000000000000..b2a9d0bf7bd463a6361898b36f010edd05c0cf6e
Binary files /dev/null and b/lib/javax.inject-1.jar differ
diff --git a/src/aliensimulator/AlienSimulator.java b/src/aliensimulator/AlienSimulator.java
index 8814e44924d1ae71f4f6339b32046747e29b6ef8..ea112716c0add9c59aa6d6b0639b93397bc81686 100644
--- a/src/aliensimulator/AlienSimulator.java
+++ b/src/aliensimulator/AlienSimulator.java
@@ -6,12 +6,11 @@ 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.*;
 import aliensimulator.verhalten.ErdeFreundlichBesuchen;
 import aliensimulator.verhalten.ErdeNeutralAdapter;
+import com.google.inject.Guice;
+import com.google.inject.Injector;
 
 public class AlienSimulator {
 	
@@ -62,13 +61,15 @@ public class AlienSimulator {
 		yautja.fliegen();
 		yautja.erdeBesuchen();
 
-		UfoFactory alienUfoFactory = new AlienUfoFactory();
+		Injector i = Guice.createInjector(new KomponentenModul());
+
+		UfoFactory alienUfoFactory = i.getInstance(AlienUfoFactory.class);
 		Ufo alienSternenkreuzer = alienUfoFactory.createUfo("sternenkreuzer");
 		System.out.println(alienSternenkreuzer);
 		Ufo alienTransportschiff = alienUfoFactory.createUfo("transportschiff");
 		System.out.println(alienTransportschiff);
 
-		UfoFactory predatorUfoFactory = new PredatorUfoFactory();
+		UfoFactory predatorUfoFactory = i.getInstance(PredatorUfoFactory.class);
 		Ufo predatorSternenkreuzer = predatorUfoFactory.createUfo("sternenkreuzer");
 		System.out.println(predatorSternenkreuzer);
 		Ufo predatorTransportschiff = predatorUfoFactory.createUfo("transportschiff");
diff --git a/src/aliensimulator/ufos/KomponentenModul.java b/src/aliensimulator/ufos/KomponentenModul.java
new file mode 100644
index 0000000000000000000000000000000000000000..3eeedf3bcb134aab1f9c1ec7b71b1f9f7ba4cfe7
--- /dev/null
+++ b/src/aliensimulator/ufos/KomponentenModul.java
@@ -0,0 +1,19 @@
+package aliensimulator.ufos;
+
+import aliensimulator.ufos.komponenten.*;
+import com.google.inject.AbstractModule;
+
+public class KomponentenModul extends AbstractModule {
+
+    @Override
+    protected void configure() {
+        bind(KomponentenFabrik.class)
+                .annotatedWith(AlienKomponenten.class)
+                .to(AlienKomponentenFabrik.class);
+
+        bind(KomponentenFabrik.class)
+                .annotatedWith(PredatorKomponenten.class)
+                .to(PredatorKomponentenFabrik.class);
+    }
+}
+
diff --git a/src/aliensimulator/ufos/PredatorUfoFactory.java b/src/aliensimulator/ufos/PredatorUfoFactory.java
index ef8c1257aab925af153f226627e9a531b61224f9..07cd4ee150db5331a6ed935839be06196b8f2cce 100644
--- a/src/aliensimulator/ufos/PredatorUfoFactory.java
+++ b/src/aliensimulator/ufos/PredatorUfoFactory.java
@@ -1,13 +1,19 @@
 package aliensimulator.ufos;
 
 import aliensimulator.ufos.komponenten.KomponentenFabrik;
+import aliensimulator.ufos.komponenten.PredatorKomponenten;
 import aliensimulator.ufos.komponenten.PredatorKomponentenFabrik;
 
+import javax.inject.Inject;
+
 public class PredatorUfoFactory implements UfoFactory {
+
+    @Inject
+    private @PredatorKomponenten 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/komponenten/AlienKomponenten.java b/src/aliensimulator/ufos/komponenten/AlienKomponenten.java
new file mode 100644
index 0000000000000000000000000000000000000000..3017a16730c0951a7d7c510d22adc9baefa1c09e
--- /dev/null
+++ b/src/aliensimulator/ufos/komponenten/AlienKomponenten.java
@@ -0,0 +1,15 @@
+package aliensimulator.ufos.komponenten;
+
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+import java.lang.annotation.Target;
+import java.lang.annotation.Retention;
+import javax.inject.Qualifier;
+
+@Qualifier
+@Target({ FIELD, PARAMETER, METHOD })
+@Retention(RUNTIME)
+public @interface AlienKomponenten {}
\ No newline at end of file
diff --git a/src/aliensimulator/ufos/komponenten/PredatorKomponenten.java b/src/aliensimulator/ufos/komponenten/PredatorKomponenten.java
new file mode 100644
index 0000000000000000000000000000000000000000..3f05e75b4310c74a32a1fe7d48e2c63fd1677344
--- /dev/null
+++ b/src/aliensimulator/ufos/komponenten/PredatorKomponenten.java
@@ -0,0 +1,16 @@
+package aliensimulator.ufos.komponenten;
+
+
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+import java.lang.annotation.Target;
+import java.lang.annotation.Retention;
+import javax.inject.Qualifier;
+
+@Qualifier
+@Target({ FIELD, PARAMETER, METHOD })
+@Retention(RUNTIME)
+public @interface PredatorKomponenten {}
\ No newline at end of file