diff --git a/loup.cabal b/loup.cabal
--- a/loup.cabal
+++ b/loup.cabal
@@ -1,81 +1,91 @@
-name:                  loup
-version:               0.0.9
-synopsis:              Amazon Simple Workflow Service Wrapper for Work Pools.
-description:           Loup is a wrapper around Amazon Simple Workflow Service for Work Pools.
-homepage:              https://github.com/swift-nav/loup
-license:               MIT
-license-file:          LICENSE
-author:                Swift Navigation Inc.
-maintainer:            Mark Fine <dev@swiftnav.com>
-copyright:             Copyright (C) 2017 Swift Navigation, Inc.
-category:              Network, AWS, Cloud, Distributed Computing
-build-type:            Simple
-cabal-version:         >= 1.22
+name: loup
+version: 0.0.10
+cabal-version: >=1.22
+build-type: Simple
+license: MIT
+license-file: LICENSE
+copyright: Copyright (C) 2017 Swift Navigation, Inc.
+maintainer: Mark Fine <dev@swiftnav.com>
+homepage: https://github.com/swift-nav/loup
+synopsis: Amazon Simple Workflow Service Wrapper for Work Pools.
+description:
+    Loup is a wrapper around Amazon Simple Workflow Service for Work Pools.
+category: Network, AWS, Cloud, Distributed Computing
+author: Swift Navigation Inc.
 
 source-repository head
-  type:                git
-  location:            git@github.com:swift-nav/loup.git
+    type: git
+    location: git@github.com:swift-nav/loup.git
 
 library
-  exposed-modules:     Network.AWS.Loup
-  other-modules:       Network.AWS.Loup.Act
-                     , Network.AWS.Loup.Converge
-                     , Network.AWS.Loup.Ctx
-                     , Network.AWS.Loup.Decide
-                     , Network.AWS.Loup.Prelude
-                     , Network.AWS.Loup.Types
-                     , Network.AWS.Loup.Types.Alias
-                     , Network.AWS.Loup.Types.Ctx
-                     , Network.AWS.Loup.Types.Product
-                     , Network.AWS.Loup.Types.Sum
-  default-language:    Haskell2010
-  hs-source-dirs:      src
-  ghc-options:         -Wall
-  build-depends:       aeson
-                     , amazonka
-                     , amazonka-swf
-                     , base == 4.8.*
-                     , bytestring
-                     , conduit
-                     , lifted-async
-                     , lifted-base
-                     , preamble
-                     , time
-                     , turtle
-                     , unordered-containers
-                     , uuid
-                     , yaml
+    exposed-modules:
+        Network.AWS.Loup
+    build-depends:
+        aeson >=0.11.3.0,
+        amazonka >=1.4.3,
+        amazonka-swf >=1.4.3,
+        base >=4.8 && <5,
+        basic-prelude >=0.5.2,
+        bytestring >=0.10.6.0,
+        conduit >=1.2.10,
+        lifted-async >=0.9.1.1,
+        lifted-base >=0.2.3.11,
+        preamble >=0.0.44,
+        time >=1.5.0.1,
+        turtle >=1.3.5,
+        unordered-containers >=0.2.8.0,
+        uuid >=1.3.13,
+        yaml >=0.8.23
+    default-language: Haskell2010
+    hs-source-dirs: src
+    other-modules:
+        Network.AWS.Loup.Act
+        Network.AWS.Loup.Converge
+        Network.AWS.Loup.Ctx
+        Network.AWS.Loup.Decide
+        Network.AWS.Loup.Prelude
+        Network.AWS.Loup.Types
+        Network.AWS.Loup.Types.Alias
+        Network.AWS.Loup.Types.Ctx
+        Network.AWS.Loup.Types.Product
+        Network.AWS.Loup.Types.Sum
+    ghc-options: -Wall
 
 executable loup-actor
-  hs-source-dirs:      main
-  main-is:             actor.hs
-  ghc-options:         -threaded -rtsopts -with-rtsopts=-N -Wall
-  build-depends:       base
-                     , loup
-                     , optparse-generic
-  default-language:    Haskell2010
+    main-is: actor.hs
+    build-depends:
+        base >=4.8.2.0,
+        loup >=0.0.10,
+        optparse-generic >=1.1.5
+    default-language: Haskell2010
+    hs-source-dirs: main
+    ghc-options: -threaded -rtsopts -with-rtsopts=-N -Wall
 
 executable loup-decider
