diff --git a/Core/xmlobject.cpp b/Core/xmlobject.cpp
index 25100ad64b4b12926e1b4a770ac4bc3f7d0e0d0b..503a261ea708c52b4bad00f656a3162fcbddb5bc 100644
--- a/Core/xmlobject.cpp
+++ b/Core/xmlobject.cpp
@@ -285,6 +285,16 @@ XmlObject XmlObject::childAt(int index) const
     return childList.at(index);
 }
 
+XmlObject XmlObject::searchChild(const QString &name) const
+{
+    for(int i= 0; i < childCount(); i++){
+        if(childList[i].getObjectName() == name){
+            return childList[i];
+        }
+    }
+    return XmlObject();
+}
+
 XmlObject * XmlObject::getChild(int index)
 {
     return &childList[index];
diff --git a/Core/xmlobject.h b/Core/xmlobject.h
index 885dd7a0f405bacc1c9b16273158698e38e33c9c..73505c8d9ee6e1d9010070b18b10b3f5b13c70bb 100644
--- a/Core/xmlobject.h
+++ b/Core/xmlobject.h
@@ -44,6 +44,7 @@ public:
 
     int childCount() const;
     XmlObject childAt(int index) const;
+    XmlObject searchChild(const QString &name) const;
     /*
      * getChild Returns the child at index position as a modifiable reference.
      * index must be a valid index position in the list
diff --git a/Modules/ImageViewer/customgraphicsscene.cpp b/Modules/ImageViewer/customgraphicsscene.cpp
index e7ce2887a33cb6a08f35eafe67d11166ca3dafc2..3520d1f745746489e689e1b42621fd8436b92063 100644
--- a/Modules/ImageViewer/customgraphicsscene.cpp
+++ b/Modules/ImageViewer/customgraphicsscene.cpp
@@ -53,6 +53,7 @@ void CustomGraphicsScene::removeImageViewItem(int id)
 
 void CustomGraphicsScene::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
 {
+    Q_UNUSED(event);
     isDragActive = false;
     emit dragStopped();
 }
diff --git a/Modules/ImageViewer/imagevieweritem.cpp b/Modules/ImageViewer/imagevieweritem.cpp
index 5189f3d5ec4ad6b861af810d5c3ffb4c395ee0a6..e6e7dfc0644fd1e326b1af278e5811b0678c255f 100644
--- a/Modules/ImageViewer/imagevieweritem.cpp
+++ b/Modules/ImageViewer/imagevieweritem.cpp
@@ -21,12 +21,30 @@ ImageViewerItem::ImageViewerItem(const ImageViewerItem &other) : ImageViewerItem
 
 QString ImageViewerItem::getText() const
 {
-    return text;
+    XmlObject text = xml.searchChild("text");
+    if(text.isEmpty())
+        return defaultText;
+    return text.getTextValue();
+}
+
+
+XmlObject *ImageViewerItem::findOrAddXmlObject(const QString &xmlChildName)
+{
+    QList<XmlObject*> childs = xml.deepSearchObjects(xmlChildName);
+    if(childs.isEmpty()){
+        XmlObject c(xmlChildName);
+        int childIndex = xml.addChild(c);
+        return xml.getChild(childIndex);
+    }
+    else{
+        return childs[0];
+    }
 }
 
 void ImageViewerItem::setText(const QString &value)
 {
-    text = value;
+    XmlObject *text = findOrAddXmlObject("text");
+    text->setTextValue(value);
 }
 
 void ImageViewerItem::setCenter(const QPointF &center)
@@ -111,6 +129,17 @@ void ImageViewerItem::stopDrag()
     isDragActive = false;
 }
 
+void ImageViewerItem::onModuleMessageReceived(const ModuleMessage &msg)
+{
+    setText(msg.payload());
+}
+
+QString ImageViewerItem::getTopic() const
+{
+    XmlObject topic = xml.searchChild("topic");
+    return topic.getTextValue();
+}
+
 void ImageViewerItem::copy(const ImageViewerItem &other)
 {
     setId(other.getId());
@@ -127,24 +156,23 @@ void ImageViewerItem::setTopLeftCornerPosition(const QPointF &value)
 void ImageViewerItem::initialize()
 {
     xml.setObjectName("svg");
-    QSize s = getSize();
-//    QString size = "0 0 "+ QString::number(s.width()) +" " + QString::number(s.height());
-//    xml.addAttribute("viewBox", size );
+    QSize s = defaultSize;
     xml.addAttribute("height", QString::number(s.height()));
     xml.addAttribute("width", QString::number(s.width()));
-    XmlObject rect("rect");
 
-    QString style = "fill:none;"
-                    "stroke-width:4;"
-                    "stroke:"+ getCurrentBorderColor() +";";
+    XmlObject rect("rect");
     rect.addAttribute("height", QString::number(s.height()));
-    rect.addAttribute("width", QString::number(s.width()));
-    rect.addAttribute("style", style);
+    rect.addAttribute("width", QString::number(s.width()));    
+    rect.addAttribute("fill", "none");
+    rect.addAttribute("stroke", getCurrentBorderColor());
+    rect.addAttribute("stroke-width", "2");
 
     XmlObject text("text");
-    text.addAttribute("x",1);
-    text.addAttribute("y",10);
-    text.setTextValue(getText());
+    text.addAttribute("x",5);
+    text.addAttribute("y",20);
+    text.addAttribute("fill", "#000000");
+    text.addAttribute("font-size", "20");
+    text.setTextValue(defaultText);
 
     xml.addChild(text);
     xml.addChild(rect);
@@ -158,6 +186,13 @@ void ImageViewerItem::setXml(const XmlObject &value)
     if(xml.getIntAttribute("height", height) && xml.getIntAttribute("width", width)){
         setSize(width, height);
     }
+
+
+    QList<XmlObject*> childs = xml.deepSearchObjects("text");
+    if(!childs.isEmpty()){
+        XmlObject *text = childs[0];
+        setText(text->getTextValue());
+    }
 }
 
 QString ImageViewerItem::getCurrentBorderColor() const
@@ -179,12 +214,15 @@ void ImageViewerItem::setClicked(bool value)
 
 QSize ImageViewerItem::getSize() const
 {
-    return size;
+    int height, width;
+    if(xml.getIntAttribute("height", height) && xml.getIntAttribute("width", width)){
+        return QSize(width, height);
+    }
+    return defaultSize;
 }
 
 void ImageViewerItem::setSize(const QSize &value)
 {
-    size = value;
     xml.addAttribute("height", value.height());
     xml.addAttribute("width", value.width());
 
diff --git a/Modules/ImageViewer/imagevieweritem.h b/Modules/ImageViewer/imagevieweritem.h
index f470fcae897218125f8f3e6f32406883bf438062..6ae4f9e3e1d28bdfefcb4c9f901a02addd3d90b8 100644
--- a/Modules/ImageViewer/imagevieweritem.h
+++ b/Modules/ImageViewer/imagevieweritem.h
@@ -5,6 +5,7 @@
 #include <QPoint>
 #include <QSize>
 #include "Core/xmlobject.h"
+#include "Core/modulemessage.h"
 
 class ImageViewerItem
 {
@@ -19,9 +20,11 @@ public:
     bool isPointInsideMyArea(const QPointF &point);
     void startDrag(const QPointF &initialPosition);
     void stopDrag();
+    void onModuleMessageReceived(const ModuleMessage &msg);
 
 
     // getters/setters
+    QString getTopic() const;
     QPointF getTopLeftCornerPosition() const;
     QSize getSize() const;
     void setSize(const QSize &value);
@@ -44,14 +47,16 @@ protected:
     void setTopLeftCornerPosition(const QPointF &value);
     void initialize();
 
+    XmlObject *findOrAddXmlObject(const QString &xmlChildName);
+
 private:
     int id = -1;
-    QString text = "";
     QPointF topLeftCornerPosition;
-    QSize size = QSize(10, 10);
 
     const QString defaultBorderColor = "#000000";
     const QString clickedBorderColor = "#32a83a";
+    const QSize defaultSize = QSize(250, 150);
+    const QString defaultText = "New item";
 
     bool clicked = false;
     QPointF dragOffset;
diff --git a/Modules/ImageViewer/imageviewermodule.cpp b/Modules/ImageViewer/imageviewermodule.cpp
index b0103f3168fdfe17690a3ca7166c251a492e3abf..9a1e7e933398e1f7f1c72ff47147fe2249933d21 100644
--- a/Modules/ImageViewer/imageviewermodule.cpp
+++ b/Modules/ImageViewer/imageviewermodule.cpp
@@ -22,6 +22,8 @@ ImageViewerModule::ImageViewerModule(QWidget *parent) : DefaultModule(parent), u
     connect(&scene, &CustomGraphicsScene::dragStopped, this, &ImageViewerModule::onDragStopped);
     connect(&scene, &CustomGraphicsScene::doubleCLick, this, &ImageViewerModule::onDoubleClick);
     connect(&settingsPanel, &ImageViewerSettings::setupSettingsToSelected, this, &ImageViewerModule::onSettingsSetupRequested);
+    connect(&settingsPanel, &ImageViewerSettings::setupSettingsToAll, this, &ImageViewerModule::onSettingsSetupToAllRequested);
+    connect(&settingsPanel, &ImageViewerSettings::deleteItemRequested, this, &ImageViewerModule::onItemDeleteRequested);
 }
 
 ImageViewerModule::~ImageViewerModule()
@@ -220,15 +222,15 @@ void ImageViewerModule::onTopicChanged(const QString &labelName, const QString &
     });
 }
 
-void ImageViewerModule::onReceiveMsg(const ModuleMessage &msg)
-{
-    if(labelsSubscriptions.contains(msg.topic())){
-        QString labelName = labelsSubscriptions[msg.topic()];
-        if(labels.contains(labelName)){
-            setLabelText(labels[labelName], msg.payload());
-        }
-    }
-}
+//void ImageViewerModule::onReceiveMsg(const ModuleMessage &msg)
+//{
+//    if(labelsSubscriptions.contains(msg.topic())){
+//        QString labelName = labelsSubscriptions[msg.topic()];
+//        if(labels.contains(labelName)){
+//            setLabelText(labels[labelName], msg.payload());
+//        }
+//    }
+//}
 
 void ImageViewerModule::setLabelText(QGraphicsTextItem *label, const QString &txt)
 {
@@ -278,11 +280,12 @@ void ImageViewerModule::onImageFilePathChanged(const QString &newFilePath)
 }
 
 
+
 // NEW IMPLEMENTATION ______________________________________________
 
 void ImageViewerModule::onAddNewItemRequested()
 {
-    addNewItem(QPointF(100, 100));
+    addNewItem(QPointF(200, 100));
 }
 
 void ImageViewerModule::onMouseMoved(const QPointF &point)
@@ -353,7 +356,6 @@ ImageViewerItem *ImageViewerModule::createNewItem(const QPointF &point)
 {
     ImageViewerItem* newItem = new ImageViewerItem();
     newItem->setId(pickUnusedItemId());
-    newItem->setSize(240, 80);
     newItem->setCenter(point);
     return newItem;
 }
@@ -374,7 +376,72 @@ void ImageViewerModule::onSettingsSetupRequested(int id)
 {
     if(imageViewerItems.contains(id)){
         ImageViewerItem* item = imageViewerItems[id];
+        QString previousTopic = item->getTopic();
+        item->setXml(settingsPanel.getDefaultSettings());
+        scene.updateImageViewItem(item);
+
+        if(item->getTopic() != previousTopic){
+            onItemTopicChanged(item);
+        }
+    }
+}
+
+void ImageViewerModule::onSettingsSetupToAllRequested()
+{
+    for(int key : imageViewerItems.keys()){
+        ImageViewerItem* item = imageViewerItems[key];
+        QString previousText = item->getText();
+        QString previousTopic = item->getTopic();
         item->setXml(settingsPanel.getDefaultSettings());
+        item->setText(previousText);
         scene.updateImageViewItem(item);
+
+        if(item->getTopic() != previousTopic){
+            onItemTopicChanged(item);
+        }
     }
 }
+
+void ImageViewerModule::onItemTopicChanged(ImageViewerItem *item)
+{
+    if(topicMap.contains(item->getId())){
+        QString oldTopic = topicMap[item->getId()];
+        getCore()->getModuleMessagesBroker()->unsubscribe(oldTopic,this);
+        topicMap.remove(item->getId());
+    }
+
+    QString newTopic = item->getTopic();
+    if(newTopic != ""){
+        topicMap[item->getId()] = newTopic;
+        getCore()->getModuleMessagesBroker()->subscribe(newTopic,this, [this](const ModuleMessage &msg){
+            this->onReceiveMsg(msg);
+        });
+    }
+}
+
+void ImageViewerModule::onReceiveMsg(const ModuleMessage &msg)
+{
+    QList<int> keys = topicMap.keys();
+    for(int key : keys){
+        if(msg.topic() == topicMap[key] && imageViewerItems.contains(key)){
+            ImageViewerItem *item = imageViewerItems[key];
+            item->onModuleMessageReceived(msg);
+            scene.updateImageViewItem(item);
+        }
+    }
+}
+
+void ImageViewerModule::onItemDeleteRequested(int itemId)
+{
+    if(imageViewerItems.contains(itemId)){
+        delete imageViewerItems[itemId];
+        imageViewerItems.remove(itemId);
+    }
+
+    if(topicMap.contains(itemId)){
+        topicMap.remove(itemId);
+    }
+
+    scene.removeImageViewItem(itemId);
+}
+
diff --git a/Modules/ImageViewer/imageviewermodule.h b/Modules/ImageViewer/imageviewermodule.h
index ee73698a0ebc007f6dbad2e8ab945d119893769f..a002aa4c99787493d8d03706d28645d863030ee4 100644
--- a/Modules/ImageViewer/imageviewermodule.h
+++ b/Modules/ImageViewer/imageviewermodule.h
@@ -39,10 +39,12 @@ public slots:
     void onLabelDeleted(const QString &labelName);
     void onXChanged(const QString &labelName, int x);
     void onYChanged(const QString &labelName, int y);
-    void onTopicChanged(const QString &labelName, const QString &newTopic);
+    void onTopicChanged(const QString &oldTopic, const QString &newTopic);
+    void onItemTopicChanged(ImageViewerItem *item);
     void onReceiveMsg(const ModuleMessage &msg);
     void fitImage();
     void onImageFilePathChanged(const QString &newFilePath);
+    void onItemDeleteRequested(int itemId);
 
 protected:
     void unsubscribeLabels(const QString &label);
@@ -63,6 +65,7 @@ protected:
     void addItem(ImageViewerItem *item);
     void showInSettings(ImageViewerItem *item);
     void onSettingsSetupRequested(int id);
+    void onSettingsSetupToAllRequested();
 
 private:
     Ui::ImageViewerModule *ui;
@@ -76,6 +79,7 @@ private:
     bool isLeftMousePressed = false;
 
     QMap<int, ImageViewerItem*> imageViewerItems;
+    QMap<int, QString> topicMap; // Item id -> Topic
     int lastUsedId = 0;
     bool firstResizeDone = false;
     ImageViewerSettings settingsPanel;
diff --git a/Modules/ImageViewer/imageviewersettings.cpp b/Modules/ImageViewer/imageviewersettings.cpp
index 00d89b070cdd4d2bede8bc726ea43faabe7c9ace..bb14139df253f1fd83993f42e8e6aaca877fa9c6 100644
--- a/Modules/ImageViewer/imageviewersettings.cpp
+++ b/Modules/ImageViewer/imageviewersettings.cpp
@@ -30,15 +30,15 @@ void ImageViewerSettings::initAndConnectUI()
 
 
     // Initialize values
-    QList<XmlObject*> childs = defaultSettings.deepSearchObjects("text");
-    if(!childs.isEmpty()){
-        XmlObject* text = childs[0];
-        int x, y;
-        if(text->getIntAttribute("x", x) && text->getIntAttribute("y", y)){
-            ui->doubleSpinBox_text_position_x->setValue(x);
-            ui->doubleSpinBox_text_position_y->setValue(y);
-        }
-    }
+//    QList<XmlObject*> childs = defaultSettings.deepSearchObjects("text");
+//    if(!childs.isEmpty()){
+//        XmlObject* text = childs[0];
+//        int x, y;
+//        if(text->getIntAttribute("x", x) && text->getIntAttribute("y", y)){
+//            ui->doubleSpinBox_text_position_x->setValue(x);
+//            ui->doubleSpinBox_text_position_y->setValue(y);
+//        }
+//    }
 
 
     connect(ui->plainTextEdit_preview, &QPlainTextEdit::textChanged, [this](){onPreviewTextChanged();});
@@ -56,7 +56,7 @@ void ImageViewerSettings::initAndConnectUI()
     connect(ui->lineEdit_text_color, &QLineEdit::textChanged, this, &ImageViewerSettings::onPropertyChanged);
     connect(ui->lineEdit_fillColor, &QLineEdit::textChanged, this, &ImageViewerSettings::onPropertyChanged);
     connect(ui->lineEdit_border_color, &QLineEdit::textChanged, this, &ImageViewerSettings::onPropertyChanged);
-    connect(ui->fontComboBox_font, &QFontComboBox::currentFontChanged, this, &ImageViewerSettings::onPropertyChanged);
+    connect(ui->lineEdit_topic, &QLineEdit::textChanged, this, &ImageViewerSettings::onPropertyChanged);
 
     connect(ui->pushButton_applyToAll, &QPushButton::clicked, this, &ImageViewerSettings::onApplyToAllClicked);
     connect(ui->pushButton_applyToSelected, &QPushButton::clicked, this, &ImageViewerSettings::onApplyToSelectedClicked);
@@ -64,6 +64,8 @@ void ImageViewerSettings::initAndConnectUI()
     connect(ui->pushButton_pickTextColor, &QPushButton::clicked, this, [this](){onPickColorRequested(ui->lineEdit_text_color);});
     connect(ui->pushButton_pickFillColor, &QPushButton::clicked, this, [this](){onPickColorRequested(ui->lineEdit_fillColor);});
 
+    connect(ui->pushButton_delete, &QPushButton::clicked, this, &ImageViewerSettings::onDeleteClicked);
+
 
     updatePreview();
 }
@@ -86,7 +88,7 @@ void ImageViewerSettings::defaultSettingsSetup()
 
 void ImageViewerSettings::onApplyToAllClicked()
 {
-
+    emit setupSettingsToAll();
 }
 
 void ImageViewerSettings::onApplyToSelectedClicked()
@@ -110,7 +112,10 @@ XmlObject *ImageViewerSettings::findOrAddXmlObject(const QString &xmlChildName)
 
 void ImageViewerSettings::onPreviewTextChanged()
 {
+    lockUpdate = true;
     defaultSettings.fromXml(ui->plainTextEdit_preview->toPlainText());
+    updateUI(defaultSettings);
+    lockUpdate = false;
     updatePreview(false);
 }
 
@@ -124,60 +129,119 @@ void ImageViewerSettings::onPickColorRequested(QLineEdit *lineEdit)
 
 void ImageViewerSettings::onPropertyChanged()
 {
-    // Get the data from the view
     int width = ui->spinBox_width->value();
     int height = ui->spinBox_height->value();
-    int strokeWidth = ui->spinBox_border_size->value();
-    int fontSize = ui->spinBox_fontSize->value();
-    QString textX = QString::number(ui->doubleSpinBox_text_position_x->value());
-    QString textY = QString::number(ui->doubleSpinBox_text_position_y->value());
-    QString borderColor = ui->lineEdit_border_color->text().trimmed();
     QString fill = "none";
-    QString textValue = ui->lineEdit_text->text().trimmed();
-    QString textColor = ui->lineEdit_text_color->text().trimmed();
-    QString fontFamily = ui->fontComboBox_font->currentFont().toString();
     if(ui->checkBox_fill->isChecked()){
         fill = ui->lineEdit_fillColor->text().trimmed();
     }
 
-    // Set the xml with the new data
-//    QString size = "0 0 "+ QString::number(width) +" " + QString::number(height);
-//    defaultSettings.addAttribute("viewBox", size );
-
-    defaultSettings.addAttribute("height", QString::number(height));
-    defaultSettings.addAttribute("width", QString::number(width));
+    defaultSettings.addAttribute("height", height);
+    defaultSettings.addAttribute("width", width);
 
     XmlObject* text = findOrAddXmlObject("text");
-    text->addAttribute("x",textX);
-    text->addAttribute("y",textY);
-    text->addAttribute("fill",textColor);
-    text->addAttribute("font-size", fontSize);
-    text->addAttribute("font-family", fontFamily);
-    text->setTextValue(textValue);
+    text->addAttribute("x",QString::number(ui->doubleSpinBox_text_position_x->value()));
+    text->addAttribute("y",QString::number(ui->doubleSpinBox_text_position_y->value()));
+    text->addAttribute("fill",ui->lineEdit_text_color->text().trimmed());
+    text->addAttribute("font-size", ui->spinBox_fontSize->value());
+    text->setTextValue(ui->lineEdit_text->text().trimmed());
 
     XmlObject* border = findOrAddXmlObject("rect");
     border->addAttribute("width", width);
     border->addAttribute("height", height);
     border->addAttribute("fill", fill);
-    border->addAttribute("stroke", borderColor);
-    border->addAttribute("stroke-width", strokeWidth);
+    border->addAttribute("stroke", ui->lineEdit_border_color->text().trimmed());
+    border->addAttribute("stroke-width", ui->spinBox_border_size->value());
+
+    XmlObject* topic = findOrAddXmlObject("topic");
+    topic->setTextValue(ui->lineEdit_topic->text().trimmed());
 
     updatePreview();
 }
 
-void ImageViewerSettings::setTarget(int value, const XmlObject setup)
+void ImageViewerSettings::updateUI(XmlObject &xml)
+{
+    bool ok;
+
+    int width = xml.getAttribute("width").toInt(&ok);
+    if(ok){
+        ui->spinBox_width->setValue(width);
+    }
+    int height = xml.getAttribute("height").toInt(&ok);
+    if(ok){
+        ui->spinBox_height->setValue(height);
+    }
+
+    QList<XmlObject*> childs = xml.deepSearchObjects("text");
+    if(!childs.isEmpty()){
+        XmlObject *text = childs[0];
+        double val = text->getAttribute("x").toDouble(&ok);
+        if(ok){
+            ui->doubleSpinBox_text_position_x->setValue(val);
+        }
+        val = text->getAttribute("y").toDouble(&ok);
+        if(ok){
+            ui->doubleSpinBox_text_position_y->setValue(val);
+        }
+
+        ui->lineEdit_text_color->setText(text->getAttribute("fill"));
+        ui->lineEdit_text->setText(text->getTextValue());
+
+        int fontSize = text->getAttribute("font-size").toInt(&ok);
+        if(ok){
+            ui->spinBox_fontSize->setValue(fontSize);
+        }
+    }
+
+    childs = xml.deepSearchObjects("rect");
+    if(!childs.isEmpty()){
+        XmlObject *border = childs[0];
+        int stroke = border->getAttribute("stroke-width").toInt(&ok);
+        if(ok){
+            ui->spinBox_border_size->setValue(stroke);
+        }
+
+        ui->lineEdit_border_color->setText(border->getAttribute("stroke"));
+        ui->lineEdit_fillColor->setText(border->getAttribute("fill"));
+    }
+}
+
+void ImageViewerSettings::resizeEvent(QResizeEvent *event)
+{
+    Q_UNUSED(event);
+    fitPreview();
+}
+
+void ImageViewerSettings::fitPreview()
+{
+    ui->graphicsView_preview->fitInView(&preview, Qt::KeepAspectRatio);
+}
+
+void ImageViewerSettings::onDeleteClicked()
+{
+    this->close();
+    emit deleteItemRequested(target);
+}
+
+
+void ImageViewerSettings::setTarget(int value, XmlObject setup)
 {
     target = value;
+    updateUI(setup);
     defaultSettings = setup;
+    updatePreview();
 }
 
 void ImageViewerSettings::updatePreview(bool updatePlainText)
 {
+    if(lockUpdate)
+        return;
+
     QPixmap previewPixmap;
     QString xml = defaultSettings.toXml();
     previewPixmap.loadFromData(xml.toUtf8());
     preview.setPixmap(previewPixmap);
-    ui->graphicsView_preview->fitInView(&preview, Qt::KeepAspectRatio);
+    fitPreview();
     if(updatePlainText){
         ui->plainTextEdit_preview->clear();
         ui->plainTextEdit_preview->appendPlainText(xml);
diff --git a/Modules/ImageViewer/imageviewersettings.h b/Modules/ImageViewer/imageviewersettings.h
index c1ca8ab36d2d4dbd9f612ff69f318c0c2c85d516..e2a33e1380a5c942fe1e65076798c3795058a4d8 100644
--- a/Modules/ImageViewer/imageviewersettings.h
+++ b/Modules/ImageViewer/imageviewersettings.h
@@ -21,11 +21,12 @@ public:
 
     XmlObject getDefaultSettings() const;
 
-    void setTarget(int value, const XmlObject setup);
+    void setTarget(int value, XmlObject setup);
 
 signals:
     void setupSettingsToAll();
     void setupSettingsToSelected(int id);
+    void deleteItemRequested(int id);
 
 protected:
     void initAndConnectUI();
@@ -34,6 +35,10 @@ protected:
     void onApplyToAllClicked();
     void onApplyToSelectedClicked();
     XmlObject* findOrAddXmlObject(const QString &xmlChild);
+    void updateUI(XmlObject &xml);
+    void resizeEvent(QResizeEvent *event) override;
+    void fitPreview();
+    void onDeleteClicked();
 
 protected slots:
     void onPreviewTextChanged();
@@ -48,6 +53,7 @@ private:
     XmlObject defaultSettings;
     QGraphicsScene scene;
     QGraphicsPixmapItem preview;
+    bool lockUpdate = false;
 };
 
 #endif // IMAGEVIEWERSETTINGS_H
diff --git a/Modules/ImageViewer/imageviewersettings.ui b/Modules/ImageViewer/imageviewersettings.ui
index 3db88a661e403eb434cf87b761f486c6da7a8435..579c12320fd4264c65c4b09c900639b2819c253a 100644
--- a/Modules/ImageViewer/imageviewersettings.ui
+++ b/Modules/ImageViewer/imageviewersettings.ui
@@ -13,7 +13,7 @@
   <property name="windowTitle">
    <string>ImageViewer Settings</string>
   </property>
-  <layout class="QVBoxLayout" name="verticalLayout" stretch="2,1,0">
+  <layout class="QVBoxLayout" name="verticalLayout" stretch="2,0,1,0">
    <item>
     <widget class="QGroupBox" name="groupBox">
      <property name="title">
@@ -29,6 +29,20 @@
      </layout>
     </widget>
    </item>
+   <item>
+    <layout class="QHBoxLayout" name="horizontalLayout_8">
+     <item>
+      <widget class="QLabel" name="label">
+       <property name="text">
+        <string>Connect this label to the following Topic: </string>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QLineEdit" name="lineEdit_topic"/>
+     </item>
+    </layout>
+   </item>
    <item>
     <widget class="QScrollArea" name="scrollArea">
      <property name="widgetResizable">
@@ -39,8 +53,8 @@
        <rect>
         <x>0</x>
         <y>0</y>
-        <width>773</width>
-        <height>192</height>
+        <width>758</width>
+        <height>190</height>
        </rect>
       </property>
       <layout class="QVBoxLayout" name="verticalLayout_3">
@@ -128,7 +142,7 @@
              </widget>
             </item>
             <item row="2" column="3">
-             <layout class="QHBoxLayout" name="horizontalLayout_4">
+             <layout class="QHBoxLayout" name="horizontalLayout_4" stretch="1,0,0,0,0,0">
               <item>
                <widget class="QLineEdit" name="lineEdit_text"/>
               </item>
@@ -159,16 +173,6 @@
                 </property>
                </widget>
               </item>
-              <item>
-               <widget class="QLabel" name="label_13">
-                <property name="text">
-                 <string>Font</string>
-                </property>
-               </widget>
-              </item>
-              <item>
-               <widget class="QFontComboBox" name="fontComboBox_font"/>
-              </item>
              </layout>
             </item>
             <item row="2" column="1">
@@ -374,6 +378,13 @@
    </item>
    <item>
     <layout class="QHBoxLayout" name="horizontalLayout">
+     <item>
+      <widget class="QPushButton" name="pushButton_delete">
+       <property name="text">
+        <string>Delete</string>
+       </property>
+      </widget>
+     </item>
      <item>
       <spacer name="horizontalSpacer">
        <property name="orientation">
diff --git a/SkywardHub.pro.user b/SkywardHub.pro.user
index 77b0b0c390524d3561f17a991d2e007985510ab4..3992eed5663434d43ac47e36b59fe56664e8ecf1 100644
--- a/SkywardHub.pro.user
+++ b/SkywardHub.pro.user
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE QtCreatorProject>
-<!-- Written by QtCreator 4.13.0, 2020-12-08T16:00:17. -->
+<!-- Written by QtCreator 4.13.0, 2020-12-08T18:22:37. -->
 <qtcreator>
  <data>
   <variable>EnvironmentId</variable>