diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,10 @@
+2.0.2
+---
+
+* Fixes:
+  * Fix `additionalProperties` to allow references;
+  * Fix `ToSchema` instances for `Map` and `HashMap` (prevent infinite recursion for recursive values).
+
 2.0.1
 ---
 
diff --git a/src/Data/Swagger/Internal.hs b/src/Data/Swagger/Internal.hs
--- a/src/Data/Swagger/Internal.hs
+++ b/src/Data/Swagger/Internal.hs
@@ -483,7 +483,7 @@
 
   , _schemaAllOf :: Maybe [Schema]
   , _schemaProperties :: HashMap Text (Referenced Schema)
-  , _schemaAdditionalProperties :: Maybe Schema
+  , _schemaAdditionalProperties :: Maybe (Referenced Schema)
 
   , _schemaDiscriminator :: Maybe Text
   , _schemaReadOnly :: Maybe Bool
@@ -1088,13 +1088,12 @@
   parseJSON _ = empty
 
 instance FromJSON Host where
-  parseJSON (String s) =
-    case fromInteger <$> readMaybe portStr of
-      Nothing | not (null portStr) -> fail $ "Invalid port `" ++ portStr ++ "'"
-      mport -> pure $ Host host mport
-    where
-      (hostText, portText) = Text.breakOn ":" s
-      [host, portStr] = map Text.unpack [hostText, portText]
+  parseJSON (String s) = case map Text.unpack $ Text.split (== ':') s of
+    [host] -> return $ Host host Nothing
+    [host, port] -> case readMaybe port of
+      Nothing -> fail $ "Invalid port `" ++ port ++ "'"
+      Just p -> return $ Host host (Just (fromInteger p))
+    _ -> fail $ "Invalid host `" ++ Text.unpack s ++ "'"
   parseJSON _ = empty
 
 instance FromJSON MimeList where
diff --git a/src/Data/Swagger/Internal/Schema.hs b/src/Data/Swagger/Internal/Schema.hs
--- a/src/Data/Swagger/Internal/Schema.hs
+++ b/src/Data/Swagger/Internal/Schema.hs
@@ -471,7 +471,7 @@
 
 instance ToSchema a => ToSchema (Map String a) where
   declareNamedSchema _ = do
-    schema <- declareSchema (Proxy :: Proxy a)
+    schema <- declareSchemaRef (Proxy :: Proxy a)
     return $ unnamed $ mempty
       & type_ .~ SwaggerObject
       & additionalProperties ?~ schema
diff --git a/src/Data/Swagger/Internal/Schema/Validation.hs b/src/Data/Swagger/Internal/Schema/Validation.hs
--- a/src/Data/Swagger/Internal/Schema/Validation.hs
+++ b/src/Data/Swagger/Internal/Schema/Validation.hs
@@ -291,7 +291,7 @@
           Null | not (k `elem` (schema ^. required)) -> valid  -- null is fine for non-required property
           _ ->
             case HashMap.lookup k (schema ^. properties) of
-              Nothing -> check additionalProperties $ \s -> sub s $ validateWithSchema v
+              Nothing -> check additionalProperties $ \s -> validateWithSchemaRef s v
               Just s  -> validateWithSchemaRef s v
 
 validateEnum :: Value -> Validation (ParamSchema t) ()
diff --git a/swagger2.cabal b/swagger2.cabal
--- a/swagger2.cabal
+++ b/swagger2.cabal
@@ -1,5 +1,5 @@
 name:                swagger2
-version:             2.0.1
+version:             2.0.2
 synopsis:            Swagger 2.0 data model
 description:         Please see README.md
 homepage:            https://github.com/GetShopTV/swagger2
diff --git a/test/Data/SwaggerSpec.hs b/test/Data/SwaggerSpec.hs
--- a/test/Data/SwaggerSpec.hs
+++ b/test/Data/SwaggerSpec.hs
@@ -21,6 +21,14 @@
 
 spec :: Spec
 spec = do
