diff --git a/eventful-sqlite.cabal b/eventful-sqlite.cabal
--- a/eventful-sqlite.cabal
+++ b/eventful-sqlite.cabal
@@ -3,7 +3,7 @@
 -- see: https://github.com/sol/hpack
 
 name:           eventful-sqlite
-version:        0.1.3
+version:        0.2.0
 synopsis:       SQLite implementations for eventful
 description:    SQLite implementations for eventful
 category:       Database,Eventsourcing,SQLite
@@ -65,28 +65,5 @@
     , persistent-sqlite
   other-modules:
       Eventful.Store.SqliteSpec
-      HLint
       Eventful.Store.Sqlite
-  default-language: Haskell2010
-
-test-suite style
-  type: exitcode-stdio-1.0
-  main-is: HLint.hs
-  hs-source-dirs:
-      tests
-  ghc-options: -Wall
-  build-depends:
-      base >= 4.9 && < 5
-    , eventful-core
-    , eventful-sql-common
-    , aeson
-    , bytestring
-    , mtl
-    , persistent
-    , text
-    , uuid
-    , hlint
-  other-modules:
-      Eventful.Store.SqliteSpec
-      Spec
   default-language: Haskell2010
diff --git a/src/Eventful/Store/Sqlite.hs b/src/Eventful/Store/Sqlite.hs
--- a/src/Eventful/Store/Sqlite.hs
+++ b/src/Eventful/Store/Sqlite.hs
@@ -5,7 +5,7 @@
 -- | Defines an Sqlite event store.
 
 module Eventful.Store.Sqlite
