diff --git a/Implementation/GUI/LayerDock.cpp b/Implementation/GUI/LayerDock.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..aede84fb99e0b6a23edac62c31d3c8e680713226
--- /dev/null
+++ b/Implementation/GUI/LayerDock.cpp
@@ -0,0 +1,188 @@
+#include "LayerDock.h"
+
+LayerDock::LayerDock(InteractionTool *interaction){
+    interactionTool = interaction;
+    createLayerDock();
+}
+LayerDock::~LayerDock(){
+
+}
+void LayerDock::updateLayers(){
+    for (unsigned int i = 0; i < interactionTool->getPicture()->getLayerCount(); i++) {
+        QPixmap pic;
+        pic.convertFromImage(*interactionTool->getPicture()->getLayerAsQ(i));
+        layerButtons[i*5+1]->setIcon(pic);
+        layerButtons[i*5+1]->setChecked(false);
+    }
+    layerButtons[interactionTool->getPicture()->getCurrentLayerIndex()*5+1]->setChecked(true);
+    if(interactionTool->getPicture()->getLayerCount()>1){
+        layerButtons[interactionTool->getPicture()->getCurrentLayerIndex()*5+3]->setEnabled(false);
+    }
+
+}
+void LayerDock::updateLayerCount(){
+    layerButtons = std::vector<QPushButton*>(); //TODO vector zu Qvector ändern
+    layerCheckboxes = std::vector<QCheckBox*>();
+    layerDock->close();
+
+    layerDock = new QDockWidget(tr("Layers"));
+    layerDock->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea);
+    layerLayout = new QGridLayout();
+    layerButtons.push_back(new QPushButton("+"));
+    layerLayout->addWidget(layerButtons[0],0,0,2,2);
+    layerButtons[0]->setMaximumWidth(25);
+    layerButtons[0]->setCheckable(true);
+    connect(layerButtons[0], SIGNAL(clicked()),this, SLOT(changeCurrentLayer()));
+    for (unsigned int i = 0; i < interactionTool->getPicture()->getLayerCount(); i++) {
+        layerButtons.push_back(new QPushButton);
+        //layerButtons[i]->setStyleSheet("width: 100px;height: 100px;");
+        QPixmap pic(100,100);
+        pic.convertFromImage(*interactionTool->getPicture()->getLayerAsQ(i));
+        layerButtons[i*5+1]->setIconSize(QSize(100,100));
+        layerButtons[i*5+1]->setIcon(pic);
+        //layerButtons[i]->setMask(pic);
+        layerLayout->addWidget(layerButtons[i*5+1],i*5+1,2,5,1);
+        layerButtons[i*5+1]->setCheckable(true);
+        connect(layerButtons[i*5+1], SIGNAL(clicked()),this, SLOT(changeCurrentLayer()));
+        layerButtons.push_back(new QPushButton("^"));
+        layerLayout->addWidget(layerButtons[i*5+2],i*5+2,0,1,2);
+        layerButtons[i*5+2]->setMaximumWidth(25);
+        layerButtons[i*5+2]->setCheckable(true);
+        if (i==0){
+            layerButtons[i*5+2]->setEnabled(false);
+        }
+        connect(layerButtons[i*5+2], SIGNAL(clicked()),this, SLOT(changeCurrentLayer()));
+        layerButtons.push_back(new QPushButton("-"));
+        layerLayout->addWidget(layerButtons[i*5+3],i*5+3,0,1,1);
+        layerButtons[i*5+3]->setMaximumWidth(25);
+        layerButtons[i*5+3]->setCheckable(true);
+        connect(layerButtons[i*5+3], SIGNAL(clicked()),this, SLOT(changeCurrentLayer()));
+        layerCheckboxes.push_back(new QCheckBox());
+        layerLayout->addWidget(layerCheckboxes[i],i*5+3,1,1,1);
+        layerCheckboxes[i]->setChecked(true);
+        connect(layerCheckboxes[i], SIGNAL(clicked()),this, SLOT(updateVisible()));
+        layerButtons.push_back(new QPushButton("v"));
+        layerLayout->addWidget(layerButtons[i*5+4],i*5+4,0,1,2);
+        layerButtons[i*5+4]->setMaximumWidth(25);
+        layerButtons[i*5+4]->setCheckable(true);
+        if (i+1==interactionTool->getPicture()->getLayerCount()){
+            layerButtons[i*5+4]->setEnabled(false);
+        }
+        connect(layerButtons[i*5+4], SIGNAL(clicked()),this, SLOT(changeCurrentLayer()));
+        layerButtons.push_back(new QPushButton("+"));
+        layerLayout->addWidget(layerButtons[i*5+5],i*5+5,0,2,2);
+        layerButtons[i*5+5]->setMaximumWidth(25);
+        layerButtons[i*5+5]->setCheckable(true);
+        connect(layerButtons[i*5+5], SIGNAL(clicked()),this, SLOT(changeCurrentLayer()));
+    }
+    layerButtons[interactionTool->getPicture()->getCurrentLayerIndex()*5+1]->setChecked(true);
+    if(interactionTool->getPicture()->getLayerCount()>1){
+        layerButtons[interactionTool->getPicture()->getCurrentLayerIndex()*5+3]->setEnabled(false);
+    }
+    layers = new QWidget(layerDock);
+    layers->setLayout(layerLayout);
+    layerScrollArea = new QScrollArea();
+    layerScrollArea->setWidget(layers);
+    layerDock->setWidget(layerScrollArea);
+    //addDockWidget(Qt::RightDockWidgetArea, layerDock);
+    emit updateLayerDock();
+    layerDock->setFeatures(QDockWidget::DockWidgetMovable|QDockWidget::DockWidgetFloatable);
+}
+void LayerDock::changeCurrentLayer(){
+    if (layerButtons[0]->isChecked()){
+        emit newLayer();
+        //interactionTool->getPicture()->moveLayer(0,interactionTool->getPicture()->getLayerCount()-1);
+        //updateLayers();
+        layerButtons[0]->setChecked(false);
+    }
+    for (int i = 0; i < interactionTool->getPicture()->getLayerCount(); i++) {
+        if (layerButtons[i*5+1]->isChecked()&&i!=interactionTool->getPicture()->getCurrentLayerIndex()){
+            layerButtons[interactionTool->getPicture()->getCurrentLayerIndex()*5+1]->setChecked(false);
+            layerButtons[interactionTool->getPicture()->getCurrentLayerIndex()*5+3]->setEnabled(true);
+            interactionTool->getPicture()->setCurrentLayer(i);
+            //setImage(*interactionTool->getPicture()->getCurrentLayerAsQ());
+            //updateVisible();
+            //updateColors();
+            emit update();
+            layerButtons[interactionTool->getPicture()->getCurrentLayerIndex()*5+3]->setEnabled(false);
+        } else if(layerButtons[i*5+2]->isChecked()){
+            interactionTool->getPicture()->moveLayer(i,i-1);
+            updateLayers();
+            layerButtons[i*5+2]->setChecked(false);
+            //updateVisible();
+            emit update();
+        } else if(layerButtons[i*5+3]->isChecked()){
+            layerButtons[i*5+3]->setChecked(false);
+            interactionTool->getPicture()->removeLayer(i);
+            if(interactionTool->getPicture()->getLayerCount()==0){//TODO
+                //hasLayer=false;
+                //imageLabel = new QLabel();
+                //imageLabel->setBackgroundRole(QPalette::Dark);
+                //imageLabel->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Ignored);
+                //imageLabel->setScaledContents(true);
+            }
+            updateLayerCount();
+            //updateVisible();
+            emit update();
+        } else if(layerButtons[i*5+4]->isChecked()){
+            interactionTool->getPicture()->moveLayer(i+1,i);
+            updateLayers();
+            layerButtons[i*5+4]->setChecked(false);
+            //updateVisible();
+            emit update();
+        } else if(layerButtons[i*5+5]->isChecked()&&i+1!=interactionTool->getPicture()->getLayerCount()){
+            layerButtons[i*5+5]->setChecked(false);
+            param = new toolParameters_t;
+            param->tool = merge;
+            param->layerIndex1 = i;
+            param->layerIndex2 = i+1;
+            this->i=i;
+
+            emit getParams(param);
+
+        } else if(layerButtons[i*5+5]->isChecked()&&i+1==interactionTool->getPicture()->getLayerCount()){
+            newLayer();
+            //interactionTool->getPicture()->moveLayer(i+1,i);
+            //updateLayers();
+            layerButtons[i*5+5]->setChecked(false);
+        }
+    }
+}
+void LayerDock::createLayerDock(){
+    layerDock = new QDockWidget(tr("Layers"));
+    layerDock->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea);
+    layerLayout = new QGridLayout();
+    layerButtons.push_back(new QPushButton("+"));
+    layerLayout->addWidget(layerButtons[0],0,0,2,1);
+    layerButtons[0]->setMaximumWidth(25);
+    layerButtons[0]->setCheckable(true);
+    connect(layerButtons[0], SIGNAL(clicked()),this, SLOT(changeCurrentLayer()));
+    layers = new QWidget(layerDock);
+    layers->setLayout(layerLayout);
+    layerScrollArea = new QScrollArea();
+    layerScrollArea->setWidget(layers);
+    layerDock->setWidget(layerScrollArea);
+    //addDockWidget(Qt::RightDockWidgetArea, layerDock);
+    layerDock->setFeatures(QDockWidget::DockWidgetMovable|QDockWidget::DockWidgetFloatable);
+}
+
+QDockWidget *LayerDock::getDockWidget(){
+    return layerDock;
+}
+bool LayerDock::isLayerCheckboxChecked(int i){
+    return layerCheckboxes[i]->isChecked();
+}
+void LayerDock::doMergeII(toolParameters_t *param){
+    interactionTool->useTool(param);
+    interactionTool->getPicture()->removeLayer(i+1);
+    interactionTool->getPicture()->removeLayer(i);
+    param = nullptr;
+    updateLayerCount();
+    //updateColors();
+    //setImage(*interactionTool->getPicture()->getCurrentLayerAsQ());
+    //updateVisible();
+    emit update();
+}
+void LayerDock::updateVisible(){
+    emit update();
+}
diff --git a/Implementation/GUI/LayerDock.h b/Implementation/GUI/LayerDock.h
new file mode 100644
index 0000000000000000000000000000000000000000..9a22452f97dcbd8c03e860e9a5b06e1bc3ed764c
--- /dev/null
+++ b/Implementation/GUI/LayerDock.h
@@ -0,0 +1,48 @@
+#ifndef LAYERDOCK_H
+#define LAYERDOCK_H
+#include "InteractionTool.h"
+#include <QDockWidget>
+#include <QScrollArea>
+#include <QGridLayout>
+#include <QPushButton>
+#include <QCheckBox>
+
+class LayerDock : public QObject
+{
+    Q_OBJECT
+
+public:
+    LayerDock(InteractionTool *interaction);
+    ~LayerDock();
+    void updateLayers();
+    void updateLayerCount();
+    QDockWidget *getDockWidget();
+    bool isLayerCheckboxChecked(int i);
+    void doMergeII(toolParameters_t *param);
+
+signals:
+    void updateLayerDock();
+    void newLayer();
+    void update();
+    void getParams(toolParameters_t *param);
+
+private slots:
+    void changeCurrentLayer();
+    void updateVisible();
+
+private:
+    void createLayerDock();
+
+    QScrollArea *layerScrollArea;
+    QWidget *layers;
+    QDockWidget *layerDock;
+    QGridLayout* layerLayout;
+    std::vector<QPushButton*> layerButtons;
+    std::vector<QCheckBox*> layerCheckboxes;
+    toolParameters_t *param;
+    InteractionTool *interactionTool;
+    int i;
+
+};
+
+#endif // LAYERDOCK_H
diff --git a/Implementation/GUI/imageviewer.cpp b/Implementation/GUI/imageviewer.cpp
index 1d60c47316ca1e29d9b6799314fffd7a873d93b8..9eaf33ab12cc6f9b509a2284ee34a1814db17ed0 100644
--- a/Implementation/GUI/imageviewer.cpp
+++ b/Implementation/GUI/imageviewer.cpp
@@ -134,7 +134,15 @@ ImageViewer::ImageViewer(QWidget *parent)
     newLayerDock->setColorVect(colorVect);
     drawDock->setColorVect(colorVect);
     createColorDock();
