diff --git a/iteratee-parsec.cabal b/iteratee-parsec.cabal
--- a/iteratee-parsec.cabal
+++ b/iteratee-parsec.cabal
@@ -1,5 +1,5 @@
 Name:                     iteratee-parsec
-Version:                  0.0.5
+Version:                  0.0.6
 Synopsis:                 Package allowing parsec parser initeratee
 Description:              Package providing instances of Stream in
                           Iteratee monad.
@@ -17,6 +17,7 @@
                           iteratee >= 0.4 && < 0.7,
                           ListLike >= 1.0 && < 2,
                           parsec >= 3.1 && < 3.2,
+                          reference == 0.1,
                           transformers >= 0.2.0.0 && < 0.3
   Exposed-Modules:        Text.Parsec.Iteratee,
                           Text.Parsec.Iteratee.Chunk,
diff --git a/src/Text/Parsec/Iteratee/LinkedList.hs b/src/Text/Parsec/Iteratee/LinkedList.hs
--- a/src/Text/Parsec/Iteratee/LinkedList.hs
+++ b/src/Text/Parsec/Iteratee/LinkedList.hs
@@ -26,54 +26,16 @@
     safeParsecIteratee,
   )
 where
-import Control.Concurrent.MVar
 import Control.Exception
 import Control.Monad
-import Control.Monad.ST
 import Control.Monad.Trans.Class
 import Data.Monoid
 import Data.Iteratee
-import Data.IORef
 import Data.ListLike as LL
-import Data.STRef
+import Data.Reference
 import Data.Typeable
 import Text.Parsec hiding (Stream)
 import qualified Text.Parsec as P
-
--- | Class notifing a reference in monad.
--- Probably should be in separate module.
-class Monad m => Reference r m where
-    -- | Create new reference
-    newRef :: a -- ^ An initial value
-           -> m (r a) -- ^ A new reference
-    -- | Reads a reference
-    readRef :: r a -- ^ Reference
-            -> m a -- ^ Value hold by reference
-    -- | Write to reference
-    writeRef :: r a -- ^ Reference
-             -> a -- ^ New value
-             -> m ()
-    -- | Modify the reference. Default implementation is provided but it MUST
-    -- be overloaded if the reference is atomic to provide an atomic write
-    modifyRef :: r a -- ^ Reference
-              -> (a -> m (a, b)) -- ^ Computation
-              -> m b -- ^ Result of computation
-    modifyRef r f = readRef r >>= f >>= \(a, b) -> writeRef r a >> return b
-
-instance Reference IORef IO where
-    newRef = newIORef
-    readRef = readIORef
-    writeRef = writeIORef
-
-instance Reference (STRef s) (ST s) where
-    newRef = newSTRef
-    readRef = readSTRef
-    writeRef = writeSTRef
-
-instance Reference MVar IO where
-    newRef = newMVar
-    readRef = readMVar
-    writeRef = putMVar
 
 -- | Specify the 3 possible states of next cursor - existence, non-existence
 -- and not being evaluated