-  ( sqliteEventStore
+  ( sqliteEventStoreWriter
   , initializeSqliteEventStore
   , module Eventful.Store.Class
   , module Eventful.Store.Sql
@@ -20,19 +20,16 @@
 import Eventful.Store.Class
 import Eventful.Store.Sql
 
--- | An 'EventStore' that uses an SQLite database as a backend. Use
+-- | An 'EventStoreWriter' that uses an SQLite database as a backend. Use
 -- 'SqlEventStoreConfig' to configure this event store.
-sqliteEventStore
+sqliteEventStoreWriter
   :: (MonadIO m, PersistEntity entity, PersistEntityBackend entity ~ SqlBackend)
   => SqlEventStoreConfig entity serialized
-  -> EventStore serialized (SqlPersistT m)
-sqliteEventStore config =
-  let
+  -> EventStoreWriter (SqlPersistT m) serialized
+sqliteEventStoreWriter config = EventStoreWriter $ transactionalExpectedWriteHelper getLatestVersion storeEvents'
+  where
     getLatestVersion = sqlMaxEventVersion config maxSqliteVersionSql
-    getEvents = sqlGetAggregateEvents config
     storeEvents' = sqlStoreEvents config Nothing maxSqliteVersionSql
-    storeEvents = transactionalExpectedWriteHelper getLatestVersion storeEvents'
-  in EventStore{..}
 
 maxSqliteVersionSql :: DBName -> DBName -> DBName -> Text
 maxSqliteVersionSql (DBName tableName) (DBName uuidFieldName) (DBName versionFieldName) =
diff --git a/tests/Eventful/Store/SqliteSpec.hs b/tests/Eventful/Store/SqliteSpec.hs
--- a/tests/Eventful/Store/SqliteSpec.hs
+++ b/tests/Eventful/Store/SqliteSpec.hs
@@ -12,47 +12,51 @@
 spec = do
   describe "Sqlite event store" $ do
     eventStoreSpec sqliteStoreRunner
-    sequencedEventStoreSpec sqliteStoreGlobalRunner
+    globalStreamEventStoreSpec sqliteStoreGlobalRunner
 
   -- This is really a test for runEventStoreUsing and
-  -- runGloballyOrderedEventStoreUsing. This is just a good place to put it.
-  describe "runEventStoreUsing and runGloballyOrderedEventStoreUsing for the sqlite store" $ do
+  -- runGlobalStreamEventStoreUsing. This is just a good place to put it.
+  describe "runEventStoreUsing and runGlobalStreamEventStoreUsing for the sqlite store" $ do
     eventStoreSpec sqliteIOStoreRunner
-    sequencedEventStoreSpec sqliteIOStoreGlobalRunner
+    globalStreamEventStoreSpec sqliteIOStoreGlobalRunner
 
-makeStore :: IO (EventStore CounterEvent (SqlPersistT IO), ConnectionPool)
+makeStore :: IO (EventStoreWriter (SqlPersistT IO) CounterEvent, VersionedEventStoreReader (SqlPersistT IO) CounterEvent, ConnectionPool)
 makeStore = do
   pool <- liftIO $ runNoLoggingT (createSqlitePool ":memory:" 1)
-  let store = serializedEventStore jsonStringSerializer $ sqliteEventStore defaultSqlEventStoreConfig
+  let
+    writer = serializedEventStoreWriter jsonStringSerializer $ sqliteEventStoreWriter defaultSqlEventStoreConfig
+    reader = serializedVersionedEventStoreReader jsonStringSerializer $ sqlEventStoreReader defaultSqlEventStoreConfig
   initializeSqliteEventStore defaultSqlEventStoreConfig pool
-  return (store, pool)
+  return (writer, reader, pool)
 
 sqliteStoreRunner :: EventStoreRunner (SqlPersistT IO)
 sqliteStoreRunner = EventStoreRunner $ \action -> do
-  (store, pool) <- makeStore
-  runSqlPool (action store) pool
+  (writer, reader, pool) <- makeStore
+  runSqlPool (action writer reader) pool
 
-sqliteStoreGlobalRunner :: GloballyOrderedEventStoreRunner (SqlPersistT IO)
-sqliteStoreGlobalRunner = GloballyOrderedEventStoreRunner $ \action -> do
-  (store, pool) <- makeStore
-  let globalStore = serializedGloballyOrderedEventStore jsonStringSerializer (sqlGloballyOrderedEventStore defaultSqlEventStoreConfig)
-  runSqlPool (action store globalStore) pool
+sqliteStoreGlobalRunner :: GlobalStreamEventStoreRunner (SqlPersistT IO)
+sqliteStoreGlobalRunner = GlobalStreamEventStoreRunner $ \action -> do
+  (writer, _, pool) <- makeStore
+  let globalStore = serializedGlobalEventStoreReader jsonStringSerializer (sqlGlobalEventStoreReader defaultSqlEventStoreConfig)
+  runSqlPool (action writer globalStore) pool
 
-makeIOStore :: IO (EventStore CounterEvent IO, ConnectionPool)
+makeIOStore :: IO (EventStoreWriter IO CounterEvent, VersionedEventStoreReader IO CounterEvent, ConnectionPool)
 makeIOStore = do
-  (store, pool) <- makeStore
-  let store' = runEventStoreUsing (flip runSqlPool pool) store
-  return (store', pool)
+  (writer, reader, pool) <- makeStore
+  let
+    writer' = runEventStoreWriterUsing (flip runSqlPool pool) writer
+    reader' = runEventStoreReaderUsing (flip runSqlPool pool) reader
+  return (writer', reader', pool)
 
 sqliteIOStoreRunner :: EventStoreRunner IO
 sqliteIOStoreRunner = EventStoreRunner $ \action -> do
-  (store, _) <- makeIOStore
-  action store
+  (writer, reader, _) <- makeIOStore
+  action writer reader
 
-sqliteIOStoreGlobalRunner :: GloballyOrderedEventStoreRunner IO
-sqliteIOStoreGlobalRunner = GloballyOrderedEventStoreRunner $ \action -> do
-  (store, pool) <- makeIOStore
+sqliteIOStoreGlobalRunner :: GlobalStreamEventStoreRunner IO
+sqliteIOStoreGlobalRunner = GlobalStreamEventStoreRunner $ \action -> do
+  (writer, _, pool) <- makeIOStore
   let
-    globalStore = serializedGloballyOrderedEventStore jsonStringSerializer (sqlGloballyOrderedEventStore defaultSqlEventStoreConfig)
-    globalStore' = runGloballyOrderedEventStoreUsing (flip runSqlPool pool) globalStore
-  action store globalStore'
+    globalStore = serializedGlobalEventStoreReader jsonStringSerializer (sqlGlobalEventStoreReader defaultSqlEventStoreConfig)
+    globalStore' = runEventStoreReaderUsing (flip runSqlPool pool) globalStore
+  action writer globalStore'
diff --git a/tests/HLint.hs b/tests/HLint.hs
deleted file mode 100644
--- a/tests/HLint.hs
+++ /dev/null
@@ -1,20 +0,0 @@
-module Main (main) where
-
-import Language.Haskell.HLint (hlint)
-import System.Exit (exitFailure, exitSuccess)
-
-import Prelude (String, IO, null)
-
-arguments :: [String]
-arguments =
-  [ "src"
-  , "tests"
-  , "-i=Redundant do"
-  , "-i=Unused LANGUAGE pragma" -- This fails on DeriveGeneric
-  , "-i=Use section"
-  ]
-
-main :: IO ()
-main = do
-  hints <- hlint arguments
-  if null hints then exitSuccess else exitFailure
