diff --git a/tests/vkrenderframework.cpp b/tests/vkrenderframework.cpp
index e66384b..d502aa4 100644
--- a/tests/vkrenderframework.cpp
+++ b/tests/vkrenderframework.cpp
@@ -482,7 +482,7 @@
 
 VkDescriptorSet VkDescriptorSetObj::GetDescriptorSetHandle() const
 {
-    return m_set->obj();
+    return m_set->handle();
 }
 
 void VkDescriptorSetObj::CreateVKDescriptorSet(VkCommandBufferObj *cmdBuffer)
@@ -529,7 +529,7 @@
     size_t imageSamplerCount = 0;
     for (std::vector<VkWriteDescriptorSet>::iterator it = m_writes.begin();
          it != m_writes.end(); it++) {
-        it->destSet = m_set->obj();
+        it->destSet = m_set->handle();
         if (it->descriptorType == VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER)
             it->pDescriptors = &m_imageSamplerDescriptors[imageSamplerCount++];
     }
diff --git a/tests/vktestbinding.cpp b/tests/vktestbinding.cpp
index a72a628..74a92d7 100644
--- a/tests/vktestbinding.cpp
+++ b/tests/vktestbinding.cpp
@@ -854,8 +854,8 @@
 
 void PipelineLayout::init(const Device &dev, VkPipelineLayoutCreateInfo &info, const std::vector<const DescriptorSetLayout *> &layouts)
 {
-    const std::vector<VkDescriptorSetLayout> layout_objs = make_objects<VkDescriptorSetLayout>(layouts);
-    info.pSetLayouts = &layout_objs[0];
+    const std::vector<VkDescriptorSetLayout> layout_handles = make_handles<VkDescriptorSetLayout>(layouts);
+    info.pSetLayouts = &layout_handles[0];
 
     NON_DISPATCHABLE_HANDLE_INIT(vkCreatePipelineLayout, dev, &info);
 }
@@ -867,40 +867,42 @@
     NON_DISPATCHABLE_HANDLE_INIT(vkCreateSampler, dev, &info);
 }
 
+NON_DISPATCHABLE_HANDLE_DTOR(DescriptorSetLayout, vkDestroyObject, VK_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT)
+
 void DescriptorSetLayout::init(const Device &dev, const VkDescriptorSetLayoutCreateInfo &info)
 {
-    DERIVED_OBJECT_TYPE_INIT(vkCreateDescriptorSetLayout, dev, VK_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT, &info);
-    alloc_memory();
+    NON_DISPATCHABLE_HANDLE_INIT(vkCreateDescriptorSetLayout, dev, &info);
 }
 
