diff --git a/layers/basic.cpp b/layers/basic.cpp
index d1e7805..bc2d1fc 100644
--- a/layers/basic.cpp
+++ b/layers/basic.cpp
@@ -125,11 +125,11 @@
     return res;
 }
 
-VK_LAYER_EXPORT VkResult VKAPI basic_GetPhysicalDeviceFormatInfo(VkPhysicalDevice gpu, VkFormat format, VkFormatProperties *pFormatInfo)
+VK_LAYER_EXPORT VkResult VKAPI basic_GetPhysicalDeviceFormatProperties(VkPhysicalDevice gpu, VkFormat format, VkFormatProperties *pFormatInfo)
 {
-    printf("At start of wrapped vkGetPhysicalDeviceFormatInfo() call w/ gpu: %p\n", (void*)gpu);
-    VkResult result = instance_dispatch_table(gpu)->GetPhysicalDeviceFormatInfo(gpu, format, pFormatInfo);
-    printf("Completed wrapped vkGetPhysicalDeviceFormatInfo() call w/ gpu: %p\n", (void*)gpu);
+    printf("At start of wrapped vkGetPhysicalDeviceFormatProperties() call w/ gpu: %p\n", (void*)gpu);
+    VkResult result = instance_dispatch_table(gpu)->GetPhysicalDeviceFormatProperties(gpu, format, pFormatInfo);
+    printf("Completed wrapped vkGetPhysicalDeviceFormatProperties() call w/ gpu: %p\n", (void*)gpu);
     return result;
 }
 
@@ -173,8 +173,8 @@
         return (void *) vkGetPhysicalDeviceLayerProperties;
     if (!strcmp("vkGetPhysicalDeviceExtensionProperties", pName))
         return (void *) vkGetPhysicalDeviceExtensionProperties;
-    if (!strcmp("vkGetPhysicalDeviceFormatInfo", pName))
-        return (void *) basic_GetPhysicalDeviceFormatInfo;
+    if (!strcmp("vkGetPhysicalDeviceFormatProperties", pName))
+        return (void *) basic_GetPhysicalDeviceFormatProperties;
     if (!strcmp("vkDestroyInstance", pName))
         return (void *) basic_DestroyInstance;
     if (!strcmp("vkEnumeratePhysicalDevices", pName))
diff --git a/layers/image.cpp b/layers/image.cpp
index 719e5af..fadc611 100644
--- a/layers/image.cpp
+++ b/layers/image.cpp
@@ -252,7 +252,7 @@
     {
         layer_data *device_data = get_my_data_ptr(get_dispatch_key(device), layer_data_map);
         VkFormatProperties properties;
-        VkResult result = get_dispatch_table(image_instance_table_map, device_data->physicalDevice)->GetPhysicalDeviceFormatInfo(
+        VkResult result = get_dispatch_table(image_instance_table_map, device_data->physicalDevice)->GetPhysicalDeviceFormatProperties(
                 device_data->physicalDevice, pCreateInfo->format, &properties);
         if(result != VK_SUCCESS)
         {
@@ -280,7 +280,7 @@
         {
             layer_data *device_data = get_my_data_ptr(get_dispatch_key(device), layer_data_map);
             VkFormatProperties properties;
-            VkResult result = get_dispatch_table(image_instance_table_map, device_data->physicalDevice)->GetPhysicalDeviceFormatInfo(
+            VkResult result = get_dispatch_table(image_instance_table_map, device_data->physicalDevice)->GetPhysicalDeviceFormatProperties(
                     device_data->physicalDevice, pCreateInfo->pAttachments[i].format, &properties);
             if(result != VK_SUCCESS)
             {
diff --git a/tests/blit_tests.cpp b/tests/blit_tests.cpp
index 3c6d674..fe75e5b 100644
--- a/tests/blit_tests.cpp
+++ b/tests/blit_tests.cpp
@@ -304,7 +304,7 @@
         VkFormat format;
         size_t size;
         uint32_t channel_count;
-    } format_table[VK_NUM_FORMAT] = {
+    } format_table[VK_FORMAT_NUM] = {
         { VK_FORMAT_UNDEFINED,             0,  0 },
         { VK_FORMAT_R4G4_UNORM,            1,  2 },
         { VK_FORMAT_R4G4_USCALED,          1,  2 },
@@ -483,7 +483,7 @@
     };
     if (format_table_unverified)
     {
-        for (unsigned int i = 0; i < VK_NUM_FORMAT; i++)
+        for (unsigned int i = 0; i < VK_FORMAT_NUM; i++)
         {
             assert(format_table[i].format == i);
         }
diff --git a/vk-layer-generate.py b/vk-layer-generate.py
index 82a2f04..3f7e7b3 100755
--- a/vk-layer-generate.py
+++ b/vk-layer-generate.py
@@ -156,7 +156,7 @@
         if "VkFormat" == vk_type:
             if cpp:
                 return ("%p", "&%s" % name)
-            return ("{%s.channelFormat = %%s, %s.numericFormat = %%s}" % (name, name), "string_VK_CHANNEL_FORMAT(%s.channelFormat), string_VK_NUM_FORMAT(%s.numericFormat)" % (name, name))
+            return ("{%s.channelFormat = %%s, %s.numericFormat = %%s}" % (name, name), "string_VK_CHANNEL_FORMAT(%s.channelFormat), string_VK_FORMAT_NUM(%s.numericFormat)" % (name, name))
         if output_param:
             return ("%p", "(void*)*%s" % name)
         if vk_helper.is_type(vk_type, 'struct') and '*' not in vk_type:
