diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -1,5 +1,16 @@
 # ChangeLog / ReleaseNotes
 
+
+## Version 0.6.1.0
+
+* Function `mkSalt` rejects empty `ByteString` and returns `Nothing` for it.
+* Using `NoImplicitPrelude` language extension.
+* Example program is once again compilable.
+* Minor documentation updates including `README.md`.
+* Uploaded to [Hackage][]:
+  <http://hackage.haskell.org/package/apache-md5-0.6.1.0>
+
+
 ## Version 0.6.0.0
 
 * Introducing Salt newtype wrapper to guarantee that it consists of only
diff --git a/LICENSE b/LICENSE
--- a/LICENSE
+++ b/LICENSE
@@ -1,4 +1,4 @@
-Copyright (c) 2009, 2010, 2012, 2013, Peter Trsko
+Copyright (c) 2009, 2010, 2012 - 2014, Peter Trsko
 
 All rights reserved.
 
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -51,7 +51,8 @@
 import qualified Data.ByteString as BS (index, pack)
 import qualified Data.ByteString.Char8 as C8 (concat, pack, putStrLn, singleton)
     -- bytestring package http://hackage.haskell.org/package/bytestring
-import Data.Digest.ApacheMD5 (Salt, alpha64, apacheMD5, mkSalt, unSalt)
+import Data.Digest.ApacheMD5 (Salt, apacheMD5, mkSalt, unSalt)
+import Data.Digest.ApacheMD5.Internal (alpha64)
 
 
 htpasswdEntry :: String -> String -> Salt -> ByteString
diff --git a/apache-md5.cabal b/apache-md5.cabal
--- a/apache-md5.cabal
+++ b/apache-md5.cabal
@@ -1,5 +1,5 @@
 name:                 apache-md5
-version:              0.6.0.0
+version:              0.6.1.0
 synopsis:             Apache specific MD5 digest algorighm.
 description:
   Haskell implementation of Apache HTTP server specific MD5 digest algorithm
@@ -140,4 +140,4 @@
 source-repository this
   type:                 git
   location:             git://github.com/trskop/apache-md5.git
-  tag:                  v0.6.0.0
+  tag:                  v0.6.1.0
diff --git a/example.hs b/example.hs
--- a/example.hs
+++ b/example.hs
@@ -23,7 +23,8 @@
 import qualified Data.ByteString as BS (index, pack)
 import qualified Data.ByteString.Char8 as C8 (concat, pack, putStrLn, singleton)
     -- bytestring package http://hackage.haskell.org/package/bytestring
-import Data.Digest.ApacheMD5 (Salt, alpha64, apacheMD5, mkSalt, unSalt)
+import Data.Digest.ApacheMD5 (Salt, apacheMD5, mkSalt, unSalt)
+import Data.Digest.ApacheMD5.Internal (alpha64)
 
 
 htpasswdEntry :: String -> String -> Salt -> ByteString
diff --git a/src/Data/Digest/ApacheMD5.hs b/src/Data/Digest/ApacheMD5.hs
--- a/src/Data/Digest/ApacheMD5.hs
+++ b/src/Data/Digest/ApacheMD5.hs
@@ -1,10 +1,12 @@
+{-# LANGUAGE NoImplicitPrelude #-}
 -- |
 -- Module:      Data.Digest.ApacheMD5
 -- Copyright:   (c) 2009, 2010, 2012 - 2014 Peter Trško
 -- License:     BSD3
 -- Maintainer:  Peter Trško <peter.trsko@gmail.com>
 -- Stability:   Provisional
--- Portability: non-portable (depends on non-portable internal module)
+-- Portability: non-portable (NoImplicitPrelude, depends on non-portable
+--              internal module)
 --
 -- ApacheMD5 is one of the hash algorithms used by Apache HTTP server for basic
 -- authentication. It is Apache specific, but e.g. nginx supports this
@@ -27,10 +29,10 @@
     -- usage.  See also @htpasswd@ documentation on
     -- <http://httpd.apache.org/docs/current/programs/htpasswd.html>.
 
-    -- ** Example: Creating htpasswd-like entry
+    -- * Example: Creating htpasswd-like entry
     --
-    -- | Output of this function is not identical to what @htpasswd@ does.  To
-    -- create @htpasswd@-like entry do:
+    -- | Output of 'apacheMD5' function is not identical to what @htpasswd@
+    -- does.  To create @htpasswd@-like entry one needs to do:
     --
     -- > import Data.ByteString (ByteString)
     -- > import qualified Data.ByteString.Char8 as C8 (concat, pack, singleton)
@@ -54,8 +56,12 @@
     )
   where
 
+import Data.Bool ((&&), not, otherwise)
+import Data.Function ((.), ($))
+import Data.Maybe (Maybe(Nothing, Just))
+
 import Data.ByteString (ByteString)
-import qualified Data.ByteString as BS (all)
+import qualified Data.ByteString as BS (all, null)
 
 import Data.Digest.ApacheMD5.Internal (Password, Salt(Salt))
 import qualified Data.Digest.ApacheMD5.Internal as Internal
@@ -66,13 +72,16 @@
     )
 
 
