diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -1,5 +1,10 @@
 # Changelog
 
+## 1.0.4.1
+
+Fixes build with aeson-0.11.0.0. There are no changes in behaviour from 1.0.4,
+so no binaries are released for this version.
+
 ## 1.0.4
 
 Major changes:
@@ -222,7 +227,7 @@
   locations will continue to work for some months, but we suggest that you
   adjust your `/etc/apt/sources.list.d/fpco.list` to the new location to avoid
   future disruption.
-* [openSUSE and SUSE Linux Enterprise](http://docs.haskellstack.org/en/stable/install_and_upgrade/#opensuse-suse-linux-enterprise)
+* [openSUSE and SUSE Linux Enterprise](http://docs.haskellstack.org/en/stable/install_and_upgrade/#suse)
   packages are now available, thanks to [@mimi1vx](https://github.com/mimi1vx).
   Note: there will be some lag before these pick up new versions, as they are
   based on Stackage LTS.
diff --git a/src/Data/Aeson/Extended.hs b/src/Data/Aeson/Extended.hs
--- a/src/Data/Aeson/Extended.hs
+++ b/src/Data/Aeson/Extended.hs
@@ -7,13 +7,15 @@
   , (.:)
   , (.:?)
   -- * JSON Parser that emits warnings
-  , WarningParser
   , JSONWarning (..)
+  , WarningParser
+  , WithJSONWarnings (..)
   , withObjectWarnings
   , jsonSubWarnings
   , jsonSubWarningsT
   , jsonSubWarningsTT
   , logJSONWarnings
+  , noJSONWarnings
   , tellJSONField
   , unWarningParser
   , (..:)
@@ -75,7 +77,7 @@
 withObjectWarnings :: String
                    -> (Object -> WarningParser a)
                    -> Value
-                   -> Parser (a, [JSONWarning])
+                   -> Parser (WithJSONWarnings a)
 withObjectWarnings expected f =
     withObject expected $
     \obj ->
@@ -86,11 +88,11 @@
                              (Set.fromList (HashMap.keys obj))
                              (wpmExpectedFields w))
             return
-                ( a
-                , wpmWarnings w ++
-                  case unrecognizedFields of
-                      [] -> []
-                      _ -> [JSONUnrecognizedFields expected unrecognizedFields])
+                (WithJSONWarnings a
+                    (wpmWarnings w ++
+                     case unrecognizedFields of
+                         [] -> []
+                         _ -> [JSONUnrecognizedFields expected unrecognizedFields]))
 
 -- | Convert a 'WarningParser' to a 'Parser'.
 unWarningParser :: WarningParser a -> Parser a
@@ -106,9 +108,9 @@
     mapM_ (\w -> $logWarn ("Warning: " <> T.pack fp <> ": " <> T.pack (show w)))
 
 -- | Handle warnings in a sub-object.
-jsonSubWarnings :: WarningParser (a, [JSONWarning]) -> WarningParser a
+jsonSubWarnings :: WarningParser (WithJSONWarnings a) -> WarningParser a
 jsonSubWarnings f = do
-    (result,warnings) <- f
+    WithJSONWarnings result warnings <- f
     tell
         (mempty
          { wpmWarnings = warnings
@@ -118,18 +120,22 @@
 -- | Handle warnings in a @Traversable@ of sub-objects.
 jsonSubWarningsT
     :: Traversable t
-    => WarningParser (t (a, [JSONWarning])) -> WarningParser (t a)
+    => WarningParser (t (WithJSONWarnings a)) -> WarningParser (t a)
 jsonSubWarningsT f =
     Traversable.mapM (jsonSubWarnings . return) =<< f
 
 -- | Handle warnings in a @Maybe Traversable@ of sub-objects.
 jsonSubWarningsTT
     :: (Traversable t, Traversable u)
-    => WarningParser (u (t (a, [JSONWarning])))
+    => WarningParser (u (t (WithJSONWarnings a)))
     -> WarningParser (u (t a))
 jsonSubWarningsTT f =
     Traversable.mapM (jsonSubWarningsT . return) =<< f
 
+-- Parsed JSON value without any warnings
+noJSONWarnings :: a -> WithJSONWarnings a
+noJSONWarnings v = WithJSONWarnings v []
+
 -- | JSON parser that warns about unexpected fields in objects.
 type WarningParser a = WriterT WarningParserMonoid Parser a
 
@@ -147,6 +153,14 @@
               (wpmExpectedFields b)
         , wpmWarnings = wpmWarnings a ++ wpmWarnings b
         }
+
+-- Parsed JSON value with its warnings
+data WithJSONWarnings a = WithJSONWarnings a [JSONWarning]
+instance Functor WithJSONWarnings where
+    fmap f (WithJSONWarnings x w) = WithJSONWarnings (f x) w
+instance Monoid a => Monoid (WithJSONWarnings a) where
+    mempty = noJSONWarnings mempty
+    mappend (WithJSONWarnings a aw) (WithJSONWarnings b bw) = WithJSONWarnings (mappend a b) (mappend aw bw)
 
 -- | Warning output from 'WarningParser'.
 data JSONWarning = JSONUnrecognizedFields String [Text]
diff --git a/src/Stack/Config.hs b/src/Stack/Config.hs
--- a/src/Stack/Config.hs
+++ b/src/Stack/Config.hs
@@ -153,7 +153,7 @@
                 config <- asks getConfig
                 implicitGlobalDir <- getImplicitGlobalProjectDir config
                 let fp = implicitGlobalDir </> stackDotYaml
-                (ProjectAndConfigMonoid project _, _warnings) <-
+                WithJSONWarnings (ProjectAndConfigMonoid project _) _warnings <-
                     liftIO (Yaml.decodeFileEither $ toFilePath fp)
                     >>= either throwM return
                 return $ projectResolver project
@@ -730,9 +730,9 @@
         : maybe [] return (mstackGlobalConfig <|> defaultStackGlobalConfigPath)
 
 -- | Load and parse YAML from the given file.
-loadYaml :: (FromJSON (a, [JSONWarning]), MonadIO m, MonadLogger m) => Path Abs File -> m a
+loadYaml :: (FromJSON (WithJSONWarnings a), MonadIO m, MonadLogger m) => Path Abs File -> m a
 loadYaml path = do
-    (result,warnings) <-
+    WithJSONWarnings result warnings <-
         liftIO $
         Yaml.decodeFileEither (toFilePath path) >>=
         either (throwM . ParseConfigFileException path) return
diff --git a/src/Stack/Setup.hs b/src/Stack/Setup.hs
--- a/src/Stack/Setup.hs
+++ b/src/Stack/Setup.hs
@@ -583,7 +583,7 @@
                              responseBody res $$ CL.consume
                     return $ S8.concat bss
                 Nothing -> liftIO $ S.readFile urlOrFile
-        (si,warnings) <- either throwM return (Yaml.decodeEither' bs)
+        WithJSONWarnings si warnings <- either throwM return (Yaml.decodeEither' bs)
         when (urlOrFile /= defaultStackSetupYaml) $
             logJSONWarnings urlOrFile warnings
         return si
diff --git a/src/Stack/Solver.hs b/src/Stack/Solver.hs
--- a/src/Stack/Solver.hs
+++ b/src/Stack/Solver.hs
@@ -20,7 +20,8 @@
 import           Control.Monad.Logger
 import           Control.Monad.Reader
 import           Control.Monad.Trans.Control
-import           Data.Aeson.Extended         (object, (.=), toJSON, logJSONWarnings)
+import           Data.Aeson.Extended         ( WithJSONWarnings(..), object, (.=), toJSON
+                                             , logJSONWarnings)
 import qualified Data.ByteString             as S
 import           Data.Either
 import           Data.Function               (on)
@@ -693,7 +694,7 @@
         writeStackYaml path res deps fl = do
             let fp = toFilePath path
             obj <- liftIO (Yaml.decodeFileEither fp) >>= either throwM return
-            (ProjectAndConfigMonoid _ _, warnings) <-
+            WithJSONWarnings (ProjectAndConfigMonoid _ _) warnings <-
                 liftIO (Yaml.decodeFileEither fp) >>= either throwM return
             logJSONWarnings fp warnings
             let obj' =
diff --git a/src/Stack/Types/Config.hs b/src/Stack/Types/Config.hs
--- a/src/Stack/Types/Config.hs
+++ b/src/Stack/Types/Config.hs
@@ -132,8 +132,8 @@
 import           Data.Aeson.Extended
                  (ToJSON, toJSON, FromJSON, parseJSON, withText, object,
                   (.=), (..:), (..:?), (..!=), Value(String, Object),
-                  withObjectWarnings, WarningParser, Object, jsonSubWarnings, JSONWarning,
-                  jsonSubWarningsT, jsonSubWarningsTT)
+                  withObjectWarnings, WarningParser, Object, jsonSubWarnings,
+                  jsonSubWarningsT, jsonSubWarningsTT, WithJSONWarnings(..), noJSONWarnings)
 import           Data.Attoparsec.Args
 import           Data.Binary (Binary)
 import           Data.ByteString (ByteString)
@@ -311,7 +311,7 @@
     -- ^ Require that hashes and package size information be available for packages in this index
     }
     deriving Show
-instance FromJSON (PackageIndex, [JSONWarning]) where
+instance FromJSON (WithJSONWarnings PackageIndex) where
     parseJSON = withObjectWarnings "PackageIndex" $ \o -> do
         name <- o ..: "name"
         prefix <- o ..: "download-prefix"
@@ -552,15 +552,16 @@
         , "location" .= peLocation pe
         , "subdirs" .= peSubdirs pe
         ]
-instance FromJSON (PackageEntry, [JSONWarning]) where
+instance FromJSON (WithJSONWarnings PackageEntry) where
     parseJSON (String t) = do
-        (loc, _::[JSONWarning]) <- parseJSON $ String t
-        return (PackageEntry
+        WithJSONWarnings loc _ <- parseJSON $ String t
+        return $ noJSONWarnings
+            (PackageEntry
                 { peExtraDepMaybe = Nothing
                 , peValidWanted = Nothing
                 , peLocation = loc
                 , peSubdirs = []
-                }, [])
+                })
     parseJSON v = withObjectWarnings "PackageEntry" (\o -> PackageEntry
         <$> o ..:? "extra-dep"
         <*> o ..:? "valid-wanted"
@@ -587,9 +588,9 @@
     toJSON (PLRemote x (RPTGit y)) = toJSON $ T.unwords ["git", x, y]
     toJSON (PLRemote x (RPTHg  y)) = toJSON $ T.unwords ["hg",  x, y]
 
-instance FromJSON (PackageLocation, [JSONWarning]) where
+instance FromJSON (WithJSONWarnings PackageLocation) where
     parseJSON v
-        = ((,[]) <$> withText "PackageLocation" (\t -> http t <|> file t) v)
+        = (noJSONWarnings <$> withText "PackageLocation" (\t -> http t <|> file t) v)
         <|> git v
         <|> hg  v
       where
@@ -660,13 +661,13 @@
         , "location" .= location
         ]
     toJSON x = toJSON $ resolverName x
-instance FromJSON (Resolver,[JSONWarning]) where
+instance FromJSON (WithJSONWarnings Resolver) where
     -- Strange structuring is to give consistent error messages
     parseJSON v@(Object _) = withObjectWarnings "Resolver" (\o -> ResolverCustom
         <$> o ..: "name"
         <*> o ..: "location") v
 
-    parseJSON (String t) = either (fail . show) return ((,[]) <$> parseResolverText t)
+    parseJSON (String t) = either (fail . show) return (noJSONWarnings <$> parseResolverText t)
 
     parseJSON _ = fail $ "Invalid Resolver, must be Object or String"
 
@@ -893,7 +894,7 @@
     , configMonoidAllowDifferentUser = configMonoidAllowDifferentUser l <|> configMonoidAllowDifferentUser r
     }
 
