diff --git a/src/Test/WebDriver/Commands/Angular.hs b/src/Test/WebDriver/Commands/Angular.hs
--- a/src/Test/WebDriver/Commands/Angular.hs
+++ b/src/Test/WebDriver/Commands/Angular.hs
@@ -29,7 +29,6 @@
 import Control.Monad.IO.Class (liftIO, MonadIO)
 import Control.Exception (throwIO, Exception)
 import Data.Maybe (catMaybes)
-import Data.Monoid ((<>))
 import Data.Typeable (Typeable)
 import Test.WebDriver.Classes
 import Test.WebDriver.Commands
@@ -62,12 +61,10 @@
         _ -> catMaybes <$> fromJSON' x -- parse as [Maybe Element] and drop the nothings because
                                        -- looking up ByRow returns Nulls in the list.
 
-{-
 asyncCS :: (WebDriver wd, A.FromJSON a) => T.Text -> [JSArg] -> wd (Maybe a)
 asyncCS script arg = asyncJS arg body
     where
         body = maybe (error $ "Unable to find " ++ T.unpack script) id $ M.lookup script cs
--}
 
 -- | Wait until Angular has finished rendering before continuing.  @False@ indicates the timeout
 -- was hit (see 'setScriptTimeout') and we stopped waiting and @True@ means that angular has
@@ -76,14 +73,10 @@
                => T.Text -- ^ CSS selector to element which has ng-app
                -> wd Bool
 waitForAngular sel = do