--- | Smart constructor for 'Salt'. It tests all octets to be members of
--- 'Data.Digest.ApacheMD5.Internal.alpha64' by using 'Internal.isAlpha64'
--- predicate.
+-- | Smart constructor for 'Salt'. It tests that provided 'ByteString' is not
+-- empty and that all its octets are members of alphabet used for base 64
+-- encoding 'Data.Digest.ApacheMD5.Internal.alpha64' and it uses
+-- 'Internal.isAlpha64' predicate to do so.
 mkSalt :: ByteString -> Maybe Salt
 mkSalt str
-  | BS.all Internal.isAlpha64 str = Just $ Salt str
-  | otherwise                     = Nothing
+  | isValidSalt = Just $ Salt str
+  | otherwise   = Nothing
+  where
+    isValidSalt = not (BS.null str) && BS.all Internal.isAlpha64 str
 
 -- | Unpack 'Salt' in to 'ByteString'.
 unSalt :: Salt -> ByteString
diff --git a/src/Data/Digest/ApacheMD5/Internal.hs b/src/Data/Digest/ApacheMD5/Internal.hs
--- a/src/Data/Digest/ApacheMD5/Internal.hs
+++ b/src/Data/Digest/ApacheMD5/Internal.hs
@@ -12,6 +12,7 @@
 #endif
 
 {-# LANGUAGE ForeignFunctionInterface #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 
 -- |
 -- Module:      Data.Digest.ApacheMD5.Internal
@@ -20,7 +21,7 @@
 -- Maintainer:  Peter Trško <peter.trsko@gmail.com>
 -- Stability:   Provisional
 -- Portability: non-portable (BangPatterns, CPP, DeriveDataTypeable,
---              DeriveGeneric, ForeignFunctionInterface)
+--              DeriveGeneric, ForeignFunctionInterface, NoImplicitPrelude)
 --
 -- Internal and unsafe functions used for implementing Apache MD5
 -- hash algorithm.
@@ -47,12 +48,27 @@
     )
   where
 
+import Prelude
+    ( Integral(div, mod, rem, toInteger)
+    , Num((+), fromInteger)
+    , Read
+    , Show
+    , fromIntegral
+    )
+
 import Control.Applicative (liftA2)
 import Control.Monad (void)
 import Data.Bits (Bits((.|.), (.&.), shiftL, shiftR))
+import Data.Bool (Bool, (||), (&&), otherwise)
+import Data.Eq (Eq((==)))
+import Data.Function ((.), ($))
+import Data.Int (Int)
+import Data.List (concatMap, foldl1, iterate, map, replicate, take)
+import Data.Ord (Ord((<), (<=), (>), (>=)))
 import Data.Word (Word8, Word16, Word32)
 import Foreign (Ptr)
 import Foreign.C.Types (CChar(..), CULong(..))
+import System.IO (IO)
 import System.IO.Unsafe (unsafePerformIO)
 
 #ifdef WITH_deepseq
@@ -91,7 +107,7 @@
 
 -- | Apache MD5 hash salt. When constructing @.htpasswd@ file it is necessary
 -- for the salt to be consisting of octets from 'alpha64' \"set\". This newtype
--- along with 'mkSalt' smart constructor are here to ensure such invariant.
+-- along with @mkSalt@ smart constructor are here to ensure such invariant.
 newtype Salt = Salt ByteString
   deriving
     ( Eq, Ord, Read, Show
diff --git a/test/benchmark-main.hs b/test/benchmark-main.hs
--- a/test/benchmark-main.hs
+++ b/test/benchmark-main.hs
@@ -1,9 +1,16 @@
 {-# LANGUAGE BangPatterns #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 module Main
     where
 
-import Control.Applicative  ((<$>))
-import Control.Monad (replicateM)
+import Control.Applicative ((<$>))
+import Control.Monad (Monad((>>=), return), replicateM)
+import Data.Bool (Bool(True))
+import Data.Function ((.), ($))
+import Data.Int (Int)
+import Data.String (String)
+import Data.Tuple (uncurry)
+import System.IO (IO)
 
 import Data.ByteString (ByteString)
 
diff --git a/test/unit-tests-main.hs b/test/unit-tests-main.hs
--- a/test/unit-tests-main.hs
+++ b/test/unit-tests-main.hs
@@ -1,13 +1,27 @@
+{-# LANGUAGE NoImplicitPrelude #-}
 module Main (main)
     where
 
+import Prelude (Show(show), error)
+
 import Control.Arrow (Arrow(second))
-import Control.Monad (replicateM, replicateM_, void, when)
+import Control.Monad
+    ( Monad((>>=), return)
+    , replicateM
+    , replicateM_
+    , void
+    , when
+    )
 import Control.Monad.IO.Class (liftIO)
 import Control.Monad.Random
 import qualified Data.ByteString.Char8 as C8
-import Data.Function (on)
+import Data.Eq (Eq((==), (/=)))
+import Data.Function ((.), ($), on)
+import Data.Int (Int)
+import Data.List ((++), break, concat, drop, dropWhile, takeWhile, unlines)
+import Data.String (String)
 import System.Exit (ExitCode(..))
+import System.IO (IO)
 import System.Process (readProcessWithExitCode)
 import Test.Framework
 import Test.Framework.Providers.HUnit (testCase)