-instance FromJSON (ConfigMonoid, [JSONWarning]) where
+instance FromJSON (WithJSONWarnings ConfigMonoid) where
   parseJSON = withObjectWarnings "ConfigMonoid" parseConfigMonoidJSON
 
 -- | Parse a partial configuration.  Used both to parse both a standalone config
@@ -1411,7 +1412,7 @@
 data ProjectAndConfigMonoid
   = ProjectAndConfigMonoid !Project !ConfigMonoid
 
-instance (warnings ~ [JSONWarning]) => FromJSON (ProjectAndConfigMonoid, warnings) where
+instance FromJSON (WithJSONWarnings ProjectAndConfigMonoid) where
     parseJSON = withObjectWarnings "ProjectAndConfigMonoid" $ \o -> do
         dirs <- jsonSubWarningsTT (o ..:? "packages") ..!= [packageEntryCurrDir]
         extraDeps' <- o ..:? "extra-deps" ..!= []
@@ -1535,7 +1536,7 @@
     , downloadInfoSha1 :: Maybe ByteString
     } deriving (Show)
 
-instance FromJSON (DownloadInfo, [JSONWarning]) where
+instance FromJSON (WithJSONWarnings DownloadInfo) where
     parseJSON = withObjectWarnings "DownloadInfo" parseDownloadInfoFromObject
 
 -- | Parse JSON in existing object for 'DownloadInfo'
