diff --git a/src/main/java/me/blackvein/quests/NpcListener.java b/src/main/java/me/blackvein/quests/NpcListener.java
index c0b5d2c88..ce5e460a8 100644
--- a/src/main/java/me/blackvein/quests/NpcListener.java
+++ b/src/main/java/me/blackvein/quests/NpcListener.java
@@ -14,11 +14,12 @@ package me.blackvein.quests;
 
 import java.text.MessageFormat;
 import java.util.LinkedList;
+import java.util.Map.Entry;
 
-import org.bukkit.Bukkit;
 import org.bukkit.ChatColor;
 import org.bukkit.Material;
 import org.bukkit.conversations.Conversation;
+import org.bukkit.enchantments.Enchantment;
 import org.bukkit.entity.Entity;
 import org.bukkit.entity.Player;
 import org.bukkit.entity.Projectile;
@@ -27,15 +28,17 @@ import org.bukkit.event.EventPriority;
 import org.bukkit.event.Listener;
 import org.bukkit.event.entity.EntityDamageByEntityEvent;
 import org.bukkit.inventory.ItemStack;
+import org.bukkit.inventory.meta.EnchantmentStorageMeta;
 
 import me.blackvein.quests.util.ItemUtil;
 import me.blackvein.quests.util.Lang;
+import me.blackvein.quests.util.MiscUtil;
+import me.blackvein.quests.util.RomanNumeral;
 import net.citizensnpcs.api.CitizensAPI;
 import net.citizensnpcs.api.event.NPCDeathEvent;
 import net.citizensnpcs.api.event.NPCLeftClickEvent;
 import net.citizensnpcs.api.event.NPCRightClickEvent;
 import net.citizensnpcs.api.npc.NPC;
