diff --git a/Data/Encoding/ASCII.hs b/Data/Encoding/ASCII.hs
--- a/Data/Encoding/ASCII.hs
+++ b/Data/Encoding/ASCII.hs
@@ -1,10 +1,12 @@
 {-# LANGUAGE DeriveDataTypeable #-}
 module Data.Encoding.ASCII where
 
+import Control.Throws
 import Data.Char
 import Data.Encoding.Base
 import Data.Encoding.ByteSource
 import Data.Encoding.ByteSink
+import Data.Encoding.Exception
 import Data.Typeable
 
 data ASCII = ASCII deriving (Show,Eq,Typeable)
@@ -13,6 +15,7 @@
     decodeChar _ = do
       w <- fetchWord8
       return $ chr $ fromIntegral w
-    encodeChar _ c = do
-      pushWord8 $ fromIntegral $ ord c
+    encodeChar enc c
+      | encodeable enc c = pushWord8 . fromIntegral . ord $ c
+      | otherwise        = throwException . HasNoRepresentation $ c
     encodeable _ c = c < '\128'
diff --git a/Data/Encoding/ByteSink.hs b/Data/Encoding/ByteSink.hs
--- a/Data/Encoding/ByteSink.hs
+++ b/Data/Encoding/ByteSink.hs
@@ -1,4 +1,4 @@
-{-# LANGUAGE FlexibleInstances,FlexibleContexts,MultiParamTypeClasses #-}
+{-# LANGUAGE FlexibleInstances,FlexibleContexts,MultiParamTypeClasses,CPP #-}
 module Data.Encoding.ByteSink where
 
 import Data.Encoding.Exception
@@ -101,10 +101,12 @@
     pushWord64be w = PutME $ Right (putWord64be w,())
     pushWord64le w = PutME $ Right (putWord64le w,())
 
+#ifndef MIN_VERSION_mtl(2,0,0,0)
 instance Monad (Either EncodingException) where
     return x = Right x
     Left err >>= g = Left err
     Right x >>= g = g x
+#endif
 
 instance Throws EncodingException (State (Seq Char)) where
     throwException = throw
diff --git a/Data/Encoding/ByteSource.hs b/Data/Encoding/ByteSource.hs
--- a/Data/Encoding/ByteSource.hs
+++ b/Data/Encoding/ByteSource.hs
@@ -1,4 +1,4 @@
-{-# LANGUAGE FlexibleInstances,FlexibleContexts,MultiParamTypeClasses #-}
+{-# LANGUAGE FlexibleInstances,FlexibleContexts,MultiParamTypeClasses,CPP #-}
 module Data.Encoding.ByteSource where
 
 import Data.Encoding.Exception
@@ -121,10 +121,12 @@
       put chs
       return res
 
+#ifndef MIN_VERSION_mtl(2,0,0,0)
 instance Monad (Either DecodingException) where
     return = Right
     (Left err) >>= g = Left err
     (Right x) >>= g = g x
+#endif
 
 instance ByteSource (StateT [Char] (Either DecodingException)) where
     sourceEmpty = gets null
diff --git a/NEWS b/NEWS
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,9 @@
+Changes from 0.6.3 to 0.6.4
+---------------------------
+
+* Throw an error when encoding non-ascii chars with ascii
+* Fix compilation with mtl-2
+
 Changes from 0.6.2 to 0.6.3
 ---------------------------
 
diff --git a/encoding.cabal b/encoding.cabal
--- a/encoding.cabal
+++ b/encoding.cabal
@@ -1,5 +1,5 @@
 Name:		encoding
-Version:	0.6.3
+Version:	0.6.4
 Author:		Henning Günther
 Maintainer:	h.guenther@tu-bs.de
 License:	BSD3
