diff --git a/layers/device_limits.cpp b/layers/device_limits.cpp
index 6e995f3..aba2e3e 100644
--- a/layers/device_limits.cpp
+++ b/layers/device_limits.cpp
@@ -99,7 +99,7 @@
         void *data_key,
         std::unordered_map<void *, layer_data *> &data_map);
 
-static void init_device_limits(layer_data *my_data)
+static void init_device_limits(layer_data *my_data, const VkAllocationCallbacks *pAllocator)
 {
     uint32_t report_flags = 0;
     uint32_t debug_action = 0;
@@ -174,7 +174,7 @@
                                    pCreateInfo->enabledExtensionNameCount,
                                    pCreateInfo->ppEnabledExtensionNames);
 
-        init_device_limits(my_data);
+        init_device_limits(my_data, pAllocator);
         my_data->instanceState = unique_ptr<INSTANCE_STATE>(new INSTANCE_STATE());
     }
     return result;
diff --git a/layers/draw_state.cpp b/layers/draw_state.cpp
index 7de67be..c0ff025 100644
--- a/layers/draw_state.cpp
+++ b/layers/draw_state.cpp
@@ -2546,7 +2546,7 @@
     return outside;
 }
 
-static void init_draw_state(layer_data *my_data)
+static void init_draw_state(layer_data *my_data, const VkAllocationCallbacks *pAllocator)
 {
     uint32_t report_flags = 0;
     uint32_t debug_action = 0;
@@ -2592,7 +2592,7 @@
                                    pCreateInfo->enabledExtensionNameCount,
                                    pCreateInfo->ppEnabledExtensionNames);
 
-        init_draw_state(my_data);
+        init_draw_state(my_data, pAllocator);
     }
     return result;
 }
diff --git a/layers/image.cpp b/layers/image.cpp
index 509fcec..2156c5f 100644
--- a/layers/image.cpp
+++ b/layers/image.cpp
@@ -72,7 +72,7 @@
 
 static unordered_map<void*, layer_data*> layer_data_map;
 
-static void InitImage(layer_data *data)
+static void InitImage(layer_data *data, const VkAllocationCallbacks *pAllocator)
 {
     VkDbgMsgCallback callback;
     uint32_t report_flags = getLayerOptionFlags("ImageReportFlags", 0);
@@ -129,7 +129,7 @@
         my_data->report_data = debug_report_create_instance(pTable, *pInstance, pCreateInfo->enabledExtensionNameCount,
             pCreateInfo->ppEnabledExtensionNames);
 
-        InitImage(my_data);
+        InitImage(my_data, pAllocator);
     }
     return result;
 }
diff --git a/layers/mem_tracker.cpp b/layers/mem_tracker.cpp
index 4166c3a..cf889f6 100644
--- a/layers/mem_tracker.cpp
+++ b/layers/mem_tracker.cpp
@@ -994,7 +994,8 @@
 
 static void
 init_mem_tracker(
-    layer_data *my_data)
+    layer_data *my_data,
+    const VkAllocationCallbacks *pAllocator)
 {
     uint32_t report_flags = 0;
     uint32_t debug_action = 0;
@@ -1057,9 +1058,9 @@
 }
 
 VKAPI_ATTR VkResult VKAPI_CALL vkCreateInstance(
-    const VkInstanceCreateInfo  *pCreateInfo,
-    const VkAllocationCallbacks *pAllocator,
-    VkInstance                  *pInstance)
+    const VkInstanceCreateInfo*                 pCreateInfo,
+    const VkAllocationCallbacks*                pAllocator,
+    VkInstance*                                 pInstance)
 {
     layer_data *my_data = get_my_data_ptr(get_dispatch_key(*pInstance), layer_data_map);
     VkLayerInstanceDispatchTable *pTable = my_data->instance_dispatch_table;
@@ -1072,7 +1073,7 @@
                                    pCreateInfo->enabledExtensionNameCount,
                                    pCreateInfo->ppEnabledExtensionNames);
 
-        init_mem_tracker(my_data);
+        init_mem_tracker(my_data, pAllocator);
     }
     return result;
 }
diff --git a/layers/object_track.h b/layers/object_track.h
index 624e08d..7c0ea6d 100644
--- a/layers/object_track.h
+++ b/layers/object_track.h
@@ -410,7 +410,8 @@
 #include "vk_dispatch_table_helper.h"
 static void
 initObjectTracker(
-    layer_data *my_data)
+    layer_data *my_data,
+    const VkAllocationCallbacks *pAllocator)
 {
     uint32_t report_flags = 0;
     uint32_t debug_action = 0;
@@ -771,7 +772,7 @@
                                    pCreateInfo->ppEnabledExtensionNames);
         createInstanceRegisterExtensions(pCreateInfo, *pInstance);
 
