diff --git a/changes.md b/changes.md
--- a/changes.md
+++ b/changes.md
@@ -1,3 +1,6 @@
+# 0.5.0.0
+    - Add support for 'cryptoids-class'
+
 # 0.4.0.0
     - Expose 'cipherBlockSize'
     - Adjust 'Data.CryptoID.Poly' to allow for more dynamic padding
diff --git a/cryptoids.cabal b/cryptoids.cabal
--- a/cryptoids.cabal
+++ b/cryptoids.cabal
@@ -1,38 +1,43 @@
 name: cryptoids
-version: 0.4.0.0
+version: 0.5.0.0
 cabal-version: >=1.10
 build-type: Simple
 license: BSD3
 license-file: LICENSE
-maintainer: aethoago@141.li
+maintainer: Gregor Kleen <aethoago@141.li>
 synopsis: Reversable and secure encoding of object ids as a bytestring
 category: cryptography
-author: Gregor Kleen
+author: Gregor Kleen <aethoago@141.li>
 extra-source-files:
     changes.md
 
 source-repository head
     type: git
-    location: https://git.rheperire.org/cryptoids
-    subdir: cryptoids
+    location: https://git.rheperire.org/cryptoids/cryptoids
 
 library
     exposed-modules:
         Data.CryptoID.Poly
+        Data.CryptoID.Poly.ImplicitNamespace
         Data.CryptoID.ByteString
+        Data.CryptoID.ByteString.ImplicitNamespace
     build-depends:
-        base >=4.9.1.0 && <4.11,
-        cryptoids-types ==0.0.0,
-        cryptonite >=0.23 && <0.25,
-        bytestring >=0.10.8.1 && <0.11,
-        binary >=0.8.3.0 && <0.9,
-        memory >=0.14.6 && <0.15,
+        base >=4.10.1.0 && <4.11,
+        binary >=0.8.5.1 && <0.9,
+        bytestring >=0.10.8.2 && <0.11,
+        cryptoids-class >=0.0.0 && <0.1,
+        cryptoids-types >=0.0.0 && <0.1,
+        cryptonite ==0.24.*,
+        directory >=1.3.0.2 && <1.4,
         exceptions >=0.8.3 && <0.9,
-        filepath >=1.4.1.1 && <1.5,
-        directory >=1.3.0.0 && <1.4
+        filepath >=1.4.1.2 && <1.5,
+        memory >=0.14.11 && <0.15
     default-language: Haskell2010
     default-extensions: RankNTypes DataKinds GeneralizedNewtypeDeriving
-                        ViewPatterns RecordWildCards FlexibleContexts
+                        ViewPatterns RecordWildCards FlexibleContexts FlexibleInstances
+                        MultiParamTypeClasses TypeFamilies ConstraintKinds
     hs-source-dirs: src
+    other-modules:
+        Paths_cryptoids
     ghc-options: -Wall -fno-warn-name-shadowing
 
