diff --git a/tests/xglrenderframework.cpp b/tests/xglrenderframework.cpp
index 6ee0d7d..d1c5d10 100644
--- a/tests/xglrenderframework.cpp
+++ b/tests/xglrenderframework.cpp
@@ -328,41 +328,30 @@
 }
 void XglDescriptorSetObj::CreateXGLDescriptorSet()
 {
-    XGL_RESULT err;
+    init(*m_device, xgl_testing::DescriptorSet::create_info(m_nextSlot));
 
-    // Create descriptor set for a uniform resource
-    memset(&m_descriptorInfo,0,sizeof(m_descriptorInfo));
-    m_descriptorInfo.sType = XGL_STRUCTURE_TYPE_DESCRIPTOR_SET_CREATE_INFO;
-    m_descriptorInfo.slots = m_nextSlot;
+    begin();
+    clear();
 
-    // Create a descriptor set with requested number of slots
-    err = xglCreateDescriptorSet( m_device->device(), &m_descriptorInfo, &m_rsrcDescSet );
-    ASSERT_XGL_SUCCESS(err);
-
-    // Bind memory to the descriptor set
-    err = m_device->AllocAndBindGpuMemory(m_rsrcDescSet, "DescriptorSet", &m_descriptor_set_mem);
-    ASSERT_XGL_SUCCESS(err);
-
-    xglBeginDescriptorSetUpdate( m_rsrcDescSet );
-    xglClearDescriptorSetSlots(m_rsrcDescSet, 0, m_nextSlot);
     for (int i=0; i<m_memoryViews.size();i++)
     {
-        xglAttachMemoryViewDescriptors( m_rsrcDescSet, m_memorySlots[i], 1, m_memoryViews[i] );
+        attach(m_memorySlots[i], *m_memoryViews[i]);
     }
     for (int i=0; i<m_samplers.size();i++)
     {
-        xglAttachSamplerDescriptors( m_rsrcDescSet, m_samplerSlots[i], 1, &m_samplers[i]->obj() );
+        attach(m_samplerSlots[i], *m_samplers[i]);
     }
     for (int i=0; i<m_imageViews.size();i++)
     {
-        xglAttachImageViewDescriptors( m_rsrcDescSet, m_imageSlots[i], 1, m_imageViews[i] );
+        attach(m_imageSlots[i], *m_imageViews[i]);
     }
-    xglEndDescriptorSetUpdate( m_rsrcDescSet );
+
+    end();
 }
 
 XGL_DESCRIPTOR_SET XglDescriptorSetObj::GetDescriptorSetHandle()
 {
-    return m_rsrcDescSet;
+    return obj();
 }
 
 int XglDescriptorSetObj::GetTotalSlots()
@@ -372,44 +361,28 @@
 
 void XglDescriptorSetObj::BindCommandBuffer(XGL_CMD_BUFFER commandBuffer)
 {
-    XGL_RESULT err;
+    init(*m_device, xgl_testing::DescriptorSet::create_info(m_nextSlot));
 
-    // Create descriptor set for a uniform resource
-    memset(&m_descriptorInfo,0,sizeof(m_descriptorInfo));
-    m_descriptorInfo.sType = XGL_STRUCTURE_TYPE_DESCRIPTOR_SET_CREATE_INFO;
-    m_descriptorInfo.slots = m_nextSlot;
+    begin();
+    clear();
 
-    // Create a descriptor set with requested number of slots
-    err = xglCreateDescriptorSet( m_device->device(), &m_descriptorInfo, &m_rsrcDescSet );
-    ASSERT_XGL_SUCCESS(err);
-
-    // Bind memory to the descriptor set
-    err = m_device->AllocAndBindGpuMemory(m_rsrcDescSet, "DescriptorSet", &m_descriptor_set_mem);
-    ASSERT_XGL_SUCCESS(err);
-
-    xglBeginDescriptorSetUpdate( m_rsrcDescSet );
-    xglClearDescriptorSetSlots(m_rsrcDescSet, 0, m_nextSlot);
     for (int i=0; i<m_memoryViews.size();i++)
     {
-        xglAttachMemoryViewDescriptors( m_rsrcDescSet, m_memorySlots[i], 1, m_memoryViews[i] );
+        attach(m_memorySlots[i], *m_memoryViews[i]);
     }
     for (int i=0; i<m_samplers.size();i++)
     {
-        xglAttachSamplerDescriptors( m_rsrcDescSet, m_samplerSlots[i], 1, &m_samplers[i]->obj() );
+        attach(m_samplerSlots[i], *m_samplers[i]);
     }
     for (int i=0; i<m_imageViews.size();i++)
     {
-        xglAttachImageViewDescriptors( m_rsrcDescSet, m_imageSlots[i], 1, m_imageViews[i] );
+        attach(m_imageSlots[i], *m_imageViews[i]);
     }
-    xglEndDescriptorSetUpdate( m_rsrcDescSet );
+
+    end();
 
     // bind pipeline, vertex buffer (descriptor set) and WVP (dynamic memory view)
-    xglCmdBindDescriptorSet(commandBuffer, XGL_PIPELINE_BIND_POINT_GRAPHICS, 0, m_rsrcDescSet, 0 );
-}
-
-XglDescriptorSetObj::~XglDescriptorSetObj()
-{
-    if (m_rsrcDescSet != XGL_NULL_HANDLE) xglDestroyObject(m_rsrcDescSet);
+    xglCmdBindDescriptorSet(commandBuffer, XGL_PIPELINE_BIND_POINT_GRAPHICS, 0, obj(), 0 );
 }
 
 XglTextureObj::XglTextureObj(XglDevice *device)
