diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -1,5 +1,9 @@
 # Changelog for fakedata
 
+## 0.2.1
+
+* Fix bug in Book module
+
 ## 0.2.0
 
 * Add sicCode function in Company module
diff --git a/fakedata.cabal b/fakedata.cabal
--- a/fakedata.cabal
+++ b/fakedata.cabal
@@ -4,10 +4,10 @@
 --
 -- see: https://github.com/sol/hpack
 --
--- hash: 4cc038591118fb6403c9b26f0c62caa51c0920e94f541ff52d110aba4772ea4a
+-- hash: a94da93c764c9d1455223f44b3b263abe47e9505f0c4b28f0ea2319a110ae01f
 
 name:           fakedata
-version:        0.2.0
+version:        0.2.1
 synopsis:       Library for producing fake data
 description:    Please see the README on GitHub at <https://github.com/psibi/fakedata#readme>
 category:       Random, Fake, FakeData
@@ -546,12 +546,14 @@
       AddressSpec
       AppSpec
       BeerSpec
+      BookSpec
       BossaNovaSpec
       CoffeeSpec
       CombinatorsSpec
       FakerSpec
       GamesSpec
       InternalSpec
+      NameSpec
       OtherSpec
       ProviderSpec
       Paths_fakedata
diff --git a/src/Faker/Book.hs b/src/Faker/Book.hs
--- a/src/Faker/Book.hs
+++ b/src/Faker/Book.hs
@@ -10,7 +10,9 @@
 
 $(generateFakeField "book" "title")
 
-$(generateFakeFieldUnresolved "book" "author")
+author :: Fake Text
+author =
+  Fake (unresolvedResolverWithoutVector bookAuthorProvider resolveBookText)
 
 $(generateFakeField "book" "publisher")
 
diff --git a/src/Faker/Internal.hs b/src/Faker/Internal.hs
--- a/src/Faker/Internal.hs
+++ b/src/Faker/Internal.hs
@@ -60,6 +60,16 @@
   items <- provider settings
   resolveUnresolved settings items resolverFn
 
+randomUnresolvedVecWithoutVector ::
+     (MonadThrow m, MonadIO m)
+  => FakerSettings
+  -> (FakerSettings -> m (Unresolved Text))
+  -> (FakerSettings -> Text -> m Text)
+  -> m Text
+randomUnresolvedVecWithoutVector settings provider resolverFn = do
+  items <- provider settings
+  resolveUnresolved settings (sequenceA $ pure items) resolverFn
+
 resolveUnresolved ::
      (MonadThrow m, MonadIO m)
   => FakerSettings
@@ -206,6 +216,14 @@
   -> (FakerSettings -> m Text)
 unresolvedResolver provider resolverFn =
   \settings -> randomUnresolvedVec settings provider resolverFn
+
+unresolvedResolverWithoutVector ::
+     (MonadThrow m, MonadIO m)
+  => (FakerSettings -> m (Unresolved Text))
+  -> (FakerSettings -> Text -> m Text)
+  -> (FakerSettings -> m Text)
+unresolvedResolverWithoutVector provider resolverFn =
+  \settings -> randomUnresolvedVecWithoutVector settings provider resolverFn
 
 uprStr :: String -> String
 uprStr [] = []
diff --git a/src/Faker/Provider/Book.hs b/src/Faker/Provider/Book.hs
--- a/src/Faker/Provider/Book.hs
+++ b/src/Faker/Provider/Book.hs
@@ -13,7 +13,7 @@
 import Data.Yaml
 import Faker
 import Faker.Internal
-import Faker.Provider.Name (nameProvider, resolveNameText)
+import Faker.Provider.Name (nameProvider, resolveNameField, resolveNameText)
 import Faker.Provider.TH
 import Language.Haskell.TH
 
@@ -49,7 +49,9 @@
 
 $(genParserUnresolved "book" "author")
 
-$(genProviderUnresolved "book" "author")
+bookAuthorProvider ::
+     (MonadThrow m, MonadIO m) => FakerSettings -> m (Unresolved Text)
+bookAuthorProvider settings = fetchData settings Book parseBookAuthorUnresolved
 
 $(genParser "book" "publisher")
 
diff --git a/test/BookSpec.hs b/test/BookSpec.hs
new file mode 100644
--- /dev/null
+++ b/test/BookSpec.hs
@@ -0,0 +1,36 @@
+{-# LANGUAGE ScopedTypeVariables #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+module BookSpec where
+
+import Config
+import Control.Monad.Catch
+import Control.Monad.IO.Class
+import qualified Data.Map as M
+import Data.Text hiding (all, map)
+import qualified Data.Text as T
+import qualified Data.Text.IO as TIO
+import Data.Vector (Vector)
+import qualified Data.Vector as V
+import Faker
+import Faker.Book
+import Test.Hspec
+
+isText :: Text -> Bool
+isText x = T.length x >= 1
+
+spec :: Spec
+spec = do
+  describe "Faker Generate for Book" $ do
+    it "title" $ do
+      item <- generate title
+      item `shouldSatisfy` isText
+    it "Author" $ do
+      item <- generate author
+      item `shouldSatisfy` isText
+    it "Publisher" $ do
+      item <- generate publisher
+      item `shouldSatisfy` isText
+    it "Genre" $ do
+      item <- generate genre
+      item `shouldSatisfy` isText
diff --git a/test/FakerSpec.hs b/test/FakerSpec.hs
--- a/test/FakerSpec.hs
+++ b/test/FakerSpec.hs
@@ -161,9 +161,7 @@
     describe "Finance" $ do
       it "visa" $ do
         item <- generate visa
-        print item
         item `shouldSatisfy` isText
       it "mastercard" $ do
         item <- generate mastercard
-        print item
         item `shouldSatisfy` isText
diff --git a/test/NameSpec.hs b/test/NameSpec.hs
new file mode 100644
--- /dev/null
+++ b/test/NameSpec.hs
@@ -0,0 +1,27 @@
+{-# LANGUAGE ScopedTypeVariables #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+module NameSpec where
+
+import Config
+import Control.Monad.Catch
+import Control.Monad.IO.Class
+import qualified Data.Map as M
+import Data.Text hiding (all, map)
+import qualified Data.Text as T
+import qualified Data.Text.IO as TIO
+import Data.Vector (Vector)
+import qualified Data.Vector as V
+import Faker
+import Faker.Name
+import Test.Hspec
+
+isText :: Text -> Bool
+isText x = T.length x >= 1
+
+spec :: Spec
+spec = do
+  describe "Faker Generate for Name" $ do
+    it "name" $ do
+      item <- generate name
+      item `shouldSatisfy` isText
diff --git a/test/OtherSpec.hs b/test/OtherSpec.hs
--- a/test/OtherSpec.hs
+++ b/test/OtherSpec.hs
@@ -34,9 +34,9 @@
           (setLocale "en-PAK" defaultFakerSettings)
           nameWithMiddle
       (ctries) `shouldBe` "Zia Ash Ash"
-    -- it "name with middle - au" $ do
-    --   ctries <-
-    --     generateWithSettings
-    --       (setLocale "en-AU" defaultFakerSettings)
-    --       nameWithMiddle
-    --   (ctries) `shouldBe` "Zia Ash Ash"
+    it "name with middle - au" $ do
+      ctries <-
+        generateWithSettings
+          (setLocale "en-AU" defaultFakerSettings)
+          nameWithMiddle
+      (ctries) `shouldBe` "Georgia Grady Grady"
