diff --git a/HNumeric.cabal b/HNumeric.cabal
--- a/HNumeric.cabal
+++ b/HNumeric.cabal
@@ -2,10 +2,10 @@
 --
 -- see: https://github.com/sol/hpack
 --
--- hash: 9cfd5649e8b6b63aa2edca51c427be56f671256d05794ce8eaed484e456a0e1c
+-- hash: 62eb6bbecdbe6d14a3bf69b24ef47ea07356eb3456c97b5f52e6b74ce6d3ffe0
 
 name:           HNumeric
-version:        0.5.0.0
+version:        0.5.0.1
 synopsis:       Haskell Numeric Library with pure functionality, R & MATLAB Syntax.
 description:    Please see the README on GitHub at <https://github.com/Axect/HNumeric#readme>
 category:       HNum, library, Numeric, LinearAlgebra, Statistics, bsd3
@@ -41,6 +41,7 @@
       base >=4.7 && <5
     , math-functions
     , parallel
+    , parallel-io
     , random
   default-language: Haskell2010
 
@@ -57,5 +58,6 @@
     , base >=4.7 && <5
     , math-functions
     , parallel
+    , parallel-io
     , random
   default-language: Haskell2010
diff --git a/src/HNum/CSV.hs b/src/HNum/CSV.hs
--- a/src/HNum/CSV.hs
+++ b/src/HNum/CSV.hs
@@ -11,6 +11,9 @@
 import           HNum.Vector
 import           Data.List                      ( intercalate )
 import           Control.Parallel
+import           Control.Concurrent.ParallelIO
+import qualified Control.Concurrent.ParallelIO.Local
+                                               as Local
 
 -----------------------------------------------
 -- Declaration
@@ -20,7 +23,7 @@
 
 -- | DataFrame structure to write csv
 data DataFrame a = DataFrame { header :: Header
-                             , dat :: Matrix a
+                             , dat :: Matrix a -- ^ Row Based
                              } deriving (Show, Eq)
 
 -- | dataframe constructor
@@ -36,10 +39,10 @@
 -- | Extract Vector in DataFrame
 (#) :: Eq a => DataFrame a -> String -> Vector a
 df # hd | hd `notElem` header df = error "No specific header in dataFrame"
-        | otherwise              = vec $ bd !! i
+        | otherwise              = i `par` bd `pseq` vec $ bd !! i
  where
   i  = hd `fd` header df
-  bd = matForm $ transpose $ dat df
+  bd = matForm $ dat df
 
 instance Functor DataFrame where
   fmap f df = df { dat = fmap f (dat df) }
@@ -57,7 +60,7 @@
   -- | Object to String (Different to Show)
   toString :: Show a => f a -> String
   -- | Write as CSV
-  writeCSV :: Show a => String -> f a -> IO ()
+  writeCSV :: (Eq a, Show a) => String -> f a -> IO ()
 
 instance Writable Vector where
   toString v = intercalate "\n" (toList $ show <$> v)
@@ -70,12 +73,22 @@
   writeCSV title m = writeFile title (toString m)
 
 instance Writable DataFrame where
-  toString (DataFrame h m) = h' `par` t' `pseq` m' `pseq` h' ++ "\n" ++ m'
-    where h' = intercalate "," h
-          t' = transpose m
-          m' = toString t'
-  writeCSV title df = df' `seq` writeFile title df'
-    where df' = toString df
+  toString = undefined
+  writeCSV parentPath df =
+    let childPath = header df
+        vecValue = [df # heads | heads <- childPath]
+        strValue = [toString vecs | vecs <- vecValue]
+        candidate = [heads ++ "\n" ++ strs | heads <- childPath, strs <- strValue]
+        commands = [writeFile (parentPath ++ "/" ++ heads ++ ".csv") cds | heads <- childPath, cds <- candidate]
+    in childPath
+        `pseq` vecValue
+        `pseq` strValue
+        `pseq` candidate
+        `pseq` commands
+        `pseq` do
+          Local.withPool 4 $ \pool -> Local.parallel_ pool commands
+
+
 
 -----------------------------------------------
 -- Read from CSV
