diff --git a/layers/object_track.c b/layers/object_track.c
index 697c8e5..a8d96e4 100644
--- a/layers/object_track.c
+++ b/layers/object_track.c
@@ -64,7 +64,7 @@
         pTrav = pTrav->pNext;
     }
     // If we do not find obj, insert it and then intrement count
-    printf("INFO : Unable to increment count for obj %p, will add to list as UNKNOWN type and increment count\n", pObj);
+    printf("OBJ WARN : Unable to increment count for obj %p, will add to list as UNKNOWN type and increment count\n", pObj);
     ll_insert_obj(pObj, "UNKNOWN");
     ll_increment_use_count(pObj);
 }
@@ -350,11 +350,9 @@
     XGL_BASE_LAYER_OBJECT* gpuw = (XGL_BASE_LAYER_OBJECT *) gpu;
     ll_increment_use_count((XGL_VOID*)gpu);
     printf("OBJ[%llu] : USING gpu object %p (%lu total uses)\n", object_track_index++, (void*)gpu, ll_get_obj_uses((XGL_VOID*)gpu));
-    //printf("At start of layered GetGpuInfo\n");
     pCurObj = gpuw;
     pthread_once(&tabOnce, initLayerTable);
     XGL_RESULT result = nextTable.GetGpuInfo((XGL_PHYSICAL_GPU)gpuw->nextObject, infoType, pDataSize, pData);
-    //printf("Completed layered GetGpuInfo\n");
     return result;
 }
 
@@ -363,13 +361,11 @@
     XGL_BASE_LAYER_OBJECT* gpuw = (XGL_BASE_LAYER_OBJECT *) gpu;
     ll_increment_use_count((XGL_VOID*)gpu);
     printf("OBJ[%llu] : USING gpu object %p (%lu total uses)\n", object_track_index++, (void*)gpu, ll_get_obj_uses((XGL_VOID*)gpu));
-    //printf("At start of layered CreateDevice\n");
     pCurObj = gpuw;
     pthread_once(&tabOnce, initLayerTable);
     XGL_RESULT result = nextTable.CreateDevice((XGL_PHYSICAL_GPU)gpuw->nextObject, pCreateInfo, pDevice);
     printf("OBJ[%llu] : CREATE XGL_DEVICE object %p\n", object_track_index++, (void*)*pDevice);
     ll_insert_obj((XGL_VOID*)*pDevice, "XGL_DEVICE");
-    //printf("Completed layered CreateDevice\n");
     return result;
 }
 
@@ -392,11 +388,9 @@
     XGL_BASE_LAYER_OBJECT* gpuw = (XGL_BASE_LAYER_OBJECT *) gpu;
     ll_increment_use_count((XGL_VOID*)gpu);
     printf("OBJ[%llu] : USING gpu object %p (%lu total uses)\n", object_track_index++, (void*)gpu, ll_get_obj_uses((XGL_VOID*)gpu));
-    //printf("At start of layered GetExtensionSupport\n");
     pCurObj = gpuw;
     pthread_once(&tabOnce, initLayerTable);
     XGL_RESULT result = nextTable.GetExtensionSupport((XGL_PHYSICAL_GPU)gpuw->nextObject, pExtName);
-    //printf("Completed layered GetExtensionSupport\n");
     return result;
 }
 
@@ -405,11 +399,9 @@
     XGL_BASE_LAYER_OBJECT* gpuw = (XGL_BASE_LAYER_OBJECT *) gpu;
     ll_increment_use_count((XGL_VOID*)gpu);
     printf("OBJ[%llu] : USING gpu object %p (%lu total uses)\n", object_track_index++, (void*)gpu, ll_get_obj_uses((XGL_VOID*)gpu));
-    //printf("At start of layered EnumerateLayers\n");
     pCurObj = gpuw;
     pthread_once(&tabOnce, initLayerTable);
     XGL_RESULT result = nextTable.EnumerateLayers((XGL_PHYSICAL_GPU)gpuw->nextObject, maxLayerCount, maxStringSize, pOutLayers, pOutLayerCount);
-    //printf("Completed layered EnumerateLayers\n");
     return result;
 }
 
@@ -474,14 +466,16 @@
     ll_increment_use_count((XGL_VOID*)device);
     printf("OBJ[%llu] : USING device object %p (%lu total uses)\n", object_track_index++, (void*)device, ll_get_obj_uses((XGL_VOID*)device));
     XGL_RESULT result = nextTable.AllocMemory(device, pAllocInfo, pMem);