+NON_DISPATCHABLE_HANDLE_DTOR(DescriptorPool, vkDestroyObject, VK_OBJECT_TYPE_DESCRIPTOR_POOL)
+
 void DescriptorPool::init(const Device &dev, VkDescriptorPoolUsage usage,
                           uint32_t max_sets, const VkDescriptorPoolCreateInfo &info)
 {
-    DERIVED_OBJECT_TYPE_INIT(vkCreateDescriptorPool, dev, VK_OBJECT_TYPE_DESCRIPTOR_POOL, usage, max_sets, &info);
-    alloc_memory();
+    NON_DISPATCHABLE_HANDLE_INIT(vkCreateDescriptorPool, dev, usage, max_sets, &info);
 }
 
 void DescriptorPool::reset()
 {
-    EXPECT(vkResetDescriptorPool(dev_->handle(), obj()) == VK_SUCCESS);
+    EXPECT(vkResetDescriptorPool(device(), handle()) == VK_SUCCESS);
 }
 
 std::vector<DescriptorSet *> DescriptorPool::alloc_sets(const Device &dev, VkDescriptorSetUsage usage, const std::vector<const DescriptorSetLayout *> &layouts)
 {
-    const std::vector<VkDescriptorSetLayout> layout_objs = make_objects<VkDescriptorSetLayout>(layouts);
+    const std::vector<VkDescriptorSetLayout> layout_handles = make_handles<VkDescriptorSetLayout>(layouts);
 
-    std::vector<VkDescriptorSet> set_objs;
-    set_objs.resize(layout_objs.size());
+    std::vector<VkDescriptorSet> set_handles;
+    set_handles.resize(layout_handles.size());
 
     uint32_t set_count;
-    VkResult err = vkAllocDescriptorSets(dev_->handle(), obj(), usage, layout_objs.size(), &layout_objs[0], &set_objs[0], &set_count);
+    VkResult err = vkAllocDescriptorSets(device(), handle(), usage, layout_handles.size(), &layout_handles[0], &set_handles[0], &set_count);
     if (err == VK_SUCCESS)
-        EXPECT(set_count == set_objs.size());
-    set_objs.resize(set_count);
+        EXPECT(set_count == set_handles.size());
+    set_handles.resize(set_count);
 
     std::vector<DescriptorSet *> sets;
     sets.reserve(set_count);
-    for (std::vector<VkDescriptorSet>::const_iterator it = set_objs.begin(); it != set_objs.end(); it++) {
+    for (std::vector<VkDescriptorSet>::const_iterator it = set_handles.begin(); it != set_handles.end(); it++) {
         // do descriptor sets need memories bound?
         DescriptorSet *descriptorSet = new DescriptorSet(dev, *it);
         sets.push_back(descriptorSet);
@@ -919,6 +921,8 @@
     return (set.empty()) ? NULL : set[0];
 }
 
+NON_DISPATCHABLE_HANDLE_DTOR(DescriptorSet, vkDestroyObject, VK_OBJECT_TYPE_DESCRIPTOR_SET)
+
 void DynamicVpStateObject::init(const Device &dev, const VkDynamicVpStateCreateInfo &info)
 {
     DERIVED_OBJECT_TYPE_INIT(vkCreateDynamicViewportState, dev, VK_OBJECT_TYPE_DYNAMIC_VP_STATE, &info);
diff --git a/tests/vktestbinding.h b/tests/vktestbinding.h
index fd3ecd1..057ce7e 100644
--- a/tests/vktestbinding.h
+++ b/tests/vktestbinding.h
@@ -596,14 +596,18 @@
     void init(const Device &dev, const VkSamplerCreateInfo &info);
 };
 
-class DescriptorSetLayout : public DerivedObject<VkDescriptorSetLayout, Object, VK_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT> {
+class DescriptorSetLayout : public internal::NonDispHandle<VkDescriptorSetLayout> {
 public:
+    ~DescriptorSetLayout();
+
     // vkCreateDescriptorSetLayout()
     void init(const Device &dev, const VkDescriptorSetLayoutCreateInfo &info);
 };
 
-class DescriptorPool : public DerivedObject<VkDescriptorPool, Object, VK_OBJECT_TYPE_DESCRIPTOR_POOL> {
+class DescriptorPool : public internal::NonDispHandle<VkDescriptorPool> {
 public:
+    ~DescriptorPool();
+
     // vkCreateDescriptorPool()
     void init(const Device &dev, VkDescriptorPoolUsage usage,
               uint32_t max_sets, const VkDescriptorPoolCreateInfo &info);
@@ -617,10 +621,12 @@
     DescriptorSet *alloc_sets(const Device &dev, VkDescriptorSetUsage usage, const DescriptorSetLayout &layout);
 };
 
-class DescriptorSet : public DerivedObject<VkDescriptorSet, Object, VK_OBJECT_TYPE_DESCRIPTOR_SET> {
+class DescriptorSet : public internal::NonDispHandle<VkDescriptorSet> {
 public:
-    explicit DescriptorSet() : DerivedObject() {}
-    explicit DescriptorSet(const Device &dev, VkDescriptorSet set) : DerivedObject(dev, set) {}
+    ~DescriptorSet();
+
+    explicit DescriptorSet() : NonDispHandle() {}
+    explicit DescriptorSet(const Device &dev, VkDescriptorSet set) : NonDispHandle(dev.handle(), set) {}
 };
 
 class DynamicVpStateObject : public DerivedObject<VkDynamicVpState, DynamicStateObject, VK_OBJECT_TYPE_DYNAMIC_VP_STATE> {
@@ -852,7 +858,7 @@
 {
     VkWriteDescriptorSet write = {};
     write.sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET;
-    write.destSet = set.obj();
+    write.destSet = set.handle();
     write.destBinding = binding;
     write.destArrayElement = array_element;
     write.count = count;
@@ -873,10 +879,10 @@
 {
     VkCopyDescriptorSet copy = {};
     copy.sType = VK_STRUCTURE_TYPE_COPY_DESCRIPTOR_SET;
-    copy.srcSet = src_set.obj();
+    copy.srcSet = src_set.handle();
     copy.srcBinding = src_binding;
     copy.srcArrayElement = src_array_element;
-    copy.destSet = dst_set.obj();
+    copy.destSet = dst_set.handle();
     copy.destBinding = dst_binding;
     copy.destArrayElement = dst_array_element;
     copy.count = count;