-  hs-source-dirs:      main
-  main-is:             decider.hs
-  ghc-options:         -threaded -rtsopts -with-rtsopts=-N -Wall
-  build-depends:       base
-                     , loup
-                     , optparse-generic
-  default-language:    Haskell2010
+    main-is: decider.hs
+    build-depends:
+        base >=4.8.2.0,
+        loup >=0.0.10,
+        optparse-generic >=1.1.5
+    default-language: Haskell2010
+    hs-source-dirs: main
+    ghc-options: -threaded -rtsopts -with-rtsopts=-N -Wall
 
 executable loup-converger
-  hs-source-dirs:      main
-  main-is:             converger.hs
-  ghc-options:         -threaded -rtsopts -with-rtsopts=-N -Wall
-  build-depends:       base
-                     , loup
-                     , optparse-generic
-  default-language:    Haskell2010
+    main-is: converger.hs
+    build-depends:
+        base >=4.8.2.0,
+        loup >=0.0.10,
+        optparse-generic >=1.1.5
+    default-language: Haskell2010
+    hs-source-dirs: main
+    ghc-options: -threaded -rtsopts -with-rtsopts=-N -Wall
 
 executable shake-loup
-  main-is:             Shakefile.hs
-  ghc-options:         -threaded -rtsopts -with-rtsopts=-N -Wall
-  build-depends:       base == 4.8.*
-                     , shakers
-  default-language:    Haskell2010
+    main-is: Shakefile.hs
+    build-depends:
+        base >=4.8 && <5,
+        shakers >=0.0.25
+    default-language: Haskell2010
+    ghc-options: -threaded -rtsopts -with-rtsopts=-N -Wall
+
diff --git a/src/Network/AWS/Loup/Converge.hs b/src/Network/AWS/Loup/Converge.hs
--- a/src/Network/AWS/Loup/Converge.hs
+++ b/src/Network/AWS/Loup/Converge.hs
@@ -1,3 +1,4 @@
+{-# LANGUAGE CPP               #-}
 {-# LANGUAGE FlexibleContexts  #-}
 {-# LANGUAGE NoImplicitPrelude #-}
 {-# LANGUAGE OverloadedStrings #-}
@@ -56,7 +57,11 @@
     wids <- fromList <$> listWorkflows domain activity
     let fold kvs as action = do
           let g k v bs = do
+#if MIN_VERSION_basic_prelude(0,6,1)
+                let k' = k -.- textFromString (show (hash v))
+#else
                 let k' = k -.- show (hash v)
+#endif
                 if k' `member` bs then return $ k' `delete` bs else action k' v >> return bs
           ifoldrM g as kvs
     wids' <- fold (pool ^. pWorkers) wids $ \wid input -> do
diff --git a/src/Network/AWS/Loup/Ctx.hs b/src/Network/AWS/Loup/Ctx.hs
--- a/src/Network/AWS/Loup/Ctx.hs
+++ b/src/Network/AWS/Loup/Ctx.hs
@@ -1,3 +1,4 @@
+{-# LANGUAGE CPP               #-}
 {-# LANGUAGE FlexibleContexts  #-}
 {-# LANGUAGE NoImplicitPrelude #-}
 {-# LANGUAGE OverloadedStrings #-}
@@ -38,7 +39,7 @@
 --
 topSomeExceptionCatch :: MonadStatsCtx c m => SomeException -> m a
 topSomeExceptionCatch ex = do
-  statsIncrement "exception" [ "reason" =. show ex ]
+  statsIncrement "exception" [ "reason" =. textFromString (displayException ex) ]
   throwIO ex
 
 -- | Run bottom TransT.
@@ -56,7 +57,11 @@
 runAmazonCtx :: MonadStatsCtx c m => TransT AmazonCtx m a -> m a
 runAmazonCtx action = do
   c <- view statsCtx
+#if MIN_VERSION_amazonka(1,4,5)
+  e <- newEnv $ FromEnv "AWS_ACCESS_KEY_ID" "AWS_SECRET_ACCESS_KEY" mempty mempty
+#else
   e <- newEnv Oregon $ FromEnv "AWS_ACCESS_KEY_ID" "AWS_SECRET_ACCESS_KEY" mempty
+#endif
   runTopTransT (AmazonCtx c e) action
 
 -- | Run decision context.