-import net.milkbowl.vault.item.Items;
 
 public class NpcListener implements Listener {
 
@@ -78,25 +81,6 @@ public class NpcListener implements Listener {
 					} else if (!hand.getType().equals(Material.AIR)) {
 						for (Integer n : quester.getCurrentStage(quest).itemDeliveryTargets) {
 							if (n.equals(clicked.getId())) {
-								/*try {
-									String[] lang = Lang.get(player, "questInvalidDeliveryItem").split("<item>");
-									String prefix = lang[0];
-									if (hand.hasItemMeta()) {
-										prefix += ChatColor.LIGHT_PURPLE + "" + ChatColor.ITALIC + (hand.getItemMeta().hasDisplayName() ? hand.getItemMeta().getDisplayName() + ChatColor.GRAY + " (" : "");
-									}
-									prefix += ChatColor.AQUA;
-									String suffix = (hand.getDurability() != 0 ? (":" + ChatColor.BLUE + hand.getDurability()) : "") + ChatColor.GRAY;
-									if (hand.hasItemMeta()) {
-										suffix += (hand.getItemMeta().hasDisplayName() ? ")" : "");
-									}
-									suffix += " x " + ChatColor.DARK_AQUA + hand.getAmount() + ChatColor.RESET + lang[1];
-									plugin.query.sendMessage(player, prefix, hand.getType(), suffix);
-									break;
-								} catch (IndexOutOfBoundsException e) {
-									plugin.getLogger().severe("Error splitting \"" + Lang.get(player, "questInvalidDeliveryItem") + "\". Maybe missing <item> tag?");
-									player.sendMessage(ChatColor.RED + "Error showing this text. Please contact an administrator.");
-									e.printStackTrace();
-								}*/
 								String text = "";
 								if (hand.hasItemMeta()) {
 									text += ChatColor.LIGHT_PURPLE + "" + ChatColor.ITALIC + (hand.getItemMeta().hasDisplayName() ? hand.getItemMeta().getDisplayName() + ChatColor.GRAY + " (" : "");
@@ -107,7 +91,18 @@ public class NpcListener implements Listener {
 								}
 								text += " x " + ChatColor.DARK_AQUA + hand.getAmount() + ChatColor.GRAY;
 								plugin.query.sendMessage(player, Lang.get(player, "questInvalidDeliveryItem").replace("<item>", text), hand.getType());
-								//evt.getClicker().sendMessage(Lang.get(player, "questInvalidDeliveryItem").replaceAll("<item>", text));
+								if (hand.hasItemMeta()) {
+									if (hand.getType().equals(Material.ENCHANTED_BOOK)) {
+										EnchantmentStorageMeta esmeta = (EnchantmentStorageMeta) hand.getItemMeta();
+										if (esmeta.hasStoredEnchants()) {
+											// TODO translate enchantment names
+											for (Entry<Enchantment, Integer> e : esmeta.getStoredEnchants().entrySet()) {
+												player.sendMessage(ChatColor.GRAY + "\u2515 " + ChatColor.DARK_GREEN 
+														+ Quester.prettyEnchantmentString(e.getKey()) + " " + RomanNumeral.toRoman(e.getValue()) + "\n");
+											}
+										}
+									}
+								}
 								break;
 							}
 						}
diff --git a/src/main/java/me/blackvein/quests/util/ItemUtil.java b/src/main/java/me/blackvein/quests/util/ItemUtil.java
index 83fa94d7d..2620009d8 100644
--- a/src/main/java/me/blackvein/quests/util/ItemUtil.java
+++ b/src/main/java/me/blackvein/quests/util/ItemUtil.java
@@ -150,9 +150,24 @@ public class ItemUtil {
 				if (i > -1) {
 					extra.put(key, i);
 				} else if (value.startsWith("[") && value.endsWith("]")) {
-					// Map such as book pages
+					// List such as book pages
 					List<String> pages = Arrays.asList(value.split(", "));
 					extra.put(key, pages);
+				} else if (value.startsWith("{") && value.endsWith("}")) {
+					// Map such as stored enchants for enchanted books
+					String[] enchants = value.replace("{", "").replace("}", "").split(", ");
+					Map<String, String> stored = new HashMap<String, String>();
+					for (String s : enchants) {
+						if (s.contains("=")) {
+							String[] keyval = s.split("=");
+							stored.put(keyval[0], keyval[1]);
+						} else {
+							Bukkit.getLogger().severe("Quests does not know how to handle "
+									+ value + " so please contact the developer on Github");
+							return null;
+						}
+					}
+					extra.put(key, stored);
 				} else {
 					extra.put(key, value);
 				}
@@ -232,8 +247,6 @@ public class ItemUtil {
 	/**
 	 * Essentially the reverse of ItemMeta.serialize()
 	 * 
-	 * Format is ([display]name:durability) with (enchantments:levels) x (amount)
-	 * 
 	 * @param ItemMeta class, key/value map of metadata
 	 * @return ItemMeta
 	 */
diff --git a/src/main/java/me/blackvein/quests/util/RomanNumeral.java b/src/main/java/me/blackvein/quests/util/RomanNumeral.java
new file mode 100644
index 000000000..fa29c4948
--- /dev/null
+++ b/src/main/java/me/blackvein/quests/util/RomanNumeral.java
@@ -0,0 +1,35 @@
+package me.blackvein.quests.util;
+
+import java.util.TreeMap;
+
+public class RomanNumeral {
+
+    private final static TreeMap<Integer, String> map = new TreeMap<Integer, String>();
+
+    static {
+
+        map.put(1000, "M");
+        map.put(900, "CM");
+        map.put(500, "D");
+        map.put(400, "CD");
+        map.put(100, "C");
+        map.put(90, "XC");
+        map.put(50, "L");
+        map.put(40, "XL");
+        map.put(10, "X");
+        map.put(9, "IX");
+        map.put(5, "V");
+        map.put(4, "IV");
+        map.put(1, "I");
+
+    }
+
+    public final static String toRoman(int number) {
+        int l =  map.floorKey(number);
+        if ( number == l ) {
+            return map.get(number);
+        }
+        return map.get(l) + toRoman(number-l);
+    }
+
+}