diff --git a/hs-rqlite.cabal b/hs-rqlite.cabal
--- a/hs-rqlite.cabal
+++ b/hs-rqlite.cabal
@@ -1,6 +1,6 @@
 cabal-version:       2.2
 name:                hs-rqlite
-version:             0.1.0.0
+version:             0.1.1.0
 synopsis:            A Haskell client for RQlite
 description:         See README at <https://github.com/kderme/hs-rqlite/blob/master/README.md>
 bug-reports:         https://github.com/kderme/hs-rqlite/issues
diff --git a/src/Rqlite.hs b/src/Rqlite.hs
--- a/src/Rqlite.hs
+++ b/src/Rqlite.hs
@@ -1,6 +1,5 @@
 {-# LANGUAGE DeriveAnyClass      #-}
 {-# LANGUAGE DeriveGeneric       #-}
-{-# LANGUAGE LambdaCase          #-}
 {-# LANGUAGE OverloadedStrings   #-}
 {-# LANGUAGE ScopedTypeVariables #-}
 
@@ -73,7 +72,7 @@
                     ["Failed to decode ", show j, " as PostResult"]
 
 post :: String -> String -> IO (Either (Response String) String)
-post request body = do
+post request body =
     reifyRed $ simpleHTTP $ postRequestWithBody
         request
         "application/json"
@@ -101,8 +100,7 @@
                     if redirect
                     then case find isLocation (rspHeaders resp) of
                         Nothing            -> throwIO $ FailedRedirection resp
-                        Just (Header _ q') -> do
-                            putStrLn $ "Rqlite Warning: Redirected to " ++ q'
+                        Just (Header _ q') ->
                             go (n + 1) q' (resp : acc)
                     else throwIO $ HttpRedirect resp
     go 0 (mkPostRequest host) []
@@ -171,13 +169,12 @@
                     case eitherDecodeStrict $ Char8.pack respBody of
                     Left e -> throwIO $ UnexpectedResponse $ concat
                         ["Got ", e, " while trying to decode ", respBody, " as GetResult"]
-                    Right (RQResults res)     -> return $ head $ res
+                    Right (RQResults res)     -> return $ head res
                     Right (RQLeaderError err) -> throwIO $ LeadershipLost err
-                Left resp -> do
+                Left resp ->
                     case find isLocation (rspHeaders resp) of
                         Nothing            -> throwIO $ FailedRedirection resp
-                        Just (Header _ q') -> do
-                            putStrLn $ "Rqlite Warning: Redirected to " ++ q'
+                        Just (Header _ q') ->
                             go (n + 1) q' (resp : acc)
 
 isLocation :: Header -> Bool
@@ -213,7 +210,8 @@
     case rspCode resp of
         (2,0,0) -> return $ Right $ rspBody resp
         (3,_,_) -> return $ Left resp
-        _       -> throwIO $ HttpError $ resp
+        (5,0,3) | Text.isPrefixOf "not leader"  (Text.pack $ rspBody resp) -> throwIO NotLeader
+        _       -> throwIO $ HttpError resp
 
 reifyHTTPErrors :: IO (Response String) -> IO String
 reifyHTTPErrors action = do
@@ -241,5 +239,6 @@
     | MaxNumberOfRedirections [Response String]
     | FailedRedirection (Response String)
     | LeadershipLost Text
+    | NotLeader
     | UnexpectedResponse String
     deriving (Show, Typeable, Exception)
diff --git a/src/Rqlite/Status.hs b/src/Rqlite/Status.hs
--- a/src/Rqlite/Status.hs
+++ b/src/Rqlite/Status.hs
@@ -1,4 +1,3 @@
-{-# LANGUAGE DeriveAnyClass      #-}
 {-# LANGUAGE DeriveGeneric       #-}
 {-# LANGUAGE ScopedTypeVariables #-}
 {-# LANGUAGE OverloadedStrings   #-}
@@ -14,6 +13,7 @@
 import           Control.Exception
 import           Data.Aeson hiding (Result)
 import qualified Data.ByteString.Char8 as C8
+import qualified Data.HashMap.Strict as M
 import           GHC.Generics
 import           Network.HTTP hiding (host)
 
@@ -29,18 +29,19 @@
             , host
             , "/status?pretty"
             ]
-    case eitherDecodeStrict $ C8.pack $ resp of
+    case eitherDecodeStrict $ C8.pack resp of
             Left e -> throwIO $ UnexpectedResponse $ concat
                 ["Got ", e, " while trying to decode ", resp, " as PostResult"]
             Right st -> return st
 
-data RQState = Leader | Follower | UnknownState
+data RQState = Leader | Follower | Candidate | UnknownState
     deriving (Show, Eq, Generic)
 
 readState :: String -> RQState
-readState "Leader"   = Leader
-readState "Follower" = Follower
-readState _          = UnknownState
+readState "Leader"    = Leader
+readState "Follower"  = Follower
+readState "Candidate" = error "Candidate is real"
+readState _           = UnknownState
 
 -- | A subset of the status that a node reports.
 data RQStatus = RQStatus {
@@ -58,7 +59,13 @@
         pth <- store .: "dir"
         ldr <- store .: "leader"
         let mLeader = if ldr == "" then Nothing else Just ldr
-        prs :: [String] <- store .: "peers"
+        prs :: [String] <- case M.lookup "peers" store of
+            Just Null -> throw $ UnexpectedResponse $ concat
+                [ "peers were empty while querying status! This probably indicates that the node path "
+                , pth
+                , " does not exist or the peers file was deleted"
+                ]
+            _    -> store .: "peers"
         sqliteInfo <- store .: "sqlite3"
         raft <- store .: "raft"
         stStr <- raft .: "state"
