diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -1,7 +1,7 @@
 # scanner-attoparsec
 Inject attoparsec parser with backtracking into non-backtracking scanner
 
-[![Build Status](https://travis-ci.org/Yuras/scanner-attoparsec.svg?branch=master)](https://travis-ci.org/Yuras/scanner-attoparsec)
+[![Haskell CI](https://github.com/Yuras/scanner-attoparsec/actions/workflows/build.yml/badge.svg)](https://github.com/Yuras/scanner-attoparsec/actions/workflows/build.yml)
 
 Backtracking kills performance, so scanner package doesn't support it.
 But sometimes you just need it. E.g. you have a mostly non-backtracking
diff --git a/changelog.md b/changelog.md
--- a/changelog.md
+++ b/changelog.md
@@ -1,4 +1,9 @@
 
+0.2
+
+* add toAtto
+
+
 0.1
 
 * initial implementation
diff --git a/lib/Scanner/Attoparsec.hs b/lib/Scanner/Attoparsec.hs
--- a/lib/Scanner/Attoparsec.hs
+++ b/lib/Scanner/Attoparsec.hs
@@ -1,15 +1,19 @@
 
 module Scanner.Attoparsec
 ( atto
+, toAtto
 )
 where
 
 import qualified Scanner
 import Scanner.Internal (Scanner (Scanner))
 
+import Data.Maybe
+import qualified Data.ByteString as ByteString
 import qualified Data.Attoparsec.ByteString as Atto
 
 {-# INLINE atto #-}
+-- | Convert attoparsec parser into a scanner
 atto :: Atto.Parser a -> Scanner a
 atto p = Scanner $ \bs next ->
   case Atto.parse p bs of
@@ -22,3 +26,22 @@
       Atto.Done bs' r -> next bs' r
       Atto.Fail bs' _ err -> Scanner.Fail bs' err
       Atto.Partial cont' -> slowPath cont' next
+
+-- | Convert scanner to attoparsec parser
+--
+-- @since 0.2
+toAtto :: Scanner a -> Atto.Parser a
+toAtto s = go (Scanner.scan s)
+  where
+  go run = do
+    chunk <- fromMaybe ByteString.empty <$> Atto.getChunk
+    case run chunk of
+      Scanner.Done bs r -> do
+        _ <- Atto.take (ByteString.length chunk - ByteString.length bs)
+        return r
+      Scanner.Fail bs msg -> do
+        _ <- Atto.take (ByteString.length chunk - ByteString.length bs)
+        fail msg
+      Scanner.More next -> do
+        _ <- Atto.take (ByteString.length chunk)
+        go next
diff --git a/scanner-attoparsec.cabal b/scanner-attoparsec.cabal
--- a/scanner-attoparsec.cabal
+++ b/scanner-attoparsec.cabal
@@ -1,5 +1,5 @@
 name:                scanner-attoparsec
-version:             0.1
+version:             0.2
 synopsis:            Inject attoparsec parser with backtracking into non-backtracking scanner
 homepage:            https://github.com/Yuras/scanner-attoparsec
 license:             BSD3
@@ -28,8 +28,9 @@
   other-modules:       Data.Either
   ghc-options:         -O2
   build-depends:       base <5
-                     , attoparsec
-                     , scanner
+                     , bytestring
+                     , attoparsec >= 0.14.1
+                     , scanner <0.4
   hs-source-dirs:      lib, compat
   default-language:    Haskell2010
 
@@ -37,6 +38,7 @@
   type:                exitcode-stdio-1.0
   hs-source-dirs:      spec, compat
   main-is:             spec.hs
+  other-modules:       Data.Either
   build-depends:       base <5
                      , bytestring
                      , scanner
