diff --git a/plugins/views_data_export_plugin_style_export_csv.inc b/plugins/views_data_export_plugin_style_export_csv.inc
index daebeaf..40b9054 100644
--- a/plugins/views_data_export_plugin_style_export_csv.inc
+++ b/plugins/views_data_export_plugin_style_export_csv.inc
@@ -40,6 +40,10 @@ class views_data_export_plugin_style_export_csv extends views_data_export_plugin
       'default' => ', ',
       'translatable' => FALSE,
     );
+    $options['newline_token'] = array(
+      'default' => 1,
+      'translatable' => FALSE,
+    );
     $options['header'] = array(
       'default' => TRUE,
       'translatable' => FALSE,
@@ -99,6 +103,18 @@ class views_data_export_plugin_style_export_csv extends views_data_export_plugin
       '#process' => array('ctools_dependent_process'),
       '#dependency' => array('edit-style-options-replace-newlines' => array(TRUE)),
     );
+    $form['newline_token'] = array(
+      '#prefix' => '<div><div id="edit-options-newline-token">',
+      '#suffix' => '</div></div>',
+      '#type' => 'radios',
+      '#default_value' => !empty($this->options['newline_token']) ? $this->options['newline_token'] : '0',
+      '#title' => t('What to replace?'),
+      '#options' => array(
+          t('Replace only Linefeed ("\n")'),
+          t('Replace Carriage Return plus Linefeed ("\r\n") and single Linefeed ("\n") as well')
+       ),
+       '#dependency' => array('edit-style-options-replace-newlines' => array(TRUE)),
+     );
     $form['header'] = array(
       '#type' => 'checkbox',
       '#title' => t('Make first row a list of column headers.'),
diff --git a/tests/base.test b/tests/base.test
index 455f5d1..e43cfa5 100644
--- a/tests/base.test
+++ b/tests/base.test
@@ -212,13 +212,13 @@ abstract class ViewsDataExportBaseTest extends ViewsTestCase {
       array(
         'name' => 'John',
         'age' => 25,
-        'job' => 'Singer',
+        'job' => 'Singer\r\nSongwriter\r\nPianist',
         'created' => gmmktime(0, 0, 0, 1, 1, 2000),
       ),
       array(
         'name' => 'George',
         'age' => 27,
-        'job' => 'Singer',
+        'job' => 'Singer\nGuitar player\nSitar player',
         'created' => gmmktime(0, 0, 0, 1, 2, 2000),
       ),
       array(
@@ -230,7 +230,7 @@ abstract class ViewsDataExportBaseTest extends ViewsTestCase {
       array(
         'name' => 'Paul',
         'age' => 26,
-        'job' => 'Songwriter',
+        'job' => 'Songwriter\rBass guitarist',
         'created' => gmmktime(6, 0, 0, 1, 1, 2000),
       ),
       array(
diff --git a/tests/csv_export.test b/tests/csv_export.test
index 9852b77..cc1ec55 100644
--- a/tests/csv_export.test
+++ b/tests/csv_export.test
@@ -208,4 +208,76 @@ class CSVExportViewsDataExportTests extends ViewsDataExportSimpleExportTest {
 
   }
 
+   /**
+   * Test to ensure that all new line characters are replaced in CSV files when requested.
+   */
+  protected function testReplaceNewLines() {
+    $view = $this->getBasicExportView();
+
+    $display = $view->display['default']->handler;
+
+    $display->override_option('fields', array(
+      'id' => array(
+        'id' => 'id',
+        'table' => 'views_test',
+        'field' => 'id',
+        'relationship' => 'none',
+        'label' => 'ID',
+      ),
+      'name' => array(
+        'id' => 'name',
+        'table' => 'views_test',
+        'field' => 'name',
+        'relationship' => 'none',
+      ),
+      'age' => array(
+        'id' => 'age',
+        'table' => 'views_test',
+        'field' => 'age',
+        'relationship' => 'none',
+      ),
+      'job' => array(
+        'id' => 'job',
+        'table' => 'views_test',
+        'field' => 'job',
+        'relationship' => 'none',
+      ),
+    ));
+
+    $style_options = array(
+      'replace_newlines' => TRUE,
+      'newline_replacement' => ';',
+      'newline_token' => 0,
+    );
+
+    $expected = '"ID","Name","Age","Job"
+"1","John","25","Singer\r;Songwriter\r;Pianist"
+"2","George","27","Singer;Guitar player;Sitar player"
+"3","Ringo","28","Drummer"
+"4","Paul","26","Songwriter\rBass guitarist"
+"5","Meredith","30","Speaker"';
+
+    $message = 'Linefeed characters are replaced.';
+
+    $this->executeAndCompareGivenView($view, $expected, $message, $style_options);
+
+    // And now replace all kind of newlines.
+    $style_options = array(
+      'replace_newlines' => TRUE,
+      'newline_replacement' => ';',
+      'newline_token' => 1,
+    );
+
+    $expected = '"ID","Name","Age","Job"
+"1","John","25","Singer;Songwriter;Pianist"
+"2","George","27","Singer;Guitar player;Sitar player"
+"3","Ringo","28","Drummer"
+"4","Paul","26","Songwriter;Bass guitarist"
+"5","Meredith","30","Speaker"';
+
+    $message = 'All newline characters are replaced.';
+
+    $this->executeAndCompareGivenView($view, $expected, $message, $style_options);
+  }
+
 }
diff --git a/theme/views_data_export.theme.inc b/theme/views_data_export.theme.inc
index 8416d96..3fb4ac7 100644
--- a/theme/views_data_export.theme.inc
+++ b/theme/views_data_export.theme.inc
@@ -171,7 +171,12 @@ function template_preprocess_views_data_export_csv_body(&$vars) {
         }
       }
       if (!empty($vars['options']['replace_newlines'])) {
-        $output = str_replace("\n", $vars['options']['newline_replacement'], $output);
+        if (!empty($vars['options']['newline_token'])) {
+          $output = str_replace( array('\r\n', '\r', '\n'), $vars['options']['newline_replacement'], $output);
+        }
+        else {
+          $output = str_replace('\n', $vars['options']['newline_replacement'], $output);
+        }
       }
       $vars['themed_rows'][$i][$j] = $wrap . str_replace('"', $replace_value, $output) . $wrap;
     }
