diff --git a/CMakeLists.txt b/CMakeLists.txt
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -57,6 +57,8 @@ qt5_wrap_ui(UI_FILES
   portcontrol.ui
   about_dialog.ui
   snapshotview.ui
+  commandpanel.ui
+  commandwidget.ui
   )
 qt5_add_resources(RES_FILES misc/icons.qrc)
 
@@ -75,6 +77,8 @@ add_executable(${PROGRAM_NAME} WIN32
   snapshotview.cpp
   snapshotmanager.cpp
   plotsnapshotoverlay.cpp
+  commandpanel.cpp
+  commandwidget.cpp
   ${UI_FILES}
   ${RES_FILES}
   misc/windows_icon.rc
diff --git a/commandpanel.cpp b/commandpanel.cpp
new file mode 100644
--- /dev/null
+++ b/commandpanel.cpp
@@ -0,0 +1,52 @@
+/*
+  Copyright © 2015 Hasan Yavuz Özderya
+
+  This file is part of serialplot.
+
+  serialplot is free software: you can redistribute it and/or modify
+  it under the terms of the GNU General Public License as published by
+  the Free Software Foundation, either version 3 of the License, or
+  (at your option) any later version.
+
+  serialplot is distributed in the hope that it will be useful,
+  but WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+  GNU General Public License for more details.
+
+  You should have received a copy of the GNU General Public License
+  along with serialplot.  If not, see .
+*/
+
+#include "commandpanel.h"
+#include "ui_commandpanel.h"
+
+#include 
+
+CommandPanel::CommandPanel(QSerialPort* port, QWidget *parent) :
+    QWidget(parent),
+    ui(new Ui::CommandPanel)
+{
+    serialPort = port;
+
+    ui->setupUi(this);
+    ui->scrollAreaWidgetContents->setLayout(new QVBoxLayout);
+
+    connect(ui->pbNew, &QPushButton::clicked, this, &CommandPanel::newCommand);
+}
+
+CommandPanel::~CommandPanel()
+{
+    delete ui;
+}
+
+void CommandPanel::newCommand()
+{
+    auto command = new CommandWidget();
+    ui->scrollAreaWidgetContents->layout()->addWidget(command);
+    connect(command, &CommandWidget::sendCommand, this, &CommandPanel::sendCommand);
+}
+
+void CommandPanel::sendCommand(QString command, bool ascii)
+{
+    qDebug() << "command:" << command;
+}
diff --git a/commandpanel.h b/commandpanel.h
new file mode 100644
--- /dev/null
+++ b/commandpanel.h
@@ -0,0 +1,49 @@
+/*
+  Copyright © 2015 Hasan Yavuz Özderya
+
+  This file is part of serialplot.
+
+  serialplot is free software: you can redistribute it and/or modify
+  it under the terms of the GNU General Public License as published by
+  the Free Software Foundation, either version 3 of the License, or
+  (at your option) any later version.
+
+  serialplot is distributed in the hope that it will be useful,
+  but WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+  GNU General Public License for more details.
+
+  You should have received a copy of the GNU General Public License
+  along with serialplot.  If not, see .
+*/
+
+#ifndef COMMANDPANEL_H
+#define COMMANDPANEL_H
+
+#include 
+#include 
+
+#include "commandwidget.h"
+
+namespace Ui {
+class CommandPanel;
+}
+
+class CommandPanel : public QWidget
+{
+    Q_OBJECT
+
+public:
+    explicit CommandPanel(QSerialPort* port, QWidget *parent = 0);
+    ~CommandPanel();
+
+private:
+    Ui::CommandPanel *ui;
+    QSerialPort* serialPort;
+
+private slots:
+    void newCommand();
+    void sendCommand(QString command, bool ascii);
+};
+
+#endif // COMMANDPANEL_H
diff --git a/commandpanel.ui b/commandpanel.ui
new file mode 100644
--- /dev/null
+++ b/commandpanel.ui
@@ -0,0 +1,63 @@
+
+
+ CommandPanel
+ 
+  
+   
+    0
+    0
+    583
+    109
+   
+  
+  
+   Form
+  
+  
+   false
+  
+  
+   - 
+    
+     
+      QFrame::StyledPanel
+     
+     
+      true
+     
+     
+      Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop
+     
+     
+      
+       
+        0
+        0
+        563
+        16
+       
+      
+      
+       
+        0
+        0
+       
+      
+     
+    
+   
 
+   - 
+    
+     
+      New Command
+     
+     
+      
+     
+    
+   
 
+  
+ 
+ 
+ 
+
diff --git a/commandwidget.cpp b/commandwidget.cpp
new file mode 100644
--- /dev/null
+++ b/commandwidget.cpp
@@ -0,0 +1,46 @@
+/*
+  Copyright © 2015 Hasan Yavuz Özderya
+
+  This file is part of serialplot.
+
+  serialplot is free software: you can redistribute it and/or modify
+  it under the terms of the GNU General Public License as published by
+  the Free Software Foundation, either version 3 of the License, or
+  (at your option) any later version.
+
+  serialplot is distributed in the hope that it will be useful,
+  but WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+  GNU General Public License for more details.
+
+  You should have received a copy of the GNU General Public License
+  along with serialplot.  If not, see .
+*/
+
+#include "commandwidget.h"
+#include "ui_commandwidget.h"
+
+CommandWidget::CommandWidget(QWidget *parent) :
+    QWidget(parent),
+    ui(new Ui::CommandWidget)
+{
+    ui->setupUi(this);
+
+    connect(ui->pbDelete, &QPushButton::clicked, this, &CommandWidget::onDeleteClicked);
+    connect(ui->pbSend, &QPushButton::clicked, this, &CommandWidget::onSendClicked);
+}
+
+CommandWidget::~CommandWidget()
+{
+    delete ui;
+}
+
+void CommandWidget::onDeleteClicked()
+{
+    this->deleteLater();
+}
+
+void CommandWidget::onSendClicked()
+{
+    emit sendCommand(ui->leCommand->text(), ui->pbASCII->isChecked());
+}
diff --git a/commandwidget.h b/commandwidget.h
new file mode 100644
--- /dev/null
+++ b/commandwidget.h
@@ -0,0 +1,50 @@
+/*
+  Copyright © 2015 Hasan Yavuz Özderya
+
+  This file is part of serialplot.
+
+  serialplot is free software: you can redistribute it and/or modify
+  it under the terms of the GNU General Public License as published by
+  the Free Software Foundation, either version 3 of the License, or
+  (at your option) any later version.
+
+  serialplot is distributed in the hope that it will be useful,
+  but WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+  GNU General Public License for more details.
+
+  You should have received a copy of the GNU General Public License
+  along with serialplot.  If not, see .
+*/
+
+#ifndef COMMANDWIDGET_H
+#define COMMANDWIDGET_H
+
+#include 
+#include 
+
+namespace Ui {
+class CommandWidget;
+}
+
+class CommandWidget : public QWidget
+{
+    Q_OBJECT
+
+public:
+    explicit CommandWidget(QWidget *parent = 0);
+    ~CommandWidget();
+
+signals:
+    void deleteRequested(CommandWidget* thisWidget); // emitted when delete button is clicked
+    void sendCommand(QString command, bool ascii);   // emitted when send button clicked
+
+private:
+    Ui::CommandWidget *ui;
+
+private slots:
+    void onDeleteClicked();
+    void onSendClicked();
+};
+
+#endif // COMMANDWIDGET_H
diff --git a/commandwidget.ui b/commandwidget.ui
new file mode 100644
--- /dev/null
+++ b/commandwidget.ui
@@ -0,0 +1,160 @@
+
+
+ CommandWidget
+ 
+  
+   
+    0
+    0
+    433
+    34
+   
+  
+  
+   Form
+  
+  
+   
+    0
+   
+   
+    0
+   
+   
+    0
+   
+   
+    0
+   
+   - 
+    
+     
+      
+       30
+       0
+      
+     
+     
+      
+     
+     
+      
+       
+      
+     
+     
+      true
+     
+    
+   
 
+   - 
+    
+     
+      
+       0
+       0
+      
+     
+    
+   
 
+   - 
+    
+     
+      
+       0
+       0
+      
+     
+     
+      QFrame::StyledPanel
+     
+     
+      QFrame::Raised
+     
+     
+      
+       0
+      
+      
+       0
+      
+      
+       0
+      
+      
+       0
+      
+      
- 
+       
+        
+         
+          0
+          0
+         
+        
+        
+         
+          40
+          0
+         
+        
+        
+         ASCII
+        
+        
+         true
+        
+        
+         true
+        
+        
+         true
+        
+       
+      
 
+      - 
+       
+        
+         
+          0
+          0
+         
+        
+        
+         
+          40
+          0
+         
+        
+        
+         HEX
+        
+        
+         true
+        
+        
+         true
+        
+       
+      
 
+     
+    
+    
+   - 
+    
+     
+      
+       0
+       0
+      
+     
+     
+      Send
+     
+    
+   
 
+  
+ 
+ 
+ 
+
diff --git a/mainwindow.cpp b/mainwindow.cpp
--- a/mainwindow.cpp
+++ b/mainwindow.cpp
@@ -54,10 +54,12 @@ MainWindow::MainWindow(QWidget *parent) 
     QMainWindow(parent),
     ui(new Ui::MainWindow),
     portControl(&serialPort),
+    commandPanel(&serialPort),
     snapshotMan(this, &channelBuffers)
 {
     ui->setupUi(this);
     ui->tabWidget->insertTab(0, &portControl, "Port");
+    ui->tabWidget->insertTab(3, &commandPanel, "Commands");
     ui->tabWidget->setCurrentIndex(0);
     addToolBar(portControl.toolBar());
 
diff --git a/mainwindow.h b/mainwindow.h
--- a/mainwindow.h
+++ b/mainwindow.h
@@ -35,6 +35,7 @@
 #include 
 
 #include "portcontrol.h"
+#include "commandpanel.h"
 #include "ui_about_dialog.h"
 #include "framebuffer.h"
 #include "snapshotmanager.h"
@@ -100,6 +101,8 @@ private:
     unsigned int sampleCount;
     QTimer spsTimer;
 
+    CommandPanel commandPanel;
+
     SnapshotManager snapshotMan;
 
     // demo
diff --git a/serialplot.pro b/serialplot.pro
--- a/serialplot.pro
+++ b/serialplot.pro
@@ -46,7 +46,9 @@ SOURCES += main.cpp\
     snapshotview.cpp \
     snapshotmanager.cpp \
     snapshot.cpp \
-    plotsnapshotoverlay.cpp
+    plotsnapshotoverlay.cpp \
+    commandpanel.cpp \
+    commandwidget.cpp
 
 HEADERS  += mainwindow.h \
     utils.h \
@@ -62,12 +64,16 @@ HEADERS  += mainwindow.h \
     snapshotview.h \
     snapshotmanager.h \
     snapshot.h \
-    plotsnapshotoverlay.h
+    plotsnapshotoverlay.h \
+    commandpanel.h \
+    commandwidget.h
 
 FORMS    += mainwindow.ui \
     about_dialog.ui \
     portcontrol.ui \
-    snapshotview.ui
+    snapshotview.ui \
+    commandpanel.ui \
+    commandwidget.ui
 
 INCLUDEPATH += qmake/