diff --git a/include/vkLayer.h b/include/vkLayer.h
index 6d1c00d..4940726 100644
--- a/include/vkLayer.h
+++ b/include/vkLayer.h
@@ -16,9 +16,10 @@
 #endif
 
 
+typedef void * (*PFN_vkGPA)(VkObject obj, const char * pName);
 typedef struct VkBaseLayerObject_
 {
-    PFN_vkGetProcAddr pGPA;
+    PFN_vkGPA pGPA;
     VkObject nextObject;
     VkObject baseObject;
 } VkBaseLayerObject;
diff --git a/layers/basic.cpp b/layers/basic.cpp
index 260f7c3..e889e31 100644
--- a/layers/basic.cpp
+++ b/layers/basic.cpp
@@ -49,7 +49,7 @@
         return it->second;
     }
 
-    layer_initialize_dispatch_table(pTable, gpuw->pGPA, (VkPhysicalDevice) gpuw->nextObject);
+    layer_initialize_dispatch_table(pTable, (PFN_vkGetProcAddr) gpuw->pGPA, (VkPhysicalDevice) gpuw->nextObject);
 
     return pTable;
 }
@@ -173,20 +173,47 @@
 
     initLayerTable((const VkBaseLayerObject *) gpu);
 
-    if (!strncmp("vkGetProcAddr", pName, sizeof("vkGetProcAddr")))
+    if (!strcmp("vkGetProcAddr", pName))
         return (void *) vkGetProcAddr;
-    else if (!strncmp("vkCreateDevice", pName, sizeof ("vkCreateDevice")))
+    if (!strcmp("vkCreateDevice", pName))
         return (void *) vkCreateDevice;
-    else if (!strncmp("vkEnumerateLayers", pName, sizeof ("vkEnumerateLayers")))
+    if (!strcmp("GetGlobalExtensionInfo", pName))
+        return (void*) vkGetGlobalExtensionInfo;
+    if (!strcmp("vkEnumerateLayers", pName))
         return (void *) vkEnumerateLayers;
-    else if (!strncmp("vkGetFormatInfo", pName, sizeof ("vkGetFormatInfo")))
+    if (!strcmp("vkGetFormatInfo", pName))
         return (void *) vkGetFormatInfo;
-    else if (!strncmp("vkLayerExtension1", pName, sizeof("vkLayerExtension1")))
+    if (!strcmp("vkLayerExtension1", pName))
         return (void *) vkLayerExtension1;
     else {
         VkBaseLayerObject* gpuw = (VkBaseLayerObject *) gpu;
         if (gpuw->pGPA == NULL)
             return NULL;
-        return gpuw->pGPA((VkPhysicalDevice) gpuw->nextObject, pName);
+        return gpuw->pGPA((VkObject) gpuw->nextObject, pName);
+    }
+}
+
+VK_LAYER_EXPORT void * VKAPI vkGetInstanceProcAddr(VkInstance instance, const char* pName)
+{
+    if (instance == NULL)
+        return NULL;
+
+    // TODO initInstanceLayerTable((const VkBaseLayerObject *) instance);
+
+    if (!strcmp("vkGetInstanceProcAddr", pName))
+        return (void *) vkGetInstanceProcAddr;
+    if (!strcmp("vkGetProcAddr", pName))
+        return (void *) vkGetProcAddr;
+    if (!strcmp("GetGlobalExtensionInfo", pName))
+        return (void*) vkGetGlobalExtensionInfo;
+    if (!strcmp("vkCreateDevice", pName))
+        return (void *) vkCreateDevice;
+    if (!strcmp("vkEnumerateLayers", pName))
+        return (void *) vkEnumerateLayers;
+    else {
+        VkBaseLayerObject* instancew = (VkBaseLayerObject *) instance;
+        if (instancew->pGPA == NULL)
+            return NULL;
+        return instancew->pGPA((VkObject) instancew->nextObject, pName);
     }
 }
diff --git a/layers/draw_state.cpp b/layers/draw_state.cpp
index 024df63..95fa1f5 100755
--- a/layers/draw_state.cpp
+++ b/layers/draw_state.cpp
@@ -1458,7 +1458,7 @@
     // initialize Layer dispatch table
     // TODO handle multiple GPUs
     PFN_vkGetProcAddr fpNextGPA;
-    fpNextGPA = pCurObj->pGPA;
+    fpNextGPA = (PFN_vkGetProcAddr) pCurObj->pGPA;
     assert(fpNextGPA);
 
     layer_initialize_dispatch_table(&nextTable, fpNextGPA, (VkPhysicalDevice) pCurObj->nextObject);
@@ -2872,6 +2872,35 @@
     else {
         if (gpuw->pGPA == NULL)
             return NULL;
-        return gpuw->pGPA((VkPhysicalDevice)gpuw->nextObject, funcName);
+        return gpuw->pGPA((VkObject)gpuw->nextObject, funcName);
+    }
+}
+
+VK_LAYER_EXPORT void * VKAPI vkGetInstanceProcAddr(VkInstance instance, const char* funcName)
+{
+    VkBaseLayerObject* instw = (VkBaseLayerObject *) instance;
+    if (instance == NULL)
+        return NULL;
+
+    //TODO
+    //pCurObj = gpuw;
+    //loader_platform_thread_once(&g_initInstanceOnce, initInstanceDrawState);
+
+    if (!strcmp(funcName, "vkGetInstanceProcAddr"))
+        return (void *) vkGetInstanceProcAddr;
+    if (!strcmp(funcName, "vkGetProcAddr"))
+        return (void *) vkGetProcAddr;
+    if (!strcmp(funcName, "vkCreateDevice"))
+        return (void*) vkCreateDevice;
+    if (!strcmp(funcName, "vkEnumerateLayers"))
+        return (void*) vkEnumerateLayers;
+    if (!strcmp(funcName, "vkDbgRegisterMsgCallback"))
+        return (void*) vkDbgRegisterMsgCallback;
+    if (!strcmp(funcName, "vkDbgUnregisterMsgCallback"))
+        return (void*) vkDbgUnregisterMsgCallback;
+    else {
+        if (instw->pGPA == NULL)
+            return NULL;
+        return instw->pGPA((VkObject) instw->nextObject, funcName);
     }
 }
diff --git a/layers/mem_tracker.cpp b/layers/mem_tracker.cpp
index 0a2d61d..2e9307d 100644
--- a/layers/mem_tracker.cpp
+++ b/layers/mem_tracker.cpp
@@ -793,7 +793,7 @@
     // initialize Layer dispatch table
     // TODO handle multiple GPUs
     PFN_vkGetProcAddr fpNextGPA;
-    fpNextGPA = pCurObj->pGPA;
+    fpNextGPA = (PFN_vkGetProcAddr) pCurObj->pGPA;
     assert(fpNextGPA);
 
     layer_initialize_dispatch_table(&nextTable, fpNextGPA, (VkPhysicalDevice) pCurObj->nextObject);
@@ -2156,6 +2156,8 @@
         return (void*) vkCreateDevice;
     if (!strcmp(funcName, "vkDestroyDevice"))
         return (void*) vkDestroyDevice;
+    if (!strcmp(funcName, "GetGlobalExtensionInfo"))
+        return (void*) vkGetGlobalExtensionInfo;
     if (!strcmp(funcName, "vkEnumerateLayers"))
         return (void*) vkEnumerateLayers;
     if (!strcmp(funcName, "vkQueueSubmit"))
@@ -2296,6 +2298,41 @@
         if (gpuw->pGPA == NULL) {
             return NULL;
         }
-        return gpuw->pGPA((VkPhysicalDevice)gpuw->nextObject, funcName);
+        return gpuw->pGPA((VkObject)gpuw->nextObject, funcName);
+    }
+}
+
+VK_LAYER_EXPORT void* VKAPI vkGetInstanceProcAddr(
+    VkInstance       instance,
+    const char       *funcName)
+{
+    VkBaseLayerObject* instw = (VkBaseLayerObject *) instance;
+
+    if (instance == NULL) {
+        return NULL;
+    }
+    //TODO
+    //pCurObj = instw;
+    //loader_platform_thread_once(&g_initInstanceOnce, initInstanceMemTracker);
+
+    if (!strcmp(funcName, "vkGetProcAddr"))
+        return (void *) vkGetProcAddr;
+    if (!strcmp(funcName, "vkGetInstanceProcAddr"))
+        return (void *) vkGetInstanceProcAddr;
+    if (!strcmp(funcName, "vkCreateDevice"))
+        return (void*) vkCreateDevice;
+    if (!strcmp(funcName, "GetGlobalExtensionInfo"))
+        return (void*) vkGetGlobalExtensionInfo;
+    if (!strcmp(funcName, "vkEnumerateLayers"))
+        return (void*) vkEnumerateLayers;
+        if (!strcmp(funcName, "vkDbgRegisterMsgCallback"))
+        return (void*) vkDbgRegisterMsgCallback;
+    if (!strcmp(funcName, "vkDbgUnregisterMsgCallback"))
+        return (void*) vkDbgUnregisterMsgCallback;
+    else {
+        if (instw->pGPA == NULL) {
+            return NULL;
+        }
+        return instw->pGPA((VkObject)instw->nextObject, funcName);
     }
 }
diff --git a/layers/multi.cpp b/layers/multi.cpp
index b26e67d..78ee302 100644
--- a/layers/multi.cpp
+++ b/layers/multi.cpp
@@ -120,18 +120,42 @@
 
     getLayer1Table(gpuw);
 
-    if (!strncmp("vkCreateDevice", pName, sizeof ("vkCreateDevice")))
+    if (!strcmp("vkCreateDevice", pName))
         return (void *) multi1CreateDevice;
-    else if (!strncmp("vkEnumerateLayers", pName, sizeof ("vkEnumerateLayers")))
+    else if (!strcmp("vkEnumerateLayers", pName))
         return (void *) multi1EnumerateLayers;
-    else if (!strncmp("vkCreateGraphicsPipeline", pName, sizeof ("vkCreateGraphicsPipeline")))
+    else if (!strcmp("GetGlobalExtensionInfo", pName))
+        return (void*) vkGetGlobalExtensionInfo;
+    else if (!strcmp("vkCreateGraphicsPipeline", pName))
         return (void *) multi1CreateGraphicsPipeline;
-    else if (!strncmp("vkStorePipeline", pName, sizeof ("vkStorePipeline")))
+    else if (!strcmp("vkStorePipeline", pName))
         return (void *) multi1StorePipeline;
     else {
         if (gpuw->pGPA == NULL)
             return NULL;
-        return gpuw->pGPA((VkPhysicalDevice) gpuw->nextObject, pName);
+        return gpuw->pGPA((VkObject) gpuw->nextObject, pName);
+    }
+}
+
+VK_LAYER_EXPORT void * VKAPI multi1InstanceGetProcAddr(VkInstance inst, const char* pName)
+{
+    VkBaseLayerObject* instw = (VkBaseLayerObject *) inst;
+
+    if (inst == NULL)
+        return NULL;
+
+    //TODO getLayer1InstanceTable(instw);
+
+    if (!strcmp("vkCreateDevice", pName))
+        return (void *) multi1CreateDevice;
+    else if (!strcmp("vkEnumerateLayers", pName))
+        return (void *) multi1EnumerateLayers;
+    else if (!strcmp("GetGlobalExtensionInfo", pName))
+        return (void*) vkGetGlobalExtensionInfo;
+    else {
+        if (instw->pGPA == NULL)
+            return NULL;
+        return instw->pGPA((VkObject) instw->nextObject, pName);
     }
 }
 
@@ -218,18 +242,42 @@
 
     getLayer2Table(gpuw);
 
-    if (!strncmp("vkCreateDevice", pName, sizeof ("vkCreateDevice")))
+    if (!strcmp("vkCreateDevice", pName))
         return (void *) multi2CreateDevice;
-    else if (!strncmp("vkEnumerateLayers", pName, sizeof ("vkEnumerateLayers")))
+    else if (!strcmp("vkEnumerateLayers", pName))
         return (void *) multi2EnumerateLayers;
-    else if (!strncmp("vkCreateCommandBuffer", pName, sizeof ("vkCreateCommandBuffer")))
+    else if (!strcmp("GetGlobalExtensionInfo", pName))
+        return (void*) vkGetGlobalExtensionInfo;
+    else if (!strcmp("vkCreateCommandBuffer", pName))
         return (void *) multi2CreateCommandBuffer;
-    else if (!strncmp("vkBeginCommandBuffer", pName, sizeof ("vkBeginCommandBuffer")))
+    else if (!strcmp("vkBeginCommandBuffer", pName))
         return (void *) multi2BeginCommandBuffer;
     else {
         if (gpuw->pGPA == NULL)
             return NULL;
-        return gpuw->pGPA((VkPhysicalDevice) gpuw->nextObject, pName);
+        return gpuw->pGPA((VkObject) gpuw->nextObject, pName);
+    }
+}
+
+VK_LAYER_EXPORT void * VKAPI multi2InstanceGetProcAddr(VkInstance inst, const char* pName)
+{
+    VkBaseLayerObject* instw = (VkBaseLayerObject *) inst;
+
+    if (inst == NULL)
+        return NULL;
+
+    //TODO getLayer2InstanceTable(instw);
+
+    if (!strcmp("vkCreateDevice", pName))
+        return (void *) multi2CreateDevice;
+    else if (!strcmp("vkEnumerateLayers", pName))
+        return (void *) multi2EnumerateLayers;
+    else if (!strcmp("GetGlobalExtensionInfo", pName))
+        return (void*) vkGetGlobalExtensionInfo;
+    else {
+        if (instw->pGPA == NULL)
+            return NULL;
+        return instw->pGPA((VkObject) instw->nextObject, pName);
     }
 }
 
@@ -304,11 +352,11 @@
 VK_LAYER_EXPORT void * VKAPI vkGetProcAddr(VkPhysicalDevice gpu, const char* pName)
 {
     // to find each layers GPA routine Loader will search via "<layerName>GetProcAddr"
-    if (!strncmp("multi1GetProcAddr", pName, sizeof("multi1GetProcAddr")))
+    if (!strcmp("multi1GetProcAddr", pName))
         return (void *) multi1GetProcAddr;
-    else if (!strncmp("multi2GetProcAddr", pName, sizeof("multi2GetProcAddr")))
+    else if (!strcmp("multi2GetProcAddr", pName))
         return (void *) multi2GetProcAddr;
-    else if (!strncmp("vkGetProcAddr", pName, sizeof("vkGetProcAddr")))
+    else if (!strcmp("vkGetProcAddr", pName))
         return (void *) vkGetProcAddr;
 
     // use first layer activated as GPA dispatch table activation happens in order
@@ -321,6 +369,31 @@
 
 }
 
+VK_LAYER_EXPORT void * VKAPI vkGetInstanceProcAddr(VkInstance inst, const char* pName)
+{
+    // to find each layers GPA routine Loader will search via "<layerName>GetProcAddr"
+    if (!strcmp("multi1GetProcAddr", pName))
+        return (void *) multi1GetProcAddr;
+    else if (!strcmp("multi2GetProcAddr", pName))
+        return (void *) multi2GetProcAddr;
+    else if (!strcmp("vkGetProcAddr", pName))
+        return (void *) vkGetProcAddr;
+    else if (!strcmp("multi1GetInstanceProcAddr", pName))
+        return (void *) multi1GetProcAddr;
+    else if (!strcmp("multi2GetInstanceProcAddr", pName))
+        return (void *) multi2GetProcAddr;
+    else if (!strcmp("vkGetInstanceProcAddr", pName))
+        return (void *) vkGetProcAddr;
+
+    // use first layer activated as GPA dispatch table activation happens in order
+    else if (layer1_first_activated)
+        return multi1InstanceGetProcAddr(inst, pName);
+    else if (layer2_first_activated)
+        return multi2InstanceGetProcAddr(inst, pName);
+    else
+        return NULL;
+
+}
 #ifdef __cplusplus
 }    //extern "C"
 #endif
@@ -332,5 +405,5 @@
     if (layerNum == 1 && layer2_first_activated == false)
         layer1_first_activated = true;
 
-    layer_initialize_dispatch_table(pTable, gpuw->pGPA, (VkPhysicalDevice) gpuw->nextObject);
+    layer_initialize_dispatch_table(pTable, (PFN_vkGetProcAddr) gpuw->pGPA, (VkPhysicalDevice) gpuw->nextObject);
 }
diff --git a/layers/param_checker.cpp b/layers/param_checker.cpp
index f91518d..a63e4a9 100644
--- a/layers/param_checker.cpp
+++ b/layers/param_checker.cpp
@@ -65,7 +65,7 @@
     }
 
     PFN_vkGetProcAddr fpNextGPA;
-    fpNextGPA = pCurObj->pGPA;
+    fpNextGPA = (PFN_vkGetProcAddr) pCurObj->pGPA;
     assert(fpNextGPA);
 
     layer_initialize_dispatch_table(&nextTable, fpNextGPA, (VkPhysicalDevice) pCurObj->nextObject);
@@ -1953,7 +1953,296 @@
     return result;
 }
 
-#include "vk_generic_intercept_proc_helper.h"
+static inline void* layer_intercept_proc(const char *name)
+{
+    if (!name || name[0] != 'v' || name[1] != 'k')
+        return NULL;
+
+    name += 2;
+    if (!strcmp(name, "CreateInstance"))
+        return (void*) vkCreateInstance;
+    if (!strcmp(name, "DestroyInstance"))
+        return (void*) vkDestroyInstance;
+    if (!strcmp(name, "GetPhysicalDeviceInfo"))
+        return (void*) vkGetPhysicalDeviceInfo;
+    if (!strcmp(name, "GetProcAddr"))
+        return (void*) vkGetProcAddr;
+    if (!strcmp(name, "CreateDevice"))
+        return (void*) vkCreateDevice;
+    if (!strcmp(name, "DestroyDevice"))
+        return (void*) vkDestroyDevice;
+    if (!strcmp(name, "GetGlobalExtensionInfo"))
+        return (void*) vkGetGlobalExtensionInfo;
+    if (!strcmp(name, "GetPhysicalDeviceExtensionInfo"))
+        return (void*) vkGetPhysicalDeviceExtensionInfo;
+    if (!strcmp(name, "EnumerateLayers"))
+        return (void*) vkEnumerateLayers;
+    if (!strcmp(name, "GetDeviceQueue"))
+        return (void*) vkGetDeviceQueue;
+    if (!strcmp(name, "QueueSubmit"))
+        return (void*) vkQueueSubmit;
+    if (!strcmp(name, "QueueWaitIdle"))
+        return (void*) vkQueueWaitIdle;
+    if (!strcmp(name, "DeviceWaitIdle"))
+        return (void*) vkDeviceWaitIdle;
+    if (!strcmp(name, "AllocMemory"))
+        return (void*) vkAllocMemory;
+    if (!strcmp(name, "FreeMemory"))
+        return (void*) vkFreeMemory;
+    if (!strcmp(name, "SetMemoryPriority"))
+        return (void*) vkSetMemoryPriority;
+    if (!strcmp(name, "MapMemory"))
+        return (void*) vkMapMemory;
+    if (!strcmp(name, "UnmapMemory"))
+        return (void*) vkUnmapMemory;
+    if (!strcmp(name, "FlushMappedMemoryRanges"))
+        return (void*) vkFlushMappedMemoryRanges;
+    if (!strcmp(name, "InvalidateMappedMemoryRanges"))
+        return (void*) vkInvalidateMappedMemoryRanges;
+    if (!strcmp(name, "PinSystemMemory"))
+        return (void*) vkPinSystemMemory;
+    if (!strcmp(name, "GetMultiDeviceCompatibility"))
+        return (void*) vkGetMultiDeviceCompatibility;
+    if (!strcmp(name, "OpenSharedMemory"))
+        return (void*) vkOpenSharedMemory;
+    if (!strcmp(name, "OpenSharedSemaphore"))
+        return (void*) vkOpenSharedSemaphore;
+    if (!strcmp(name, "OpenPeerMemory"))
+        return (void*) vkOpenPeerMemory;
+    if (!strcmp(name, "OpenPeerImage"))
+        return (void*) vkOpenPeerImage;
+    if (!strcmp(name, "DestroyObject"))
+        return (void*) vkDestroyObject;
+    if (!strcmp(name, "GetObjectInfo"))
+        return (void*) vkGetObjectInfo;
+    if (!strcmp(name, "CreateFence"))
+        return (void*) vkCreateFence;
+    if (!strcmp(name, "ResetFences"))
+        return (void*) vkResetFences;
+    if (!strcmp(name, "GetFenceStatus"))
+        return (void*) vkGetFenceStatus;
+    if (!strcmp(name, "WaitForFences"))
+        return (void*) vkWaitForFences;
+    if (!strcmp(name, "CreateSemaphore"))
+        return (void*) vkCreateSemaphore;
+    if (!strcmp(name, "QueueSignalSemaphore"))
+        return (void*) vkQueueSignalSemaphore;
+    if (!strcmp(name, "QueueWaitSemaphore"))
+        return (void*) vkQueueWaitSemaphore;
+    if (!strcmp(name, "CreateEvent"))
+        return (void*) vkCreateEvent;
+    if (!strcmp(name, "GetEventStatus"))
+        return (void*) vkGetEventStatus;
+    if (!strcmp(name, "SetEvent"))
+        return (void*) vkSetEvent;
+    if (!strcmp(name, "ResetEvent"))
+        return (void*) vkResetEvent;
+    if (!strcmp(name, "CreateQueryPool"))
+        return (void*) vkCreateQueryPool;
+    if (!strcmp(name, "GetQueryPoolResults"))
+        return (void*) vkGetQueryPoolResults;
+    if (!strcmp(name, "GetFormatInfo"))
+        return (void*) vkGetFormatInfo;
+    if (!strcmp(name, "CreateBuffer"))
+        return (void*) vkCreateBuffer;
+    if (!strcmp(name, "CreateBufferView"))
+        return (void*) vkCreateBufferView;
+    if (!strcmp(name, "CreateImage"))
+        return (void*) vkCreateImage;
+    if (!strcmp(name, "GetImageSubresourceInfo"))
+        return (void*) vkGetImageSubresourceInfo;
+    if (!strcmp(name, "CreateImageView"))
+        return (void*) vkCreateImageView;
+    if (!strcmp(name, "CreateColorAttachmentView"))
+        return (void*) vkCreateColorAttachmentView;
+    if (!strcmp(name, "CreateDepthStencilView"))
+        return (void*) vkCreateDepthStencilView;
+    if (!strcmp(name, "CreateShader"))
+        return (void*) vkCreateShader;
+    if (!strcmp(name, "CreateGraphicsPipeline"))
+        return (void*) vkCreateGraphicsPipeline;
+    if (!strcmp(name, "CreateGraphicsPipelineDerivative"))
+        return (void*) vkCreateGraphicsPipelineDerivative;
+    if (!strcmp(name, "CreateComputePipeline"))
+        return (void*) vkCreateComputePipeline;
+    if (!strcmp(name, "StorePipeline"))
+        return (void*) vkStorePipeline;
+    if (!strcmp(name, "LoadPipeline"))
+        return (void*) vkLoadPipeline;
+    if (!strcmp(name, "LoadPipelineDerivative"))
+        return (void*) vkLoadPipelineDerivative;
+    if (!strcmp(name, "CreatePipelineLayout"))
+        return (void*) vkCreatePipelineLayout;
+    if (!strcmp(name, "CreateSampler"))
+        return (void*) vkCreateSampler;
+    if (!strcmp(name, "CreateDescriptorSetLayout"))
+        return (void*) vkCreateDescriptorSetLayout;
+    if (!strcmp(name, "CreateDescriptorPool"))
+        return (void*) vkCreateDescriptorPool;
+    if (!strcmp(name, "ResetDescriptorPool"))
+        return (void*) vkResetDescriptorPool;
+    if (!strcmp(name, "AllocDescriptorSets"))
+        return (void*) vkAllocDescriptorSets;
+    if (!strcmp(name, "ClearDescriptorSets"))
+        return (void*) vkClearDescriptorSets;
+    if (!strcmp(name, "CreateDynamicViewportState"))
+        return (void*) vkCreateDynamicViewportState;
+    if (!strcmp(name, "CreateDynamicRasterState"))
+        return (void*) vkCreateDynamicRasterState;
+    if (!strcmp(name, "CreateDynamicColorBlendState"))
+        return (void*) vkCreateDynamicColorBlendState;
+    if (!strcmp(name, "CreateDynamicDepthStencilState"))
+        return (void*) vkCreateDynamicDepthStencilState;
+    if (!strcmp(name, "CreateCommandBuffer"))
+        return (void*) vkCreateCommandBuffer;
+    if (!strcmp(name, "BeginCommandBuffer"))
+        return (void*) vkBeginCommandBuffer;
+    if (!strcmp(name, "EndCommandBuffer"))
+        return (void*) vkEndCommandBuffer;
+    if (!strcmp(name, "ResetCommandBuffer"))
+        return (void*) vkResetCommandBuffer;
+    if (!strcmp(name, "CmdBindPipeline"))
+        return (void*) vkCmdBindPipeline;
+    if (!strcmp(name, "CmdBindDynamicStateObject"))
+        return (void*) vkCmdBindDynamicStateObject;
+    if (!strcmp(name, "CmdBindDescriptorSets"))
+        return (void*) vkCmdBindDescriptorSets;
+    if (!strcmp(name, "CmdBindVertexBuffers"))
+        return (void*) vkCmdBindVertexBuffers;
+    if (!strcmp(name, "CmdBindIndexBuffer"))
+        return (void*) vkCmdBindIndexBuffer;
+    if (!strcmp(name, "CmdDraw"))
+        return (void*) vkCmdDraw;
+    if (!strcmp(name, "CmdDrawIndexed"))
+        return (void*) vkCmdDrawIndexed;
+    if (!strcmp(name, "CmdDrawIndirect"))
+        return (void*) vkCmdDrawIndirect;
+    if (!strcmp(name, "CmdDrawIndexedIndirect"))
+        return (void*) vkCmdDrawIndexedIndirect;
+    if (!strcmp(name, "CmdDispatch"))
+        return (void*) vkCmdDispatch;
+    if (!strcmp(name, "CmdDispatchIndirect"))
+        return (void*) vkCmdDispatchIndirect;
+    if (!strcmp(name, "CmdCopyBuffer"))
+        return (void*) vkCmdCopyBuffer;
+    if (!strcmp(name, "CmdCopyImage"))
+        return (void*) vkCmdCopyImage;
+    if (!strcmp(name, "CmdBlitImage"))
+        return (void*) vkCmdBlitImage;
+    if (!strcmp(name, "CmdCopyBufferToImage"))
+        return (void*) vkCmdCopyBufferToImage;
+    if (!strcmp(name, "CmdCopyImageToBuffer"))
+        return (void*) vkCmdCopyImageToBuffer;
+    if (!strcmp(name, "CmdUpdateBuffer"))
+        return (void*) vkCmdUpdateBuffer;
+    if (!strcmp(name, "CmdFillBuffer"))
+        return (void*) vkCmdFillBuffer;
+    if (!strcmp(name, "CmdClearColorImage"))
+        return (void*) vkCmdClearColorImage;
+    if (!strcmp(name, "CmdClearDepthStencil"))
+        return (void*) vkCmdClearDepthStencil;
+    if (!strcmp(name, "CmdResolveImage"))
+        return (void*) vkCmdResolveImage;
+    if (!strcmp(name, "CmdSetEvent"))
+        return (void*) vkCmdSetEvent;
+    if (!strcmp(name, "CmdResetEvent"))
+        return (void*) vkCmdResetEvent;
+    if (!strcmp(name, "CmdWaitEvents"))
+        return (void*) vkCmdWaitEvents;
+    if (!strcmp(name, "CmdPipelineBarrier"))
+        return (void*) vkCmdPipelineBarrier;
+    if (!strcmp(name, "CmdBeginQuery"))
+        return (void*) vkCmdBeginQuery;
+    if (!strcmp(name, "CmdEndQuery"))
+        return (void*) vkCmdEndQuery;
+    if (!strcmp(name, "CmdResetQueryPool"))
+        return (void*) vkCmdResetQueryPool;
+    if (!strcmp(name, "CmdWriteTimestamp"))
+        return (void*) vkCmdWriteTimestamp;
+    if (!strcmp(name, "CmdCopyQueryPoolResults"))
+        return (void*) vkCmdCopyQueryPoolResults;
+    if (!strcmp(name, "CmdInitAtomicCounters"))
+        return (void*) vkCmdInitAtomicCounters;
+    if (!strcmp(name, "CmdLoadAtomicCounters"))
+        return (void*) vkCmdLoadAtomicCounters;
+    if (!strcmp(name, "CmdSaveAtomicCounters"))
+        return (void*) vkCmdSaveAtomicCounters;
+    if (!strcmp(name, "CreateFramebuffer"))
+        return (void*) vkCreateFramebuffer;
+    if (!strcmp(name, "CreateRenderPass"))
+        return (void*) vkCreateRenderPass;
+    if (!strcmp(name, "CmdBeginRenderPass"))
+        return (void*) vkCmdBeginRenderPass;
+    if (!strcmp(name, "CmdEndRenderPass"))
+        return (void*) vkCmdEndRenderPass;
+    if (!strcmp(name, "DbgSetValidationLevel"))
+        return (void*) vkDbgSetValidationLevel;
+    if (!strcmp(name, "DbgRegisterMsgCallback"))
+        return (void*) vkDbgRegisterMsgCallback;
+    if (!strcmp(name, "DbgUnregisterMsgCallback"))
+        return (void*) vkDbgUnregisterMsgCallback;
+    if (!strcmp(name, "DbgSetMessageFilter"))
+        return (void*) vkDbgSetMessageFilter;
+    if (!strcmp(name, "DbgSetObjectTag"))
+        return (void*) vkDbgSetObjectTag;
+    if (!strcmp(name, "DbgSetGlobalOption"))
+        return (void*) vkDbgSetGlobalOption;
+    if (!strcmp(name, "DbgSetDeviceOption"))
+        return (void*) vkDbgSetDeviceOption;
+    if (!strcmp(name, "CmdDbgMarkerBegin"))
+        return (void*) vkCmdDbgMarkerBegin;
+    if (!strcmp(name, "CmdDbgMarkerEnd"))
+        return (void*) vkCmdDbgMarkerEnd;
+    if (!strcmp(name, "GetDisplayInfoWSI"))
+        return (void*) vkGetDisplayInfoWSI;
+    if (!strcmp(name, "CreateSwapChainWSI"))
+        return (void*) vkCreateSwapChainWSI;
+    if (!strcmp(name, "DestroySwapChainWSI"))
+        return (void*) vkDestroySwapChainWSI;
+    if (!strcmp(name, "GetSwapChainInfoWSI"))
+        return (void*) vkGetSwapChainInfoWSI;
+    if (!strcmp(name, "QueuePresentWSI"))
+        return (void*) vkQueuePresentWSI;
+
+    return NULL;
+}
+
+static inline void* layer_intercept_instance_proc(const char *name)
+{
+    if (!name || name[0] != 'v' || name[1] != 'k')
+        return NULL;
+
+    name += 2;
+    if (!strcmp(name, "GetInstanceProcAddr"))
+        return (void*) vkGetInstanceProcAddr;
+    if (!strcmp(name, "CreateInstance"))
+        return (void*) vkCreateInstance;
+    if (!strcmp(name, "DestroyInstance"))
+        return (void*) vkDestroyInstance;
+    if (!strcmp(name, "GetPhysicalDeviceInfo"))
+        return (void*) vkGetPhysicalDeviceInfo;
+    if (!strcmp(name, "GetProcAddr"))
+        return (void*) vkGetProcAddr;
+    if (!strcmp(name, "CreateDevice"))
+        return (void*) vkCreateDevice;
+    if (!strcmp(name, "GetGlobalExtensionInfo"))
+        return (void*) vkGetGlobalExtensionInfo;
+    if (!strcmp(name, "GetPhysicalDeviceExtensionInfo"))
+        return (void*) vkGetPhysicalDeviceExtensionInfo;
+    if (!strcmp(name, "EnumerateLayers"))
+        return (void*) vkEnumerateLayers;
+    if (!strcmp(name, "GetMultiDeviceCompatibility"))
+        return (void*) vkGetMultiDeviceCompatibility;
+    if (!strcmp(name, "DbgRegisterMsgCallback"))
+        return (void*) vkDbgRegisterMsgCallback;
+    if (!strcmp(name, "DbgUnregisterMsgCallback"))
+        return (void*) vkDbgUnregisterMsgCallback;
+    if (!strcmp(name, "DbgSetGlobalOption"))
+        return (void*) vkDbgSetGlobalOption;
+
+    return NULL;
+}
+
 VK_LAYER_EXPORT void* VKAPI vkGetProcAddr(VkPhysicalDevice gpu, const char* funcName)
 {
     VkBaseLayerObject* gpuw = (VkBaseLayerObject *) gpu;
@@ -1969,7 +2258,25 @@
     else {
         if (gpuw->pGPA == NULL)
             return NULL;
-        return gpuw->pGPA((VkPhysicalDevice)gpuw->nextObject, funcName);
+        return gpuw->pGPA((VkObject)gpuw->nextObject, funcName);
     }
 }
 
+VK_LAYER_EXPORT void* VKAPI vkGetInstanceProcAddr(VkInstance inst, const char* funcName)
+{
+    VkBaseLayerObject* instw = (VkBaseLayerObject *) inst;
+    void* addr;
+    if (inst == NULL)
+        return NULL;
+    //TODO pCurObj = instw;
+    //TODO loader_platform_thread_once(&tabOnce, initParamChecker);
+
+    addr = layer_intercept_instance_proc(funcName);
+    if (addr)
+        return addr;
+    else {
+        if (instw->pGPA == NULL)
+            return NULL;
+        return instw->pGPA((VkObject)instw->nextObject, funcName);
+    }
+}
diff --git a/layers/shader_checker.cpp b/layers/shader_checker.cpp
index a576314..f36fee3 100644
--- a/layers/shader_checker.cpp
+++ b/layers/shader_checker.cpp
@@ -159,8 +159,7 @@
         return it->second;
     }
 
-    layer_initialize_dispatch_table(pTable, gpuw->pGPA, (VkPhysicalDevice) gpuw->nextObject);
-    pCurObj = (VkBaseLayerObject *)gpuw->baseObject;
+    layer_initialize_dispatch_table(pTable, (PFN_vkGetProcAddr) gpuw->pGPA, (VkPhysicalDevice) gpuw->nextObject);
 
     return pTable;
 }
@@ -1011,6 +1010,7 @@
 
     ADD_HOOK(vkGetProcAddr);
     ADD_HOOK(vkEnumerateLayers);
+    ADD_HOOK(vkGetGlobalExtensionInfo);
     ADD_HOOK(vkCreateDevice);
     ADD_HOOK(vkCreateShader);
     ADD_HOOK(vkCreateGraphicsPipeline);
@@ -1021,5 +1021,30 @@
     VkBaseLayerObject* gpuw = (VkBaseLayerObject *) gpu;
     if (gpuw->pGPA == NULL)
         return NULL;
-    return gpuw->pGPA((VkPhysicalDevice) gpuw->nextObject, pName);
+    return gpuw->pGPA((VkObject) gpuw->nextObject, pName);
+}
+
+VK_LAYER_EXPORT void * VKAPI vkGetInstanceProcAddr(VkInstance inst, const char* pName)
+{
+    if (inst == NULL)
+        return NULL;
+
+    //TODO initLayerTable((const VkBaseLayerObject *) inst);
+
+    // TODO loader_platform_thread_once(&g_initOnce, initInstanceLayer);
+
+#define ADD_HOOK(fn)    \
+    if (!strncmp(#fn, pName, sizeof(#fn))) \
+        return (void *) fn
+
+    ADD_HOOK(vkGetProcAddr);
+    ADD_HOOK(vkGetInstanceProcAddr);
+    ADD_HOOK(vkEnumerateLayers);
+    ADD_HOOK(vkGetGlobalExtensionInfo);
+    ADD_HOOK(vkCreateDevice);
+
+    VkBaseLayerObject* instw = (VkBaseLayerObject *) inst;
+    if (instw->pGPA == NULL)
+        return NULL;
+    return instw->pGPA((VkObject) instw->nextObject, pName);
 }
diff --git a/vk-layer-generate.py b/vk-layer-generate.py
index b61890a..0311209 100755
--- a/vk-layer-generate.py
+++ b/vk-layer-generate.py
@@ -280,7 +280,7 @@
         funcs = []
         intercepted = []
         for proto in self.protos:
-            if proto.name == "GetProcAddr":
+            if proto.name == "GetProcAddr" or proto.name == "GetInstanceProcAddr":
                 intercepted.append(proto)
             else:
                 intercept = self.generate_intercept(proto, qual)
@@ -314,6 +314,27 @@
         body.append("")
         body.append("    return NULL;")
         body.append("}")
+        # add layer_intercept_instance_proc
+        lookups = []
+        for proto in self.protos:
+            if proto.params[0].ty != "VkInstance" and proto.params[0].ty != "VkPhysicalDevice" and proto.name != "CreateInstance" and proto.name != "GetGlobalExtensionInfo":
+                continue
+
+            if not proto in intercepted:
+                continue
+            lookups.append("if (!strcmp(name, \"%s\"))" % proto.name)
+            lookups.append("    return (void*) %s%s;" % (prefix, proto.name))
+
+        body.append("static inline void* layer_intercept_instance_proc(const char *name)")
+        body.append("{")
+        body.append(generate_get_proc_addr_check("name"))
+        body.append("")
+        body.append("    name += 2;")
+        body.append("    %s" % "\n    ".join(lookups))
+        body.append("")
+        body.append("    return NULL;")
+        body.append("}")
+
         funcs.append("\n".join(body))
         return "\n\n".join(funcs)
 
@@ -381,7 +402,7 @@
         exts.append('}')
         return "\n".join(exts)
 
-    def _generate_layer_gpa_function(self, extensions=[]):
+    def _generate_layer_gpa_function(self, extensions=[], instance_extensions=[]):
         func_body = []
         func_body.append("VK_LAYER_EXPORT void* VKAPI vkGetProcAddr(VkPhysicalDevice gpu, const char* funcName)\n"
                          "{\n"
@@ -402,12 +423,39 @@
                 cpp_prefix = "reinterpret_cast<void*>("
                 cpp_postfix = ")"
             for ext_name in extensions:
+#<<<<<<< HEAD
                 func_body.append('    else if (!strncmp("%s", funcName, sizeof("%s")))\n'
                                  '        return %s%s%s;' % (ext_name, ext_name, cpp_prefix, ext_name, cpp_postfix))
+#=======
+#                func_body.append('    else if (!strcmp("%s", funcName))\n'
+#                                 '        return %s;' % (ext_name, ext_name))
+#>>>>>>> layers: Add GetInstanceProcAddr() to all layers
         func_body.append("    else {\n"
                          "        if (gpuw->pGPA == NULL)\n"
                          "            return NULL;\n"
-                         "        return gpuw->pGPA((VkPhysicalDevice)gpuw->nextObject, funcName);\n"
+                         "        return gpuw->pGPA((VkObject)gpuw->nextObject, funcName);\n"
+                         "    }\n"
+                         "}\n")
+        func_body.append("VK_LAYER_EXPORT void* VKAPI vkGetInstanceProcAddr(VkInstance inst, const char* funcName)\n"
+                         "{\n"
+                         "    VkBaseLayerObject* instw = (VkBaseLayerObject *) inst;\n"
+                         "    void* addr;\n"
+                         "    if (inst == VK_NULL_HANDLE)\n"
+                         "        return NULL;\n"
+                         "    // TODO pCurObj = instw;\n"
+                         "    // TODO loader_platform_thread_once(&tabInstanceOnce, initInstance%s);\n\n"
+                         "    addr = layer_intercept_instance_proc(funcName);\n"
+                         "    if (addr)\n"
+                         "        return addr;" % self.layer_name)
+
+        if 0 != len(instance_extensions):
+            for ext_name in instance_extensions:
+                func_body.append('    else if (!strcmp("%s", funcName))\n'
+                                 '        return %s;' % (ext_name, ext_name))
+        func_body.append("    else {\n"
+                         "        if (instw->pGPA == NULL)\n"
+                         "            return NULL;\n"
+                         "        return instw->pGPA((VkObject)instw->nextObject, funcName);\n"
                          "    }\n"
                          "}\n")
         return "\n".join(func_body)
@@ -434,7 +482,7 @@
             func_body.append('    }')
             func_body.append('')
         func_body.append('    PFN_vkGetProcAddr fpNextGPA;\n'
-                         '    fpNextGPA = pCurObj->pGPA;\n'
+                         '    fpNextGPA = (PFN_vkGetProcAddr) pCurObj->pGPA;\n'
                          '    assert(fpNextGPA);\n')
 
         func_body.append("    layer_initialize_dispatch_table(&nextTable, fpNextGPA, (VkPhysicalDevice) pCurObj->nextObject);")
@@ -650,7 +698,7 @@
         func_body.append('    ConfigureOutputStream(writeToFile, flushAfterWrite);')
         func_body.append('')
         func_body.append('    PFN_vkGetProcAddr fpNextGPA;')
-        func_body.append('    fpNextGPA = pCurObj->pGPA;')
+        func_body.append('    fpNextGPA = (PFN_vkGetProcAddr) pCurObj->pGPA;')
         func_body.append('    assert(fpNextGPA);')
         func_body.append('    layer_initialize_dispatch_table(&nextTable, fpNextGPA, (VkPhysicalDevice) pCurObj->nextObject);')
         func_body.append('')
