diff --git a/src/datarecorder.cpp b/src/datarecorder.cpp
--- a/src/datarecorder.cpp
+++ b/src/datarecorder.cpp
@@ -27,6 +27,7 @@ DataRecorder::DataRecorder(QObject *pare
 {
     lastNumChannels = 0;
     disableBuffering = false;
+    windowsLE = false;
 }
 
 bool DataRecorder::startRecording(QString fileName, QString separator, QStringList channelNames)
@@ -47,7 +48,7 @@ bool DataRecorder::startRecording(QStrin
     if (!channelNames.isEmpty())
     {
         fileStream << channelNames.join(_sep);
-        fileStream << "\n";
+        fileStream << le();
         lastNumChannels = channelNames.length();
     }
     return true;
@@ -74,7 +75,7 @@ void DataRecorder::addData(double* data,
             fileStream << data[ci * numOfSamples + i];
             if (ci != numOfChannels-1) fileStream << _sep;
         }
-        fileStream << '\n';
+        fileStream << le();
     }
 
     if (disableBuffering) fileStream.flush();
@@ -87,3 +88,8 @@ void DataRecorder::stopRecording()
     file.close();
     lastNumChannels = 0;
 }
+
+const char* DataRecorder::le() const
+{
+    return windowsLE ? "\r\n" : "\n";
+}
diff --git a/src/datarecorder.h b/src/datarecorder.h
--- a/src/datarecorder.h
+++ b/src/datarecorder.h
@@ -34,6 +34,14 @@ public:
     bool disableBuffering;
 
     /**
+     * Use CR+LF as line ending. `false` by default.
+     *
+     * @note Toggling this variable during a recording will result in
+     * a corrupted file. Care must be taken at higher (UI) levels.
+     */
+    bool windowsLE;
+
+    /**
      * @brief Starts recording data to a file in CSV format.
      *
      * File is opened and header line (names of channels) is written.
@@ -72,6 +80,9 @@ private:
     QFile file;
     QTextStream fileStream;
     QString _sep;
+
+    /// Returns the selected line ending.
+    const char* le() const;
 };
 
 #endif // DATARECORDER_H
diff --git a/src/recordpanel.cpp b/src/recordpanel.cpp
--- a/src/recordpanel.cpp
+++ b/src/recordpanel.cpp
@@ -60,6 +60,14 @@ RecordPanel::RecordPanel(DataRecorder* r
             {
                 _recorder->disableBuffering = enabled;
             });
+
+    connect(ui->cbWindowsLE, &QCheckBox::toggled,
+            [this](bool enabled)
+            {
+                _recorder->windowsLE = enabled;
+            });
+
+    connect(&recordAction, &QAction::toggled, ui->cbWindowsLE, &QWidget::setDisabled);
 }
 
 RecordPanel::~RecordPanel()
diff --git a/src/recordpanel.ui b/src/recordpanel.ui
--- a/src/recordpanel.ui
+++ b/src/recordpanel.ui
@@ -6,7 +6,7 @@
    
     0
     0
-    532
+    627
     261
    
   
@@ -44,53 +44,93 @@
       
      
      - 
-      
-       
-        Increments file name automatically everytime a new recording starts
-       
-       
-        Auto increment file name
-       
-       
-        true
-       
-      
-     
 
-     - 
-      
-       
-        Continue recording to file even when plotting is paused
-       
-       
-        Record while paused
-       
-       
-        true
-       
-      
-     
 
-     - 
-      
-       
-        Stop recording when port closed
-       
-       
-        true
-       
-      
-     
 
-     - 
-      
-       
-        Channel names are written to the first line of record file
-       
-       
-        Write header line
-       
-       
-        true
-       
-      
+      
+       
- 
+        
+         
+          Channel names are written to the first line of record file
+         
+         
+          Write header line
+         
+         
+          true
+         
+        
+       
 
+       - 
+        
+         
+          Continue recording to file even when plotting is paused
+         
+         
+          Record while paused
+         
+         
+          true
+         
+        
+       
 
+       - 
+        
+         
+          Do not buffer when writing to file. Check this if you are using other software to open the file during recording.
+         
+         
+          Disable buffering
+         
+        
+       
 
+       - 
+        
+         
+          Stop recording when port closed
+         
+         
+          true
+         
+        
+       
 
+       - 
+        
+         
+          Increments file name automatically everytime a new recording starts
+         
+         
+          Auto increment file name
+         
+         
+          true
+         
+        
+       
 
+       - 
+        
+         
+          Use CR+LF as line endings. Some windows software may not show lines correctly otherwise. Can't be changed during recording.
+         
+         
+          Windows Style Line Endings
+         
+         
+          false
+         
+        
+       
 
+       - 
+        
+         
+          Qt::Horizontal
+         
+         
+          
+           1
+           20
+          
+         
+        
+       
 
+      
       
      - 
       
@@ -133,16 +173,6 @@
       
      
 
      - 
-      
-       
-        Do not buffer when writing to file. Check this if you are using other software to open the file during recording.
-       
-       
-        Disable buffering
-       
-      
-     
 
-     - 
       
        
         Qt::Vertical