diff --git a/tests/vktestframework.cpp b/tests/vktestframework.cpp
index 58cae8f..ecb192f 100644
--- a/tests/vktestframework.cpp
+++ b/tests/vktestframework.cpp
@@ -58,7 +58,7 @@
     TestFrameworkVkPresent(vk_testing::Device &device);
 
     void Run();
-    void InitPresentFramework(std::list<VkTestImageRecord> &imagesIn);
+    void InitPresentFramework(std::list<VkTestImageRecord> &imagesIn, VkInstance inst);
     void CreateMyWindow();
     void CreateSwapChain();
     void TearDown();
@@ -85,6 +85,11 @@
 #endif
     std::list<VkTestImageRecord>            m_images;
 
+    PFN_vkCreateSwapChainWSI                m_fpCreateSwapChainWSI;
+    PFN_vkDestroySwapChainWSI               m_fpDestroySwapChainWSI;
+    PFN_vkGetSwapChainInfoWSI               m_fpGetSwapChainInfoWSI;
+    PFN_vkQueuePresentWSI                   m_fpQueuePresentWSI;
+
     VkSwapChainWSI                          m_swap_chain;
     std::vector<VkSwapChainImageInfoWSI>    m_persistent_images;
     int                                     m_current_buffer;
@@ -510,7 +515,8 @@
                          m_display_image->m_title.size(),
                          m_display_image->m_title.c_str());
 #endif
-    err = vkQueuePresentWSI(m_queue.obj(), &present);
+
+    err = m_fpQueuePresentWSI(m_queue.obj(), &present);
     assert(!err);
 
     m_queue.wait();
@@ -687,13 +693,14 @@
     swap_chain.swapModeFlags = VK_SWAP_MODE_FLIP_BIT_WSI |
                                VK_SWAP_MODE_BLIT_BIT_WSI;
 
-    err = vkCreateSwapChainWSI(m_device.obj(), &swap_chain, &m_swap_chain);
+    err = m_fpCreateSwapChainWSI(m_device.obj(), &swap_chain, &m_swap_chain);
     assert(!err);
 
-    size_t size = sizeof(VkSwapChainImageInfoWSI) * 2;
     VkSwapChainImageInfoWSI infos[2];
-    
-    err = vkGetSwapChainInfoWSI(m_swap_chain,
+    size_t size = sizeof(VkSwapChainImageInfoWSI) * m_images.size();
+    std::vector<VkSwapChainImageInfoWSI> persistent_images;
+    persistent_images.resize(m_images.size());
+    err = m_fpGetSwapChainInfoWSI(m_swap_chain,
             VK_SWAP_CHAIN_INFO_TYPE_PERSISTENT_IMAGES_WSI,
             &size, &infos);
     assert(!err && size == sizeof(VkSwapChainImageInfoWSI) * 2);
@@ -701,8 +708,20 @@
     m_persistent_images.push_back(infos[1]);
 }
 
-void  TestFrameworkVkPresent::InitPresentFramework(std::list<VkTestImageRecord>  &imagesIn)
+void  TestFrameworkVkPresent::InitPresentFramework(std::list<VkTestImageRecord>  &imagesIn, VkInstance inst)
 {
+    m_fpCreateSwapChainWSI = (PFN_vkCreateSwapChainWSI) vkGetInstanceProcAddr(inst, "vkCreateSwapChainWSI");
+    ASSERT_TRUE(m_fpCreateSwapChainWSI != NULL) << "vkGetInstanceProcAddr failed to find vkCreateSwapChainWSI";
+
+    m_fpDestroySwapChainWSI = (PFN_vkDestroySwapChainWSI) vkGetInstanceProcAddr(inst, "vkDestroySwapChainWSI");
+    ASSERT_TRUE(m_fpDestroySwapChainWSI != NULL) << "vkGetInstanceProcAddr failed to find vkDestroySwapChainWSI";
+
+    m_fpGetSwapChainInfoWSI = (PFN_vkGetSwapChainInfoWSI) vkGetInstanceProcAddr(inst, "vkGetSwapChainInfoWSI");
+    ASSERT_TRUE(m_fpGetSwapChainInfoWSI != NULL) << "vkGetInstanceProcAddr failed to find vkGetSwapChainInfoWSI";
+
+    m_fpQueuePresentWSI = (PFN_vkQueuePresentWSI) vkGetInstanceProcAddr(inst, "vkQueuePresentWSI");
+    ASSERT_TRUE(m_fpQueuePresentWSI != NULL) << "vkGetInstanceProcAddr failed to find vkQueuePresentWSI";
+
     m_images = imagesIn;
 }
 
@@ -827,7 +846,7 @@
 
 void TestFrameworkVkPresent::TearDown()
 {
-    vkDestroySwapChainWSI(m_swap_chain);
+    m_fpDestroySwapChainWSI(m_swap_chain);
 #ifndef _WIN32
     xcb_destroy_window(m_connection, m_window);
     xcb_disconnect(m_connection);
@@ -843,7 +862,7 @@
     {
         TestFrameworkVkPresent vkPresent(env.default_device());
 
-        vkPresent.InitPresentFramework(m_images);
+        vkPresent.InitPresentFramework(m_images, env.get_instance());
         vkPresent.CreateMyWindow();
         vkPresent.CreateSwapChain();
         vkPresent.Run();
