diff --git a/CMakeLists.txt b/CMakeLists.txt
index c23b9edc641111b5f43c9390e61d5a63044902e3..7e736ad3b012c976af759facf8a41a623d46d269 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -19,8 +19,17 @@ find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets)
 
 set(PROJECT_SOURCES
         src/ControlDeveloper.cpp
-        src/mainwindow.cpp
-        src/mainwindow.h
+        src/ControlUI.cpp
+        src/ControlModel.cpp
+        src/ControlModelRegistry.cpp
+        src/PanelCommandTypes.cpp
+        src/CommandType.cpp
+        src/CommandListOWN.cpp
+        include/ComHandler.cpp
+        include/ObjectFileHandler.cpp
+        src/Gear.cpp
+        src/Direction.cpp
+        src/Pause.cpp
 )
 
 if(${QT_VERSION_MAJOR} GREATER_EQUAL 6)
@@ -46,6 +55,9 @@ else()
     endif()
 endif()
 
+# Add include directory
+target_include_directories(ControlDeveloper PUBLIC include/)
+
 target_link_libraries(ControlDeveloper PRIVATE Qt${QT_VERSION_MAJOR}::Widgets)
 
 set_target_properties(ControlDeveloper PROPERTIES
diff --git a/src/ComTypeListWidgetItem.h b/src/ComTypeListWidgetItem.h
new file mode 100644
index 0000000000000000000000000000000000000000..c470651075e1a7fd55cdd7d679be15d07f65b86f
--- /dev/null
+++ b/src/ComTypeListWidgetItem.h
@@ -0,0 +1,22 @@
+#pragma once
+#include <QListWidgetItem>
+
+#include "CommandType.h"
+
+
+class ComTypeListWidgetItem : public QListWidgetItem
+{
+
+private:
+    CommandType *cT;
+
+public:
+
+    ComTypeListWidgetItem(CommandType *_cT)
+    {
+        cT = _cT;
+        if (cT)
+            setText(cT->getName().c_str());
+    }
+    CommandType *getCommandType() { return cT; }
+};
diff --git a/src/ControlDeveloper.cpp b/src/ControlDeveloper.cpp
index 46d850be7f8786b001041099b9b19d5e8a3f3616..9ae07128fe1af1b283e92e465f8c0ac87b96130b 100644
--- a/src/ControlDeveloper.cpp
+++ b/src/ControlDeveloper.cpp
@@ -1,11 +1,11 @@
 #include <QApplication>
-#include "mainwindow.h"
+#include "ControlUI.h"
 
 
 int main(int argc, char *argv[])
 {
     QApplication a(argc, argv);
-    MainWindow w;
+    ControlUI w;
     w.show();
     return a.exec();
 }
\ No newline at end of file
diff --git a/src/ControlUI.cpp b/src/ControlUI.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..06eee0d399b05a54a750157572bc85f185f6cab1
--- /dev/null
+++ b/src/ControlUI.cpp
@@ -0,0 +1,10 @@
+#include "ControlUI.h"
+#include "PanelCommandTypes.h"
+
+ControlUI::ControlUI(QWidget *parent)
+    : QMainWindow(parent)
+{
+    setWindowTitle("ControlDeveloper");
+    PanelCommandTypes *pct = new PanelCommandTypes(&ControlModel::getInstance());
+    setCentralWidget(pct);
+}
diff --git a/src/mainwindow.h b/src/ControlUI.h
similarity index 55%
rename from src/mainwindow.h
rename to src/ControlUI.h
index e38abb10d42a56f2596f8d3d3f607ff3e6696dbd..ec91558d0150fd08943e9244d0b359d9e641ad52 100644
--- a/src/mainwindow.h
+++ b/src/ControlUI.h
@@ -3,15 +3,13 @@
 
 #include <QMainWindow>
 
-class MainWindow : public QMainWindow
+class ControlUI : public QMainWindow
 {
     Q_OBJECT
 
 private:
 
 public:
-    MainWindow(QWidget *parent = nullptr);
-    ~MainWindow();
-
+    ControlUI(QWidget *parent = nullptr);
 };
 #endif // MAINWINDOW_H
diff --git a/src/PanelCommandTypes.cpp b/src/PanelCommandTypes.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..776bf1e543c3db7a73fec06b3dfce7f7976653f9
--- /dev/null
+++ b/src/PanelCommandTypes.cpp
@@ -0,0 +1,44 @@
+#include <QBoxLayout>
+
+#include "PanelCommandTypes.h"
+#include "ComTypeListWidgetItem.h"
+
+
+PanelCommandTypes::PanelCommandTypes(ControlModel *_cM)
+{
+    cM = _cM;
+    setView();
+    setController();
+}
+
+void PanelCommandTypes::setView()
+{
+    QBoxLayout *layout = new QBoxLayout(QBoxLayout::Direction::TopToBottom);
+    setLayout(layout);
+    commandTypeList = new QListWidget();
+    layout->addWidget(commandTypeList);
+    bAdd = new QPushButton("Add");
+    layout->addWidget(bAdd);
+
+    for (auto &&i : cM->getCommandTypes())
+    {
+        commandTypeList->addItem(new ComTypeListWidgetItem(&i));
+    }
+}
+
+void PanelCommandTypes::setController()
+{
+    connect(bAdd, SIGNAL(clicked()), this, SLOT(onAddButton()));
+}
+
+void PanelCommandTypes::onAddButton()
+{
+    ComTypeListWidgetItem *listItem = dynamic_cast<ComTypeListWidgetItem*>(commandTypeList->currentItem());
+    if (listItem)
+    {
+        std::shared_ptr<ICommand> newCommand = listItem->getCommandType()->createInstance();
+        cM->getCommandList().add(newCommand);
+
+        cM->getCommandList().printCommands();
+    }
+}
\ No newline at end of file
diff --git a/src/PanelCommandTypes.h b/src/PanelCommandTypes.h
new file mode 100644
index 0000000000000000000000000000000000000000..fced7664f9e6ee8a748db128e1c478843dbfa0fb
--- /dev/null
+++ b/src/PanelCommandTypes.h
@@ -0,0 +1,24 @@
+#pragma once
+#include <QListWidget>
+#include <QPushButton>
+#include "ControlModel.h"
+
+class PanelCommandTypes : public QWidget
+{
+
+Q_OBJECT
+
+private:
+    QListWidget *commandTypeList;
+    QPushButton *bAdd;
+    ControlModel *cM;
+
+    void setView();
+    void setController();
+
+private slots:
+    void onAddButton();
+
+public:
+    PanelCommandTypes(ControlModel *_cM);
+};
diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp
deleted file mode 100644
index 2f94d135feaf9e3b4a7ed022957567169190c2da..0000000000000000000000000000000000000000
--- a/src/mainwindow.cpp
+++ /dev/null
@@ -1,17 +0,0 @@
-#include <QPushButton>
-#include <QLineEdit>
-#include <QBoxLayout>
-
-#include "mainwindow.h"
-
-MainWindow::MainWindow(QWidget *parent)
-    : QMainWindow(parent)
-{
-//general
-    setWindowTitle("ControlDeveloper");
-}
-
-MainWindow::~MainWindow()
-{
-}
-