diff --git a/eventful-postgresql.cabal b/eventful-postgresql.cabal
--- a/eventful-postgresql.cabal
+++ b/eventful-postgresql.cabal
@@ -3,7 +3,7 @@
 -- see: https://github.com/sol/hpack
 
 name:           eventful-postgresql
-version:        0.1.3
+version:        0.2.0
 synopsis:       Postgres implementations for eventful
 description:    Postgres implementations for eventful
 category:       Database,Eventsourcing,PostgreSQL
@@ -63,27 +63,5 @@
     , persistent-postgresql
   other-modules:
       Eventful.Store.PostgresqlSpec
-      HLint
       Eventful.Store.Postgresql
-  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
-    , hlint
-  other-modules:
-      Eventful.Store.PostgresqlSpec
-      Spec
   default-language: Haskell2010
diff --git a/src/Eventful/Store/Postgresql.hs b/src/Eventful/Store/Postgresql.hs
--- a/src/Eventful/Store/Postgresql.hs
+++ b/src/Eventful/Store/Postgresql.hs
@@ -1,11 +1,10 @@
 {-# LANGUAGE OverloadedStrings #-}
-{-# LANGUAGE RecordWildCards #-}
 {-# LANGUAGE TypeFamilies #-}
 
 -- | Defines an Postgresql event store.
 
 module Eventful.Store.Postgresql
-  ( postgresqlEventStore
+  ( postgresqlEventStoreWriter
   , initializePostgresqlEventStore
   , module Eventful.Store.Class
   , module Eventful.Store.Sql
@@ -22,17 +21,14 @@
 
 -- | An 'EventStore' that uses a PostgreSQL database as a backend. Use
 -- 'SqlEventStoreConfig' to configure this event store.
-postgresqlEventStore
+postgresqlEventStoreWriter
   :: (MonadIO m, PersistEntity entity, PersistEntityBackend entity ~ SqlBackend)
   => SqlEventStoreConfig entity serialized
-  -> EventStore serialized (SqlPersistT m)
-postgresqlEventStore config =
-  let
+  -> EventStoreWriter (SqlPersistT m) serialized
+postgresqlEventStoreWriter config = EventStoreWriter $ transactionalExpectedWriteHelper getLatestVersion storeEvents'
+  where
     getLatestVersion = sqlMaxEventVersion config maxPostgresVersionSql
-    getEvents = sqlGetAggregateEvents config
     storeEvents' = sqlStoreEvents config (Just tableLockFunc) maxPostgresVersionSql
-    storeEvents = transactionalExpectedWriteHelper getLatestVersion storeEvents'
-  in EventStore{..}
 
 maxPostgresVersionSql :: DBName -> DBName -> DBName -> Text
 maxPostgresVersionSql (DBName tableName) (DBName uuidFieldName) (DBName versionFieldName) =
diff --git a/tests/Eventful/Store/PostgresqlSpec.hs b/tests/Eventful/Store/PostgresqlSpec.hs
--- a/tests/Eventful/Store/PostgresqlSpec.hs
+++ b/tests/Eventful/Store/PostgresqlSpec.hs
@@ -15,20 +15,20 @@
 spec = do
   describe "Postgres event store" $ do
     eventStoreSpec postgresStoreRunner
-    sequencedEventStoreSpec postgresStoreGlobalRunner
+    globalStreamEventStoreSpec postgresStoreGlobalRunner
 
-makeStore :: (MonadIO m) => m (EventStore CounterEvent (SqlPersistT m), ConnectionPool)
+makeStore :: (MonadIO m) => m (EventStoreWriter (SqlPersistT m) CounterEvent, VersionedEventStoreReader (SqlPersistT m) CounterEvent, ConnectionPool)
 makeStore = do
   -- TODO: Obviously this is hard-coded, make this use environment variables or
   -- something in the future.
   let
     connString = "host=localhost port=5432 user=postgres dbname=eventful_test password=password"
-    store = postgresqlEventStore defaultSqlEventStoreConfig
-    store' = serializedEventStore jsonStringSerializer store
+    writer = serializedEventStoreWriter jsonStringSerializer $ postgresqlEventStoreWriter defaultSqlEventStoreConfig
+    reader = serializedVersionedEventStoreReader jsonStringSerializer $ sqlEventStoreReader defaultSqlEventStoreConfig
   pool <- liftIO $ runNoLoggingT (createPostgresqlPool connString 1)
   initializePostgresqlEventStore pool
   liftIO $ runSqlPool truncateTables pool
-  return (store', pool)
+  return (writer, reader, pool)
 
 getTables :: MonadIO m => SqlPersistT m [Text]
 getTables = do
@@ -49,11 +49,12 @@
 
 postgresStoreRunner :: EventStoreRunner (SqlPersistT IO)
 postgresStoreRunner = EventStoreRunner $ \action -> do
-  (store, pool) <- makeStore
-  runSqlPool (action store) pool
+  (writer, reader, pool) <- makeStore
+  runSqlPool (action writer reader) pool
 
-postgresStoreGlobalRunner :: GloballyOrderedEventStoreRunner (SqlPersistT IO)
-postgresStoreGlobalRunner = GloballyOrderedEventStoreRunner $ \action -> do
-  (store, pool) <- makeStore
-  let globalStore = serializedGloballyOrderedEventStore jsonStringSerializer (sqlGloballyOrderedEventStore defaultSqlEventStoreConfig)
-  runSqlPool (action store globalStore) pool
+postgresStoreGlobalRunner :: GlobalStreamEventStoreRunner (SqlPersistT IO)
+postgresStoreGlobalRunner = GlobalStreamEventStoreRunner $ \action -> do
+  (writer, _, pool) <- makeStore
+  let
+    globalReader = serializedGlobalEventStoreReader jsonStringSerializer (sqlGlobalEventStoreReader defaultSqlEventStoreConfig)
+  runSqlPool (action writer globalReader) pool
diff --git a/tests/HLint.hs b/tests/HLint.hs
deleted file mode 100644
--- a/tests/HLint.hs
+++ /dev/null
@@ -1,19 +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
-    ]
-
-main :: IO ()
-main = do
-    hints <- hlint arguments
-    if null hints then exitSuccess else exitFailure
