diff --git a/demos/cube.c b/demos/cube.c
index 8927a0a..3516e00 100644
--- a/demos/cube.c
+++ b/demos/cube.c
@@ -1651,7 +1651,25 @@
 
 static void demo_init_vk(struct demo *demo)
 {
-    // TODO : Should query count w/ GetGlobalExtensionInfo, then enable via CreateInstance
+    VkResult err;
+    // Extensions to enable
+    const char *ext_names[] = {
+        "VK_WSI_X11",
+    };
+    size_t extSize = sizeof(uint32_t);
+    uint32_t extCount = 0;
+    err = vkGetGlobalExtensionInfo(VK_EXTENSION_INFO_TYPE_COUNT, 0, &extSize, &extCount);
+    assert(!err);
+
+    VkExtensionProperties extProp;
+    extSize = sizeof(VkExtensionProperties);
+    bool32_t extFound = 0;
+    for (uint32_t i = 0; i < extCount; i++) {
+        err = vkGetGlobalExtensionInfo(VK_EXTENSION_INFO_TYPE_PROPERTIES, i, &extSize, &extProp);
+        if (!strcmp(ext_names[0], extProp.extName))
+            extFound = 1;
+    }
+    assert(extFound);
     const VkApplicationInfo app = {
         .sType = VK_STRUCTURE_TYPE_APPLICATION_INFO,
         .pNext = NULL,
@@ -1666,8 +1684,8 @@
         .pNext = NULL,
         .pAppInfo = &app,
         .pAllocCb = NULL,
-        .extensionCount = 0,
-        .ppEnabledExtensionNames = NULL,
+        .extensionCount = 1,
+        .ppEnabledExtensionNames = ext_names,
     };
     const VK_WSI_X11_CONNECTION_INFO connection = {
         .pConnection = demo->connection,
@@ -1679,20 +1697,15 @@
         .queueCount = 1,
     };
     
-    const char *ext_names[] = {
-        "VK_WSI_X11",
-    };
-
     const VkDeviceCreateInfo device = {
         .sType = VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO,
         .pNext = NULL,
         .queueRecordCount = 1,
         .pRequestedQueues = &queue,
-        .extensionCount = 1, // TODO : Should query count w/ GetGlobalExtensionInfo
+        .extensionCount = 1,
         .ppEnabledExtensionNames = ext_names,
         .flags = VK_DEVICE_CREATE_VALIDATION_BIT,
     };
-    VkResult err;
     uint32_t gpu_count;
     uint32_t i;
     size_t data_size;
diff --git a/demos/tri.c b/demos/tri.c
index 847e273..f8f3edd 100644
--- a/demos/tri.c
+++ b/demos/tri.c
@@ -1192,7 +1192,25 @@
 
 static void demo_init_vk(struct demo *demo)
 {
-    // TODO : Should query count w/ GetGlobalExtensionInfo, then enable via CreateInstance
+    VkResult err;
+    // Extensions to enable
+    const char *ext_names[] = {
+        "VK_WSI_X11",
+    };
+    size_t extSize = sizeof(uint32_t);
+    uint32_t extCount = 0;
+    err = vkGetGlobalExtensionInfo(VK_EXTENSION_INFO_TYPE_COUNT, 0, &extSize, &extCount);
+    assert(!err);
+
+    VkExtensionProperties extProp;
+    extSize = sizeof(VkExtensionProperties);
+    bool32_t extFound = 0;
+    for (uint32_t i = 0; i < extCount; i++) {
+        err = vkGetGlobalExtensionInfo(VK_EXTENSION_INFO_TYPE_PROPERTIES, i, &extSize, &extProp);
+        if (!strcmp(ext_names[0], extProp.extName))
+            extFound = 1;
+    }
+    assert(extFound);
     const VkApplicationInfo app = {
         .sType = VK_STRUCTURE_TYPE_APPLICATION_INFO,
         .pNext = NULL,
@@ -1207,8 +1225,8 @@
         .pNext = NULL,
         .pAppInfo = &app,
         .pAllocCb = NULL,
-        .extensionCount = 0,
-        .ppEnabledExtensionNames = NULL,
+        .extensionCount = 1,
+        .ppEnabledExtensionNames = ext_names,
     };
     const VK_WSI_X11_CONNECTION_INFO connection = {
         .pConnection = demo->connection,
@@ -1219,19 +1237,15 @@
         .queueNodeIndex = 0,
         .queueCount = 1,
     };
-    const char *ext_names[] = {
-        "VK_WSI_X11",
-    };
     const VkDeviceCreateInfo device = {
         .sType = VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO,
         .pNext = NULL,
         .queueRecordCount = 1,
         .pRequestedQueues = &queue,
-        .extensionCount = 1, // TODO : Should query count w/ GetGlobalExtensionInfo
+        .extensionCount = 1,
         .ppEnabledExtensionNames = ext_names,
         .flags = VK_DEVICE_CREATE_VALIDATION_BIT,
     };
-    VkResult err;
     uint32_t gpu_count;
     uint32_t i;
     size_t data_size;
diff --git a/demos/vulkaninfo.c b/demos/vulkaninfo.c
index 2fc76eb..2353ff2 100644
--- a/demos/vulkaninfo.c
+++ b/demos/vulkaninfo.c
@@ -364,22 +364,27 @@
 
 static void app_gpu_init_extensions(struct app_gpu *gpu)
 {
-    //VkResult err;
-    uint32_t i;
-    // TODO : Should query count w/ GetGlobalExtensionInfo,
-    //  Then dynamically set extensions based on returned count
-
+    VkResult err;
+    // Extensions to enable
     static char *known_extensions[] = {
         "VK_WSI_X11",
     };
+    size_t extSize = sizeof(uint32_t);
+    uint32_t extCount = 0;
+    err = vkGetGlobalExtensionInfo(VK_EXTENSION_INFO_TYPE_COUNT, 0, &extSize, &extCount);
+    assert(!err);
 
-    for (i = 0; i < ARRAY_SIZE(known_extensions); i++) {
-/*
-        err = vkGetExtensionSupport(gpu->obj, known_extensions[i]);
-        if (!err)
-*/
-        gpu->extension_count++;
+    VkExtensionProperties extProp;
+    extSize = sizeof(VkExtensionProperties);
+    bool32_t extFound = 0; // TODO : Need to enhance this if/when we enable multiple extensions
+    for (uint32_t i = 0; i < extCount; i++) {
+        err = vkGetGlobalExtensionInfo(VK_EXTENSION_INFO_TYPE_PROPERTIES, i, &extSize, &extProp);
+        if (!strcmp(known_extensions[0], extProp.extName)) {
+            extFound = 1;
+            gpu->extension_count++;
+        }
     }
+    assert(extFound);
 
     gpu->extensions =
             malloc(sizeof(gpu->extensions[0]) * gpu->extension_count);
@@ -387,11 +392,9 @@
         ERR_EXIT(VK_ERROR_OUT_OF_HOST_MEMORY);
 
     gpu->extension_count = 0;
+    uint32_t i;
     for (i = 0; i < ARRAY_SIZE(known_extensions); i++) {
-/*
-        err = vkGetExtensionSupport(gpu->obj, known_extensions[i]);
-        if (!err)
-*/
+        // known_extensions were validated above so copy them over here
         gpu->extensions[gpu->extension_count++] = known_extensions[i];
     }
 }
diff --git a/tests/vktestbinding.cpp b/tests/vktestbinding.cpp
index cce7fbb..c41761b 100644
--- a/tests/vktestbinding.cpp
+++ b/tests/vktestbinding.cpp
@@ -148,17 +148,25 @@
 
 std::vector<const char *> PhysicalGpu::extensions() const
 {
-    // TODO : Should fill this out using GetGlobalExtensionInfo to query count
-    //   Then fill in extensions based on that count
+    // Extensions to enable
     static const char *known_exts[] = {
         "VK_WSI_X11",
     };
-
     std::vector<const char *> exts;
-    for (int i = 0; i < sizeof(known_exts) / sizeof(known_exts[0]); i++) {
-//        VkResult err = vkGetExtensionSupport(gpu_, known_exts[i]);
-//        if (err == VK_SUCCESS)
-        exts.push_back(known_exts[i]);
+    size_t extSize = sizeof(uint32_t);
+    uint32_t extCount = 0;
+    if (!EXPECT(vkGetGlobalExtensionInfo(VK_EXTENSION_INFO_TYPE_COUNT, 0, &extSize, &extCount) == VK_SUCCESS))
+        return exts;
+
+    VkExtensionProperties extProp;
+    extSize = sizeof(VkExtensionProperties);
+    // TODO : Need to update this if/when we have more than 1 extension to enable
+    for (uint32_t i = 0; i < extCount; i++) {
+        if (!EXPECT(vkGetGlobalExtensionInfo(VK_EXTENSION_INFO_TYPE_PROPERTIES, i, &extSize, &extProp) == VK_SUCCESS))
+            return exts;
+
+        if (!strcmp(known_exts[0], extProp.extName))
+            exts.push_back(known_exts[i]);
     }
 
     return exts;