+  describe "host" $ do
+    it "can decode the host port" $ do
+      let h = Just $ Host "localhost" (Just (fromInteger 8000))
+          swagger :: Swagger
+          swagger = swaggerExample
+            & host .~ h
+          parsed :: Swagger = either error id $ eitherDecode' $ encode swagger
+      parsed ^. host `shouldBe` h
   describe "License Object" $ licenseExample <=> licenseExampleJSON
   describe "Contact Object" $ contactExample <=> contactExampleJSON
   describe "Info Object" $ infoExample <=> infoExampleJSON
@@ -263,7 +271,7 @@
 schemaModelDictExample :: Schema
 schemaModelDictExample = mempty
   & type_ .~ SwaggerObject
-  & additionalProperties ?~ (mempty & type_ .~ SwaggerString)
+  & additionalProperties ?~ Inline (mempty & type_ .~ SwaggerString)
 
 schemaModelDictExampleJSON :: Value
 schemaModelDictExampleJSON = [aesonQQ|
@@ -493,7 +501,7 @@
                     "created": 100,
                     "description": "get milk"
                   } |]
-              & description ?~ "This is some real Todo right here" 
+              & description ?~ "This is some real Todo right here"
               & properties .~
                   [ ("created", Inline $ mempty
                       & type_  .~ SwaggerInteger
@@ -575,130 +583,130 @@
 
 petstoreExampleJSON :: Value
 petstoreExampleJSON = [aesonQQ|
-{  
+{
    "swagger":"2.0",
-   "info":{  
+   "info":{
       "description":"This is a sample server Petstore server.  You can find out more about Swagger at [http://swagger.io](http://swagger.io) or on [irc.freenode.net, #swagger](http://swagger.io/irc/).  For this sample, you can use the api key `special-key` to test the authorization filters.",
       "version":"1.0.0",
       "title":"Swagger Petstore",
       "termsOfService":"http://swagger.io/terms/",
-      "contact":{  
+      "contact":{
          "email":"apiteam@swagger.io"
       },
-      "license":{  
+      "license":{
          "name":"Apache 2.0",
          "url":"http://www.apache.org/licenses/LICENSE-2.0.html"
       }
    },
    "host":"petstore.swagger.io",
    "basePath":"/v2",
-   "tags":[  
-      {  
+   "tags":[
+      {
          "name":"pet",
          "description":"Everything about your Pets",
-         "externalDocs":{  
+         "externalDocs":{
             "description":"Find out more",
             "url":"http://swagger.io"
          }
       },
-      {  
+      {
          "name":"store",
          "description":"Access to Petstore orders"
       },
-      {  
+      {
          "name":"user",
          "description":"Operations about user",
-         "externalDocs":{  
+         "externalDocs":{
             "description":"Find out more about our store",
             "url":"http://swagger.io"
          }
       }
    ],
-   "schemes":[  
+   "schemes":[
       "http"
    ],
-   "paths":{  
-      "/pet":{  
-         "post":{  
-            "tags":[  
+   "paths":{
+      "/pet":{
+         "post":{
+            "tags":[
                "pet"
             ],
             "summary":"Add a new pet to the store",
             "description":"",
             "operationId":"addPet",
-            "consumes":[  
+            "consumes":[
                "application/json",
                "application/xml"
             ],
-            "produces":[  
+            "produces":[
                "application/xml",
                "application/json"
             ],
-            "parameters":[  
-               {  
+            "parameters":[
+               {
                   "in":"body",
                   "name":"body",
                   "description":"Pet object that needs to be added to the store",
                   "required":true,
-                  "schema":{  
+                  "schema":{
                      "$ref":"#/definitions/Pet"
                   }
                }
             ],
-            "responses":{  
-               "405":{  
+            "responses":{
+               "405":{
                   "description":"Invalid input"
                }
             },
-            "security":[  
-               {  
-                  "petstore_auth":[  
+            "security":[
+               {
+                  "petstore_auth":[
                      "write:pets",
                      "read:pets"
                   ]
                }
             ]
          },
-         "put":{  
-            "tags":[  
+         "put":{
+            "tags":[
                "pet"
             ],
             "summary":"Update an existing pet",
             "description":"",
             "operationId":"updatePet",
-            "consumes":[  
+            "consumes":[
                "application/json",
                "application/xml"
             ],
-            "produces":[  
+            "produces":[
                "application/xml",
                "application/json"
             ],
-            "parameters":[  
-               {  
+            "parameters":[
+               {
                   "in":"body",
                   "name":"body",
                   "description":"Pet object that needs to be added to the store",
                   "required":true,
-                  "schema":{  
+                  "schema":{
                      "$ref":"#/definitions/Pet"
                   }
                }
             ],
-            "responses":{  
-               "400":{  
+            "responses":{
+               "400":{
                   "description":"Invalid ID supplied"
                },
-               "404":{  
+               "404":{
                   "description":"Pet not found"
                },
-               "405":{  
+               "405":{
                   "description":"Validation exception"
                }
             },
-            "security":[  
-               {  
-                  "petstore_auth":[  
+            "security":[
+               {
+                  "petstore_auth":[
                      "write:pets",
                      "read:pets"
                   ]
@@ -706,28 +714,28 @@
             ]
          }
       },
-      "/pet/findByStatus":{  
-         "get":{  
-            "tags":[  
+      "/pet/findByStatus":{
+         "get":{
+            "tags":[
                "pet"
             ],
             "summary":"Finds Pets by status",
             "description":"Multiple status values can be provided with comma seperated strings",
             "operationId":"findPetsByStatus",
-            "produces":[  
+            "produces":[
                "application/xml",
                "application/json"
             ],
-            "parameters":[  
-               {  
+            "parameters":[
+               {
                   "name":"status",
                   "in":"query",
                   "description":"Status values that need to be considered for filter",
                   "required":true,
                   "type":"array",
-                  "items":{  
+                  "items":{
                      "type":"string",
-                     "enum":[  
+                     "enum":[
                         "available",
                         "pending",
                         "sold"
@@ -737,23 +745,23 @@
                   "collectionFormat":"csv"
                }
             ],
-            "responses":{  
-               "200":{  
+            "responses":{
+               "200":{
                   "description":"successful operation",
-                  "schema":{  
+                  "schema":{
                      "type":"array",
-                     "items":{  
+                     "items":{
                         "$ref":"#/definitions/Pet"
                      }
                   }
                },
-               "400":{  
+               "400":{
                   "description":"Invalid status value"
                }
             },
-            "security":[  
-               {  
-                  "petstore_auth":[  
+            "security":[
+               {
+                  "petstore_auth":[
                      "write:pets",
                      "read:pets"
                   ]
@@ -761,48 +769,48 @@
             ]
          }
       },
-      "/pet/findByTags":{  
-         "get":{  
-            "tags":[  
+      "/pet/findByTags":{
+         "get":{
+            "tags":[
                "pet"
             ],
             "summary":"Finds Pets by tags",
             "description":"Muliple tags can be provided with comma seperated strings. Use tag1, tag2, tag3 for testing.",
             "operationId":"findPetsByTags",
-            "produces":[  
+            "produces":[
                "application/xml",
                "application/json"
             ],
-            "parameters":[  
-               {  
+            "parameters":[
+               {
                   "name":"tags",
                   "in":"query",
                   "description":"Tags to filter by",
                   "required":true,
                   "type":"array",
-                  "items":{  
+                  "items":{
                      "type":"string"
                   },
                   "collectionFormat":"csv"
                }
             ],
-            "responses":{  
-               "200":{  
+            "responses":{
+               "200":{
                   "description":"successful operation",
-                  "schema":{  
+                  "schema":{
                      "type":"array",
-                     "items":{  
+                     "items":{
                         "$ref":"#/definitions/Pet"
                      }
                   }
                },
-               "400":{  
+               "400":{
                   "description":"Invalid tag value"
                }
             },
-            "security":[  
-               {  
-                  "petstore_auth":[  
+            "security":[
+               {
+                  "petstore_auth":[
                      "write:pets",
                      "read:pets"
                   ]
@@ -810,20 +818,20 @@
             ]
          }
       },
-      "/pet/{petId}":{  
-         "get":{  
-            "tags":[  
+      "/pet/{petId}":{
+         "get":{
+            "tags":[
                "pet"
             ],
             "summary":"Find pet by ID",
             "description":"Returns a single pet",
             "operationId":"getPetById",
-            "produces":[  
+            "produces":[
                "application/xml",
                "application/json"
             ],
-            "parameters":[  
-               {  
+            "parameters":[
+               {
                   "name":"petId",
                   "in":"path",
                   "description":"ID of pet to return",
@@ -832,42 +840,42 @@
                   "format":"int64"
                }
             ],
-            "responses":{  
-               "200":{  
+            "responses":{
+               "200":{
                   "description":"successful operation",
-                  "schema":{  
+                  "schema":{
                      "$ref":"#/definitions/Pet"
                   }
                },
-               "400":{  
+               "400":{
                   "description":"Invalid ID supplied"
                },
-               "404":{  
+               "404":{
                   "description":"Pet not found"
                }
             },
-            "security":[  
-               {  
+            "security":[
+               {
                   "api_key": []
                }
             ]
          },
-         "post":{  
-            "tags":[  
+         "post":{
+            "tags":[
                "pet"
             ],
             "summary":"Updates a pet in the store with form data",
             "description":"",
             "operationId":"updatePetWithForm",
-            "consumes":[  
+            "consumes":[
                "application/x-www-form-urlencoded"
             ],
-            "produces":[  
+            "produces":[
                "application/xml",
                "application/json"
             ],
-            "parameters":[  
-               {  
+            "parameters":[
+               {
                   "name":"petId",
                   "in":"path",
                   "description":"ID of pet that needs to be updated",
@@ -875,14 +883,14 @@
                   "type":"integer",
                   "format":"int64"
                },
-               {  
+               {
                   "name":"name",
                   "in":"formData",
                   "description":"Updated name of the pet",
                   "required":false,
                   "type":"string"
                },
-               {  
+               {
                   "name":"status",
                   "in":"formData",
                   "description":"Updated status of the pet",
@@ -890,39 +898,39 @@
                   "type":"string"
                }
             ],
-            "responses":{  
-               "405":{  
+            "responses":{
+               "405":{
                   "description":"Invalid input"
                }
             },
-            "security":[  
-               {  
-                  "petstore_auth":[  
+            "security":[
+               {
+                  "petstore_auth":[
                      "write:pets",
                      "read:pets"
                   ]
                }
             ]
          },
-         "delete":{  
-            "tags":[  
+         "delete":{
+            "tags":[
                "pet"
             ],
             "summary":"Deletes a pet",
             "description":"",
             "operationId":"deletePet",
-            "produces":[  
+            "produces":[
                "application/xml",
                "application/json"
             ],
-            "parameters":[  
-               {  
+            "parameters":[
+               {
                   "name":"api_key",
                   "in":"header",
                   "required":false,
                   "type":"string"
                },
-               {  
+               {
                   "name":"petId",
                   "in":"path",
                   "description":"Pet id to delete",
@@ -931,14 +939,14 @@
                   "format":"int64"
                }
             ],
-            "responses":{  
-               "400":{  
+            "responses":{
+               "400":{
                   "description":"Invalid pet value"
                }
             },
-            "security":[  
-               {  
-                  "petstore_auth":[  
+            "security":[
+               {
+                  "petstore_auth":[
                      "write:pets",
                      "read:pets"
                   ]
@@ -946,22 +954,22 @@
             ]
          }
       },
-      "/pet/{petId}/uploadImage":{  
-         "post":{  
-            "tags":[  
+      "/pet/{petId}/uploadImage":{
+         "post":{
+            "tags":[
                "pet"
             ],
             "summary":"uploads an image",
             "description":"",
             "operationId":"uploadFile",
-            "consumes":[  
+            "consumes":[
                "multipart/form-data"
             ],
-            "produces":[  
+            "produces":[
                "application/json"
             ],
-            "parameters":[  
-               {  
+            "parameters":[
+               {
                   "name":"petId",
                   "in":"path",
                   "description":"ID of pet to update",
@@ -969,14 +977,14 @@
                   "type":"integer",
                   "format":"int64"
                },
-               {  
+               {
                   "name":"additionalMetadata",
                   "in":"formData",
                   "description":"Additional data to pass to server",
                   "required":false,
                   "type":"string"
                },
-               {  
+               {
                   "name":"file",
                   "in":"formData",
                   "description":"file to upload",
@@ -984,17 +992,17 @@
                   "type":"file"
                }
             ],
-            "responses":{  
-               "200":{  
+            "responses":{
+               "200":{
                   "description":"successful operation",
-                  "schema":{  
+                  "schema":{
                      "$ref":"#/definitions/ApiResponse"
                   }
                }
             },
-            "security":[  
-               {  
-                  "petstore_auth":[  
+            "security":[
+               {
+                  "petstore_auth":[
                      "write:pets",
                      "read:pets"
                   ]
@@ -1002,87 +1010,87 @@
             ]
          }
       },
-      "/store/inventory":{  
-         "get":{  
-            "tags":[  
+      "/store/inventory":{
+         "get":{
+            "tags":[
                "store"
             ],
             "summary":"Returns pet inventories by status",
             "description":"Returns a map of status codes to quantities",
             "operationId":"getInventory",
-            "produces":[  
+            "produces":[
                "application/json"
             ],
             "parameters": [],
-            "responses":{  
-               "200":{  
+            "responses":{
+               "200":{
                   "description":"successful operation",
-                  "schema":{  
+                  "schema":{
                      "type":"object",
-                     "additionalProperties":{  
+                     "additionalProperties":{
                         "type":"integer",
                         "format":"int32"
                      }
                   }
                }
             },
-            "security":[  
-               {  
+            "security":[
+               {
                   "api_key": []
                }
             ]
          }
       },
-      "/store/order":{  
-         "post":{  
-            "tags":[  
+      "/store/order":{
+         "post":{
+            "tags":[
                "store"
             ],
             "summary":"Place an order for a pet",
             "description":"",
             "operationId":"placeOrder",
-            "produces":[  
+            "produces":[
                "application/xml",
                "application/json"
             ],
-            "parameters":[  
-               {  
+            "parameters":[
+               {
                   "in":"body",
                   "name":"body",
                   "description":"order placed for purchasing the pet",
                   "required":true,
-                  "schema":{  
+                  "schema":{
                      "$ref":"#/definitions/Order"
                   }
                }
             ],
-            "responses":{  
-               "200":{  
+            "responses":{
+               "200":{
                   "description":"successful operation",
-                  "schema":{  
+                  "schema":{
                      "$ref":"#/definitions/Order"
                   }
                },
-               "400":{  
+               "400":{
                   "description":"Invalid Order"
                }
             }
          }
       },
-      "/store/order/{orderId}":{  
-         "get":{  
-            "tags":[  
+      "/store/order/{orderId}":{
+         "get":{
+            "tags":[
                "store"
             ],
             "summary":"Find purchase order by ID",
             "description":"For valid response try integer IDs with value <= 5 or > 10. Other values will generated exceptions",
             "operationId":"getOrderById",
-            "produces":[  
+            "produces":[
                "application/xml",
                "application/json"
             ],
-            "parameters":[  
-               {  
+            "parameters":[
+               {
                   "name":"orderId",
                   "in":"path",
                   "description":"ID of pet that needs to be fetched",
@@ -1093,34 +1101,34 @@
                   "format":"int64"
                }
             ],
-            "responses":{  
-               "200":{  
+            "responses":{
+               "200":{
                   "description":"successful operation",
-                  "schema":{  
+                  "schema":{
                      "$ref":"#/definitions/Order"
                   }
                },
-               "400":{  
+               "400":{
                   "description":"Invalid ID supplied"
                },
-               "404":{  
+               "404":{
                   "description":"Order not found"
                }
             }
          },
-         "delete":{  
-            "tags":[  
+         "delete":{
+            "tags":[
                "store"
             ],
             "summary":"Delete purchase order by ID",
             "description":"For valid response try integer IDs with value < 1000. Anything above 1000 or nonintegers will generate API errors",
             "operationId":"deleteOrder",
-            "produces":[  
+            "produces":[
                "application/xml",
                "application/json"
             ],
-            "parameters":[  
-               {  
+            "parameters":[
+               {
                   "name":"orderId",
                   "in":"path",
                   "description":"ID of the order that needs to be deleted",
@@ -1129,133 +1137,133 @@
                   "minimum":1.0
                }
             ],
-            "responses":{  
-               "400":{  
+            "responses":{
+               "400":{
                   "description":"Invalid ID supplied"
                },
-               "404":{  
+               "404":{
                   "description":"Order not found"
                }
             }
          }
       },
-      "/user":{  
-         "post":{  
-            "tags":[  
+      "/user":{
+         "post":{
+            "tags":[
                "user"
             ],
             "summary":"Create user",
             "description":"This can only be done by the logged in user.",
             "operationId":"createUser",
-            "produces":[  
+            "produces":[
                "application/xml",
                "application/json"
             ],
-            "parameters":[  
-               {  
+            "parameters":[
+               {
                   "in":"body",
                   "name":"body",
                   "description":"Created user object",
                   "required":true,
-                  "schema":{  
+                  "schema":{
                      "$ref":"#/definitions/User"
                   }
                }
             ],
-            "responses":{  
-               "default":{  
+            "responses":{
+               "default":{
                   "description":"successful operation"
                }
             }
          }
       },
-      "/user/createWithArray":{  
-         "post":{  
-            "tags":[  
+      "/user/createWithArray":{
+         "post":{
+            "tags":[
                "user"
             ],
             "summary":"Creates list of users with given input array",
             "description":"",
             "operationId":"createUsersWithArrayInput",
-            "produces":[  
+            "produces":[
                "application/xml",
                "application/json"
             ],
-            "parameters":[  
-               {  
+            "parameters":[
+               {
                   "in":"body",
                   "name":"body",
                   "description":"List of user object",
                   "required":true,
-                  "schema":{  
+                  "schema":{
                      "type":"array",
-                     "items":{  
+                     "items":{
                         "$ref":"#/definitions/User"
                      }
                   }
                }
             ],
-            "responses":{  
-               "default":{  
+            "responses":{
+               "default":{
                   "description":"successful operation"
                }
             }
          }
       },
-      "/user/createWithList":{  
-         "post":{  
-            "tags":[  
+      "/user/createWithList":{
+         "post":{
+            "tags":[
                "user"
             ],
             "summary":"Creates list of users with given input array",
             "description":"",
             "operationId":"createUsersWithListInput",
-            "produces":[  
+            "produces":[
                "application/xml",
                "application/json"
             ],
-            "parameters":[  
-               {  
+            "parameters":[
+               {
                   "in":"body",
                   "name":"body",
                   "description":"List of user object",
                   "required":true,
-                  "schema":{  
+                  "schema":{
                      "type":"array",
-                     "items":{  
+                     "items":{
                         "$ref":"#/definitions/User"
                      }
                   }
                }
             ],
-            "responses":{  
-               "default":{  
+            "responses":{
+               "default":{
                   "description":"successful operation"
                }
             }
          }
       },
-      "/user/login":{  
-         "get":{  
-            "tags":[  
+      "/user/login":{
+         "get":{
+            "tags":[
                "user"
             ],
             "summary":"Logs user into the system",
             "description":"",
             "operationId":"loginUser",
-            "produces":[  
+            "produces":[
                "application/xml",
                "application/json"
             ],
-            "parameters":[  
-               {  
+            "parameters":[
+               {
                   "name":"username",
                   "in":"query",
                   "description":"The user name for login",
                   "required":true,
                   "type":"string"
                },
-               {  
+               {
                   "name":"password",
                   "in":"query",
                   "description":"The password for login in clear text",
@@ -1263,65 +1271,65 @@
                   "type":"string"
                }
             ],
-            "responses":{  
-               "200":{  
+            "responses":{
+               "200":{
                   "description":"successful operation",
-                  "schema":{  
+                  "schema":{
                      "type":"string"
                   },
-                  "headers":{  
-                     "X-Rate-Limit":{  
+                  "headers":{
+                     "X-Rate-Limit":{
                         "type":"integer",
                         "format":"int32",
                         "description":"calls per hour allowed by the user"
                      },
-                     "X-Expires-After":{  
+                     "X-Expires-After":{
                         "type":"string",
                         "format":"date-time",
                         "description":"date in UTC when toekn expires"
                      }
                   }
                },
-               "400":{  
+               "400":{
                   "description":"Invalid username/password supplied"
                }
             }
          }
       },
-      "/user/logout":{  
-         "get":{  
-            "tags":[  
+      "/user/logout":{
+         "get":{
+            "tags":[
                "user"
             ],
             "summary":"Logs out current logged in user session",
             "description":"",
             "operationId":"logoutUser",
-            "produces":[  
+            "produces":[
                "application/xml",
                "application/json"
             ],
             "parameters": [],
-            "responses":{  
-               "default":{  
+            "responses":{
+               "default":{
                   "description":"successful operation"
                }
             }
          }
       },
-      "/user/{username}":{  
-         "get":{  
-            "tags":[  
+      "/user/{username}":{
+         "get":{
+            "tags":[
                "user"
             ],
             "summary":"Get user by user name",
             "description":"",
             "operationId":"getUserByName",
-            "produces":[  
+            "produces":[
                "application/xml",
                "application/json"
             ],
-            "parameters":[  
-               {  
+            "parameters":[
+               {
                   "name":"username",
                   "in":"path",
                   "description":"The name that needs to be fetched. Use user1 for testing. ",
@@ -1329,72 +1337,72 @@
                   "type":"string"
                }
             ],
-            "responses":{  
-               "200":{  
+            "responses":{
+               "200":{
                   "description":"successful operation",
-                  "schema":{  
+                  "schema":{
                      "$ref":"#/definitions/User"
                   }
                },
-               "400":{  
+               "400":{
                   "description":"Invalid username supplied"
                },
-               "404":{  
+               "404":{
                   "description":"User not found"
                }
             }
          },
-         "put":{  
-            "tags":[  
+         "put":{
+            "tags":[
                "user"
             ],
             "summary":"Updated user",
             "description":"This can only be done by the logged in user.",
             "operationId":"updateUser",
-            "produces":[  
+            "produces":[
                "application/xml",
                "application/json"
             ],
-            "parameters":[  
-               {  
+            "parameters":[
+               {
                   "name":"username",
                   "in":"path",
                   "description":"name that need to be deleted",
                   "required":true,
                   "type":"string"
                },
-               {  
+               {
                   "in":"body",
                   "name":"body",
                   "description":"Updated user object",
                   "required":true,
-                  "schema":{  
+                  "schema":{
                      "$ref":"#/definitions/User"
                   }
                }
             ],
-            "responses":{  
-               "400":{  
+            "responses":{
+               "400":{
                   "description":"Invalid user supplied"
                },
-               "404":{  
+               "404":{
                   "description":"User not found"
                }
             }
          },
-         "delete":{  
-            "tags":[  
+         "delete":{
+            "tags":[
                "user"
             ],
             "summary":"Delete user",
             "description":"This can only be done by the logged in user.",
             "operationId":"deleteUser",
-            "produces":[  
+            "produces":[
                "application/xml",
                "application/json"
             ],
-            "parameters":[  
-               {  
+            "parameters":[
+               {
                   "name":"username",
                   "in":"path",
                   "description":"The name that needs to be deleted",
@@ -1402,205 +1410,205 @@
                   "type":"string"
                }
             ],
-            "responses":{  
-               "400":{  
+            "responses":{
+               "400":{
                   "description":"Invalid username supplied"
                },
-               "404":{  
+               "404":{
                   "description":"User not found"
                }
             }
          }
       }
    },
-   "securityDefinitions":{  
-      "petstore_auth":{  
+   "securityDefinitions":{
+      "petstore_auth":{
          "type":"oauth2",
          "authorizationUrl":"http://petstore.swagger.io/api/oauth/dialog",
          "flow":"implicit",
-         "scopes":{  
+         "scopes":{
             "write:pets":"modify pets in your account",
             "read:pets":"read your pets"
          }
       },
-      "api_key":{  
+      "api_key":{
          "type":"apiKey",
          "name":"api_key",
          "in":"header"
       }
    },
-   "definitions":{  
-      "Order":{  
+   "definitions":{
+      "Order":{
          "type":"object",
-         "properties":{  
-            "id":{  
+         "properties":{
+            "id":{
                "type":"integer",
                "format":"int64"
             },
-            "petId":{  
+            "petId":{
                "type":"integer",
                "format":"int64"
             },
-            "quantity":{  
+            "quantity":{
                "type":"integer",
                "format":"int32"
             },
-            "shipDate":{  
+            "shipDate":{
                "type":"string",
                "format":"date-time"
             },
-            "status":{  
+            "status":{
                "type":"string",
                "description":"Order Status",
-               "enum":[  
+               "enum":[
                   "placed",
                   "approved",
                   "delivered"
                ]
             },
-            "complete":{  
+            "complete":{
                "type":"boolean",
                "default":false
             }
          },
-         "xml":{  
+         "xml":{
             "name":"Order"
          }
       },
-      "Category":{  
+      "Category":{
          "type":"object",
-         "properties":{  
-            "id":{  
+         "properties":{
+            "id":{
                "type":"integer",
                "format":"int64"
             },
-            "name":{  
+            "name":{
                "type":"string"
             }
          },
-         "xml":{  
+         "xml":{
             "name":"Category"
          }
       },
-      "User":{  
+      "User":{
          "type":"object",
-         "properties":{  
-            "id":{  
+         "properties":{
+            "id":{
                "type":"integer",
                "format":"int64"
             },
-            "username":{  
+            "username":{
                "type":"string"
             },
-            "firstName":{  
+            "firstName":{
                "type":"string"
             },
-            "lastName":{  
+            "lastName":{
                "type":"string"
             },
-            "email":{  
+            "email":{
                "type":"string"
             },
-            "password":{  
+            "password":{
                "type":"string"
             },
-            "phone":{  
+            "phone":{
                "type":"string"
             },
-            "userStatus":{  
+            "userStatus":{
                "type":"integer",
                "format":"int32",
                "description":"User Status"
             }
          },
-         "xml":{  
+         "xml":{
             "name":"User"
          }
       },
-      "Tag":{  
+      "Tag":{
          "type":"object",
-         "properties":{  
-            "id":{  
+         "properties":{
+            "id":{
                "type":"integer",
                "format":"int64"
             },
-            "name":{  
+            "name":{
                "type":"string"
             }
          },
-         "xml":{  
+         "xml":{
             "name":"Tag"
          }
       },
-      "Pet":{  
+      "Pet":{
          "type":"object",
-         "required":[  
+         "required":[
             "name",
             "photoUrls"
          ],
-         "properties":{  
-            "id":{  
+         "properties":{
+            "id":{
                "type":"integer",
                "format":"int64"
             },
-            "category":{  
+            "category":{
                "$ref":"#/definitions/Category"
             },
-            "name":{  
+            "name":{
                "type":"string",
                "example":"doggie"
             },
-            "photoUrls":{  
+            "photoUrls":{
                "type":"array",
-               "xml":{  
+               "xml":{
                   "name":"photoUrl",
                   "wrapped":true
                },
-               "items":{  
+               "items":{
                   "type":"string"
                }
             },
-            "tags":{  
+            "tags":{
                "type":"array",
-               "xml":{  
+               "xml":{
                   "name":"tag",
                   "wrapped":true
                },
-               "items":{  
+               "items":{
                   "$ref":"#/definitions/Tag"
                }
             },
-            "status":{  
+            "status":{
                "type":"string",
                "description":"pet status in the store",
-               "enum":[  
+               "enum":[
                   "available",
                   "pending",
                   "sold"
                ]
             }
          },
-         "xml":{  
+         "xml":{
             "name":"Pet"
          }
       },
-      "ApiResponse":{  
+      "ApiResponse":{
          "type":"object",
-         "properties":{  
-            "code":{  
+         "properties":{
+            "code":{
                "type":"integer",
                "format":"int32"
             },
-            "type":{  
+            "type":{
                "type":"string"
             },
-            "message":{  
+            "message":{
                "type":"string"
             }
          }
       }
    },
-   "externalDocs":{  
+   "externalDocs":{
       "description":"Find out more about Swagger",
       "url":"http://swagger.io"
    }