-    --a <- asyncCS "waitForAngular" [JSArg sel] :: WebDriver wd => wd (Maybe 
-    
-    let body = maybe (error $ "Unable to find waitForAngular") id $ M.lookup "waitForAngular" cs
-        body' = "var oldDone = arguments[1]; arguments[1] = function(e) { oldDone(e || true); };" <> body
-    a <- asyncJS [JSArg sel] body'
+    a <- asyncCS "waitForAngular" [JSArg sel]
     case a of
         Nothing -> return False
-        Just (A.Bool True) -> return True
+        Just A.Null -> return True
         Just _ -> liftIO $ throwIO $ NgException $ "Error waiting for angular: " ++ show a
 
 -- | Exceptions of this type will be thrown when an element is unable to be located.
diff --git a/test/ManagerSpecs.hs b/test/ManagerSpecs.hs
deleted file mode 100644
--- a/test/ManagerSpecs.hs
+++ /dev/null
@@ -1,55 +0,0 @@
-{-# LANGUAGE OverloadedStrings, DeriveDataTypeable #-}
-module ManagerSpecs where
-
-import Control.Concurrent (threadDelay)
-import Test.Hspec.WebDriver
-import Test.WebDriver.Commands.Angular
-
-mSpecs :: Spec
-mSpecs = describe "session manager tests" $ do
-    parallel $ it "runs in parallel" $ using [Firefox, Chrome] $ do
-        openPage "http://localhost:3456/index.html"
-        waitForAngular "body" `shouldReturn` True
-
-        i <- findNg $ ByModel "xxx"
-        i `shouldBeTag` "input"
-        sendKeys "John" i
-
-        liftIO $ threadDelay $ 25 * 10^(6::Int)
-
-        sendKeys " Mark" i
-        xHead <- findNg $ ByBinding "{{xxx}}"
-        xHead `shouldBeTag` "h1"
-        xHead `shouldHaveText` "X John Mark"
-
-    parallel $ do
-        describe "Firefox 1" $
-            it "waits for a while" $ using Firefox $ do
-                openPage "http://localhost:3456/index.html"
-                waitForAngular "body" `shouldReturn` True
-                
-                i <- findNg $ ByModel "xxx"
-                sendKeys "Firefox 1" i
-                
-                liftIO $ threadDelay $ 2 * 10^(6::Int)
-
-        describe "Firefox 2" $
-            it "waits for a while" $ using Firefox $ do
-                openPage "http://localhost:3456/index.html"
-                waitForAngular "body" `shouldReturn` True
-                
-                i <- findNg $ ByModel "xxx"
-                sendKeys "Firefox 2" i
-                
-                liftIO $ threadDelay $ 2 * 10^(6::Int)
-
-        describe "Firefox 3" $
-            it "waits for a while" $ using Firefox $ do
-                openPage "http://localhost:3456/index.html"
-                waitForAngular "body" `shouldReturn` True
-                
-                i <- findNg $ ByModel "xxx"
-                sendKeys "Firefox 3" i
-                
-                liftIO $ threadDelay $ 2 * 10^(6::Int)
-
diff --git a/test/NgSpec.hs b/test/NgSpec.hs
new file mode 100644
--- /dev/null
+++ b/test/NgSpec.hs
@@ -0,0 +1,119 @@
+{-# LANGUAGE OverloadedStrings #-}
+module NgSpec where
+
+import Test.Hspec.WebDriver
+import Test.WebDriver.Commands.Angular
+
+ngSpec :: Spec
+ngSpec = session "Angular webdriver commands" $ using Firefox $ do
+    it "opens the page" $ runWD $ do
+        openPage "http://localhost:3456/index.html"
+        waitForAngular "body" `shouldReturn` True
+
+    it "finds elements by binding" $ runWD $ do
+        binding <- findNg $ ByBinding "{{a}}"
+        binding `shouldBeTag` "h1"
+        binding `shouldHaveText` "Hello A!"
+
+    it "does not find missing model elements" $ runWD $ do
+        findNgs (ByModel "qqq") `shouldReturn` []
+        findNg (ByModel "qqq") `shouldThrow` NgException "Selector ByModel \"qqq\" returned []"
+
+    it "finds input elements" $ runWD $ do
+        i <- findNg $ ByModel "xxx"
+        i `shouldBeTag` "input"
+        sendKeys "John" i
+
+        xHead <- findNg $ ByBinding "{{xxx}}"
+        xHead `shouldBeTag` "h1"
+        xHead `shouldHaveText` "X John"
+
+    it "finds textarea elements" $ runWD $ do
+        t <- findNg $ ByModel "yyy"
+        t `shouldBeTag` "textarea"
+        sendKeys "Mark" t
+
+        yHead <- findNg $ ByBinding "{{yyy}}"
+        yHead `shouldBeTag` "h2"
+        yHead `shouldHaveText` "Y Mark"
+
+    it "finds select elements" $ runWD $ do
+        s <- findNg $ ByModel "zzz"
+        s `shouldBeTag` "select"
+        opt <- findElemFrom s $ ByCSS "option[value=\"Bar\"]"
+        click opt
+
+        zHead <- findNg $ ByBinding "{{zzz}}"
+        zHead `shouldBeTag` "h3"
+        zHead `shouldHaveText` "Z Bar"
+
+    it "finds selected option inside select opt" $ runWD $ do
+        opt <- findNg $ BySelectedOption "zzz"
+        opt `shouldBeTag` "option"
+        opt `shouldHaveText` "Bar"
+
+    it "finds model elements of different types" $ runWD $ do
+        [i, t, s] <- findNgs $ ByModel "name"
+        i `shouldBeTag` "input"
+        t `shouldBeTag` "textarea"
+        s `shouldBeTag` "select"
+
+    it "finds all repeater rows" $ runWD $ do
+        [r1, r2, r3] <- findRepeaters $ ByRows "dog in dogs"
+        mapM_ (`shouldBeTag`"li") [r1, r2, r3]
+        r1 `shouldHaveText` "Spot mutt"
+        r2 `shouldHaveText` "Spike poodle"
+        r3 `shouldHaveText` "Jupiter bulldog"
+
+        findRepeaters (ByRows "cat in cats") `shouldReturn` []
+        findRepeater (ByRows "cat in cats") `shouldThrow` NgException "Selector ByRows \"cat in cats\" returned []"
+
+    it "finds a single repeater row" $ runWD $ do
+        r2 <- findRepeater $ ByRow "dog in dogs" 1
+        r2 `shouldBeTag` "li"
+        r2 `shouldHaveText` "Spike poodle"
+
+        findRepeaters (ByRow "cat in cats" 1) `shouldReturn` []
+        findRepeater (ByRow "cat in cats" 1) `shouldThrow` NgException "Selector ByRow \"cat in cats\" 1 returned []"
+
+    it "finds a repeater column" $ runWD $ do
+        [c1, c2, c3] <- findRepeaters $ ByColumn "dog in dogs" "{{dog.name}}"
+        mapM_ (`shouldBeTag`"span") [c1, c2, c3]
+
+        c1 `shouldHaveText` "Spot"
+        c2 `shouldHaveText` "Spike"
+        c3 `shouldHaveText` "Jupiter"
+
+        findRepeaters (ByColumn "cat in cats" "{{cat.name}}") `shouldReturn` []
+        findRepeater (ByColumn "cat in cats" "{{cat.name}}") `shouldThrow`
+            NgException "Selector ByColumn \"cat in cats\" \"{{cat.name}}\" returned []"
+
+    it "finds a repeater by row and column" $ runWD $ do
+        c2 <- findRepeater $ ByRowAndCol "dog in dogs" 1 "{{dog.breed}}"
+        c2 `shouldBeTag` "span"
+        c2 `shouldHaveText` "poodle"
+
+        findRepeaters (ByRowAndCol "cat in cats" 12 "{{cat.name}}") `shouldReturn` []
+        findRepeater (ByRowAndCol "cat in cats" 22 "{{cat.name}}") `shouldThrow`
+            NgException "Selector ByRowAndCol \"cat in cats\" 22 \"{{cat.name}}\" returned []"
+
+    it "evaluates an angular expression" $ runWD $ do
+        e <- findNg $ ByBinding "{{a}}"
+        ngEvaluate e "cost | number:2" `shouldReturn` ("12.60" :: String)
+
+    it "loads the location url" $ runWD $ do
+        getLocationAbsUrl "body" `shouldReturn` "http://localhost:3456/index.html"
+
+    it "loads {{cost}} from document" $ runWD $ do
+        [s1, s2] <- findNgs $ ByBinding "{{cost}}"
+        s1 `shouldBeTag` "span"
+        s2 `shouldBeTag` "span"
+        s1 `shouldHaveAttr` ("id", "span-one")
+        s2 `shouldHaveAttr` ("id", "span-two")
+
+    it "loads {{cost}} only from one element" $ runWD $ do
+        d <- findElem $ ById "one"
+        d `shouldBeTag` "div"
+        s1 <- findNgFrom d $ ByBinding "{{cost}}"
+        s1 `shouldBeTag` "span"
+        s1 `shouldHaveAttr` ("id", "span-one")
diff --git a/test/NgSpecs.hs b/test/NgSpecs.hs
deleted file mode 100644
--- a/test/NgSpecs.hs
+++ /dev/null
@@ -1,118 +0,0 @@
-{-# LANGUAGE OverloadedStrings, DeriveDataTypeable #-}
-module NgSpecs where
-
-import Test.Hspec.WebDriver
-import Test.WebDriver.Commands.Angular
-
-ngSpecs :: Spec
-ngSpecs = describe "Angular webdriver commands" $ do
-    it "finds elements by binding" $ using Firefox $ do
-        openPage "http://localhost:3456/index.html"
-        waitForAngular "body" `shouldReturn` True
-
-        binding <- findNg $ ByBinding "{{a}}"
-        binding `shouldBeTag` "h1"
-        binding `shouldHaveText` "Hello A!"
-
-    it "does not find missing model elements" $ using Firefox $ do
-        findNgs (ByModel "qqq") `shouldReturn` []
-        findNg (ByModel "qqq") `shouldThrow` NgException "Selector ByModel \"qqq\" returned []"
-
-    it "finds input elements" $ using Firefox $ do
-        i <- findNg $ ByModel "xxx"
-        i `shouldBeTag` "input"
-        sendKeys "John" i
-
-        xHead <- findNg $ ByBinding "{{xxx}}"
-        xHead `shouldBeTag` "h1"
-        xHead `shouldHaveText` "X John"
-
-    it "finds textarea elements" $ using Firefox $ do
-        t <- findNg $ ByModel "yyy"
-        t `shouldBeTag` "textarea"
-        sendKeys "Mark" t
-
-        yHead <- findNg $ ByBinding "{{yyy}}"
-        yHead `shouldBeTag` "h2"
-        yHead `shouldHaveText` "Y Mark"
-
-    it "finds select elements" $ using Firefox $ do
-        s <- findNg $ ByModel "zzz"
-        s `shouldBeTag` "select"
-        opt <- findElemFrom s $ ByCSS "option[value=\"Bar\"]"
-        click opt
-
-        zHead <- findNg $ ByBinding "{{zzz}}"
-        zHead `shouldBeTag` "h3"
-        zHead `shouldHaveText` "Z Bar"
-
-    it "finds selected option inside select opt" $ using Firefox $ do
-        opt <- findNg $ BySelectedOption "zzz"
-        opt `shouldBeTag` "option"
-        opt `shouldHaveText` "Bar"
-
-    it "finds model elements of different types" $ using Firefox $ do
-        [i, t, s] <- findNgs $ ByModel "name"
-        i `shouldBeTag` "input"
-        t `shouldBeTag` "textarea"
-        s `shouldBeTag` "select"
-
-    it "finds all repeater rows" $ using Firefox $ do
-        [r1, r2, r3] <- findRepeaters $ ByRows "dog in dogs"
-        mapM_ (`shouldBeTag`"li") [r1, r2, r3]
-        r1 `shouldHaveText` "Spot mutt"
-        r2 `shouldHaveText` "Spike poodle"
-        r3 `shouldHaveText` "Jupiter bulldog"
-
-        findRepeaters (ByRows "cat in cats") `shouldReturn` []
-        findRepeater (ByRows "cat in cats") `shouldThrow` NgException "Selector ByRows \"cat in cats\" returned []"
-
-    it "finds a single repeater row" $ using Firefox $ do
-        r2 <- findRepeater $ ByRow "dog in dogs" 1
-        r2 `shouldBeTag` "li"
-        r2 `shouldHaveText` "Spike poodle"
-
-        findRepeaters (ByRow "cat in cats" 1) `shouldReturn` []
-        findRepeater (ByRow "cat in cats" 1) `shouldThrow` NgException "Selector ByRow \"cat in cats\" 1 returned []"
-
-    it "finds a repeater column" $ using Firefox $ do
-        [c1, c2, c3] <- findRepeaters $ ByColumn "dog in dogs" "{{dog.name}}"
-        mapM_ (`shouldBeTag`"span") [c1, c2, c3]
-
-        c1 `shouldHaveText` "Spot"
-        c2 `shouldHaveText` "Spike"
-        c3 `shouldHaveText` "Jupiter"
-
-        findRepeaters (ByColumn "cat in cats" "{{cat.name}}") `shouldReturn` []
-        findRepeater (ByColumn "cat in cats" "{{cat.name}}") `shouldThrow`
-            NgException "Selector ByColumn \"cat in cats\" \"{{cat.name}}\" returned []"
-
-    it "finds a repeater by row and column" $ using Firefox $ do
-        c2 <- findRepeater $ ByRowAndCol "dog in dogs" 1 "{{dog.breed}}"
-        c2 `shouldBeTag` "span"
-        c2 `shouldHaveText` "poodle"
-
-        findRepeaters (ByRowAndCol "cat in cats" 12 "{{cat.name}}") `shouldReturn` []
-        findRepeater (ByRowAndCol "cat in cats" 22 "{{cat.name}}") `shouldThrow`
-            NgException "Selector ByRowAndCol \"cat in cats\" 22 \"{{cat.name}}\" returned []"
-
-    it "evaluates an angular expression" $ using Firefox $ do
-        e <- findNg $ ByBinding "{{a}}"
-        ngEvaluate e "cost | number:2" `shouldReturn` ("12.60" :: String)
-
-    it "loads the location url" $ using Firefox $ do
-        getLocationAbsUrl "body" `shouldReturn` "http://localhost:3456/index.html"
-
-    it "loads {{cost}} from document" $ using Firefox $ do
-        [s1, s2] <- findNgs $ ByBinding "{{cost}}"
-        s1 `shouldBeTag` "span"
-        s2 `shouldBeTag` "span"
-        s1 `shouldHaveAttr` ("id", "span-one")
-        s2 `shouldHaveAttr` ("id", "span-two")
-
-    it "loads {{cost}} only from one element" $ using Firefox $ do
-        d <- findElem $ ById "one"
-        d `shouldBeTag` "div"
-        s1 <- findNgFrom d $ ByBinding "{{cost}}"
-        s1 `shouldBeTag` "span"
-        s1 `shouldHaveAttr` ("id", "span-one")
diff --git a/test/main.hs b/test/main.hs
--- a/test/main.hs
+++ b/test/main.hs
@@ -6,16 +6,13 @@
 import Network.Wai.Application.Static
 import Network.Wai.Handler.Warp (run)
 import Test.Hspec (hspec)
-import Test.Hspec.WebDriver (createSessionManager)
 
-import NgSpecs
-import ManagerSpecs
+import NgSpec
 
 startServer :: IO ThreadId
 startServer = forkIO $
     run 3456 $ staticApp $ defaultFileServerSettings "test/www"
 
 main :: IO ()
-main = bracket startServer killThread $ \_ -> do
-    createSessionManager 2
-    hspec $ ngSpecs >> mSpecs
+main = bracket startServer killThread $ \_ ->
+    hspec $ ngSpec
diff --git a/webdriver-angular.cabal b/webdriver-angular.cabal
--- a/webdriver-angular.cabal
+++ b/webdriver-angular.cabal
@@ -1,5 +1,5 @@
 name:              webdriver-angular
-version:           0.1.2
+version:           0.1.3
 cabal-version:     >= 1.8
 build-type:        Simple
 synopsis:          Webdriver actions to assist with testing a webpage which uses Angular.Js
@@ -40,7 +40,8 @@
 
     build-depends: base                 >= 4          && < 5
 
-                 , webdriver            >= 0.5  && < 0.6
+                  -- 0.5.3.1 contains a needed bugfix
+                 , webdriver            >= 0.5.3.1  && < 0.6
                  , aeson                >= 0.6
                  , language-javascript  >= 0.5  && < 0.6
                  , template-haskell     >= 0.6
@@ -56,7 +57,7 @@
 
     build-depends: base >= 4 && < 5
                  , hspec >= 1.8
-                 , hspec-webdriver
+                 , hspec-webdriver >= 0.2 && < 0.3
                  , transformers
                  , wai-app-static >= 2.0
                  , warp >= 2.0
