diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -1,3 +1,9 @@
+## 1.7
+
+* Add support Aeson 2.*
+* Add `Data.Aeson.KeyHelper.hs` in cabal file.
+* And use the module where Aeson has changed how to handle Key and KeyMap.
+
 ## 1.6
 * Make keter more chatty on boot.
   This allows you to figure out in code where things go wrong.
diff --git a/Data/Aeson/KeyHelper.hs b/Data/Aeson/KeyHelper.hs
new file mode 100644
--- /dev/null
+++ b/Data/Aeson/KeyHelper.hs
@@ -0,0 +1,33 @@
+{-# LANGUAGE CPP #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+-- | Utilities for dealing with Aeson version update
+
+module Data.Aeson.KeyHelper
+  ( module KeyMap
+  , toKey
+  , toText
+  ) where
+
+import Prelude (id)
+import qualified Data.Text                   as Text
+
+#if MIN_VERSION_aeson (2,0,0)
+import qualified Data.Aeson.Key              as Key
+import Data.Aeson.KeyMap                     as KeyMap hiding (map)
+
+toKey :: Text.Text -> Key.Key
+toKey = Key.fromText
+
+toText :: Key.Key -> Text.Text
+toText = Key.toText
+
+#else
+import Data.HashMap.Strict                   as KeyMap hiding (map)
+
+toKey :: Text.Text -> Text.Text
+toKey = id
+
+toText :: Text.Text -> Text.Text
+toText = id
+
+#endif
diff --git a/Data/Yaml/FilePath.hs b/Data/Yaml/FilePath.hs
--- a/Data/Yaml/FilePath.hs
+++ b/Data/Yaml/FilePath.hs
@@ -15,6 +15,7 @@
 import Control.Applicative ((<$>))
 import Data.Yaml (decodeFileEither, ParseException (AesonException), parseJSON)
 import Prelude (($!), ($), Either (..), return, IO, (.), (>>=), Maybe (..), maybe, mapM, Ord, fail, FilePath)
+import Data.Aeson.KeyHelper as AK
 import Data.Aeson.Types ((.:), (.:?), Object, Parser, Value, parseEither)
 import Data.Text (Text, unpack)
 import qualified Data.Set as Set
@@ -42,12 +43,16 @@
 -- | A replacement for the @.:@ operator which will both parse a file path and
 -- apply the relative file logic.
 lookupBase :: ParseYamlFile a => BaseDir -> Object -> Text -> Parser a
-lookupBase basedir o t = (o .: t) >>= parseYamlFile basedir
+lookupBase basedir o k = (o .: k') >>= parseYamlFile basedir
+  where
+    k' = AK.toKey k
 
 -- | A replacement for the @.:?@ operator which will both parse a file path and
 -- apply the relative file logic.
 lookupBaseMaybe :: ParseYamlFile a => BaseDir -> Object -> Text -> Parser (Maybe a)
-lookupBaseMaybe basedir o t = (o .:? t) >>= maybe (return Nothing) ((Just <$>) . parseYamlFile basedir)
+lookupBaseMaybe basedir o k = (o .:? k') >>= maybe (return Nothing) ((Just <$>) . parseYamlFile basedir)
+  where
+    k' = AK.toKey k
 
 -- | A replacement for the standard @FromJSON@ typeclass which can handle relative filepaths.
 class ParseYamlFile a where
diff --git a/Keter/Plugin/Postgres.hs b/Keter/Plugin/Postgres.hs
--- a/Keter/Plugin/Postgres.hs
+++ b/Keter/Plugin/Postgres.hs
@@ -9,6 +9,7 @@
     ) where
 
 import           Control.Applicative       ((<$>), (<*>), pure)
+import           Data.Aeson.KeyHelper      as AK (lookup)
 import           Control.Concurrent        (forkIO)
 import           Control.Concurrent.Chan
 import           Control.Concurrent.MVar
@@ -18,7 +19,6 @@
 import qualified Control.Monad.Trans.State as S
 import qualified Data.Char                 as C
 import           Data.Default
-import qualified Data.HashMap.Strict       as HMap
 import qualified Data.Map                  as Map
 import           Data.Maybe                (fromMaybe)
 import           Data.Monoid               ((<>))
@@ -135,7 +135,7 @@
         void $ forkIO $ flip S.evalStateT (db0, g0) $ forever $ loop chan
         return Plugin
             { pluginGetEnv = \appname o ->
-                case HMap.lookup "postgres" o of
+                case AK.lookup "postgres" o of
                     Just (Array v) -> do
                         let dbServer = fromMaybe def . parseMaybe parseJSON $ V.head v
                         doenv chan appname dbServer
diff --git a/Keter/Types/Middleware.hs b/Keter/Types/Middleware.hs
--- a/Keter/Types/Middleware.hs
+++ b/Keter/Types/Middleware.hs
@@ -26,7 +26,7 @@
 import Data.Text.Lazy.Encoding as TL (encodeUtf8, decodeUtf8)
 import Data.Text.Encoding as T (encodeUtf8, decodeUtf8)
 import Data.String (fromString)
-import qualified Data.HashMap.Strict as H
+import qualified Data.Aeson.KeyHelper as AK (toKey, toText, toList, empty)
 
 data MiddlewareConfig = AcceptOverride
                       | Autohead
@@ -47,10 +47,10 @@
   parseJSON (String "method-override"     ) = pure MethodOverride
   parseJSON (String "method-override-post") = pure MethodOverridePost
   parseJSON (Object o) =
-     case H.toList o of
+     case AK.toList o of
       [("basic-auth", Object ( o'))] -> BasicAuth  <$> o' .:? "realm" .!= "keter"
-                                                <*> (map (T.encodeUtf8 *** T.encodeUtf8) . H.toList <$> o' .:? "creds"   .!= H.empty)
-      [("headers"   , Object _ )]    -> AddHeaders . map (T.encodeUtf8 *** T.encodeUtf8) . H.toList <$> o  .:? "headers" .!= H.empty
+                                                <*> (map ((T.encodeUtf8 . AK.toText) *** T.encodeUtf8) . AK.toList <$> o' .:? "creds"   .!= AK.empty)
+      [("headers"   , Object _ )]    -> AddHeaders . map ((T.encodeUtf8 . AK.toText) *** T.encodeUtf8) . AK.toList <$> o  .:? "headers" .!= AK.empty
       [("local"     , Object o')] -> Local  <$> o' .:? "status" .!=  401
                                             <*> (TL.encodeUtf8 <$> o' .:? "message" .!= "Unauthorized Accessing from Localhost ONLY" )
       _                      -> mzero -- fail "Rule: unexpected format"
@@ -63,10 +63,10 @@
   toJSON MethodOverride     = "method-override"
   toJSON MethodOverridePost = "method-override-post"
   toJSON (BasicAuth realm cred) = object [ "basic-auth" .= object [ "realm" .= realm
-                                                                  , "creds" .= object ( map ( T.decodeUtf8 *** (String . T.decodeUtf8)) cred )
+                                                                  , "creds" .= object ( map ( (AK.toKey . T.decodeUtf8) *** (String . T.decodeUtf8)) cred )
                                                                   ]
                                          ]
-  toJSON (AddHeaders headers)   = object [ "headers"    .= object ( map (T.decodeUtf8 *** String . T.decodeUtf8) headers)  ]
+  toJSON (AddHeaders headers)   = object [ "headers"    .= object ( map ((AK.toKey . T.decodeUtf8) *** String . T.decodeUtf8) headers)  ]
   toJSON (Local sc msg)         = object [ "local"      .= object [ "status" .= sc
                                                                   , "message" .=  TL.decodeUtf8 msg 
                                                                   ]
diff --git a/Keter/Types/V10.hs b/Keter/Types/V10.hs
--- a/Keter/Types/V10.hs
+++ b/Keter/Types/V10.hs
@@ -10,10 +10,10 @@
                                                     Value (Object, String, Bool),
                                                     withObject, (.!=), (.:),
                                                     (.:?), object, (.=))
+import           Data.Aeson.KeyHelper              as AK (lookup, singleton, empty, insert)
 import qualified Data.CaseInsensitive              as CI
 import           Data.Conduit.Network              (HostPreference)
 import           Data.Default
-import qualified Data.HashMap.Strict               as HashMap
 import qualified Data.Map                          as Map
 import           Data.Maybe                        (catMaybes, fromMaybe, isJust)
 import qualified Data.Set                          as Set
@@ -45,20 +45,20 @@
             , V.fromList $ map (flip Stanza False . StanzaRedirect . toCurrent) $ Set.toList redirs
             ]
         , bconfigPlugins =
-            case webapp >>= HashMap.lookup "postgres" . V04.configRaw of
-                Just (Bool True) -> HashMap.singleton "postgres" (Bool True)
-                _ -> HashMap.empty
+            case webapp >>= AK.lookup "postgres" . V04.configRaw of
+                Just (Bool True) -> AK.singleton "postgres" (Bool True)
+                _ -> AK.empty
         }
 
 instance ParseYamlFile BundleConfig where
     parseYamlFile basedir = withObject "BundleConfig" $ \o ->
-        case HashMap.lookup "stanzas" o of
+        case AK.lookup "stanzas" o of
             Nothing -> (toCurrent :: V04.BundleConfig -> BundleConfig) <$> parseYamlFile basedir (Object o)
             Just _ -> current o
       where
         current o = BundleConfig
             <$> lookupBase basedir o "stanzas"
-            <*> o .:? "plugins" .!= HashMap.empty
+            <*> o .:? "plugins" .!= AK.empty
 
 instance ToJSON BundleConfig where
     toJSON BundleConfig {..} = object
@@ -149,7 +149,7 @@
 
 instance ParseYamlFile KeterConfig where
     parseYamlFile basedir = withObject "KeterConfig" $ \o ->
-        case HashMap.lookup "listeners" o of
+        case AK.lookup "listeners" o of
             Just _ -> current o
             Nothing -> old o <|> current o
       where
@@ -219,7 +219,7 @@
 addRequiresSecure :: ToJSON a => Bool -> a -> Value
 addRequiresSecure rs x =
     case toJSON x of
-        Object o -> Object $ HashMap.insert "requires-secure" (toJSON rs) o
+        Object o -> Object $ AK.insert "requires-secure" (toJSON rs) o
         v -> v
 
 instance ToJSON (StanzaRaw ()) where
@@ -232,7 +232,7 @@
 addStanzaType :: ToJSON a => Value -> a -> Value
 addStanzaType t x =
     case toJSON x of
-        Object o -> Object $ HashMap.insert "type" t o
+        Object o -> Object $ AK.insert "type" t o
         v -> v
 
 data StaticFilesConfig = StaticFilesConfig
@@ -323,7 +323,7 @@
             Object o ->
                 case path of
                     SPAny -> Object o
-                    SPSpecific x -> Object $ HashMap.insert "path" (String x) o
+                    SPSpecific x -> Object $ AK.insert "path" (String x) o
             v -> v
 
 data SourcePath = SPAny
diff --git a/keter.cabal b/keter.cabal
--- a/keter.cabal
+++ b/keter.cabal
@@ -1,6 +1,6 @@
 Cabal-version:       >=1.10
 Name:                keter
-Version:             1.6
+Version:             1.7
 Synopsis:            Web application deployment manager, focusing on Haskell web frameworks
 Description:         Hackage documentation generation is not reliable. For up to date documentation, please see: <http://www.stackage.org/package/keter>.
 Homepage:            http://www.yesodweb.com/
@@ -91,6 +91,7 @@
                        Keter.HostManager
                        Network.HTTP.ReverseProxy.Rewrite
                        Data.Yaml.FilePath
+                       Data.Aeson.KeyHelper
                        Codec.Archive.TempTarball
                        Data.Conduit.LogFile
                        Data.Conduit.Process.Unix
