diff --git a/layers/core_validation.h b/layers/core_validation.h
index f0878f3..1d312e1 100644
--- a/layers/core_validation.h
+++ b/layers/core_validation.h
@@ -110,20 +110,20 @@
 };
 #endif
 
-typedef struct _SHADER_DS_MAPPING {
+struct SHADER_DS_MAPPING {
     uint32_t slotCount;
     VkDescriptorSetLayoutCreateInfo *pShaderMappingSlot;
-} SHADER_DS_MAPPING;
+};
 
-typedef struct _GENERIC_HEADER {
+struct GENERIC_HEADER {
     VkStructureType sType;
     const void *pNext;
-} GENERIC_HEADER;
+};
 
-typedef struct _IMAGE_LAYOUT_NODE {
+struct IMAGE_LAYOUT_NODE {
     VkImageLayout layout;
     VkFormat format;
-} IMAGE_LAYOUT_NODE;
+};
 
 // Store layouts and pushconstants for PipelineLayout
 struct PIPELINE_LAYOUT_NODE {
@@ -263,7 +263,7 @@
     std::vector<MT_FB_ATTACHMENT_INFO> attachments;
 };
 
-typedef struct _DESCRIPTOR_POOL_NODE {
+struct DESCRIPTOR_POOL_NODE {
     VkDescriptorPool pool;
     uint32_t maxSets;                              // Max descriptor sets allowed in this pool
     uint32_t availableSets;                        // Available descriptor sets in this pool
@@ -273,7 +273,7 @@
     std::vector<uint32_t> maxDescriptorTypeCount;       // Max # of descriptors of each type in this pool
     std::vector<uint32_t> availableDescriptorTypeCount; // Available # of descriptors of each type in this pool
 
-    _DESCRIPTOR_POOL_NODE(const VkDescriptorPool pool, const VkDescriptorPoolCreateInfo *pCreateInfo)
+    DESCRIPTOR_POOL_NODE(const VkDescriptorPool pool, const VkDescriptorPoolCreateInfo *pCreateInfo)
         : pool(pool), maxSets(pCreateInfo->maxSets), availableSets(pCreateInfo->maxSets), createInfo(*pCreateInfo),
           maxDescriptorTypeCount(VK_DESCRIPTOR_TYPE_RANGE_SIZE, 0), availableDescriptorTypeCount(VK_DESCRIPTOR_TYPE_RANGE_SIZE, 0) {
         if (createInfo.poolSizeCount) { // Shadow type struct from ptr into local struct
@@ -292,12 +292,12 @@
             createInfo.pPoolSizes = NULL; // Make sure this is NULL so we don't try to clean it up
         }
     }
-    ~_DESCRIPTOR_POOL_NODE() {
+    ~DESCRIPTOR_POOL_NODE() {
         delete[] createInfo.pPoolSizes;
         // TODO : pSets are currently freed in deletePools function which uses freeShadowUpdateTree function
         //  need to migrate that struct to smart ptrs for auto-cleanup
     }
-} DESCRIPTOR_POOL_NODE;
+};
 
 typedef struct stencil_data {
     uint32_t compareMask;
diff --git a/layers/core_validation_error_enums.h b/layers/core_validation_error_enums.h
index 03827c2..e6d0ed3 100644
--- a/layers/core_validation_error_enums.h
+++ b/layers/core_validation_error_enums.h
@@ -24,7 +24,7 @@
 #define CORE_VALIDATION_ERROR_ENUMS_H_
 
 // Mem Tracker ERROR codes
-typedef enum _MEM_TRACK_ERROR {
+enum MEM_TRACK_ERROR {
     MEMTRACK_NONE,                         // Used for INFO & other non-error messages
     MEMTRACK_INVALID_CB,                   // Cmd Buffer invalid
     MEMTRACK_INVALID_MEM_OBJ,              // Invalid Memory Object
@@ -39,10 +39,10 @@
     MEMTRACK_REBIND_OBJECT,                // Non-sparse object bindings are immutable
     MEMTRACK_INVALID_USAGE_FLAG,           // Usage flags specified at image/buffer create conflict w/ use of object
     MEMTRACK_INVALID_MAP,                  // Size flag specified at alloc is too small for mapping range
-} MEM_TRACK_ERROR;
+};
 
 // Draw State ERROR codes
-typedef enum _DRAW_STATE_ERROR {
+enum DRAW_STATE_ERROR {
     // TODO: Remove the comments here or expand them. There isn't any additional information in the
     // comments than in the name in almost all cases.
     DRAWSTATE_NONE,                          // Used for INFO & other non-error messages
@@ -214,9 +214,9 @@
     DRAWSTATE_INVALID_QUEUE_INDEX,           // Specified queue index exceeds number
                                              // of queried queue families
     DRAWSTATE_PUSH_CONSTANTS_ERROR,          // Push constants exceed maxPushConstantSize
-} DRAW_STATE_ERROR;
+};
 
-typedef enum _SHADER_CHECKER_ERROR {
+enum SHADER_CHECKER_ERROR {
     SHADER_CHECKER_NONE,
     SHADER_CHECKER_INTERFACE_TYPE_MISMATCH,    // Type mismatch between shader stages or shader and pipeline
     SHADER_CHECKER_OUTPUT_NOT_CONSUMED,        // Entry appears in output interface, but missing in input
@@ -234,6 +234,6 @@
     SHADER_CHECKER_DESCRIPTOR_NOT_ACCESSIBLE_FROM_STAGE,    // Descriptor used by shader, but not accessible from stage
     SHADER_CHECKER_FEATURE_NOT_ENABLED,                     // Shader uses capability requiring a feature not enabled on device
     SHADER_CHECKER_BAD_CAPABILITY,                          // Shader uses capability not supported by Vulkan (OpenCL features)
-} SHADER_CHECKER_ERROR;
+};
 
-#endif // CORE_VALIDATION_ERROR_ENUMS_H_
\ No newline at end of file
+#endif // CORE_VALIDATION_ERROR_ENUMS_H_
diff --git a/layers/core_validation_types.h b/layers/core_validation_types.h
index 98fa5a8..5d9f071 100644
--- a/layers/core_validation_types.h
+++ b/layers/core_validation_types.h
@@ -72,12 +72,12 @@
     BUFFER_NODE(const BUFFER_NODE &rh_obj) : mem(rh_obj.mem), createInfo(rh_obj.createInfo) { in_use.store(rh_obj.in_use.load()); };
 };
 
-typedef struct _SAMPLER_NODE {
+struct SAMPLER_NODE {
     VkSampler sampler;
     VkSamplerCreateInfo createInfo;
 
-    _SAMPLER_NODE(const VkSampler *ps, const VkSamplerCreateInfo *pci) : sampler(*ps), createInfo(*pci){};
-} SAMPLER_NODE;
+    SAMPLER_NODE(const VkSampler *ps, const VkSamplerCreateInfo *pci) : sampler(*ps), createInfo(*pci){};
+};
 
 class IMAGE_NODE : public BASE_NODE {
   public:
@@ -154,7 +154,8 @@
     }
     ~SWAPCHAIN_NODE() { delete[] pQueueFamilyIndices; }
 };