diff --git a/src/Data/CryptoID/ByteString.hs b/src/Data/CryptoID/ByteString.hs
--- a/src/Data/CryptoID/ByteString.hs
+++ b/src/Data/CryptoID/ByteString.hs
@@ -1,4 +1,5 @@
 {-# LANGUAGE ScopedTypeVariables #-}
+{-# OPTIONS_GHC -fno-warn-orphans #-}
 
 {-|
 Description: Encryption of bytestrings using a type level nonce for determinism
@@ -13,7 +14,8 @@
 payloads within all 'ByteString's of the correct length.
 -}
 module Data.CryptoID.ByteString
-  ( CryptoID(..)
+  ( CryptoByteString
+  , HasCryptoByteString
   , CryptoIDKey
   , genKey, readKeyFile
   , encrypt
@@ -21,9 +23,13 @@
   , CryptoIDError(..)
   , CryptoCipher, CryptoHash
   , cipherBlockSize
+  , module Data.CryptoID
+  , module Data.CryptoID.Class
   ) where
 
 import Data.CryptoID
+import Data.CryptoID.Class hiding (encrypt, decrypt)
+import qualified Data.CryptoID.Class as Class (encrypt, decrypt)
 
 import Data.Binary
 import Data.Binary.Put
@@ -174,7 +180,12 @@
           return key
       | otherwise = throw e
 
+
+type CryptoByteString (namespace :: Symbol) = CryptoID namespace ByteString
+
+type HasCryptoByteString (namespace :: Symbol) = HasCryptoID namespace ByteString
   
+
 -- | Use 'CryptoHash' to generate a 'Digest' of the Symbol passed as proxy type
 namespace' :: forall proxy namespace m.
               ( KnownSymbol namespace, MonadThrow m
@@ -192,9 +203,9 @@
 
 -- | Encrypt a serialized value
 encrypt :: forall m namespace.
-           ( KnownSymbol namespace
-           , MonadThrow m
-           ) => CryptoIDKey -> ByteString -> m (CryptoID namespace ByteString)
+             ( KnownSymbol namespace
+             , MonadThrow m
+             ) => CryptoIDKey -> ByteString -> m (CryptoID namespace ByteString)
 encrypt (keyMaterial -> key) plaintext = do
   cipher <- cryptoFailable (cipherInit key :: CryptoFailable CryptoCipher)
   namespace <- namespace' (Proxy :: Proxy namespace)
@@ -205,10 +216,20 @@
 
 -- | Decrypt a serialized value
 decrypt :: forall m namespace.
-           ( KnownSymbol namespace
-           , MonadThrow m
-           ) => CryptoIDKey -> CryptoID namespace ByteString -> m ByteString
+             ( KnownSymbol namespace
+             , MonadThrow m
+             ) => CryptoIDKey -> CryptoID namespace ByteString -> m ByteString
 decrypt (keyMaterial -> key) CryptoID{..} = do
   cipher <- cryptoFailable (cipherInit key :: CryptoFailable CryptoCipher)
   namespace <- namespace' (Proxy :: Proxy namespace)
   return $ cbcDecrypt cipher namespace ciphertext
+
+-- | This instance is somewhat improper in that it works only for plaintexts whose length is a multiple of 'cipherBlockSize'
+--
+-- Improper plaintext lengths throw 'PlaintextIsWrongLength'
+instance ( MonadCrypto m
+         , MonadCryptoKey m ~ CryptoIDKey
+         , KnownSymbol namespace
+         ) => HasCryptoID namespace ByteString ByteString m where
+  encrypt = cryptoIDKey . flip encrypt
+  decrypt = cryptoIDKey . flip decrypt
diff --git a/src/Data/CryptoID/ByteString/ImplicitNamespace.hs b/src/Data/CryptoID/ByteString/ImplicitNamespace.hs
new file mode 100644
--- /dev/null
+++ b/src/Data/CryptoID/ByteString/ImplicitNamespace.hs
@@ -0,0 +1,19 @@
+{-|
+Description: Encryption of bytestrings with implicit type level nonces
+License: BSD3
+-}
+module Data.CryptoID.ByteString.ImplicitNamespace
+  ( CryptoByteString
+  , HasCryptoByteString
+  , module Data.CryptoID.ByteString
+  , module Data.CryptoID.Class.ImplicitNamespace
+  ) where
+
+import Data.CryptoID.Class.ImplicitNamespace
+
+import Data.CryptoID.ByteString hiding (encrypt, decrypt, CryptoID, HasCryptoID, CryptoByteString, HasCryptoByteString)
+
+import Data.ByteString (ByteString)
+
+type CryptoByteString plaintext = CryptoID ByteString plaintext
+type HasCryptoByteString plaintext = HasCryptoID ByteString plaintext
diff --git a/src/Data/CryptoID/Poly.hs b/src/Data/CryptoID/Poly.hs
--- a/src/Data/CryptoID/Poly.hs
+++ b/src/Data/CryptoID/Poly.hs
@@ -1,7 +1,8 @@
 {-# LANGUAGE ScopedTypeVariables #-}
+{-# OPTIONS_GHC -fno-warn-orphans #-}
 
 {-|
-Description: Encryption of bytestrings using a type level nonce for determinism
+Description: Encryption of serializable values using a type level nonce for determinism
 License: BSD3
 
 Given a value of an arbitrary serializable type (like 'Int') we perform
@@ -18,18 +19,15 @@
 \text{mod} \ 64}\) where \(l\) is the length of the serialized payload in bits.
 -}
 module Data.CryptoID.Poly
-  ( CryptoID(..)
-  , CryptoIDKey
-  , genKey, readKeyFile
-  , encrypt
+  ( encrypt
   , decrypt
-  , CryptoIDError(..)
-  , CryptoCipher, CryptoHash
+  , module Data.CryptoID.ByteString
   ) where
 
-import Data.CryptoID
 import Data.CryptoID.ByteString hiding (encrypt, decrypt)
 import qualified Data.CryptoID.ByteString as ByteString (encrypt, decrypt)
+import Data.CryptoID.Class (HasCryptoID)
+import qualified Data.CryptoID.Class as Class (HasCryptoID(..))
 
 import Data.Binary
 
@@ -87,3 +85,11 @@
     Right (rem, _, res)
       | Lazy.ByteString.all (== 0) rem -> return res
       | otherwise -> throwM InvalidNamespaceDetected
+
+instance ( MonadCrypto m
+         , MonadCryptoKey m ~ CryptoIDKey
+         , KnownSymbol namespace
+         , Binary a
+         ) => HasCryptoID namespace ByteString a m where
+  encrypt = cryptoIDKey . flip (encrypt (const $ return Nothing) return)
+  decrypt = cryptoIDKey . flip (decrypt return)
diff --git a/src/Data/CryptoID/Poly/ImplicitNamespace.hs b/src/Data/CryptoID/Poly/ImplicitNamespace.hs
new file mode 100644
--- /dev/null
+++ b/src/Data/CryptoID/Poly/ImplicitNamespace.hs
@@ -0,0 +1,12 @@
+{-|
+Description: Encryption of serializable values with implicit type level nonces
+License: BSD3
+-}
+module Data.CryptoID.Poly.ImplicitNamespace
+  ( module Data.CryptoID.Poly
+  , module Data.CryptoID.Class.ImplicitNamespace
+  ) where
+
+import Data.CryptoID.Class.ImplicitNamespace
+
+import Data.CryptoID.Poly hiding (encrypt, decrypt, CryptoID, HasCryptoID)