@@ -1557,7 +1558,7 @@
     }
     deriving Show
 
-instance FromJSON (VersionedDownloadInfo, [JSONWarning]) where
+instance FromJSON (WithJSONWarnings VersionedDownloadInfo) where
     parseJSON = withObjectWarnings "VersionedDownloadInfo" $ \o -> do
         version <- o ..: "version"
         downloadInfo <- parseDownloadInfoFromObject o
@@ -1576,7 +1577,7 @@
     }
     deriving Show
 
-instance FromJSON (SetupInfo, [JSONWarning]) where
+instance FromJSON (WithJSONWarnings SetupInfo) where
     parseJSON = withObjectWarnings "SetupInfo" $ \o -> do
         siSevenzExe <- jsonSubWarningsT (o ..:? "sevenzexe-info")
         siSevenzDll <- jsonSubWarningsT (o ..:? "sevenzdll-info")
@@ -1613,15 +1614,15 @@
     | SetupInfoInline SetupInfo
     deriving (Show)
 
-instance FromJSON (SetupInfoLocation, [JSONWarning]) where
+instance FromJSON (WithJSONWarnings SetupInfoLocation) where
     parseJSON v =
-        ((, []) <$>
+        (noJSONWarnings <$>
          withText "SetupInfoFileOrURL" (pure . SetupInfoFileOrURL . T.unpack) v) <|>
         inline
       where
         inline = do
-            (si,w) <- parseJSON v
-            return (SetupInfoInline si, w)
+            WithJSONWarnings si w <- parseJSON v
+            return $ WithJSONWarnings (SetupInfoInline si) w
 
 -- | How PVP bounds should be added to .cabal files
 data PvpBounds
diff --git a/src/Stack/Types/Docker.hs b/src/Stack/Types/Docker.hs
--- a/src/Stack/Types/Docker.hs
+++ b/src/Stack/Types/Docker.hs
@@ -98,7 +98,7 @@
   deriving (Show)
 
 -- | Decode uninterpreted docker options from JSON/YAML.
-instance FromJSON (DockerOptsMonoid, [JSONWarning]) where
+instance FromJSON (WithJSONWarnings DockerOptsMonoid) where
   parseJSON = withObjectWarnings "DockerOptsMonoid"
     (\o -> do dockerMonoidDefaultEnable    <- pure True
               dockerMonoidEnable           <- o ..:? dockerEnableArgName
diff --git a/src/Stack/Types/Image.hs b/src/Stack/Types/Image.hs
--- a/src/Stack/Types/Image.hs
+++ b/src/Stack/Types/Image.hs
@@ -39,7 +39,7 @@
     { imgMonoidDockers :: ![ImageDockerOpts]
     } deriving (Show)
 
-instance FromJSON (ImageOptsMonoid, [JSONWarning]) where
+instance FromJSON (WithJSONWarnings ImageOptsMonoid) where
     parseJSON = withObjectWarnings
             "ImageOptsMonoid"
             (\o ->
@@ -59,7 +59,7 @@
         { imgMonoidDockers = imgMonoidDockers l <> imgMonoidDockers r
         }
 
-instance FromJSON (ImageDockerOpts, [JSONWarning]) where
+instance FromJSON (WithJSONWarnings ImageDockerOpts) where
     parseJSON = withObjectWarnings
             "ImageDockerOpts"
             (\o ->
diff --git a/src/Stack/Types/Nix.hs b/src/Stack/Types/Nix.hs
--- a/src/Stack/Types/Nix.hs
+++ b/src/Stack/Types/Nix.hs
@@ -52,7 +52,7 @@
   deriving (Eq, Show)
 
 -- | Decode uninterpreted nix options from JSON/YAML.
-instance FromJSON (NixOptsMonoid, [JSONWarning]) where
+instance FromJSON (WithJSONWarnings NixOptsMonoid) where
   parseJSON = withObjectWarnings "NixOptsMonoid"
     (\o -> do nixMonoidDefaultEnable <- pure True
               nixMonoidEnable        <- o ..:? nixEnableArgName
diff --git a/stack.cabal b/stack.cabal
--- a/stack.cabal
+++ b/stack.cabal
@@ -1,5 +1,5 @@
 name: stack
-version: 1.0.4
+version: 1.0.4.1
 cabal-version: >=1.10
 build-type: Simple
 license: BSD3
@@ -250,7 +250,7 @@
         optparse-applicative >=0.11.0.2 && <0.13,
         path >=0.5.3 && <0.6,
         path-io >=0.3.1 && <0.4,
-        stack >=1.0.4 && <1.1,
+        stack >=1.0.4.1 && <1.1,
         text >=1.2.0.4 && <1.3,
         transformers >=0.4.2.0 && <0.5
     default-language: Haskell2010
@@ -280,7 +280,7 @@
         path-io >=0.3.1 && <0.4,
         resourcet >=1.1.7 && <1.2,
         retry >=0.6 && <0.8,
-        stack >=1.0.4 && <1.1,
+        stack >=1.0.4.1 && <1.1,
         temporary >=1.2.0.4 && <1.3,
         text >=1.2.2.0 && <1.3,
         transformers >=0.4.2.0 && <0.5