-typedef enum _DRAW_TYPE {
+
+enum DRAW_TYPE {
     DRAW = 0,
     DRAW_INDEXED = 1,
     DRAW_INDIRECT = 2,
@@ -162,7 +163,7 @@
     DRAW_BEGIN_RANGE = DRAW,
     DRAW_END_RANGE = DRAW_INDEXED_INDIRECT,
     NUM_DRAW_TYPES = (DRAW_END_RANGE - DRAW_BEGIN_RANGE + 1),
-} DRAW_TYPE;
+};
 
 class IMAGE_CMD_BUF_LAYOUT_NODE {
   public:
@@ -222,8 +223,9 @@
         }
     }
 };
+
 // Cmd Buffer Tracking
-typedef enum _CMD_TYPE {
+enum CMD_TYPE {
     CMD_BINDPIPELINE,
     CMD_BINDPIPELINEDELTA,
     CMD_SETVIEWPORTSTATE,
@@ -274,23 +276,24 @@
     CMD_ENDRENDERPASS,
     CMD_EXECUTECOMMANDS,
     CMD_END, // Should be last command in any RECORDED cmd buffer
-} CMD_TYPE;
+};
+
 // Data structure for holding sequence of cmds in cmd buffer
-typedef struct _CMD_NODE {
+struct CMD_NODE {
     CMD_TYPE type;
     uint64_t cmdNumber;
-} CMD_NODE;
+};
 
-typedef enum _CB_STATE {
+enum CB_STATE {
     CB_NEW,       // Newly created CB w/o any cmds
     CB_RECORDING, // BeginCB has been called on this CB
     CB_RECORDED,  // EndCB has been called on this CB
     CB_INVALID    // CB had a bound descriptor set destroyed or updated
-} CB_STATE;
+};
 
 // CB Status -- used to track status of various bindings on cmd buffer objects
 typedef VkFlags CBStatusFlags;
-typedef enum _CBStatusFlagBits {
+enum CBStatusFlagBits {
     // clang-format off
     CBSTATUS_NONE                   = 0x00000000,   // No status is set
     CBSTATUS_VIEWPORT_SET           = 0x00000001,   // Viewport has been set
@@ -305,7 +308,7 @@
     CBSTATUS_SCISSOR_SET            = 0x00000200,   // Scissor has been set
     CBSTATUS_ALL                    = 0x000003FF,   // All dynamic state set
     // clang-format on
-} CBStatusFlagBits;
+};
 
 struct QueryObject {
     VkQueryPool pool;
@@ -323,7 +326,7 @@
     }
 };
 }
-typedef struct _DRAW_DATA { std::vector<VkBuffer> buffers; } DRAW_DATA;
+struct DRAW_DATA { std::vector<VkBuffer> buffers; };
 
 struct ImageSubresourcePair {
     VkImage image;
@@ -439,4 +442,4 @@
     ~GLOBAL_CB_NODE();
 };
 
-#endif // CORE_VALIDATION_TYPES_H_
\ No newline at end of file
+#endif // CORE_VALIDATION_TYPES_H_
diff --git a/layers/descriptor_sets.h b/layers/descriptor_sets.h
index 58e3b5c..bf8e29d 100644
--- a/layers/descriptor_sets.h
+++ b/layers/descriptor_sets.h
@@ -141,7 +141,7 @@
  */
 
 // Slightly broader than type, each c++ "class" will has a corresponding "DescriptorClass"
-typedef enum _DescriptorClass { PlainSampler, ImageSampler, Image, TexelBuffer, GeneralBuffer } DescriptorClass;
+enum DescriptorClass { PlainSampler, ImageSampler, Image, TexelBuffer, GeneralBuffer };
 
 class Descriptor {
   public:
