diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,12 +1,19 @@
 # Changelog
 
+## [0.2.1.0] - 2022-06-19
+
+### Changed
+* When combining alternative enum schemas, combine the enum values into one enum if they have the same type. (#17)
+* Set default value on the property level instead of object level to fix generation of invalid schemas caused by the default value not matching the type of the object schema
+* The generated schema for Maps and HashMaps now has a `type`` of `"object"` as well as `additionalProperties`
+
 ## [0.2.0.0] - 2022-04-05
 
 ### Changed
 * Fixed an issue where, when using `named` and mutually recursive types, not all schemas would be declared when the top level type was declared with `declareSchemaRef` from openapi3 (#16)
 * Fixed an issue where using `named` would declare a named schema, but would return an un-named schema, sometimes leading to duplicate schema definitions (#16)
 * `declareSpecificNamedSchemaRef` and `declareSpecificSchemaRef` now work with any `MonadDeclare`, not just the `Declare` concrete monad (#16)
-* Added a type field when generating enum schema from `EqCodec`. This is required so that enum values are shown in `swagger-ui`.
+* Added a type field when generating enum schema from `EqCodec`. This is required so that enum values are shown in `swagger-ui`. (#15)
 
 ## [0.1.0.0] - 2021-12-23
 
diff --git a/autodocodec-openapi3.cabal b/autodocodec-openapi3.cabal
--- a/autodocodec-openapi3.cabal
+++ b/autodocodec-openapi3.cabal
@@ -1,11 +1,11 @@
 cabal-version: 1.12
 
--- This file has been generated from package.yaml by hpack version 0.34.6.
+-- This file has been generated from package.yaml by hpack version 0.34.7.
 --
 -- see: https://github.com/sol/hpack
 
 name:           autodocodec-openapi3
-version:        0.2.0.0
+version:        0.2.1.0
 synopsis:       Autodocodec interpreters for openapi3
 homepage:       https://github.com/NorfairKing/autodocodec#readme
 bug-reports:    https://github.com/NorfairKing/autodocodec/issues
diff --git a/src/Autodocodec/OpenAPI/Schema.hs b/src/Autodocodec/OpenAPI/Schema.hs
--- a/src/Autodocodec/OpenAPI/Schema.hs
+++ b/src/Autodocodec/OpenAPI/Schema.hs
@@ -11,7 +11,7 @@
 module Autodocodec.OpenAPI.Schema where
 
 import Autodocodec
-import Control.Lens (Lens', (&), (?~), (^.))
+import Control.Lens (Lens', (&), (.~), (?~), (^.))
 import Control.Monad
 import Control.Monad.State.Lazy (StateT, evalStateT, runStateT)
 import qualified Control.Monad.State.Lazy as State
@@ -67,7 +67,8 @@
         pure $
           NamedSchema Nothing $
             mempty
-              { _schemaAdditionalProperties = Just $ AdditionalPropertiesSchema $ _namedSchemaSchema <$> itemsSchemaRef
+              { _schemaType = Just OpenApiObject,
+                _schemaAdditionalProperties = Just $ AdditionalPropertiesSchema $ _namedSchemaSchema <$> itemsSchemaRef
               }
       MapCodec c -> do
         itemsSchema <- go c
@@ -75,7 +76,8 @@
         pure $
           NamedSchema Nothing $
             mempty
-              { _schemaAdditionalProperties = Just $ AdditionalPropertiesSchema $ _namedSchemaSchema <$> itemsSchemaRef
+              { _schemaType = Just OpenApiObject,
+                _schemaAdditionalProperties = Just $ AdditionalPropertiesSchema $ _namedSchemaSchema <$> itemsSchemaRef
               }
       ValueCodec ->
         pure $
@@ -163,10 +165,10 @@
       OptionalKeyWithDefaultCodec key vs defaultValue mDoc -> do
         ns <- go vs
         ref <- declareSpecificNamedSchemaRef ns
+        let addDefaultToSchema propertySchema = propertySchema {_schemaDefault = Just $ toJSONVia vs defaultValue}
         pure
           [ mempty
-              { _schemaProperties = [(key, addMDoc mDoc . _namedSchemaSchema <$> ref)],
-                _schemaDefault = Just $ toJSONVia vs defaultValue,
+              { _schemaProperties = [(key, addDefaultToSchema . addMDoc mDoc . _namedSchemaSchema <$> ref)],
                 _schemaType = Just OpenApiObject
               }
           ]
@@ -217,11 +219,19 @@
                   DisjointUnion -> Nothing
               }
       pure $
-        NamedSchema Nothing $ case (s1 ^. orLens, s2 ^. orLens) of
-          (Just s1s, Just s2s) -> prototype & orLens ?~ (s1s ++ s2s)
-          (Just s1s, Nothing) -> prototype & orLens ?~ (s1s ++ [s2Ref])
-          (Nothing, Just s2s) -> prototype & orLens ?~ (s1Ref : s2s)
-          (Nothing, Nothing) -> prototype & orLens ?~ [s1Ref, s2Ref]
+        NamedSchema Nothing $ case (s1 ^. enum_, s2 ^. enum_) of
+          -- If both schemas are enums with the same type then combine their values
+          (Just s1enums, Just s2enums)
+            | s1 ^. type_ == s2 ^. type_ ->
+                prototype
+                  & enum_ ?~ (s1enums ++ s2enums)
+                  & type_ .~ s1 ^. type_
+          _ ->
+            case (s1 ^. orLens, s2 ^. orLens) of
+              (Just s1s, Just s2s) -> prototype & orLens ?~ (s1s ++ s2s)
+              (Just s1s, Nothing) -> prototype & orLens ?~ (s1s ++ [s2Ref])
+              (Nothing, Just s2s) -> prototype & orLens ?~ (s1Ref : s2s)
+              (Nothing, Nothing) -> prototype & orLens ?~ [s1Ref, s2Ref]
 
 declareSpecificNamedSchemaRef :: MonadDeclare (Definitions Schema) m => OpenAPI.NamedSchema -> m (Referenced NamedSchema)
 declareSpecificNamedSchemaRef namedSchema =
