diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -33,7 +33,7 @@
 
 * 7.1 Revision 1 (SQL Server 2000 SP1 and later)
 
-* Tested with SQL Server 2008 R2
+* Tested with SQL Server 2008 R2, SQL Server 2014
 
 
 
diff --git a/mssql-simple.cabal b/mssql-simple.cabal
--- a/mssql-simple.cabal
+++ b/mssql-simple.cabal
@@ -4,10 +4,10 @@
 --
 -- see: https://github.com/sol/hpack
 --
--- hash: 4c754e412dcc65dfd60204d142f6236964b73631861dd5cd8396f44c739a2cb8
+-- hash: a2df8ed81dd9de80929250fca8c1a1e6d0f352cead28b201c8aa6ed2f1c96799
 
 name:           mssql-simple
-version:        0.1.0.2
+version:        0.1.0.3
 synopsis:       SQL Server client library implemented in Haskell
 description:    Please see the README on GitHub at <https://github.com/mitsuji/mssql-simple#readme>
 category:       Database
diff --git a/src/Database/MSSQLServer/Query/ResultSet.hs b/src/Database/MSSQLServer/Query/ResultSet.hs
--- a/src/Database/MSSQLServer/Query/ResultSet.hs
+++ b/src/Database/MSSQLServer/Query/ResultSet.hs
@@ -3,6 +3,7 @@
 {-# LANGUAGE FlexibleInstances #-}
 
 module Database.MSSQLServer.Query.ResultSet ( ResultSet (..)
+                                            , extractTableStreams
                                             , Row (..)
                                             ) where
 
@@ -18,89 +19,75 @@
 
 
 instance ResultSet () where
-  fromTokenStreams = f . extractStreams
+  fromTokenStreams = f . extractTableStreams
     where
       f [] = ()
       f _ = error "fromTokenStreams: List length must be 0"
 
 instance (Row a) => ResultSet [a] where
-  fromTokenStreams = f . extractStreams
+  fromTokenStreams = f . extractTableStreams
     where
-      f [v1] = b1
+      f [(m1,r1)] = b1
         where
-          !b1 = rowList v1
+          !b1 = fromListOfRawBytes m1 <$> r1
       f _ = error "fromTokenStreams: List length must be 1"
 
 instance (Row a, Row b) => ResultSet ([a],[b]) where
-  fromTokenStreams = f . extractStreams
+  fromTokenStreams = f . extractTableStreams
     where
-      f [v1,v2] = (b1,b2)
+      f [(m1,r1),(m2,r2)] = (b1,b2)
         where
-          !b1 = rowList v1
-          !b2 = rowList v2
+          !b1 = fromListOfRawBytes m1 <$> r1
+          !b2 = fromListOfRawBytes m2 <$> r2
       f _ = error "fromTokenStreams: List length must be 2"
 
 instance (Row a, Row b, Row c) => ResultSet ([a],[b],[c]) where
-  fromTokenStreams = f . extractStreams
+  fromTokenStreams = f . extractTableStreams
     where
-      f [v1,v2,v3] = (b1,b2,b3)
+      f [(m1,r1),(m2,r2),(m3,r3)] = (b1,b2,b3)
         where
-          !b1 = rowList v1
-          !b2 = rowList v2
-          !b3 = rowList v3
+          !b1 = fromListOfRawBytes m1 <$> r1
+          !b2 = fromListOfRawBytes m2 <$> r2
+          !b3 = fromListOfRawBytes m3 <$> r3
       f _ = error "fromTokenStreams: List length must be 3"
 
 instance (Row a, Row b, Row c, Row d) => ResultSet ([a],[b],[c],[d]) where
-  fromTokenStreams = f . extractStreams
+  fromTokenStreams = f . extractTableStreams
     where
-      f [v1,v2,v3,v4] = (b1,b2,b3,b4)
+      f [(m1,r1),(m2,r2),(m3,r3),(m4,r4)] = (b1,b2,b3,b4)
         where
-          !b1 = rowList v1
-          !b2 = rowList v2
-          !b3 = rowList v3
-          !b4 = rowList v4
+          !b1 = fromListOfRawBytes m1 <$> r1
+          !b2 = fromListOfRawBytes m2 <$> r2
+          !b3 = fromListOfRawBytes m3 <$> r3
+          !b4 = fromListOfRawBytes m4 <$> r4
       f _ = error "fromTokenStreams: List length must be 4"
 
 instance (Row a, Row b, Row c, Row d, Row e) => ResultSet ([a],[b],[c],[d],[e]) where
-  fromTokenStreams = f . extractStreams
+  fromTokenStreams = f . extractTableStreams
     where
-      f [v1,v2,v3,v4,v5] = (b1,b2,b3,b4,b5)
+      f [(m1,r1),(m2,r2),(m3,r3),(m4,r4),(m5,r5)] = (b1,b2,b3,b4,b5)
         where
-          !b1 = rowList v1
-          !b2 = rowList v2
-          !b3 = rowList v3
-          !b4 = rowList v4
-          !b5 = rowList v5
+          !b1 = fromListOfRawBytes m1 <$> r1
+          !b2 = fromListOfRawBytes m2 <$> r2
+          !b3 = fromListOfRawBytes m3 <$> r3
+          !b4 = fromListOfRawBytes m4 <$> r4
+          !b5 = fromListOfRawBytes m5 <$> r5
       f _ = error "fromTokenStreams: List length must be 5"
 
-      
 
--- (TSColMetaData,[TSRow])
-rowList :: (Row a) => (TokenStream,[TokenStream]) -> [a]
-rowList = \(tsCmd,tsRss) ->
-  let (TSColMetaData (maybeCmd)) = tsCmd
-      cds = case (\(ColMetaData x) -> x) <$> maybeCmd of
-        Nothing -> error "rowList: ColMetaData is necessary"
-        Just cds' -> cds'
-      datas = (\(TSRow row) -> rawBytes <$> row) <$> tsRss
-  in map (fromListOfRawBytes cds) datas
-  where
-    rawBytes :: RowColumnData -> RawBytes
-    rawBytes (RCDOrdinal dt) = dt
-    rawBytes (RCDLarge _ _ dt) = dt
 
 
-
--- [(TSColMetaData,[TSRow])]
-extractStreams :: [TokenStream] -> [(TokenStream,[TokenStream])]
-extractStreams = f . ( filter $ \x -> isTSColMetaData x || isTSRow x )
+extractTableStreams :: [TokenStream] -> [([MetaColumnData],[[RawBytes]])]
+extractTableStreams = map extract . span' . ( filter $ \x -> isTSColMetaData x || isTSRow x )
   where
-    f :: [TokenStream] -> [(TokenStream,[TokenStream])]
-    f [] = []
-    f (cmd:xs) =
+    -- [(TSColMetaData,[TSRow])]
+    span' :: [TokenStream] -> [(TokenStream,[TokenStream])]
+    span' [] = []
+    span' (cmd@TSColMetaData{}:xs) =
       let
         (rs,xs') = span isTSRow xs
-      in (cmd,rs):f xs'
+      in (cmd,rs):span' xs'
+    span' _ = error "extractTableStrams: TSColMetaData is necesarry"
 
     isTSColMetaData :: TokenStream -> Bool
     isTSColMetaData (TSColMetaData{}) = True
@@ -110,7 +97,18 @@
     isTSRow (TSRow{}) = True
     isTSRow _ = False
 
-
+    extract :: (TokenStream,[TokenStream]) -> ([MetaColumnData],[[RawBytes]])
+    extract = \(tsCmd,tsRss) ->
+      let (TSColMetaData (maybeCmd)) = tsCmd
+          cds = case (\(ColMetaData x) -> x) <$> maybeCmd of
+            Nothing -> error "extractTableStrams: ColMetaData is necessary"
+            Just cds' -> cds'
+          datas = (\(TSRow row) -> rawBytes <$> row) <$> tsRss
+      in (cds, datas)
+      where
+        rawBytes :: RowColumnData -> RawBytes
+        rawBytes (RCDOrdinal dt) = dt
+        rawBytes (RCDLarge _ _ dt) = dt
 
 
 mcdTypeInfo :: MetaColumnData -> TypeInfo
diff --git a/src/Database/MSSQLServer/Query/RpcQuerySet.hs b/src/Database/MSSQLServer/Query/RpcQuerySet.hs
--- a/src/Database/MSSQLServer/Query/RpcQuerySet.hs
+++ b/src/Database/MSSQLServer/Query/RpcQuerySet.hs
@@ -11,6 +11,7 @@
                                               , RpcParamSet (..)
                                               , RpcParam (..)
                                               , RpcParamName
+                                              , rpcReqBatchParam
                                               ) where
 
 
