diff --git a/hasql.cabal b/hasql.cabal
--- a/hasql.cabal
+++ b/hasql.cabal
@@ -1,7 +1,7 @@
 name:
   hasql
 version:
-  0.19.9
+  0.19.10
 category:
   Hasql, Database, PostgreSQL
 synopsis:
@@ -74,7 +74,7 @@
     -- parsing:
     attoparsec >= 0.10 && < 0.14,
     -- database:
-    postgresql-binary >= 0.8 && < 0.9,
+    postgresql-binary >= 0.9 && < 0.10,
     postgresql-libpq == 0.9.*,
     -- builders:
     bytestring-tree-builder >= 0.2.5 && < 0.3,
@@ -134,6 +134,30 @@
     QuickCheck >= 2.8.1 && < 2.9,
     -- general:
     data-default-class,
+    -- base,
+    rebase
+
+
+test-suite threads-test
+  type:
+    exitcode-stdio-1.0
+  hs-source-dirs:
+    threads-test
+  main-is:
+    Main.hs
+  other-modules:
+    Main.Queries
+  ghc-options:
+    -O2
+    -threaded
+    "-with-rtsopts=-N"
+  default-extensions:
+    Arrows, BangPatterns, ConstraintKinds, DataKinds, DefaultSignatures, DeriveDataTypeable, DeriveFoldable, DeriveFunctor, DeriveGeneric, DeriveTraversable, EmptyDataDecls, FlexibleContexts, FlexibleInstances, FunctionalDependencies, GADTs, GeneralizedNewtypeDeriving, LambdaCase, LiberalTypeSynonyms, MagicHash, MultiParamTypeClasses, MultiWayIf, NoImplicitPrelude, NoMonomorphismRestriction, OverloadedStrings, PatternGuards, ParallelListComp, QuasiQuotes, RankNTypes, RecordWildCards, ScopedTypeVariables, StandaloneDeriving, TemplateHaskell, TupleSections, TypeFamilies, TypeOperators, UnboxedTuples
+  default-language:
+    Haskell2010
+  build-depends:
+    -- database:
+    hasql,
     -- base,
     rebase
 
diff --git a/tasty/Main.hs b/tasty/Main.hs
--- a/tasty/Main.hs
+++ b/tasty/Main.hs
@@ -22,6 +22,27 @@
   localOption (NumThreads 1) $
   testGroup "All tests"
   [
+    testCase "Empty array" $
+    let
+      io =
+        do
+          x <- Connection.with (Session.run session)
+          assertEqual (show x) (Right (Right [])) x
+        where
+          session =
+            Session.query () query
+            where
+              query =
+                Query.statement sql encoder decoder True
+                where
+                  sql =
+                    "select array[]::int8[]"
+                  encoder =
+                    Encoders.unit
+                  decoder =
+                    Decoders.singleRow (Decoders.value (Decoders.array (Decoders.arrayDimension replicateM (Decoders.arrayValue Decoders.int8))))
+      in io
+    ,
     testCase "Failing prepared statements" $
     let
       io =
diff --git a/threads-test/Main.hs b/threads-test/Main.hs
new file mode 100644
--- /dev/null
+++ b/threads-test/Main.hs
@@ -0,0 +1,45 @@
+module Main where
+
+import Rebase.Prelude
+import qualified Hasql.Connection
+import qualified Hasql.Query
+import qualified Hasql.Encoders
+import qualified Hasql.Decoders
+import qualified Hasql.Session
+import qualified Main.Queries as Queries
+
+
+main =
+  acquire >>= use
+  where
+    acquire =
+      (,) <$> acquire <*> acquire
+      where
+        acquire =
+          join $
+          fmap (either (fail . show) return) $
+          Hasql.Connection.acquire connectionSettings
+          where
+            connectionSettings =
+              Hasql.Connection.settings "localhost" 5432 "postgres" "" "postgres"
+    use (connection1, connection2) =
+      do
+        beginVar <- newEmptyMVar
+        finishVar <- newEmptyMVar
+        forkIO $ do
+          traceM "1: in"
+          putMVar beginVar ()
+          session connection1 (Hasql.Session.query 0.2 Queries.selectSleep)
+          traceM "1: out"
+          void (tryPutMVar finishVar False)
+        forkIO $ do
+          takeMVar beginVar
+          traceM "2: in"
+          session connection2 (Hasql.Session.query 0.1 Queries.selectSleep)
+          traceM "2: out"
+          void (tryPutMVar finishVar True)
+        bool exitFailure exitSuccess . traceShowId =<< takeMVar finishVar
+      where
+        session connection session =
+          Hasql.Session.run session connection >>=
+          either (fail . show) return
diff --git a/threads-test/Main/Queries.hs b/threads-test/Main/Queries.hs
new file mode 100644
--- /dev/null
+++ b/threads-test/Main/Queries.hs
@@ -0,0 +1,20 @@
+module Main.Queries where
+
+import Rebase.Prelude
+import Hasql.Query
+import qualified Hasql.Encoders as E
+import qualified Hasql.Decoders as D
+
+
+selectSleep :: Query Double ()
+selectSleep =
+  statement sql encoder decoder True
+  where
+    sql =
+      "select pg_sleep($1)"
+    encoder =
+      E.value E.float8
+    decoder =
+      D.unit
+
+
