diff --git a/icd/nulldrv/nulldrv.c b/icd/nulldrv/nulldrv.c
index 1797eb8..05c9acb 100644
--- a/icd/nulldrv/nulldrv.c
+++ b/icd/nulldrv/nulldrv.c
@@ -42,6 +42,14 @@
 static const char * const nulldrv_gpu_exts[NULLDRV_EXT_COUNT] = {
 	[NULLDRV_EXT_WSI_LUNARG] = VK_WSI_LUNARG_EXTENSION_NAME,
 };
+static const VkExtensionProperties intel_gpu_exts[NULLDRV_EXT_COUNT] = {
+    {
+        .sType = VK_STRUCTURE_TYPE_EXTENSION_PROPERTIES,
+        .name = VK_WSI_LUNARG_EXTENSION_NAME,
+        .version = VK_WSI_LUNARG_REVISION,
+        .description = "Null driver",
+    }
+};
 
 static struct nulldrv_base *nulldrv_base(VkObject base)
 {
@@ -172,13 +180,14 @@
     return VK_SUCCESS;
 }
 
-static enum nulldrv_ext_type nulldrv_gpu_lookup_extension(const struct nulldrv_gpu *gpu,
-                                               const char *ext)
+static enum nulldrv_ext_type nulldrv_gpu_lookup_extension(
+        const struct nulldrv_gpu *gpu,
+        const VkExtensionProperties *ext)
 {
     enum nulldrv_ext_type type;
 
     for (type = 0; type < ARRAY_SIZE(nulldrv_gpu_exts); type++) {
-        if (nulldrv_gpu_exts[type] && strcmp(nulldrv_gpu_exts[type], ext) == 0)
+        if (memcmp(&nulldrv_gpu_exts[type], ext, sizeof(VkExtensionProperties)) == 0)
             break;
     }
 
@@ -219,15 +228,16 @@
     if (!dev)
         return VK_ERROR_OUT_OF_HOST_MEMORY;
 
-//    for (i = 0; i < info->extensionCount; i++) {
-//        const enum nulldrv_ext_type ext = nulldrv_gpu_lookup_extension(gpu,
-//                info->ppEnabledExtensionNames[i]);
+    for (i = 0; i < info->extensionCount; i++) {
+        const enum nulldrv_ext_type ext = nulldrv_gpu_lookup_extension(
+                    gpu,
+                    &info->pEnabledExtensions[i]);
 
-//        if (ext == NULLDRV_EXT_INVALID)
-//            return VK_ERROR_INVALID_EXTENSION;
+        if (ext == NULLDRV_EXT_INVALID)
+            return VK_ERROR_INVALID_EXTENSION;
 
-//        dev->exts[ext] = true;
-//    }
+        dev->exts[ext] = true;
+    }
 
     ret = nulldrv_desc_ooxx_create(dev, &dev->desc_ooxx);
     if (ret != VK_SUCCESS) {
@@ -1510,7 +1520,6 @@
                                                size_t*  pDataSize,
                                                void*    pData)
 {
-    VkExtensionProperties *ext_props;
     uint32_t *count;
 
     if (pDataSize == NULL)
@@ -1522,17 +1531,17 @@
             if (pData == NULL)
                 return VK_SUCCESS;
             count = (uint32_t *) pData;
-            *count = 1;
+            *count = NULLDRV_EXT_COUNT;
             break;
         case VK_EXTENSION_INFO_TYPE_PROPERTIES:
             *pDataSize = sizeof(VkExtensionProperties);
             if (pData == NULL)
                 return VK_SUCCESS;
             else {
-                ext_props = (VkExtensionProperties *) pData;
-                ext_props->version = VK_WSI_LUNARG_REVISION;
-                strncpy(ext_props->name, VK_WSI_LUNARG_EXTENSION_NAME,
-                        strlen(VK_WSI_LUNARG_EXTENSION_NAME)+1);
+                if (extensionIndex >= NULLDRV_EXT_COUNT)
+                    return VK_ERROR_INVALID_VALUE;
+
+                memcpy((VkExtensionProperties *) pData, &intel_gpu_exts[extensionIndex], sizeof(VkExtensionProperties));
                 return VK_SUCCESS;
             }
             break;