-    createLayerDock();
+    //createLayerDock();
+
+    layerDock = new LayerDock(interactionTool);
+    connect(layerDock,&LayerDock::updateLayerDock,this,&ImageViewer::updateLayerDock);
+    connect(layerDock,&LayerDock::newLayer,this,&ImageViewer::newLayer);
+    connect(layerDock,&LayerDock::update,this,&ImageViewer::updateWithoutLayer);
+    connect(layerDock,QOverload<toolParameters_t*>::of(&LayerDock::getParams),this,&ImageViewer::setMergeParams);
+    addDockWidget(Qt::RightDockWidgetArea, layerDock->getDockWidget());
+
 
     resize(QGuiApplication::primaryScreen()->availableSize() * 3 / 5);
 }
@@ -187,7 +195,7 @@ void ImageViewer::createColorDock(){
     //
 
 }
-
+/*
 void ImageViewer::createLayerDock(){
 
     layerDock = new QDockWidget(tr("Layers"), this);
@@ -206,7 +214,7 @@ void ImageViewer::createLayerDock(){
     addDockWidget(Qt::RightDockWidgetArea, layerDock);
     layerDock->setFeatures(QDockWidget::DockWidgetMovable|QDockWidget::DockWidgetFloatable);
 }
-
+*/
 bool ImageViewer::loadFile(const QString &fileName)
 {
 
@@ -263,7 +271,7 @@ bool ImageViewer::saveFile(const QString &fileName)
     QPixmap *px = new QPixmap(interactionTool->getPicture()->getMaxSize());
     QPainter *painter= new QPainter(px);
     for (int i = 0; i < interactionTool->getPicture()->getLayerCount(); i++) {
-        if (layerCheckboxes[i]->isChecked()){
+        if (layerDock->isLayerCheckboxChecked(i)){
             painter->drawImage(interactionTool->getPicture()->xOffset(i),interactionTool->getPicture()->yOffset(i),*interactionTool->getPicture()->getLayerAsQ(i));
             //painter->drawI
         }
@@ -310,7 +318,8 @@ void ImageViewer::open()
 
     while (dialog.exec() == QDialog::Accepted && !loadFile(dialog.selectedFiles().first())) {}
     updateColors();
-    updateLayerCount();
+    //updateLayerCount();
+    layerDock->updateLayerCount();
     updateVisible();
 }
 //! [1]
@@ -619,6 +628,7 @@ void ImageViewer::updateColors(){
     }
     //colorButton->setMenu(colorMenu);
 }
+/*
 void ImageViewer::changeCurrentLayer(){
     if (layerButtons[0]->isChecked()){
         newLayer();
@@ -680,7 +690,7 @@ void ImageViewer::changeCurrentLayer(){
             layerButtons[i*5+5]->setChecked(false);
         }
     }
-}
+}*/
 void ImageViewer::addColor(QColor col, int pos){
     QPixmap px(20, 20);
     colorVect[pos]=col.rgba();
@@ -699,7 +709,8 @@ void ImageViewer::addColor(QColor col, int pos){
     if (hasLayer){
         interactionTool->getPicture()->getCurrentLayerAsQ()->setColor(pos,colorVect[pos]);
         //setImage(*interactionTool->getPicture()->getCurrentLayerAsQ());
-        updateLayers();
+        //updateLayers();
+        layerDock->updateLayers();
         updateVisible();
 
     }
@@ -732,7 +743,8 @@ void ImageViewer::changeColor(){
             if (hasLayer){
                 interactionTool->getPicture()->getCurrentLayerAsQ()->setColor(i,colorVect[i]);
                 //setImage(*interactionTool->getPicture()->getCurrentLayerAsQ());
-                updateLayers();
+                //updateLayers();
+                layerDock->updateLayers();
                 updateVisible();
 
             }
@@ -740,6 +752,7 @@ void ImageViewer::changeColor(){
         }
     }
 }
+/*
 void ImageViewer::updateLayerCount(){
     layerButtons = std::vector<QPushButton*>(); //TODO vector zu Qvector ändern
     layerCheckboxes = std::vector<QCheckBox*>();
@@ -818,7 +831,7 @@ void ImageViewer::updateLayers(){
     if(interactionTool->getPicture()->getLayerCount()>1){
         layerButtons[interactionTool->getPicture()->getCurrentLayerIndex()*5+3]->setEnabled(false);
     }
-}
+}*/
 void ImageViewer::newLayer(){
     //param = new toolParameters_t;
     //param->tool=tools_e::newLayer;
@@ -856,7 +869,7 @@ void ImageViewer::calculateVisible(){
         }
     }
     for (int i = 0; i < interactionTool->getPicture()->getLayerCount(); i++) {
-        if (layerCheckboxes[i]->isChecked()){
+        if (layerDock->isLayerCheckboxChecked(i)){
             painter->drawImage(interactionTool->getPicture()->xOffset(i),interactionTool->getPicture()->yOffset(i),*interactionTool->getPicture()->getLayerAsQ(i));
             //painter->drawI
         }
@@ -883,7 +896,8 @@ void ImageViewer::setTranslationParams(toolParameters_t *param){
     transLationDock->doTranslationII(param);
 }
 void ImageViewer::updateall(){
-    updateLayerCount();
+    //updateLayerCount();
+    layerDock->updateLayerCount();
     updateColors();
     //setImage(*interactionTool.getPicture()->getCurrentLayerAsQ());
     updateVisible();
@@ -910,3 +924,15 @@ void ImageViewer::drawShowII(para2 p){
     painter->fillPath(path,*pen);
     imageLabel->setPixmap(*px);
 }
+void ImageViewer::updateLayerDock(){
+    addDockWidget(Qt::RightDockWidgetArea, layerDock->getDockWidget());
+}
+void ImageViewer::setMergeParams(toolParameters_t *param){
+    param->colorVect = colorVect;
+    layerDock->doMergeII(param);
+}
+void ImageViewer::updateWithoutLayer(){
+    updateColors();
+    //setImage(*interactionTool.getPicture()->getCurrentLayerAsQ());
+    updateVisible();
+}
diff --git a/Implementation/GUI/imageviewer.h b/Implementation/GUI/imageviewer.h
index 23bdf6ef4ec4103b867c62d7fddfdbe5a92c652c..3a39db35a8a613e54319fd98ceddb0bca2abed11 100644
--- a/Implementation/GUI/imageviewer.h
+++ b/Implementation/GUI/imageviewer.h
@@ -51,6 +51,7 @@
 #include "TranslationDock.h"
 #include "NewLayerDock.h"
 #include "DrawDock.h"
+#include "LayerDock.h"
 
 #ifndef IMAGEVIEWER_H
 #define IMAGEVIEWER_H
@@ -93,12 +94,13 @@ public:
     bool loadFile(const QString &);
     bool getHasLayer();
     void updateColors();
-    void updateLayers();
-    void updateLayerCount();
+    //void updateLayers();
+    //void updateLayerCount();
     QVector<QRgb> getColorVect();
 
 public slots:
     void updateVisible();
+    //void newLayer();
 
 protected:
     void mousePressEvent(QMouseEvent *event) override;
@@ -121,8 +123,10 @@ private slots:
     //void calcTranslation();
     //void doTranslation();
     void setTranslationParams(toolParameters_t * param);
+    void setMergeParams(toolParameters_t * param);
     void updateHasLayer(bool b);
     void updateall();
+    void updateWithoutLayer();
     //void pencil();
     //void startDraw();
     //void lines();
@@ -137,7 +141,7 @@ private slots:
     //void setNewColor();
     //void setDrawColor();
     void changeColor();
-    void changeCurrentLayer();
+    //void changeCurrentLayer();
     //void updateVisible();
     void makeShaped();
     void newLayer();
@@ -148,11 +152,12 @@ private slots:
     //void scrollAreaChanged();
     void drawShowI(para1 p);
     void drawShowII(para2 p);
+    void updateLayerDock();
 
 private:
     void createActions();
     void createColorDock();
-    void createLayerDock();
+    //void createLayerDock();
     //void createTranslateDock();
     //void createDrawDock();
     void createMenus();
@@ -170,17 +175,17 @@ private:
     QLabel *imageLabel;
     QScrollArea *scrollArea;
     QScrollArea *ColorScrollArea;
-    QScrollArea *layerScrollArea;
+    //QScrollArea *layerScrollArea;
     QWidget *colors;
-    QWidget *layers;
+    //QWidget *layers;
     QMenu *viewMenu;
     QDockWidget *colorDock;
-    QDockWidget *layerDock;
+    //QDockWidget *layerDock;
     QGridLayout* colorLayout;
-    QGridLayout* layerLayout;
+    //QGridLayout* layerLayout;
     std::vector<QToolButton*> colorButtons;
-    std::vector<QPushButton*> layerButtons;
-    std::vector<QCheckBox*> layerCheckboxes;
+    //std::vector<QPushButton*> layerButtons;
+    //std::vector<QCheckBox*> layerCheckboxes;
     QVector<QRgb> colorVect;
     QVector<QRgb> newColorVect;
     //QList<QAction*> colorAct;
@@ -228,6 +233,8 @@ private:
     TranslationDock *transLationDock;
     NewLayerDock *newLayerDock;
     DrawDock *drawDock;
+    LayerDock *layerDock;
+
 
 #ifndef QT_NO_PRINTER
     QPrinter printer;
diff --git a/Implementation/GUI/imageviewer.pro b/Implementation/GUI/imageviewer.pro
index f838fad9e499591de786b60a6552850d5a064a96..91de5648f5459acbdb109b3ab362464910dfe568 100644
--- a/Implementation/GUI/imageviewer.pro
+++ b/Implementation/GUI/imageviewer.pro
@@ -5,6 +5,7 @@ qtHaveModule(printsupport): QT += printsupport
 HEADERS       = imageviewer.h \
                 DrawDock.h \
                 InteractionTool.h \
+                LayerDock.h \
                 ManipulationTool.h \
                 NewLayerDock.h \
                 Picture.h \
@@ -21,6 +22,7 @@ HEADERS       = imageviewer.h \
 SOURCES       = imageviewer.cpp \
                 DrawDock.cpp \
                 InteractionTool.cpp \
+                LayerDock.cpp \
                 ManipulationTool.cpp \
                 NewLayerDock.cpp \
                 Picture.cpp \