diff --git a/pom.xml b/pom.xml
index 9445b42..310cf3d 100644
--- a/pom.xml
+++ b/pom.xml
@@ -3,7 +3,7 @@
 	4.0.0
 	nl.pim16aap2
 	ArmoredElytra
-	2.0.1-SNAPSHOT
+	2.0.9-SNAPSHOT
 
 
 	
diff --git a/src/main/java/nl/pim16aap2/armoredElytra/handlers/EventHandlers.java b/src/main/java/nl/pim16aap2/armoredElytra/handlers/EventHandlers.java
index fb94416..d8a04c7 100644
--- a/src/main/java/nl/pim16aap2/armoredElytra/handlers/EventHandlers.java
+++ b/src/main/java/nl/pim16aap2/armoredElytra/handlers/EventHandlers.java
@@ -1,5 +1,6 @@
 package nl.pim16aap2.armoredElytra.handlers;
 
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Random;
@@ -24,22 +25,23 @@ import org.bukkit.scheduler.BukkitRunnable;
 
 import nl.pim16aap2.armoredElytra.ArmoredElytra;
 import nl.pim16aap2.armoredElytra.nms.NBTEditor;
+import nl.pim16aap2.armoredElytra.util.Action;
 import nl.pim16aap2.armoredElytra.util.ArmorTier;
 import nl.pim16aap2.armoredElytra.util.Util;
 
 public class EventHandlers implements Listener 
 {
-	private int DIAMONDS_TO_FULL;
-	private int LEATHER_TO_FULL;
-	private int GOLD_TO_FULL;
-	private int IRON_TO_FULL;
-	private boolean cursesAllowed; 
-	private NBTEditor nbtEditor;
-	private final ArmoredElytra plugin;
+	private int             DIAMONDS_TO_FULL;
+	private int              LEATHER_TO_FULL;
+	private int                 GOLD_TO_FULL;
+	private int                 IRON_TO_FULL;
+	private boolean            cursesAllowed; 
+	private NBTEditor              nbtEditor;
+	private final ArmoredElytra       plugin;
 	private List allowedEnchantments;
-	private String[] cursedEnchantments  = {"MENDING",
-		    								   "VANISHING_CURSE",
-                                            "BINDING_CURSE"};
+	private String[]     cursedEnchantments = {	"MENDING"			,
+		    								      	"VANISHING_CURSE" 	,
+                                               	"BINDING_CURSE"		};
 	
 	public EventHandlers(ArmoredElytra plugin, NBTEditor nbtEditor) 
 	{
@@ -63,6 +65,12 @@ public class EventHandlers implements Listener
 		anvilInventory.getItem(2).setAmount(0);
 	}
 	
+	// Accessor for this.plugin
+	public ArmoredElytra getPlugin()
+	{
+		return this.plugin;
+	}
+	
 	// Check if the enchantment is allowed on elytras.
 	public boolean isAllowedEnchantment(Enchantment enchant) 
 	{
@@ -82,95 +90,74 @@ public class EventHandlers implements Listener
 		return false;
 	}
 	
-	// Copy enchants of 2 items to one item.
-	public ItemStack addEnchants(ItemStack itemOne, ItemStack itemTwo, Player player) 
+	// Combine 2 maps of enchantments (and remove any invalid ones).
+	public Map combineEnchantments(Map enchantments0, Map enchantments1)
 	{
-		ItemStack result = itemOne.clone();
+		fixEnchantments(enchantments0);
+		Map combined = new HashMap(enchantments0);
 		
-		Map newEnchantments = itemTwo.getEnchantments();
-		
-		// Enchants from enchanted books have to be accessed in a different way.
-		if (itemTwo.getType() == Material.ENCHANTED_BOOK && (nbtEditor.getArmorTier(itemOne) != ArmorTier.NONE)) 
-		{
-			EnchantmentStorageMeta meta = (EnchantmentStorageMeta)itemTwo.getItemMeta();
-			newEnchantments = meta.getStoredEnchants();
-		}
-		
-		// Copy enchantments from item1 to result.
-		if (newEnchantments!=null) 
+		if (enchantments1 != null)
 		{
+			fixEnchantments(enchantments1);
 			// Loop through the enchantments of item1.
-			for (Map.Entry entry : newEnchantments.entrySet()) 
+			for (Map.Entry entry : enchantments1.entrySet()) 
 			{
+				Integer enchantLevel = enchantments0.get(entry.getKey());
 				// If the enchantment is a curse and if the result does not already have it.
-				if (isCursedEnchantment(entry.getKey()) && !result.containsEnchantment(entry.getKey())) 
+				if (isCursedEnchantment(entry.getKey()) && !enchantments0.containsKey(entry.getKey())) 
+					combined.put(entry.getKey(), entry.getValue());
+				// If the enchantment is already on the list...
+				else if (enchantLevel != null)
 				{
-					// If curses are allowed, apply the curse to the result.
-					if (cursesAllowed)
-						result.addEnchantment(entry.getKey(), entry.getValue());
-				} 
-				else if (isAllowedEnchantment(entry.getKey())) 
-				{
-					int enchantLevel = entry.getValue();
-					// If item0 and item1 both have the same enchantment at the same level, result has level+1.
-					// If item0 and item1 both have the same enchantment at different levels, give the highest level to result.
-					if (newEnchantments != null) 
+					if (entry.getValue() == enchantLevel && entry.getValue() < entry.getKey().getMaxLevel()) 
+						enchantLevel = entry.getValue() + 1;
+					else if (entry.getValue() > enchantLevel) 
+						enchantLevel = entry.getValue();
+					
+					// If the enchantment level has changed, 
+					if (enchantLevel != enchantments0.get(entry.getKey()))
 					{
-						// Loop through the enchantments of item0 (which are already on the result).
-						for (Map.Entry rentry : newEnchantments.entrySet()) 
-						{
-							if (entry.getKey().getName() == rentry.getKey().getName()) 
-							{
-								// If they both have the same level of the same enchantment, the result will have that enchantment 1 level higher (if possible).
-								if (entry.getValue() == rentry.getValue() && entry.getValue() < entry.getKey().getMaxLevel()) 
-									enchantLevel = entry.getValue() + 1;
-								else if (entry.getValue() < rentry.getValue()) 
-									enchantLevel = rentry.getValue();
-							}
-						}
+						combined.remove(entry.getKey());
+						combined.put(entry.getKey(), enchantLevel);
 					}
-					result.addUnsafeEnchantment(entry.getKey(), enchantLevel);
 				}
+				else if (enchantLevel == null)
+					combined.put(entry.getKey(), entry.getValue());
 			}
 		}
-		return result;
+		return combined;
 	}
 	
-	// Copy enchants of 2 items to one item.
-	public ItemStack repairItem(ItemStack one, ItemStack two) 
-	{
-		// Create the resulting item.
-		ItemStack result = one.clone();
-		
+	// Repair an Armored Elytra
+	public short repairItem(short curDur, ItemStack repairItem) 
+	{	
 		// Get the multiplier for the repair items.
 		double mult = 0.01;
-		if (two.getType() == Material.LEATHER)
+		if (repairItem.getType() == Material.LEATHER)
 			mult *= (100/LEATHER_TO_FULL);
 
-		else if (two.getType() == Material.GOLD_INGOT)
+		else if (repairItem.getType() == Material.GOLD_INGOT)
 			mult *= (100/GOLD_TO_FULL);
 
-		else if (two.getType() == Material.IRON_INGOT)
+		else if (repairItem.getType() == Material.IRON_INGOT)
 			mult *= (100/IRON_TO_FULL);
 
-		else if (two.getType() == Material.DIAMOND)
+		else if (repairItem.getType() == Material.DIAMOND)
 			mult *= (100/DIAMONDS_TO_FULL);
 
-		int maxDurability = one.getType().getMaxDurability();
-		int durability    = one.getDurability();
-		int newDurability = (int) (durability - (maxDurability * mult));
-		result.setDurability((short) (newDurability <= 0 ? 0 : newDurability));
-		return result;
+		int maxDurability = Material.ELYTRA.getMaxDurability();
+		int newDurability = (int) (curDur - (maxDurability * mult));
+		return (short) (newDurability <= 0 ? 0 : newDurability);
 	}
 	
+	// Check if there aren't any disallowed enchantments / curses in the map.
 	public boolean verifyEnchants(Map enchantments)
 	{
 		for (Map.Entry entry : enchantments.entrySet()) 
 		{
 			// If it's a cursed enchantment, while it's not allowed, it's false.
-			if (isCursedEnchantment(entry.getKey()))
-				if (!cursesAllowed)
-					return false;
+			if (isCursedEnchantment(entry.getKey()) && !cursesAllowed)
+				return false;
 			// If the enchantment is not allowed, it's false.
 			else if (!isAllowedEnchantment(entry.getKey())) 
 				return false;
@@ -178,7 +165,18 @@ public class EventHandlers implements Listener
 		return true;
 	}
 	
-	public ItemStack fixEnchants(ItemStack item) 
+	// Remove any disallowed enchantments / curses in the map.
+	public Map fixEnchantments(Map enchantments) 
+	{
+		Map ret = new HashMap(enchantments);
+		for (Map.Entry entry : enchantments.entrySet())
+			if (isAllowedEnchantment(entry.getKey()) == false && (cursesAllowed && isCursedEnchantment(entry.getKey())) == false)
+				ret.remove(entry.getKey());
+		return ret;
+	}
+	
+	// Fix enchantments on an item.
+	public ItemStack fixEnchantments(ItemStack item) 
 	{
 		ItemStack result = item.clone();
 		for (Map.Entry entry : result.getEnchantments().entrySet())
@@ -186,7 +184,100 @@ public class EventHandlers implements Listener
 				result.removeEnchantment(entry.getKey());
 		return result;
 	}
-	 
+	
+	// Get the armor tier from a chest plate.
+	public ArmorTier armorToTier(Material item)
+	{
+		ArmorTier ret = ArmorTier.NONE;
+		
+		switch (item)
+		{
+		case LEATHER_CHESTPLATE:
+			ret = ArmorTier.LEATHER;
+			break;
+		case GOLD_CHESTPLATE:
+			ret = ArmorTier.GOLD;
+			break;
+		case CHAINMAIL_CHESTPLATE:
+			ret = ArmorTier.CHAIN;
+			break;
+		case IRON_CHESTPLATE:
+			ret = ArmorTier.IRON;
+			break;
+		case DIAMOND_CHESTPLATE:
+			ret = ArmorTier.DIAMOND;
+			break;
+		default:
+			break;
+		}
+		return ret;
+	}
+	
+	// Check if mat is a chest plate.
+	public boolean isChestPlate(Material mat)
+	{
+		if (mat == Material.LEATHER_CHESTPLATE 	|| mat == Material.GOLD_CHESTPLATE || 
+			mat == Material.CHAINMAIL_CHESTPLATE	|| mat == Material.IRON_CHESTPLATE || 
+			mat == Material.DIAMOND_CHESTPLATE)
+			return true;
+		return false;
+	}
+	
+	/* 
+	 * Valid inputs: 
+	 * 	- Elytra (armored or not) 	+ chestplate				-> Create Armored Elytra
+	 * 	- Elytra (armored)        	+ enchanted book			-> Enchant
+	 * 	- Elytra (armored)        	+ its repair item		-> Repair
+	 * 	- Elytra (armored)        	+ other elytra (armored)	-> Combine (Enchant + Repair)
+	 * 	! Elytra (armored, !leather)	+ leather				-> Block
+	 * 
+	 * Ignoring:
+	 * 	- Elytra (not armored)		+ !chestplate			-> None
+	 * 	- *							+ *						-> None
+	 */
+	public Action isValidInput(ItemStack itemOne, ItemStack itemTwo)
+	{
+		if (itemOne == null || itemTwo == null)
+			return Action.NONE;
+		
+		// If itemTwo is the elytra, while itemOne isn't, switch itemOne and itemTwo.
+		if (itemTwo.getType() == Material.ELYTRA && itemOne.getType() != Material.ELYTRA)
+		{
+			ItemStack tmp = itemOne;
+			itemOne       = itemTwo;
+			itemTwo       = tmp;
+		}
+		
+		Material matTwo = itemTwo.getType();
+		
+		// If the elytra is to be combined with chest armor...
+		if (isChestPlate(matTwo))
+			return Action.CREATE;
+		
+		ArmorTier tier = nbtEditor.getArmorTier(itemOne);
+		
+		if (tier != ArmorTier.NONE)
+		{
+			// If the armored elytra is to be enchanted using an enchanted book...
+			if (matTwo == Material.ENCHANTED_BOOK)
+				return Action.ENCHANT;
+			
+			// If the armored elytra is to be repaired using its repair item...
+			if (ArmorTier.getRepairItem(tier) == matTwo)
+				return Action.REPAIR;
+			
+			// If the armored elytra is to be combined with another armored elytra of the same tier...
+			if (nbtEditor.getArmorTier(itemTwo) == tier)
+				return Action.COMBINE;
+			
+			// If the armored elytra is not of the leather tier, but itemTwo is leather,
+			// Pick the block action, as that would repair the elytra by default (vanilla).
+			if (tier != ArmorTier.LEATHER && matTwo == Material.LEATHER)
+				return Action.BLOCK;
+		}
+		return Action.NONE;
+	}
+	
 	// Handle the anvil related parts.
 	@EventHandler
 	public void onInventoryClick(InventoryClickEvent e) 
@@ -214,49 +305,47 @@ public class EventHandlers implements Listener
 				
 				int slot = e.getRawSlot(); // Get slot 				
 				
-				if (slot == 2 && anvilInventory.getItem(2) != null) 
+				if (slot == 2 && anvilInventory.getItem(0) != null && anvilInventory.getItem(1) != null && anvilInventory.getItem(2) != null) 
 				{
-					// If there is an elytra in the final slot (it is unenchantable by default, so we can reasonably expect it to be an enchanted elytra)
-					// and the player selects it, let the player transfer it to their inventory.
-					// Verify the end result first, to prevent glitches. If the end result is invalid, remove the item and update the player's inventory.
-					if (anvilInventory.getItem(2).getType() == Material.ELYTRA && 
-							anvilInventory.getItem(0) != null && 
-							anvilInventory.getItem(1) != null) 
+					// If there's an armored elytra in the final slot...
+					if (anvilInventory.getItem(2).getType() == Material.ELYTRA && nbtEditor.getArmorTier(anvilInventory.getItem(2)) != ArmorTier.NONE) 
 					{
-						if (!verifyEnchants(anvilInventory.getItem(2).getEnchantments()))
+						Action action = isValidInput(anvilInventory.getItem(0), anvilInventory.getItem(1));
+						// If there is no action to be taken, take no action...
+						if (action == Action.NONE) 
+							return;
+						// If the action is to block... Well, Block! (get rid of the end result!)
+						// Also check if there are any disallowed enchantments/curses on the result, delete the result.
+						if (action == Action.BLOCK)
 						{
-							anvilInventory.getItem(2).setAmount(0);
+							// Send message to player that the recipe is invalid, as clearing the inventory doesn't work properly.
+							plugin.messagePlayer(p, ChatColor.RED, "Invalid recipe!");
+							anvilInventory.setItem(2, null);
+							anvilInventory.clear(2);
+							p.updateInventory();
+							p.updateInventory();
 							p.updateInventory();
 							return;
 						}
-						// If the elytra is armored with any tier other than leather and the other item is leather, remove the elytra.
-						if ((nbtEditor.getArmorTier(anvilInventory.getItem(0))   	!= ArmorTier.LEATHER 	|| 
-								nbtEditor.getArmorTier(anvilInventory.getItem(1))	!= ArmorTier.LEATHER)	&&
-							(anvilInventory.getItem(0).getType() 	== Material.LEATHER              	|| 
-								anvilInventory.getItem(1).getType() 	== Material.LEATHER)                	&&
-							(nbtEditor.getArmorTier(anvilInventory.getItem(0)) 	!= ArmorTier.NONE     	|| 
-								nbtEditor.getArmorTier(anvilInventory.getItem(1))	!= ArmorTier.NONE))
-						{
-							anvilInventory.getItem(2).setAmount(0);
-							p.updateInventory();
-							return;
-						}
-						else if (e.isShiftClick()) 
-							p.getInventory().addItem(anvilInventory.getItem(2));
+						
+						// Give the result to the player and clear the anvil's inventory.
+						if (e.isShiftClick()) 
+							p.getInventory().addItem(fixEnchantments(anvilInventory.getItem(2)));
 						else 
-							p.setItemOnCursor(anvilInventory.getItem(2));
+							p.setItemOnCursor(fixEnchantments(anvilInventory.getItem(2)));
 						// Clean the anvil's inventory after transferring the items.
 						cleanAnvil(anvilInventory);
+						return;
 					}
 				}
 				
 		        new BukkitRunnable() 
 		        {
-		            @Override
+					@Override
 	                public void run() 
 	                {
-		            		ItemStack itemA = anvilInventory.getItem(0);
-						ItemStack itemB = anvilInventory.getItem(1);
+		            		ItemStack itemA  = anvilInventory.getItem(0);
+						ItemStack itemB  = anvilInventory.getItem(1);
         					ItemStack result = null;
 						if (itemA != null && itemB != null)
 						{
@@ -273,94 +362,52 @@ public class EventHandlers implements Listener
 		            		// Check if there are items in both input slots.
 				        if (itemA != null && itemB != null) 
 				        {
-			                	// Check if the first input slot contains an elytra.
-			                	if (itemA.getType() == Material.ELYTRA) 
-			                	{
-			                		ArmorTier armorTier = ArmorTier.NONE;
-			                		ArmorTier currentArmorTier = nbtEditor.getArmorTier(itemA);
-			                		
-			                		if (currentArmorTier == ArmorTier.NONE && itemB.getType() == Material.LEATHER)
-			                			return;
-			                		
-			                		// Check if the second input slot contains a diamond chestplate.
-			                		else if (itemB.getType()	== Material.LEATHER_CHESTPLATE  	||
-			                				 itemB.getType()	== Material.GOLD_CHESTPLATE     	||
-			                				 itemB.getType()	== Material.CHAINMAIL_CHESTPLATE	||
-			                				 itemB.getType()	== Material.IRON_CHESTPLATE     	||
-			                				 itemB.getType()	== Material.DIAMOND_CHESTPLATE) 
-				                	{
-				                		// Combine the enchantments of the two items in the input slots.
-				                		result = addEnchants(itemA, itemB, p);
-				                		
-				                		if (itemB.getType() == Material.LEATHER_CHESTPLATE)
-				                			armorTier = ArmorTier.LEATHER;
-				                		else if (itemB.getType() == Material.GOLD_CHESTPLATE)
-				                			armorTier = ArmorTier.GOLD;
-				                		else if (itemB.getType() == Material.CHAINMAIL_CHESTPLATE)
-				                			armorTier = ArmorTier.CHAIN;
-				                		else if (itemB.getType() == Material.IRON_CHESTPLATE)
-				                			armorTier = ArmorTier.IRON;
-				                		else if (itemB.getType() == Material.DIAMOND_CHESTPLATE)
-				                			armorTier = ArmorTier.DIAMOND;
-				                		
-				                		short durability = (short) (- itemA.getType().getMaxDurability() - itemA.getDurability() - itemB.getDurability());
-				                		durability = durability < 0 ? 0 : durability;
-			                			result.setDurability(durability);
-				                	} 
-								// If the player tries to repair an armored elytra. Check if the armor tier and the repair item match.
-				                	// If the repair item is leather it can only repair 
-				                	else if ((itemB.getType() == Material.LEATHER    && currentArmorTier == ArmorTier.LEATHER) || 
-			                			    	 (itemB.getType() == Material.GOLD_INGOT && currentArmorTier == ArmorTier.GOLD   ) || 
-			                			    	 (itemB.getType() == Material.IRON_INGOT && currentArmorTier == ArmorTier.IRON   ) || 
-			                			    	 (itemB.getType() == Material.IRON_INGOT && currentArmorTier == ArmorTier.CHAIN  ) || 
-			                			    	 (itemB.getType() == Material.DIAMOND    && currentArmorTier == ArmorTier.DIAMOND)) 
-				                	{
-				                		// Repair the item in the first input slot with items from the second input slot.
-				                		result = repairItem(itemA, itemB);
-				                	}
-				                	// Check if it is an enchanted book for itemB.
-				                	else if (itemB.getType() == Material.ENCHANTED_BOOK)
-				                		result = addEnchants(itemA, itemB, p);
-				                	
-				                	// If itemA and itemB are both armored elytras of the same armor tier, repair + share enchantments
-				                	else if (itemB.getType() == Material.ELYTRA)
-				                	{
-				                		if (nbtEditor.getArmorTier(itemB) != ArmorTier.NONE && nbtEditor.getArmorTier(itemA) == nbtEditor.getArmorTier(itemB))
-				                		{
-				                			result = addEnchants(itemA, itemB, p);
-					                		short durability = (short) (- itemA.getType().getMaxDurability() - itemA.getDurability() - itemB.getDurability());
-					                		durability = durability < 0 ? 0 : durability;
-				                			result.setDurability(durability);
-				                		}
-				                	}
-
-				                	// Otherwise, remove the item in the result slot (slot2).
-				                	else if (anvilInventory.getItem(2) != null)
-			                			anvilInventory.getItem(2).setAmount(0);
-				                	
-								// Put the created item in the second slot of the anvil.
-				                	if (result!=null) 
-				                	{
-					                	if (itemB.getType() 		== Material.LEATHER_CHESTPLATE  	||
-					                			itemB.getType() 	== Material.GOLD_CHESTPLATE     	||
-					                			itemB.getType() 	== Material.CHAINMAIL_CHESTPLATE	||
-					                			itemB.getType() 	== Material.IRON_CHESTPLATE     	||
-					                			itemB.getType() 	== Material.DIAMOND_CHESTPLATE)
-				                			// Add the NBT Tags for the elytra, to give it armorTier tier of armor protection.
-					                		result = nbtEditor.addArmorNBTTags(result, armorTier, plugin.getConfigLoader().getBool("unbreakable"));
-					                	else if ((nbtEditor.getArmorTier(itemA) 	!= ArmorTier.NONE) && 
-					                			 (nbtEditor.getArmorTier(result)	!= ArmorTier.NONE))
-				                		{
-				                			armorTier = nbtEditor.getArmorTier(itemA);
-				                			result = nbtEditor.addArmorNBTTags(result, armorTier, plugin.getConfigLoader().getBool("unbreakable"));
-				                		}
-					                	result = fixEnchants(result);
-									anvilInventory.setItem(2, result);
-				                	}
-				                	else if (anvilInventory.getItem(2) != null)
-			                			anvilInventory.getItem(2).setAmount(0);
-			                	}
+				        		Action action     	= isValidInput(itemA, itemB);
+				        		ArmorTier newTier 	= ArmorTier.NONE;
+				        		ArmorTier curTier 	= nbtEditor.getArmorTier(itemA);
+				        		short durability  	= 0;
+				        		Map enchantments = itemA.getEnchantments();
+				        		enchantments			= fixEnchantments(enchantments);
+				        		
+				        		switch (action)
+				        		{
+				        		case REPAIR:
+				        			newTier 			= curTier;
+				        			durability		= repairItem(itemA.getDurability(), itemB);
+				        			break;
+				        		case ENCHANT:
+				        			EnchantmentStorageMeta meta 	= (EnchantmentStorageMeta) itemB.getItemMeta();
+				        			newTier 			= curTier;
+				        			durability		= itemA.getDurability();
+				        			enchantments 	= combineEnchantments(enchantments, meta.getStoredEnchants());
+				        			break;
+				        		case COMBINE:
+				        			newTier 			= curTier;
+				        			durability    	= (short) (- itemA.getType().getMaxDurability() - itemA.getDurability() - itemB.getDurability());
+				        			durability 		= durability < 0 ? 0 : durability;
+			                		enchantments 	= combineEnchantments(enchantments, itemB.getEnchantments());
+				        			break;
+				        		case CREATE:
+				        			newTier 			= armorToTier(itemB.getType());
+				        			durability 		= 0;
+				        			enchantments 	= combineEnchantments(enchantments, itemB.getEnchantments());
+				        			break;
+				        		case BLOCK:
+				        			if (anvilInventory.getItem(2) != null)
+				        				anvilInventory.getItem(2).setAmount(0);
+								p.updateInventory();
+				        		case NONE:
+				        			return;
+				        		}
+				        		
+					        	result = new ItemStack(Material.ELYTRA, 1);
+					        	if (enchantments != null)
+					        		result.addUnsafeEnchantments(enchantments);
+					        	result.setDurability(durability);
+					        	result = nbtEditor.addArmorNBTTags(result, newTier, plugin.getConfigLoader().getBool("unbreakable"));
+					        	anvilInventory.setItem(2, result);
 				        }
+				        
 				        // Check if either itemA or itemB is unoccupied.
 				        if (itemA == null || itemB == null) 
 				        		// If Item2 is occupied despite Item1 not being occupied.
@@ -470,7 +517,7 @@ public class EventHandlers implements Listener
 						    		Random r            = new Random();
 						    		int randomInt       = r.nextInt(101);
 						    		int enchantLevel    = p.getInventory().getChestplate().getEnchantmentLevel(Enchantment.DURABILITY);
-						    		int durabilityDelta = (100/(enchantLevel+1)) < randomInt ? 0 : 1;
+						    		int durabilityDelta = (100 / (enchantLevel + 1)) < randomInt ? 0 : 1;
 						    		if (durability >= maxDurability) 
 									Util.unenquipChestPlayer(p);
 						    		else 
diff --git a/src/main/java/nl/pim16aap2/armoredElytra/util/Action.java b/src/main/java/nl/pim16aap2/armoredElytra/util/Action.java
new file mode 100644
index 0000000..092da80
--- /dev/null
+++ b/src/main/java/nl/pim16aap2/armoredElytra/util/Action.java
@@ -0,0 +1,6 @@
+package nl.pim16aap2.armoredElytra.util;
+
+public enum Action
+{
+	NONE, REPAIR, ENCHANT, COMBINE, CREATE, BLOCK
+}
diff --git a/src/main/java/nl/pim16aap2/armoredElytra/util/ArmorTier.java b/src/main/java/nl/pim16aap2/armoredElytra/util/ArmorTier.java
index 26456a2..3a0f67c 100644
--- a/src/main/java/nl/pim16aap2/armoredElytra/util/ArmorTier.java
+++ b/src/main/java/nl/pim16aap2/armoredElytra/util/ArmorTier.java
@@ -5,36 +5,41 @@ import org.bukkit.Material;
 
 public enum ArmorTier
 {
-	// Tier: tier armor-value, tier armor-toughness, tier name color     , tier name. 
-	NONE     (0              , 0                   , ChatColor.WHITE     , "Unarmored"),
-	LEATHER  (3              , 0                   , ChatColor.DARK_GREEN, "Leather"  ),
-	GOLD     (5              , 0                   , ChatColor.YELLOW    , "Gold"     ),
-	CHAIN    (5              , 0                   , ChatColor.DARK_GRAY , "Chain"    ),
-	IRON     (6              , 0                   , ChatColor.GRAY      , "Iron"     ),
-	DIAMOND  (8              , 2                   , ChatColor.AQUA      , "Diamond"  );
+	// Tier: tier armor-value, tier armor-toughness, tier name color     , tier name  , repair 
+	NONE     (0              , 0                   , ChatColor.WHITE     , "Unarmored", null               ),
+	LEATHER  (3              , 0                   , ChatColor.DARK_GREEN, "Leather"  , Material.LEATHER   ),
+	GOLD     (5              , 0                   , ChatColor.YELLOW    , "Gold"     , Material.GOLD_INGOT),
+	CHAIN    (5              , 0                   , ChatColor.DARK_GRAY , "Chain"    , Material.IRON_INGOT),
+	IRON     (6              , 0                   , ChatColor.GRAY      , "Iron"     , Material.IRON_INGOT),
+	DIAMOND  (8              , 2                   , ChatColor.AQUA      , "Diamond"  , Material.DIAMOND   );
 	
     private int       armor;
 	private int   toughness;
 	private ChatColor color;
 	private String     name;
+	private Material repair;
 
-    private ArmorTier (int armor, int toughness, ChatColor color, String name) 
+    private ArmorTier (int armor, int toughness, ChatColor color, String name, Material repair) 
     {
         this.armor     = armor;
         this.color     = color;
         this.toughness = toughness;
         this.name      = name;
+        this.repair    = repair;
     }
     
     // return the armor value of a tier.
-    public static int getArmor        (ArmorTier item) { return item.armor;     }
+    public static int getArmor           (ArmorTier tier) { return tier.armor;     }
     
     // return the armor toughness of a tier.
-    public static int getToughness    (ArmorTier item) { return item.toughness; }
+    public static int getToughness       (ArmorTier tier) { return tier.toughness; }
     
     // return the color of a tier.
-    public static ChatColor getColor  (ArmorTier item) { return item.color;     }
+    public static ChatColor getColor     (ArmorTier tier) { return tier.color;     }
     
     // return the name of a tier.
-    public static String getArmorName (ArmorTier item) { return item.name;      }
+    public static String getArmorName    (ArmorTier tier) { return tier.name;      }
+    
+    // return the repair item of a tier
+    public static Material getRepairItem (ArmorTier tier) { return tier.repair;    }
 }
diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml
index 6c573eb..0162412 100644
--- a/src/main/resources/plugin.yml
+++ b/src/main/resources/plugin.yml
@@ -1,6 +1,6 @@
 name: ArmoredElytra
 main: nl.pim16aap2.armoredElytra.ArmoredElytra
-version: 2.0.1
+version: 2.0.9
 author: Pim
 commands:
   ArmoredElytra: