diff --git a/layers/CMakeLists.txt b/layers/CMakeLists.txt
index 98b3fc6..ea08e4d 100644
--- a/layers/CMakeLists.txt
+++ b/layers/CMakeLists.txt
@@ -138,7 +138,7 @@
 add_vk_layer(ShaderChecker shader_checker.cpp vk_layer_table.cpp)
 add_vk_layer(Image image.cpp vk_layer_table.cpp)
 # TODO: Re-enable after ParamChecker updated
-#add_vk_layer(ParamChecker param_checker.cpp vk_layer_debug_marker_table.cpp vk_layer_table.cpp)
+add_vk_layer(ParamChecker param_checker.cpp vk_layer_debug_marker_table.cpp vk_layer_table.cpp)
 #add_vk_layer(ScreenShot screenshot.cpp vk_layer_table.cpp)
 # generated
 add_vk_layer(Generic generic_layer.cpp vk_layer_table.cpp)
diff --git a/layers/param_checker.cpp b/layers/param_checker.cpp
index 17ccad4..8a7c672 100644
--- a/layers/param_checker.cpp
+++ b/layers/param_checker.cpp
@@ -4665,20 +4665,8 @@
         "vkCreateGraphicsPipeline parameter, VkStructureType pCreateInfo->pDsState->sType, is unrecognized enumerator");
         return false;
     }
-<<<<<<< HEAD
-    if(pCreateInfo->pDsState->depthCompareOp < VK_COMPARE_OP_BEGIN_RANGE ||
-        pCreateInfo->pDsState->depthCompareOp > VK_COMPARE_OP_END_RANGE)
-=======
-    if(pCreateInfo->pDepthStencilState->format < VK_FORMAT_BEGIN_RANGE ||
-        pCreateInfo->pDepthStencilState->format > VK_FORMAT_END_RANGE)
-    {
-        log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
-        "vkCreateGraphicsPipeline parameter, VkFormat pCreateInfo->pDsState->format, is unrecognized enumerator");
-        return false;
-    }
     if(pCreateInfo->pDepthStencilState->depthCompareOp < VK_COMPARE_OP_BEGIN_RANGE ||
         pCreateInfo->pDepthStencilState->depthCompareOp > VK_COMPARE_OP_END_RANGE)
->>>>>>> fd61c93... Bug 14224: Remove abbreviations on some API symbols
     {
         log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
         "vkCreateGraphicsPipeline parameter, VkCompareOp pCreateInfo->pDsState->depthCompareOp, is unrecognized enumerator");
@@ -4817,24 +4805,13 @@
     }
     if(!ValidateEnumerator((VkChannelFlagBits)pCreateInfo->pColorBlendState->pAttachments->channelWriteMask))
     {
-<<<<<<< HEAD
-        std::string reason = "vkCreateGraphicsPipeline parameter, VkChannelFlags pCreateInfo->pCbState->pAttachments->channelWriteMask, is " + EnumeratorString((VkChannelFlagBits)pCreateInfo->pCbState->pAttachments->channelWriteMask);
-        log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
-=======
         std::string reason = "vkCreateGraphicsPipeline parameter, VkChannelFlags pCreateInfo->pCbState->pAttachments->channelWriteMask, is " + EnumeratorString((VkChannelFlagBits)pCreateInfo->pColorBlendState->pAttachments->channelWriteMask);
         log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
->>>>>>> fd61c93... Bug 14224: Remove abbreviations on some API symbols
         return false;
     }
     if(!ValidateEnumerator((VkPipelineCreateFlagBits)pCreateInfo->flags))
     {
         std::string reason = "vkCreateGraphicsPipeline parameter, VkPipelineCreateFlags pCreateInfo->flags, is " + EnumeratorString((VkPipelineCreateFlagBits)pCreateInfo->flags);
-<<<<<<< HEAD
-        log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
-        return false;
-    }
-    if(pCreateInfo->layout.handle == 0)
-=======
         log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
         return false;
     }
@@ -4865,27 +4842,11 @@
     return true;
 }
 
-VK_LAYER_EXPORT VkResult VKAPI vkCreateGraphicsPipeline(
-    VkDevice device,
-    const VkGraphicsPipelineCreateInfo* pCreateInfo,
-    VkPipeline* pPipeline)
-{
-    PreCreateGraphicsPipeline(device, pCreateInfo);
-
-    VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateGraphicsPipeline(device, pCreateInfo, pPipeline);
-
-    PostCreateGraphicsPipeline(device, pPipeline, result);
-
-    return result;
-}
-
 bool PostDestroyPipeline(
     VkDevice device,
     VkPipeline pipeline,
     VkResult result)
 {
-
-
     if(result != VK_SUCCESS)
     {
         std::string reason = "vkDestroyPipeline parameter, VkResult result, is " + EnumeratorString(result);
@@ -4896,17 +4857,6 @@
     return true;
 }
 
-VK_LAYER_EXPORT VkResult VKAPI vkDestroyPipeline(
-    VkDevice device,
-    VkPipeline pipeline)
-{
-    VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyPipeline(device, pipeline);
-
-    PostDestroyPipeline(device, pipeline, result);
-
-    return result;
-}
-
 bool PreCreateGraphicsPipelineDerivative(
     VkDevice device,
     const VkGraphicsPipelineCreateInfo* pCreateInfo)
@@ -5135,13 +5085,6 @@
         "vkCreateGraphicsPipelineDerivative parameter, VkStructureType pCreateInfo->pDsState->sType, is unrecognized enumerator");
         return false;
     }
-    if(pCreateInfo->pDepthStencilState->format < VK_FORMAT_BEGIN_RANGE ||
-        pCreateInfo->pDepthStencilState->format > VK_FORMAT_END_RANGE)
-    {
-        log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
-        "vkCreateGraphicsPipelineDerivative parameter, VkFormat pCreateInfo->pDsState->format, is unrecognized enumerator");
-        return false;
-    }
     if(pCreateInfo->pDepthStencilState->depthCompareOp < VK_COMPARE_OP_BEGIN_RANGE ||
         pCreateInfo->pDepthStencilState->depthCompareOp > VK_COMPARE_OP_END_RANGE)
     {
@@ -5321,21 +5264,6 @@
     return true;
 }
 
-VK_LAYER_EXPORT VkResult VKAPI vkCreateGraphicsPipelineDerivative(
-    VkDevice device,
-    const VkGraphicsPipelineCreateInfo* pCreateInfo,
-    VkPipeline basePipeline,
-    VkPipeline* pPipeline)
-{
-    PreCreateGraphicsPipelineDerivative(device, pCreateInfo);
-
-    VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateGraphicsPipelineDerivative(device, pCreateInfo, basePipeline, pPipeline);
-
-    PostCreateGraphicsPipelineDerivative(device, basePipeline, pPipeline, result);
-
-    return result;
-}
-
 bool PreCreateComputePipeline(
     VkDevice device,
     const VkComputePipelineCreateInfo* pCreateInfo)
@@ -5409,7 +5337,6 @@
     }
 
     if(result != VK_SUCCESS)
->>>>>>> fd61c93... Bug 14224: Remove abbreviations on some API symbols
     {
         log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
         "vkCreateGraphicsPipeline parameter, VkPipelineLayout pCreateInfo->layout, is null pointer");
@@ -5419,21 +5346,6 @@
     return true;
 }
 
-bool PostDestroyPipeline(
-    VkDevice device,
-    VkPipeline pipeline,
-    VkResult result)
-{
-    if(result != VK_SUCCESS)
-    {
-        std::string reason = "vkDestroyPipeline parameter, VkResult result, is " + EnumeratorString(result);
-        log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
-        return false;
-    }
-
-    return true;
-}
-
 VK_LAYER_EXPORT VkResult VKAPI vkDestroyPipeline(
     VkDevice device,
     VkPipeline pipeline)
@@ -5445,29 +5357,6 @@
     return result;
 }
 
-bool PostCreateGraphicsPipeline(
-    VkDevice device,
-    VkPipeline* pPipeline,
-    VkResult result)
-{
-
-    if(pPipeline == nullptr)
-    {
-        log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
-        "vkCreateGraphicsPipeline parameter, VkPipeline* pPipeline, is null pointer");
-        return false;
-    }
-
-    if(result != VK_SUCCESS)
-    {
-        std::string reason = "vkCreateGraphicsPipeline parameter, VkResult result, is " + EnumeratorString(result);
-        log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
-        return false;
-    }
-
-    return true;
-}
-
 //TODO handle count > 1
 void PostCreateGraphicsPipeline(
     VkDevice device,
@@ -6854,9 +6743,10 @@
 }
 
 VK_LAYER_EXPORT VkResult VKAPI vkResetCommandBuffer(
-    VkCmdBuffer cmdBuffer)
+    VkCmdBuffer cmdBuffer,
+    VkCmdBufferResetFlags flags)
 {
-    VkResult result = get_dispatch_table(pc_device_table_map, cmdBuffer)->ResetCommandBuffer(cmdBuffer);
+    VkResult result = get_dispatch_table(pc_device_table_map, cmdBuffer)->ResetCommandBuffer(cmdBuffer, flags);
 
     PostResetCommandBuffer(cmdBuffer, result);
 
diff --git a/tests/blit_tests.cpp b/tests/blit_tests.cpp
index d7d0762..e169574 100644
--- a/tests/blit_tests.cpp
+++ b/tests/blit_tests.cpp
@@ -517,7 +517,8 @@
     VkCmdBlitTest() :
         dev_(environment->default_device()),
         queue_(*dev_.graphics_queues()[0]),
-        cmd_(dev_, vk_testing::CmdBuffer::create_info(dev_.graphics_queue_node_index_))
+        pool_(dev_, vk_testing::CmdPool::create_info(dev_.graphics_queue_node_index_)),
+        cmd_(dev_, vk_testing::CmdBuffer::create_info(pool_.handle()))
     {
         // make sure every test uses a different pattern
         vk_testing::ImageChecker::hash_salt_generate();
@@ -533,6 +534,7 @@
 
     vk_testing::Device &dev_;
     vk_testing::Queue &queue_;
+    vk_testing::CmdPool pool_;
     vk_testing::CmdBuffer cmd_;
 
     std::vector<VkDeviceMemory> mem_refs_;
diff --git a/tests/vktestbinding.cpp b/tests/vktestbinding.cpp
index 7d62c77..39662da 100644
--- a/tests/vktestbinding.cpp
+++ b/tests/vktestbinding.cpp
@@ -823,6 +823,14 @@
     NON_DISPATCHABLE_HANDLE_INIT(vkCreateDynamicDepthStencilState, dev, &info);
 }
 
+NON_DISPATCHABLE_HANDLE_DTOR(CmdPool, vkDestroyCommandPool)
+
+void CmdPool::init(const Device &dev, const VkCmdPoolCreateInfo &info)
+{
+    NON_DISPATCHABLE_HANDLE_INIT(vkCreateCommandPool, dev, &info);
+}
+
+
 CmdBuffer::~CmdBuffer()
 {
     if (initialized())
diff --git a/tests/vktestbinding.h b/tests/vktestbinding.h
index 82340d6..67c592a 100644
--- a/tests/vktestbinding.h
+++ b/tests/vktestbinding.h
@@ -60,6 +60,7 @@
 class DynamicColorBlendState;
 class DynamicDepthStencilState;
 class CmdBuffer;
+class CmdPool;
 
 std::vector<VkLayerProperties> GetGlobalLayers();
 std::vector<VkExtensionProperties> GetGlobalExtensions();
@@ -577,6 +578,27 @@
     void init(const Device &dev, const VkDynamicDepthStencilStateCreateInfo &info);
 };
 
+class CmdPool : public internal::NonDispHandle<VkCmdPool> {
+public:
+    ~CmdPool();
+
+    explicit CmdPool() : NonDispHandle() {}
+    explicit CmdPool(const Device &dev, const VkCmdPoolCreateInfo &info) { init(dev, info); }
+
+    // vkCreateDynamicDepthStencilState()
+    void init(const Device &dev, const VkCmdPoolCreateInfo &info);
+
+    static VkCmdPoolCreateInfo create_info(uint32_t queue_family_index);
+};
+
+inline VkCmdPoolCreateInfo CmdPool::create_info(uint32_t queue_family_index)
+{
+    VkCmdPoolCreateInfo info = {};
+    info.sType = VK_STRUCTURE_TYPE_CMD_BUFFER_CREATE_INFO;
+    info.queueFamilyIndex = queue_family_index;
+    return info;
+}
+
 class CmdBuffer : public internal::Handle<VkCmdBuffer> {
 public:
     ~CmdBuffer();
@@ -597,7 +619,7 @@
     void reset(VkCmdBufferResetFlags flags);
     void reset() { reset(VK_CMD_BUFFER_RESET_RELEASE_RESOURCES); }
 
-    static VkCmdBufferCreateInfo create_info(VkCmdPool pool);
+    static VkCmdBufferCreateInfo create_info(VkCmdPool const &pool);
 
 private:
     VkDevice dev_handle_;
@@ -804,7 +826,7 @@
     return copy;
 }
 
-inline VkCmdBufferCreateInfo CmdBuffer::create_info(VkCmdPool pool)
+inline VkCmdBufferCreateInfo CmdBuffer::create_info(VkCmdPool const &pool)
 {
     VkCmdBufferCreateInfo info = {};
     info.sType = VK_STRUCTURE_TYPE_CMD_BUFFER_CREATE_INFO;
