private $do_sql;
 
     private $index;
-    private $separator;
     private $data = array();
 
     private $user_functions = array();
         $this->do_sql    = $do_sql;
     }
 
-    private function processLine($line)
+    private function processLine(array $array)
     {
-        $array = explode($this->separator, $line);
         if (is_null($this->index)) {
             $this->index = array_map('strtolower', $array);
             return true;
 
     public function setCSV($csv, $index = null, $separator = ';')
     {
+        require_once dirname(__FILE__) . '/varstream.php';
+        VarStream::init();
+        global $csv_source;
         $this->index     = null;
-        $this->separator = $separator;
-        $csv   = preg_split("/(\r\n|\r|\n)/", $csv);
+        
+        $csv_source = $csv;
+        $res        = fopen('var://csv_source', 'r');
 
-        foreach ($csv as $line) {
-            $this->processLine($line);
+        while (!feof($res)) {
+            $this->processLine(fgetcsv($res, 0, $separator));
         }
     }
 
             if (empty($sep)) {
                 $sep = ';';
             }
-            echo $sep;
             $this->setCSV($csv, null, $sep);
         }
         if ($current == 'values' && Env::has('csv_valid')) {