diff --git a/src/main/java/com/syncleus/aethermud/storage/graphdb/model/ItemData.java b/src/main/java/com/syncleus/aethermud/storage/graphdb/model/ItemData.java
index 12999379158b2f8c05a2b154a08f98888a4a125b..f2df118838797833e85024ae1edfb7955f55f766 100644
--- a/src/main/java/com/syncleus/aethermud/storage/graphdb/model/ItemData.java
+++ b/src/main/java/com/syncleus/aethermud/storage/graphdb/model/ItemData.java
@@ -85,12 +85,6 @@ public abstract class ItemData extends AbstractInterceptingVertexFrame {
     @Property("ItemHalfLifeTicks")
     public abstract int getItemHalfLifeTicks();
 
-    @Property("Loot")
-    public abstract Loot getLoot();
-
-    @Property("Loot")
-    public abstract void setLoot(Loot loot);
-
     @Property("Equipment")
     public abstract Equipment getEquipment();
 
@@ -209,10 +203,42 @@ public abstract class ItemData extends AbstractInterceptingVertexFrame {
         return stats;
     }
 
+    @Adjacency(label = "Loot", direction = Direction.OUT)
+    public abstract <N extends LootData> Iterator<? extends N> getLootDatasIterator(Class<? extends N> type);
+
+    public LootData getLootData() {
+        Iterator<? extends LootData> allStats = this.getLootDatasIterator(LootData.class);
+        if( allStats.hasNext() )
+            return allStats.next();
+        else
+            return null;
+    }
+
+    @Adjacency(label = "Loot", direction = Direction.OUT)
+    public abstract LootData addLootData(LootData loot);
+
+    @Adjacency(label = "Loot", direction = Direction.OUT)
+    public abstract void removeLootData(LootData loot);
+
+    public void setLootData(LootData loot) {
+        DataUtils.setAllElements(Collections.singletonList(loot), () -> this.getLootDatasIterator(LootData.class), lootData -> this.addLootData(lootData), () -> createLoottData() );
+    }
+
+    public LootData createLoottData() {
+        if( this.getLootData() != null )
+            throw new IllegalStateException("Already has loot, can't create another");
+        final LootData loot = this.getGraph().addFramedVertex(LootData.class);
+        loot.setLootGoldMax(0);
+        loot.setLootGoldMin(0);
+        this.addLootData(loot);
+        return loot;
+    }
+
     public static void copyItem(ItemData dest, Item src) {
         try {
             PropertyUtils.copyProperties(dest, src);
             StatsData.copyStats(dest.createItemApplyStatData(), src.getItemApplyStats());
+            LootData.copyLoot(dest.createLoottData(), src.getLoot());
             for(Effect effect : src.getEffects())
                 EffectData.copyEffect(dest.createEffectData(), effect);
         } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) {
@@ -224,6 +250,11 @@ public abstract class ItemData extends AbstractInterceptingVertexFrame {
         Item retVal = new Item();
         try {
             PropertyUtils.copyProperties(retVal, src);
+
+            LootData lootData = src.getLootData();
+            if(lootData != null)
+                retVal.setLoot(LootData.copyLoot(lootData));
+
             StatsData applyStats = src.getItemApplyStatData();
             if( applyStats != null )
                 retVal.setItemApplyStats(StatsData.copyStats(applyStats));
diff --git a/src/main/java/com/syncleus/aethermud/storage/graphdb/model/LootData.java b/src/main/java/com/syncleus/aethermud/storage/graphdb/model/LootData.java
index e9ff058c8c0be2d34a30f385b8d72109256aa7ba..3e021cfe9db687a4113af579f3b2f9bb368534ce 100644
--- a/src/main/java/com/syncleus/aethermud/storage/graphdb/model/LootData.java
+++ b/src/main/java/com/syncleus/aethermud/storage/graphdb/model/LootData.java
@@ -58,7 +58,7 @@ public abstract class LootData extends AbstractInterceptingVertexFrame {
     public static Loot copyLoot(LootData src) {
         Loot retVal = new Loot();
         try {
-            PropertyUtils.copyProperties(retVal, src);;
+            PropertyUtils.copyProperties(retVal, src);
         } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) {
             throw new IllegalStateException("Could not copy properties", e);
         }