diff --git a/src/asciireadersettings.cpp b/src/asciireadersettings.cpp
--- a/src/asciireadersettings.cpp
+++ b/src/asciireadersettings.cpp
@@ -1,5 +1,5 @@
 /*
-  Copyright © 2016 Hasan Yavuz Özderya
+  Copyright © 2017 Hasan Yavuz Özderya
 
   This file is part of serialplot.
 
@@ -17,20 +17,35 @@
   along with serialplot.  If not, see .
 */
 
+#include 
+#include 
+
 #include "utils.h"
 #include "setting_defines.h"
 
 #include "asciireadersettings.h"
 #include "ui_asciireadersettings.h"
 
-#include 
-
 AsciiReaderSettings::AsciiReaderSettings(QWidget *parent) :
     QWidget(parent),
     ui(new Ui::AsciiReaderSettings)
 {
     ui->setupUi(this);
 
+    auto validator = new QRegularExpressionValidator(QRegularExpression("[^\\d]?"), this);
+    ui->leDelimiter->setValidator(validator);
+
+    connect(ui->rbComma, &QAbstractButton::toggled,
+            this, &AsciiReaderSettings::delimiterToggled);
+    connect(ui->rbSpace, &QAbstractButton::toggled,
+            this, &AsciiReaderSettings::delimiterToggled);
+    connect(ui->rbTab, &QAbstractButton::toggled,
+            this, &AsciiReaderSettings::delimiterToggled);
+    connect(ui->rbOtherDelimiter, &QAbstractButton::toggled,
+            this, &AsciiReaderSettings::delimiterToggled);
+    connect(ui->leDelimiter, &QLineEdit::textChanged,
+            this, &AsciiReaderSettings::customDelimiterChanged);
+
     // Note: if directly connected we get a runtime warning on incompatible signal arguments
     connect(ui->spNumOfChannels, SELECT::OVERLOAD_OF(&QSpinBox::valueChanged),
             [this](int value)
@@ -44,11 +59,51 @@ AsciiReaderSettings::~AsciiReaderSetting
     delete ui;
 }
 
-unsigned AsciiReaderSettings::numOfChannels()
+unsigned AsciiReaderSettings::numOfChannels() const
 {
     return ui->spNumOfChannels->value();
 }
 
+QChar AsciiReaderSettings::delimiter() const
+{
+    if (ui->rbComma->isChecked())
+    {
+        return QChar(',');
+    }
+    else if (ui->rbSpace->isChecked())
+    {
+        return QChar(' ');
+    }
+    else if (ui->rbTab->isChecked())
+    {
+        return QChar('\t');
+    }
+    else                        // rbOther
+    {
+        auto t = ui->leDelimiter->text();
+        return t.isEmpty() ? QChar() : t.at(0);
+    }
+}
+
+void AsciiReaderSettings::delimiterToggled(bool checked)
+{
+    if (!checked) return;
+
+    auto d = delimiter();
+    if (!d.isNull())
+    {
+        emit delimiterChanged(d);
+    }
+}
+
+void AsciiReaderSettings::customDelimiterChanged(const QString text)
+{
+    if (ui->rbOtherDelimiter->isChecked())
+    {
+        if (!text.isEmpty()) emit delimiterChanged(text.at(0));
+    }
+}
+
 void AsciiReaderSettings::saveSettings(QSettings* settings)
 {
     settings->beginGroup(SettingGroup_ASCII);
@@ -58,6 +113,25 @@ void AsciiReaderSettings::saveSettings(Q
     if (numOfChannelsSetting == "0") numOfChannelsSetting = "auto";
     settings->setValue(SG_ASCII_NumOfChannels, numOfChannelsSetting);
 
+    // save delimiter
+    QString delimiterS;
+    if (ui->rbOtherDelimiter->isChecked())
+    {
+        delimiterS = "other";
+    }
+    else if (ui->rbTab->isChecked())
+    {
+        // Note: \t is not correctly loaded
+        delimiterS = "TAB";
+    }
+    else
+    {
+        delimiterS = delimiter();
+    }
+
+    settings->setValue(SG_ASCII_Delimiter, delimiterS);
+    settings->setValue(SG_ASCII_CustomDelimiter, ui->leDelimiter->text());
+
     settings->endGroup();
 }
 
@@ -83,5 +157,26 @@ void AsciiReaderSettings::loadSettings(Q
         }
     }
 
+    // load delimiter
+    auto delimiterS = settings->value(SG_ASCII_Delimiter, delimiter()).toString();
+    auto customDelimiter = settings->value(SG_ASCII_CustomDelimiter, delimiter()).toString();
+    if (!customDelimiter.isEmpty()) ui->leDelimiter->setText(customDelimiter);
+    if (delimiterS == ",")
+    {
+        ui->rbComma->setChecked(true);
+    }
+    else if (delimiterS == " ")
+    {
+        ui->rbSpace->setChecked(true);
+    }
+    else if (delimiterS == "TAB")
+    {
+        ui->rbTab->setChecked(true);
+    }
+    else
+    {
+        ui->rbOtherDelimiter->setChecked(true);
+    }
+
     settings->endGroup();
 }