diff --git a/CRM/DataprocessorOutputExport/CSV.php b/CRM/DataprocessorOutputExport/CSV.php
index f0f81fb64aa990ac06a78da5a3f06e528c9867cf..a91d710ee2ad1d6cee44854d3fdfc47a8a403249 100644
--- a/CRM/DataprocessorOutputExport/CSV.php
+++ b/CRM/DataprocessorOutputExport/CSV.php
@@ -20,7 +20,7 @@ class CRM_DataprocessorOutputExport_CSV implements ExportOutputInterface {
    * @return bool
    */
   public function hasConfiguration() {
-    return false;
+    return true;
   }
 
   /**
@@ -31,7 +31,30 @@ class CRM_DataprocessorOutputExport_CSV implements ExportOutputInterface {
    * @param array $filter
    */
   public function buildConfigurationForm(\CRM_Core_Form $form, $output=array()) {
+    $form->add('text', 'delimiter', E::ts('Delimiter'), array(), true);
+    $form->add('text', 'enclosure', E::ts('Enclosure'), array(), true);
+    $form->add('text', 'escape_char', E::ts('Escape char'), array(), true);
 
+    $configuration = false;
+    if ($output && isset($output['configuration'])) {
+      $configuration = $output['configuration'];
+    }
+    if ($configuration && isset($configuration['delimiter']) && $configuration['delimiter']) {
+      $defaults['delimiter'] = $configuration['delimiter'];
+    } else {
+      $defaults['delimiter'] = ';';
+    }
+    if ($configuration && isset($configuration['enclosure']) && $configuration['enclosure']) {
+      $defaults['enclosure'] = $configuration['enclosure'];
+    } else {
+      $defaults['enclosure'] = '"';
+    }
+    if ($configuration && isset($configuration['escape_char']) && $configuration['escape_char']) {
+      $defaults['escape_char'] = $configuration['escape_char'];
+    } else {
+      $defaults['escape_char'] = '\\';
+    }
+    $form->setDefaults($defaults);
   }
 
   /**
@@ -41,7 +64,7 @@ class CRM_DataprocessorOutputExport_CSV implements ExportOutputInterface {
    * @return false|string
    */
   public function getConfigurationTemplateFileName() {
-    return false;
+    return "CRM/DataprocessorOutputExport/Form/Configuration/CSV.tpl";
   }
 
 
@@ -53,7 +76,11 @@ class CRM_DataprocessorOutputExport_CSV implements ExportOutputInterface {
    * @return array
    */
   public function processConfiguration($submittedValues, &$output) {
-    return array();
+    $configuration = array();
+    $configuration['delimiter'] = $submittedValues['delimiter'];
+    $configuration['enclosure'] = $submittedValues['enclosure'];
+    $configuration['escape_char'] = $submittedValues['escape_char'];
+    return $configuration;
   }
 
   /**
@@ -116,11 +143,11 @@ class CRM_DataprocessorOutputExport_CSV implements ExportOutputInterface {
 
     $path = CRM_Core_Config::singleton()->templateCompileDir . 'dataprocessor_export_csv/'. $filename;
     if ($sortFieldName) {
-      $dataProcessor->getDataFlow()->addSort($sortFieldName, $sortDirection);
+      $dataProcessorClass->getDataFlow()->addSort($sortFieldName, $sortDirection);
     }
 
-    self::createHeaderLine($path, $dataProcessorClass);
-    self::exportDataProcessor($path, $dataProcessorClass);
+    self::createHeaderLine($path, $dataProcessorClass, $outputBAO['configuration']);
+    self::exportDataProcessor($path, $dataProcessorClass, $outputBAO['configuration']);
 
     $mimeType = CRM_Utils_Request::retrieveValue('mime-type', 'String', '', FALSE);
 
@@ -160,7 +187,7 @@ class CRM_DataprocessorOutputExport_CSV implements ExportOutputInterface {
     CRM_Utils_File::restrictAccess($basePath.'/');
     $filename = $basePath.'/'. $name.'.csv';
 
-    self::createHeaderLine($filename, $dataProcessorClass);
+    self::createHeaderLine($filename, $dataProcessorClass, $outputBAO['configuration']);
 
     $count = $dataProcessorClass->getDataFlow()->recordCount();
     $recordsPerJob = self::RECORDS_PER_JOB;
@@ -176,7 +203,7 @@ class CRM_DataprocessorOutputExport_CSV implements ExportOutputInterface {
           'CRM_DataprocessorOutputExport_CSV',
           'exportBatch'
         ), //call back method
-        array($filename,$formValues, $dataProcessor['id'], $i, $recordsPerJob, $sortFieldName, $sortDirection), //parameters,
+        array($filename,$formValues, $dataProcessor['id'], $outputBAO['id'], $i, $recordsPerJob, $sortFieldName, $sortDirection), //parameters,
         $title
       );
       //now add this task to the queue
@@ -196,18 +223,18 @@ class CRM_DataprocessorOutputExport_CSV implements ExportOutputInterface {
     $runner->runAllViaWeb(); // does not return
   }
 
-  protected static function createHeaderLine($filename, \Civi\DataProcessor\ProcessorType\AbstractProcessorType $dataProcessor) {
+  protected static function createHeaderLine($filename, \Civi\DataProcessor\ProcessorType\AbstractProcessorType $dataProcessor, $configuration) {
     $file = fopen($filename, 'a');
     fwrite($file, "\xEF\xBB\xBF"); // BOF this will make sure excel opens the file correctly.
     $headerLine = array();
     foreach($dataProcessor->getDataFlow()->getOutputFieldHandlers() as $outputHandler) {
       $headerLine[] = $outputHandler->getOutputFieldSpecification()->title;
     }
-    fputcsv($file, $headerLine);
+    fputcsv($file, $headerLine, $configuration['delimiter'], $configuration['enclosure'], $configuration['escape_char']);
     fclose($file);
   }
 
-  protected static function exportDataProcessor($filename, \Civi\DataProcessor\ProcessorType\AbstractProcessorType $dataProcessor) {
+  protected static function exportDataProcessor($filename, \Civi\DataProcessor\ProcessorType\AbstractProcessorType $dataProcessor, $configuration) {
     $file = fopen($filename, 'a');
     try {
       while($record = $dataProcessor->getDataFlow()->nextRecord()) {
@@ -215,7 +242,7 @@ class CRM_DataprocessorOutputExport_CSV implements ExportOutputInterface {
         foreach($record as $field => $value) {
           $row[] = $value->formattedValue;
         }
-        fputcsv($file, $row);
+        fputcsv($file, $row, $configuration['delimiter'], $configuration['enclosure'], $configuration['escape_char']);
       }
     } catch (\Civi\DataProcessor\DataFlow\EndOfFlowException $e) {
       // Do nothing
@@ -223,8 +250,9 @@ class CRM_DataprocessorOutputExport_CSV implements ExportOutputInterface {
     fclose($file);
   }
 
-  public static function exportBatch(CRM_Queue_TaskContext $ctx, $filename, $params, $dataProcessorId, $offset, $limit, $sortFieldName = null, $sortDirection = 'ASC') {
+  public static function exportBatch(CRM_Queue_TaskContext $ctx, $filename, $params, $dataProcessorId, $outputId, $offset, $limit, $sortFieldName = null, $sortDirection = 'ASC') {
     $dataProcessor = civicrm_api3('DataProcessor', 'getsingle', array('id' => $dataProcessorId));
+    $output = civicrm_api3('DataProcessorOutput', 'getsingle', array('id' => $outputId));
     $dataProcessorClass = \CRM_Dataprocessor_BAO_DataProcessor::dataProcessorToClass($dataProcessor);
     CRM_Dataprocessor_Form_Output_AbstractUIOutputForm::applyFilters($dataProcessorClass, $params);
     if ($sortFieldName) {
@@ -232,7 +260,7 @@ class CRM_DataprocessorOutputExport_CSV implements ExportOutputInterface {
     }
     $dataProcessorClass->getDataFlow()->setOffset($offset);
     $dataProcessorClass->getDataFlow()->setLimit($limit);
-    self::exportDataProcessor($filename, $dataProcessorClass);
+    self::exportDataProcessor($filename, $dataProcessorClass, $output['configuration']);
     return TRUE;
   }
 
diff --git a/templates/CRM/DataprocessorOutputExport/Form/Configuration/CSV.tpl b/templates/CRM/DataprocessorOutputExport/Form/Configuration/CSV.tpl
new file mode 100644
index 0000000000000000000000000000000000000000..d6e41a9c74840c0a30077e3803d2da0e1a583bb6
--- /dev/null
+++ b/templates/CRM/DataprocessorOutputExport/Form/Configuration/CSV.tpl
@@ -0,0 +1,19 @@
+{crmScope extensionKey='dataprocessor'}
+
+    <div class="crm-section">
+        <div class="label">{$form.delimiter.label}</div>
+        <div class="content">{$form.delimiter.html}</div>
+        <div class="clear"></div>
+    </div>
+    <div class="crm-section">
+        <div class="label">{$form.enclosure.label}</div>
+        <div class="content">{$form.enclosure.html}</div>
+        <div class="clear"></div>
+    </div>
+    <div class="crm-section">
+        <div class="label">{$form.escape_char.label}</div>
+        <div class="content">{$form.escape_char.html}</div>
+        <div class="clear"></div>
+    </div>
+
+{/crmScope}
\ No newline at end of file