diff --git a/vulkan/libvulkan/api.cpp b/vulkan/libvulkan/api.cpp
index e3f69fe..6d558ee 100644
--- a/vulkan/libvulkan/api.cpp
+++ b/vulkan/libvulkan/api.cpp
@@ -1123,7 +1123,14 @@
     if (pLayerName) {
         const VkExtensionProperties* props;
         uint32_t count;
-        GetInstanceLayerExtensions(pLayerName, &props, &count);
+
+        const Layer* layer = FindLayer(pLayerName);
+        if (layer) {
+            props = GetLayerInstanceExtensions(*layer, count);
+        } else {
+            props = nullptr;
+            count = 0;
+        }
 
         if (!pProperties || *pPropertyCount > count)
             *pPropertyCount = count;
@@ -1181,7 +1188,14 @@
     if (pLayerName) {
         const VkExtensionProperties* props;
         uint32_t count;
-        GetDeviceLayerExtensions(pLayerName, &props, &count);
+
+        const Layer* layer = FindLayer(pLayerName);
+        if (layer && IsLayerGlobal(*layer)) {
+            props = GetLayerDeviceExtensions(*layer, count);
+        } else {
+            props = nullptr;
+            count = 0;
+        }
 
         if (!pProperties || *pPropertyCount > count)
             *pPropertyCount = count;
diff --git a/vulkan/libvulkan/layers_extensions.cpp b/vulkan/libvulkan/layers_extensions.cpp
index 4363dd8..b7558a2 100644
--- a/vulkan/libvulkan/layers_extensions.cpp
+++ b/vulkan/libvulkan/layers_extensions.cpp
@@ -331,12 +331,7 @@
 }
 
 const Layer* FindInstanceLayer(const char* name) {
-    auto layer =
-        std::find_if(g_instance_layers.cbegin(), g_instance_layers.cend(),
-                     [=](const Layer& entry) {
-                         return strcmp(entry.properties.layerName, name) == 0;
-                     });
-    return (layer != g_instance_layers.cend()) ? &*layer : nullptr;
+    return FindLayer(name);
 }
 
 const Layer* FindDeviceLayer(const char* name) {
@@ -368,6 +363,15 @@
     return g_instance_layers[index];
 }
 
+const Layer* FindLayer(const char* name) {
+    auto layer =
+        std::find_if(g_instance_layers.cbegin(), g_instance_layers.cend(),
+                     [=](const Layer& entry) {
+                         return strcmp(entry.properties.layerName, name) == 0;
+                     });
+    return (layer != g_instance_layers.cend()) ? &*layer : nullptr;
+}
+
 const VkLayerProperties& GetLayerProperties(const Layer& layer) {
     return layer.properties;
 }
@@ -376,30 +380,16 @@
     return layer.is_global;
 }
 
-void GetInstanceLayerExtensions(const char* name,
-                                const VkExtensionProperties** properties,
-                                uint32_t* count) {
-    const Layer* layer = FindInstanceLayer(name);
-    if (layer) {
-        *properties = layer->instance_extensions.data();
-        *count = static_cast<uint32_t>(layer->instance_extensions.size());
-    } else {
-        *properties = nullptr;
-        *count = 0;
-    }
+const VkExtensionProperties* GetLayerInstanceExtensions(const Layer& layer,
+                                                        uint32_t& count) {
+    count = static_cast<uint32_t>(layer.instance_extensions.size());
+    return layer.instance_extensions.data();
 }
 
-void GetDeviceLayerExtensions(const char* name,
-                              const VkExtensionProperties** properties,
-                              uint32_t* count) {
-    const Layer* layer = FindDeviceLayer(name);
-    if (layer) {
-        *properties = layer->device_extensions.data();
-        *count = static_cast<uint32_t>(layer->device_extensions.size());
-    } else {
-        *properties = nullptr;
-        *count = 0;
-    }
+const VkExtensionProperties* GetLayerDeviceExtensions(const Layer& layer,
+                                                      uint32_t& count) {
+    count = static_cast<uint32_t>(layer.device_extensions.size());
+    return layer.device_extensions.data();
 }
 
 LayerRef GetInstanceLayerRef(const char* name) {
diff --git a/vulkan/libvulkan/layers_extensions.h b/vulkan/libvulkan/layers_extensions.h
index ee85f00..899d600 100644
--- a/vulkan/libvulkan/layers_extensions.h
+++ b/vulkan/libvulkan/layers_extensions.h
@@ -52,16 +52,15 @@
 
 uint32_t GetLayerCount();
 const Layer& GetLayer(uint32_t index);
+const Layer* FindLayer(const char* name);
 
 const VkLayerProperties& GetLayerProperties(const Layer& layer);
 bool IsLayerGlobal(const Layer& layer);
+const VkExtensionProperties* GetLayerInstanceExtensions(const Layer& layer,
+                                                        uint32_t& count);
+const VkExtensionProperties* GetLayerDeviceExtensions(const Layer& layer,
+                                                      uint32_t& count);
 
-void GetInstanceLayerExtensions(const char* name,
-                                const VkExtensionProperties** properties,
-                                uint32_t* count);
-void GetDeviceLayerExtensions(const char* name,
-                              const VkExtensionProperties** properties,
-                              uint32_t* count);
 LayerRef GetInstanceLayerRef(const char* name);
 LayerRef GetDeviceLayerRef(const char* name);
 
