diff --git a/src/pizzeria/ChicagoPizzaRegistry.java b/src/pizzeria/ChicagoPizzaRegistry.java
new file mode 100644
index 0000000000000000000000000000000000000000..a5f114c12d6c5e5d48c1e7ce4f5a84496da86963
--- /dev/null
+++ b/src/pizzeria/ChicagoPizzaRegistry.java
@@ -0,0 +1,24 @@
+package pizzeria;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.ListIterator;
+
+public class ChicagoPizzaRegistry {
+	static List<Pizza> pizzaHandlers = new ArrayList<>();
+	
+	static void register(Pizza pizza) {
+		pizzaHandlers.add(pizza);
+	}
+	
+	static Pizza getPizzaHandler(String type) {
+		ListIterator<Pizza> iter = pizzaHandlers.listIterator();
+		while (iter.hasNext()) {
+			Pizza pizza = iter.next();
+			if (pizza.canHandle(type)) {
+				return pizza;
+			}
+		}
+		return null;
+	}
+}
diff --git a/src/pizzeria/ChicagoPizzaStore.java b/src/pizzeria/ChicagoPizzaStore.java
index 22851d20ad720363bd790d265d0729703347bec8..276ab6844c46a4c8ff9c760288eff0e91d55b074 100644
--- a/src/pizzeria/ChicagoPizzaStore.java
+++ b/src/pizzeria/ChicagoPizzaStore.java
@@ -3,14 +3,13 @@ package pizzeria;
 public class ChicagoPizzaStore extends PizzaStore {
 
 	Pizza createPizza(String item) {
-        	if (item.equals("cheese")) {
-            		return new ChicagoStyleCheesePizza();
-        	} else if (item.equals("veggie")) {
-        	    	return new ChicagoStyleVeggiePizza();
-        	} else if (item.equals("clam")) {
-        	    	return new ChicagoStyleClamPizza();
-        	} else if (item.equals("pepperoni")) {
-            		return new ChicagoStylePepperoniPizza();
-        	} else return null;
+		Pizza pizza = null;
+
+		pizza = ChicagoPizzaRegistry.getPizzaHandler(item);
+		if (pizza == null) {
+			System.out.println("Kein Handler gefunden");
+		}
+
+		return pizza;
 	}
 }
