diff --git a/CHANGELOG b/CHANGELOG
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,3 +1,9 @@
+Changes from 0.8.3 to 0.8.4
+---------------------------
+
+* Fixed builds with GHC 8.2, 8.4
+* Adopted to upgraded Hackage (Cabal 3.0)
+
 Changes from 0.8.2 to 0.8.3
 ---------------------------
 
diff --git a/Data/Encoding/ISO88591.hs b/Data/Encoding/ISO88591.hs
new file mode 100644
--- /dev/null
+++ b/Data/Encoding/ISO88591.hs
@@ -0,0 +1,23 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{- | Implements ISO\/IEC 8859-1 alias latin-1 encoding. See <http://en.wikipedia.org/wiki/ISO/IEC_8859-1> for further information.
+ -}
+module Data.Encoding.ISO88591 where
+
+import Control.Throws
+import Data.Encoding.Base
+import Data.Encoding.Exception
+import Data.Encoding.ByteSource
+import Data.Encoding.ByteSink
+import Data.Char (ord,chr)
+import Data.Typeable
+
+data ISO88591 = ISO88591 deriving (Show,Eq,Typeable)
+
+instance Encoding ISO88591 where
+    encodeChar _ c
+               | c > '\255' = throwException (HasNoRepresentation c)
+               | otherwise = pushWord8 (fromIntegral $ ord c)
+    decodeChar _ = do
+      w <- fetchWord8
+      return (chr $ fromIntegral w)
+    encodeable _ c = c <= '\255'
diff --git a/System/IO/Encoding.hs b/System/IO/Encoding.hs
--- a/System/IO/Encoding.hs
+++ b/System/IO/Encoding.hs
@@ -1,4 +1,6 @@
-{-# LANGUAGE ImplicitParams,ForeignFunctionInterface #-}
+{-# LANGUAGE CPP                      #-}
+{-# LANGUAGE ForeignFunctionInterface #-}
+{-# LANGUAGE ImplicitParams           #-}
 {- | This module provides a replacement for the normal (unicode unaware) IO functions of haskell.
      By using implicit parameters, it can be used almost as a drop-in replacement.
      For example, consider the following simple echo program:
@@ -31,7 +33,7 @@
      >   e <- getSystemEncoding
      >   let ?enc = e
      >   str <- getContents
-     >   putStr str     
+     >   putStr str
  -}
 module System.IO.Encoding
     (getSystemEncoding
@@ -54,14 +56,16 @@
     ,print
     ,hPrint) where
 
-import Foreign.C.String
+import           Foreign.C.String
 
-import Data.Encoding
-import System.IO (Handle,stdout,stdin)
-import Prelude hiding (print,getContents,readFile,writeFile,appendFile,interact,putStr,putStrLn,getChar,getLine,putChar)
+import           Control.Monad.Reader (runReaderT)
+import qualified Data.ByteString      as BS
 import qualified Data.ByteString.Lazy as LBS
-import qualified Data.ByteString as BS
-import Control.Monad.Reader (runReaderT)
+import           Data.Encoding
+import           Prelude              hiding (appendFile, getChar, getContents,
+                                       getLine, interact, print, putChar,
+                                       putStr, putStrLn, readFile, writeFile)
+import           System.IO            (Handle, stdin, stdout)
 
 -- | Like the normal 'System.IO.hGetContents', but decodes the input using an
 --   encoding.
diff --git a/encoding.cabal b/encoding.cabal
--- a/encoding.cabal
+++ b/encoding.cabal
@@ -1,5 +1,5 @@
 Name:		encoding
-Version:	0.8.3
+Version:	0.8.4
 Author:		Henning Günther
 Maintainer:	daniel@wagner-home.com
 License:	BSD3
@@ -9,7 +9,7 @@
   Haskell has excellect handling of unicode, the Char type covers all unicode chars. Unfortunately, there's no possibility to read or write something to the outer world in an encoding other than ascii due to the lack of support for encodings. This library should help with that.
 Category:	Codec
 Homepage:	http://code.haskell.org/encoding/
-Cabal-Version:	>=1.8
+Cabal-Version:	>=1.10
 Build-Type:	Custom
 Extra-Source-Files:
   CHANGELOG
@@ -32,7 +32,7 @@
 Source-Repository this
   Type:         git
   Location:     http://github.com/dmwit/encoding
-  Tag:          0.8.3
+  Tag:          0.8.4
 
 Custom-Setup
   Setup-Depends: base >=3 && <5,
@@ -53,7 +53,7 @@
                  mtl >=2.0 && <2.3,
                  regex-compat >=0.71 && <0.95
 
-  Extensions: CPP
+  Default-Language: Haskell2010
 
   Exposed-Modules:
     Data.Encoding
@@ -125,7 +125,6 @@
     Data.Static
     Data.CharMap
   Autogen-Modules:
-    Data.Encoding.ISO88591
     Data.Encoding.ISO88592
     Data.Encoding.ISO88593
     Data.Encoding.ISO88594
@@ -167,7 +166,7 @@
     Data.Encoding.CP869
     Data.Encoding.CP874
     Data.Encoding.CP932
-    Data.Encoding.GB18030  
+    Data.Encoding.GB18030
     Data.Encoding.JISX0201
     Data.Encoding.JISX0208
     Data.Encoding.JISX0212
@@ -195,3 +194,4 @@
                      , HUnit
                      , QuickCheck
   ghc-options:         -threaded -rtsopts -with-rtsopts=-N
+  Default-Language:  Haskell2010
