diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,7 @@
+## microstache 1.0.2.3
+
+- Support `parsec-3.1.16.*`
+
 ## microstache 1.0.2.1
 
 - Support `transformers-0.6`
diff --git a/microstache.cabal b/microstache.cabal
--- a/microstache.cabal
+++ b/microstache.cabal
@@ -1,5 +1,5 @@
 name:               microstache
-version:            1.0.2.2
+version:            1.0.2.3
 cabal-version:      >=1.10
 license:            BSD3
 license-file:       LICENSE
diff --git a/src/Text/Microstache/Compile.hs b/src/Text/Microstache/Compile.hs
--- a/src/Text/Microstache/Compile.hs
+++ b/src/Text/Microstache/Compile.hs
@@ -20,13 +20,12 @@
   , compileMustacheText )
 where
 
-import Control.Exception       (throwIO)
-import Control.Monad           (filterM, foldM)
-import Data.Text.Lazy          (Text)
+import Control.Exception (throwIO)
+import Control.Monad     (filterM, foldM)
+import Data.Text.Lazy    (Text)
 import System.Directory
-import Text.Microstache.Parser
-import Text.Microstache.Type
-import Text.Parsec
+       (doesFileExist, getCurrentDirectory, getDirectoryContents)
+import Text.Parsec       (ParseError)
 
 import qualified Data.Map          as Map
 import qualified Data.Text         as T
@@ -36,6 +35,9 @@
 #if !MIN_VERSION_base(4,8,0)
 import Control.Applicative ((<$>))
 #endif
+
+import Text.Microstache.Parser
+import Text.Microstache.Type
 
 -- | Compile all templates in specified directory and select one. Template
 -- files should have extension @mustache@, (e.g. @foo.mustache@) to be
diff --git a/src/Text/Microstache/Parser.hs b/src/Text/Microstache/Parser.hs
--- a/src/Text/Microstache/Parser.hs
+++ b/src/Text/Microstache/Parser.hs
@@ -11,23 +11,33 @@
 -- import the module, because "Text.Microstache" re-exports everything you may
 -- need, import that module instead.
 
+{-# LANGUAGE CPP #-}
 module Text.Microstache.Parser
   ( parseMustache )
 where
 
-import Control.Applicative   hiding (many)
-import Control.Monad
+import Control.Applicative   (Alternative (..), (<$), (<$>))
+import Control.Monad         (unless, void)
 import Data.Char             (isAlphaNum, isSpace)
-import Data.Functor.Identity
+import Data.Functor.Identity (Identity, runIdentity)
 import Data.List             (intercalate)
 import Data.Maybe            (catMaybes)
 import Data.Text.Lazy        (Text)
 import Data.Word             (Word)
-import Text.Microstache.Type
-import Text.Parsec           hiding ((<|>))
+import Text.Parsec
+       (ParseError, ParsecT, Stream, anyChar, between, char, choice, eof,
+       getPosition, getState, label, lookAhead, manyTill, notFollowedBy, oneOf,
+       putState, runParserT, satisfy, sepBy1, sourceColumn, spaces, string, try,
+       (<?>))
 import Text.Parsec.Char ()
 
+import Text.Microstache.Type
+
 import qualified Data.Text as T
+
+#if !MIN_VERSION_base(4,8,0)
+import Control.Applicative (Applicative (..))
+#endif
 
 ----------------------------------------------------------------------------
 -- Parser
diff --git a/src/Text/Microstache/Render.hs b/src/Text/Microstache/Render.hs
--- a/src/Text/Microstache/Render.hs
+++ b/src/Text/Microstache/Render.hs
@@ -28,7 +28,6 @@
 import Data.Semigroup             ((<>))
 import Data.Text                  (Text)
 import Data.Word                  (Word)
-import Text.Microstache.Type
 
 import qualified Data.List.NonEmpty      as NE
 import qualified Data.Map                as Map
@@ -52,8 +51,10 @@
 #endif
 
 #if !MIN_VERSION_base(4,8,0)
-import Control.Applicative
+import Control.Applicative ((<$>))
 #endif
+
+import Text.Microstache.Type
 
 #if !(MIN_VERSION_transformers(0,4,0))
 modify' :: (s -> s) -> State s ()
diff --git a/src/Text/Microstache/Type.hs b/src/Text/Microstache/Type.hs
--- a/src/Text/Microstache/Type.hs
+++ b/src/Text/Microstache/Type.hs
@@ -30,17 +30,18 @@
   )
 where
 
-import Control.DeepSeq
+import Control.DeepSeq   (NFData (..))
 import Control.Exception (Exception (..))
 import Data.Data         (Data)
 import Data.Map          (Map)
-import Data.Semigroup
+import Data.Monoid       (Monoid (..))
+import Data.Semigroup    (Semigroup (..))
 import Data.String       (IsString (..))
 import Data.Text         (Text)
 import Data.Typeable     (Typeable)
 import Data.Word         (Word)
 import GHC.Generics
-import Text.Parsec
+import Text.Parsec       (ParseError)
 
 import qualified Data.Map  as Map
 import qualified Data.Text as T