+    printf("OBJ[%llu] : CREATE XGL_GPU_MEMORY object %p\n", object_track_index++, (void*)*pMem);
+    ll_insert_obj((XGL_VOID*)*pMem, "XGL_GPU_MEMORY");
     return result;
 }
 
 XGL_LAYER_EXPORT XGL_RESULT XGLAPI xglFreeMemory(XGL_GPU_MEMORY mem)
 {
-    ll_increment_use_count((XGL_VOID*)mem);
-    printf("OBJ[%llu] : USING mem object %p (%lu total uses)\n", object_track_index++, (void*)mem, ll_get_obj_uses((XGL_VOID*)mem));
     XGL_RESULT result = nextTable.FreeMemory(mem);
+    printf("OBJ[%llu] : DESTROY mem object %p\n", object_track_index++, (void*)mem);
+    ll_remove_obj((XGL_VOID*)mem);
     return result;
 }
 
@@ -530,11 +524,9 @@
     XGL_BASE_LAYER_OBJECT* gpuw = (XGL_BASE_LAYER_OBJECT *) gpu0;
     ll_increment_use_count((XGL_VOID*)gpu0);
     printf("OBJ[%llu] : USING gpu0 object %p (%lu total uses)\n", object_track_index++, (void*)gpu0, ll_get_obj_uses((XGL_VOID*)gpu0));
-    //printf("At start of layered GetMultiGpuCompatibility\n");
     pCurObj = gpuw;
     pthread_once(&tabOnce, initLayerTable);
     XGL_RESULT result = nextTable.GetMultiGpuCompatibility((XGL_PHYSICAL_GPU)gpuw->nextObject, gpu1, pInfo);
-    //printf("Completed layered GetMultiGpuCompatibility\n");
     return result;
 }
 
@@ -1290,11 +1282,9 @@
     XGL_BASE_LAYER_OBJECT* gpuw = (XGL_BASE_LAYER_OBJECT *) gpu;
     ll_increment_use_count((XGL_VOID*)gpu);
     printf("OBJ[%llu] : USING gpu object %p (%lu total uses)\n", object_track_index++, (void*)gpu, ll_get_obj_uses((XGL_VOID*)gpu));
-    //printf("At start of layered WsiX11AssociateConnection\n");
     pCurObj = gpuw;
     pthread_once(&tabOnce, initLayerTable);
     XGL_RESULT result = nextTable.WsiX11AssociateConnection((XGL_PHYSICAL_GPU)gpuw->nextObject, pConnectionInfo);
-    //printf("Completed layered WsiX11AssociateConnection\n");
     return result;
 }
 
diff --git a/xgl-layer-generate.py b/xgl-layer-generate.py
index bcedd8d..b211983 100755
--- a/xgl-layer-generate.py
+++ b/xgl-layer-generate.py
@@ -233,11 +233,15 @@
                     create_line = ''
                     destroy_line = ''
                     using_line = '    ll_increment_use_count((XGL_VOID*)%s);\n    printf("OBJ[%%llu] : USING %s object %%p (%%lu total uses)\\n", object_track_index++, (void*)%s, ll_get_obj_uses((XGL_VOID*)%s));\n' % (param0_name, param0_name, param0_name, param0_name)
-                    if 'Create' in proto.name:
+                    if 'Create' in proto.name or 'Alloc' in proto.name:
                         create_line = '    printf("OBJ[%%llu] : CREATE %s object %%p\\n", object_track_index++, (void*)*%s);\n    ll_insert_obj((XGL_VOID*)*%s, "%s");\n' % (proto.params[-1].ty.strip('*'), proto.params[-1].name, proto.params[-1].name, proto.params[-1].ty.strip('*'))
-                    if 'Destroy' in proto.name:
+                    if 'Destroy' in proto.name or 'Free' in proto.name:
                         destroy_line = '    printf("OBJ[%%llu] : DESTROY %s object %%p\\n", object_track_index++, (void*)%s);\n    ll_remove_obj((XGL_VOID*)%s);\n' % (param0_name, param0_name, param0_name)
                         using_line = ''
+                    if 'DestroyDevice' in proto.name:
+                        destroy_line += '    // Report any remaining objects in LL\n    objNode *pTrav = pObjLLHead;\n    while (pTrav) {\n'
+                        destroy_line += '        printf("OBJ ERROR : %s object %p has not been destroyed (was used %lu times).\\n", pTrav->objType, pTrav->pObj, pTrav->numUses);\n'
+                        destroy_line += '        pTrav = pTrav->pNext;\n    }\n'
                     ret_val = ''
                     stmt = ''
                     if proto.ret != "XGL_VOID":
@@ -385,7 +389,7 @@
         header_txt.append('        pTrav = pTrav->pNext;')
         header_txt.append('    }')
         header_txt.append('    // If we do not find obj, insert it and then intrement count')
-        header_txt.append('    printf("INFO : Unable to increment count for obj %p, will add to list as UNKNOWN type and increment count\\n", pObj);')
+        header_txt.append('    printf("OBJ WARN : Unable to increment count for obj %p, will add to list as UNKNOWN type and increment count\\n", pObj);')
         header_txt.append('    ll_insert_obj(pObj, "UNKNOWN");')
         header_txt.append('    ll_increment_use_count(pObj);')
         header_txt.append('}')