-        initObjectTracker(my_data);
+        initObjectTracker(my_data, pAllocator);
         create_instance(*pInstance, *pInstance, VK_OBJECT_TYPE_INSTANCE);
     }
     return result;
diff --git a/layers/param_checker.cpp b/layers/param_checker.cpp
index 611d52c..62fd2a7 100644
--- a/layers/param_checker.cpp
+++ b/layers/param_checker.cpp
@@ -84,7 +84,7 @@
     return data->report_data;
 }
 
-static void InitParamChecker(layer_data *data)
+static void InitParamChecker(layer_data *data, const VkAllocationCallbacks *pAllocator)
 {
     VkDbgMsgCallback callback;
     uint32_t report_flags = getLayerOptionFlags("ParamCheckerReportFlags", 0);
@@ -1741,7 +1741,7 @@
         data->report_data = debug_report_create_instance(pTable, *pInstance, pCreateInfo->enabledExtensionNameCount,
             pCreateInfo->ppEnabledExtensionNames);
 
-        InitParamChecker(data);
+        InitParamChecker(data, pAllocator);
     }
 
         return result;
diff --git a/layers/swapchain.cpp b/layers/swapchain.cpp
index 72fb4f9..08ee63d 100644
--- a/layers/swapchain.cpp
+++ b/layers/swapchain.cpp
@@ -109,7 +109,7 @@
 
 
 #include "vk_dispatch_table_helper.h"
-static void initSwapchain(layer_data *my_data)
+static void initSwapchain(layer_data *my_data, const VkAllocationCallbacks *pAllocator)
 {
     uint32_t report_flags = 0;
     uint32_t debug_action = 0;
@@ -185,7 +185,7 @@
                                    pCreateInfo->ppEnabledExtensionNames);
         // Call the following function after my_data is initialized:
         createInstanceRegisterExtensions(pCreateInfo, *pInstance);
-        initSwapchain(my_data);
+        initSwapchain(my_data, pAllocator);
     }
     return result;
 }
diff --git a/vk-layer-generate.py b/vk-layer-generate.py
index 8fb2b77..41eef8b 100755
--- a/vk-layer-generate.py
+++ b/vk-layer-generate.py
@@ -610,7 +610,7 @@
     def _generate_layer_initialization(self, init_opts=False, prefix='vk', lockname=None, condname=None):
         func_body = ["#include \"vk_dispatch_table_helper.h\""]
         func_body.append('%s' % self.lineinfo.get())
-        func_body.append('static void init%s(layer_data *my_data)\n'
+        func_body.append('static void init%s(layer_data *my_data, const VkAllocationCallbacks *pAllocator)\n'
                          '{\n' % self.layer_name)
         if init_opts:
             func_body.append('%s' % self.lineinfo.get())
@@ -648,7 +648,7 @@
     def _generate_new_layer_initialization(self, init_opts=False, prefix='vk', lockname=None, condname=None):
         func_body = ["#include \"vk_dispatch_table_helper.h\""]
         func_body.append('%s' % self.lineinfo.get())
-        func_body.append('static void init%s(layer_data *my_data)\n'
+        func_body.append('static void init%s(layer_data *my_data, const VkAllocationCallbacks *pAllocator)\n'
                          '{\n' % self.layer_name)
         if init_opts:
             func_body.append('%s' % self.lineinfo.get())
@@ -791,7 +791,7 @@
                          '                                   *pInstance,\n'
                          '                                   pCreateInfo->enabledExtensionNameCount,\n'
                          '                                   pCreateInfo->ppEnabledExtensionNames);\n'
-                         '        initGeneric(my_data);\n'
+                         '        initGeneric(my_data, pAllocator);\n'
                          '        sprintf(str, "Completed Generic layered %s\\n");\n'
                          '        log_msg(my_data->report_data, VK_DEBUG_REPORT_INFO_BIT, VK_OBJECT_TYPE_INSTANCE, (uint64_t)*pInstance, 0, 0, (char *) "Generic", "%%s", (char *) str);\n'
                          '    }\n'
@@ -2077,7 +2077,7 @@
                          '                                   *pInstance,\n'
                          '                                   pCreateInfo->enabledExtensionNameCount,\n'
                          '                                   pCreateInfo->ppEnabledExtensionNames);\n'
-                         '        initThreading(my_data);\n'
+                         '        initThreading(my_data, pAllocator);\n'
                          '    }\n'
                          '    return result;\n'
                          '}\n' % (qual, decl))