diff --git a/src/pizzeria/ChicagoStyleCheesePizza.java b/src/pizzeria/ChicagoStyleCheesePizza.java
index 83b26eebe88ed19448184b7fc665c7d9065b17b1..8095e9b391b13a047616579788bf9d089617bafb 100644
--- a/src/pizzeria/ChicagoStyleCheesePizza.java
+++ b/src/pizzeria/ChicagoStyleCheesePizza.java
@@ -2,6 +2,10 @@ package pizzeria;
 
 public class ChicagoStyleCheesePizza extends Pizza {
 
+	static {
+		ChicagoPizzaRegistry.register(new ChicagoStyleCheesePizza());
+	}
+
 	public ChicagoStyleCheesePizza() { 
 		name = "Chicago Style Deep Dish Cheese Pizza";
 		dough = "Extra Thick Crust Dough";
@@ -13,4 +17,9 @@ public class ChicagoStyleCheesePizza extends Pizza {
 	void cut() {
 		System.out.println("Cutting the pizza into square slices");
 	}
+
+	@Override
+	public Boolean canHandle(String type) {
+		return type.equalsIgnoreCase("cheese");
+	}
 }
diff --git a/src/pizzeria/ChicagoStyleClamPizza.java b/src/pizzeria/ChicagoStyleClamPizza.java
index 9999b8bf74257ce5294df3359ff2731cdaf2b7b5..7a69c73888dfe1e3e3083039175bb66cad10ab13 100644
--- a/src/pizzeria/ChicagoStyleClamPizza.java
+++ b/src/pizzeria/ChicagoStyleClamPizza.java
@@ -1,6 +1,10 @@
 package pizzeria;
 
 public class ChicagoStyleClamPizza extends Pizza {
+	static {
+		ChicagoPizzaRegistry.register(new ChicagoStyleClamPizza());
+	}
+
 	public ChicagoStyleClamPizza() {
 		name = "Chicago Style Clam Pizza";
 		dough = "Extra Thick Crust Dough";
@@ -13,4 +17,9 @@ public class ChicagoStyleClamPizza extends Pizza {
 	void cut() {
 		System.out.println("Cutting the pizza into square slices");
 	}
+
+	@Override
+	public Boolean canHandle(String type) {
+		return type.equalsIgnoreCase("clam");
+	}
 }
diff --git a/src/pizzeria/ChicagoStylePepperoniPizza.java b/src/pizzeria/ChicagoStylePepperoniPizza.java
index ad85beb1bee8abb94a3bc0f7b3d7a6919dfe0d10..f7e98741b0e7ad89243c939f0badbba8c5cf4009 100644
--- a/src/pizzeria/ChicagoStylePepperoniPizza.java
+++ b/src/pizzeria/ChicagoStylePepperoniPizza.java
@@ -1,6 +1,11 @@
 package pizzeria;
 
 public class ChicagoStylePepperoniPizza extends Pizza {
+
+	static {
+		ChicagoPizzaRegistry.register(new ChicagoStylePepperoniPizza());
+	}
+
 	public ChicagoStylePepperoniPizza() {
 		name = "Chicago Style Pepperoni Pizza";
 		dough = "Extra Thick Crust Dough";
@@ -16,4 +21,9 @@ public class ChicagoStylePepperoniPizza extends Pizza {
 	void cut() {
 		System.out.println("Cutting the pizza into square slices");
 	}
+
+	@Override
+	public Boolean canHandle(String type) {
+		return type.equalsIgnoreCase("pepperoni");
+	}
 }
diff --git a/src/pizzeria/ChicagoStyleVeggiePizza.java b/src/pizzeria/ChicagoStyleVeggiePizza.java
index 52f5968906f455201ea0f970904e7135b122f319..cfee2f93b957d24a797a21bdc4e91441e6401427 100644
--- a/src/pizzeria/ChicagoStyleVeggiePizza.java
+++ b/src/pizzeria/ChicagoStyleVeggiePizza.java
@@ -1,6 +1,11 @@
 package pizzeria;
 
 public class ChicagoStyleVeggiePizza extends Pizza {
+
+	static {
+		ChicagoPizzaRegistry.register(new ChicagoStyleVeggiePizza());
+	}
+
 	public ChicagoStyleVeggiePizza() {
 		name = "Chicago Deep Dish Veggie Pizza";
 		dough = "Extra Thick Crust Dough";
@@ -15,4 +20,10 @@ public class ChicagoStyleVeggiePizza extends Pizza {
 	void cut() {
 		System.out.println("Cutting the pizza into square slices");
 	}
+
+	@Override
+	public Boolean canHandle(String type) {
+		return type.equalsIgnoreCase("veggie");
+	}
+
 }
diff --git a/src/pizzeria/NYStyleCheesePizza.java b/src/pizzeria/NYStyleCheesePizza.java
index 7ba90a6d0ef654777b95f5f111f128f4da8f37c2..ef9b82331ad49b1805239be4835a2a1749a81cdd 100644
--- a/src/pizzeria/NYStyleCheesePizza.java
+++ b/src/pizzeria/NYStyleCheesePizza.java
@@ -9,4 +9,9 @@ public class NYStyleCheesePizza extends Pizza {
  
 		toppings.add("Grated Reggiano Cheese");
 	}
+
+	@Override
+	public Boolean canHandle(String type) {
+		return type.equalsIgnoreCase("cheese");
+	}
 }
diff --git a/src/pizzeria/NYStyleClamPizza.java b/src/pizzeria/NYStyleClamPizza.java
index 23935afcdb739e9fd445ea98bc7dafdc0618b8c5..ef38c36eec2948451637bca21274e6962537b019 100644
--- a/src/pizzeria/NYStyleClamPizza.java
+++ b/src/pizzeria/NYStyleClamPizza.java
@@ -10,4 +10,8 @@ public class NYStyleClamPizza extends Pizza {
 		toppings.add("Grated Reggiano Cheese");
 		toppings.add("Fresh Clams from Long Island Sound");
 	}
+	@Override
+	public Boolean canHandle(String type) {
+		return type.equalsIgnoreCase("clam");
+	}
 }
diff --git a/src/pizzeria/NYStylePepperoniPizza.java b/src/pizzeria/NYStylePepperoniPizza.java
index 66cde53bf5f64eba0fcdf9439661be79032fb7bb..533bb71f6657a3119a26d935b19d96717ffa26f3 100644
--- a/src/pizzeria/NYStylePepperoniPizza.java
+++ b/src/pizzeria/NYStylePepperoniPizza.java
@@ -14,4 +14,10 @@ public class NYStylePepperoniPizza extends Pizza {
 		toppings.add("Mushrooms");
 		toppings.add("Red Pepper");
 	}
+
+	@Override
+	public Boolean canHandle(String type) {
+		return type.equalsIgnoreCase("pepperoni");
+	}
+
 }
diff --git a/src/pizzeria/NYStyleVeggiePizza.java b/src/pizzeria/NYStyleVeggiePizza.java
index cb66220bb3543eac70674d7c09377b60e8f3a795..b832894695f265cd372bc1b8957de6de30c2c7f5 100644
--- a/src/pizzeria/NYStyleVeggiePizza.java
+++ b/src/pizzeria/NYStyleVeggiePizza.java
@@ -13,4 +13,10 @@ public class NYStyleVeggiePizza extends Pizza {
 		toppings.add("Mushrooms");
 		toppings.add("Red Pepper");
 	}
+
+	@Override
+	public Boolean canHandle(String type) {
+		return type.equalsIgnoreCase("veggie");
+	}
+
 }
diff --git a/src/pizzeria/Pizza.java b/src/pizzeria/Pizza.java
index 65e3e4c86860c2ab1573faddba7184705dd92de0..bbf1652179281dcf32c2f4811a4c0025f1fb042a 100644
--- a/src/pizzeria/Pizza.java
+++ b/src/pizzeria/Pizza.java
@@ -7,7 +7,9 @@ public abstract class Pizza {
 	String dough;
 	String sauce;
 	ArrayList<String> toppings = new ArrayList<String>();
- 
+
+	public abstract Boolean canHandle(String type);
+
 	void prepare() {
 		System.out.println("Preparing " + name);
 		System.out.println("Tossing dough...");
diff --git a/src/pizzeria/PizzaTestDrive.java b/src/pizzeria/PizzaTestDrive.java
index a4ce31a7bbb9e7f5299dd3e91f3ebaab166606fa..8ee017be085f9f225d88cb3a579d8f5f28160b59 100644
--- a/src/pizzeria/PizzaTestDrive.java
+++ b/src/pizzeria/PizzaTestDrive.java
@@ -3,6 +3,15 @@ package pizzeria;
 public class PizzaTestDrive {
  
 	public static void main(String[] args) {
+		try {
+			Class.forName("pizzeria.ChicagoStyleCheesePizza");
+			Class.forName("pizzeria.ChicagoStyleClamPizza");
+			Class.forName("pizzeria.ChicagoStylePepperoniPizza");
+			Class.forName("pizzeria.ChicagoStyleVeggiePizza");
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+
 		PizzaStore nyStore = new NYPizzaStore();
 		PizzaStore chicagoStore = new ChicagoPizzaStore();