diff --git a/Modules/Chart/include/QmitkChartWidget.h b/Modules/Chart/include/QmitkChartWidget.h
index be06b6d03b..16a0582d82 100644
--- a/Modules/Chart/include/QmitkChartWidget.h
+++ b/Modules/Chart/include/QmitkChartWidget.h
@@ -1,184 +1,185 @@
 /*===================================================================
 
 The Medical Imaging Interaction Toolkit (MITK)
 
 Copyright (c) German Cancer Research Center,
 Division of Medical and Biological Informatics.
 All rights reserved.
 
 This software is distributed WITHOUT ANY WARRANTY; without
 even the implied warranty of MERCHANTABILITY or FITNESS FOR
 A PARTICULAR PURPOSE.
 
 See LICENSE.txt or http://www.mitk.org for details.
 
 ===================================================================*/
 #ifndef QmitkC3jsWidget_h
 #define QmitkC3jsWidget_h
 
 #include <map>
 #include <QWidget>
 
 #include <MitkChartExports.h>
 
 
 /*!
 \brief QmitkChartWidget is a widget to display various charts based on the javascript chart library C3js. Currently, bar charts, line charts and pie charts are supported.
 * \details Data is added via AddData1D() or AddData2D().\n
 * There can be multiple charts (of the same type) created by calling AddData1D or AddData2D multiple times.\n\n
 * The following chart types are supported:
 * * line chart: http://c3js.org/samples/simple_multiple.html
 * * bar chart: http://c3js.org/samples/chart_bar.html
 * * spline chart: http://c3js.org/samples/chart_spline.html
 * * pie chart: http://c3js.org/samples/chart_pie.html
 * \n Technical details: The javascript code is embedded in a QWebEngineView. The actual js code is implemented in resource\Chart.js.
 * \sa http://c3js.org for further information about the used javaScript library.
 * \warning Pie is significantly different than the other types. Here, the data given by AddData1D is summed. Each entry represents a different category.
 * \ingroup Modules/Chart
 */
 class MITKCHART_EXPORT QmitkChartWidget : public QWidget
 {
   Q_OBJECT
 
 public:
   /*!
   * \brief enum of diagram types. Supported are bar, line, spline (a smoothed line) and pie. 
   */
 	enum class ChartType { 
     bar, /*!< bar chart, see http://c3js.org/samples/chart_bar.html */
     line, /*!< line chart, see http://c3js.org/samples/simple_multiple.html */
     spline, /*!< spline chart (smoothed line chart), see http://c3js.org/samples/chart_spline.html */
     pie, /*!< pie chart, see http://c3js.org/samples/chart_pie.html*/
     area, /*!< area chart, see http://c3js.org/samples/chart_area.html*/
     area_spline /*!< area-spline chart, see http://c3js.org/samples/chart_area.html*/
   };
   enum class ChartStyle {
     defaultstyle,
     darkstyle
   };
   enum class LineStyle {
     solid,
     dashed
   };
 
   /*!
   * \brief enum of legend position. Supported are bottom, right, inset.
   * See http://c3js.org/reference.html#legend-position
   */
   enum class LegendPosition {
     bottom,
     right,
     inset
   };
 
   explicit QmitkChartWidget(QWidget* parent = nullptr);
   virtual ~QmitkChartWidget();
 
   /*!
   * \brief Adds 1D data to the widget
   * \details internally, the list is converted to a map with increasing integers keys starting at 0.
   * \param label the name of the data that is also used as identifier.
   * \param type the chart type that should be used for this data entry
   * \note the data can be cleared with ClearDiagram()
   * \note If the label name already exists, the name is replaced with a unique one by concatenating numbers to it.
   */
   void AddData1D(const std::vector<double>& data1D, const std::string& label, ChartType type = ChartType::bar);
 
   /*!
   * \brief Adds 2D data to the widget. Call repeatedly for displaying multiple charts.
   * \details each entry represents a data point: key: value --> x-value: y-value.
   * \param label the name of the data that is also used as identifier.
   * \param type the chart type that should be used for this data entry
   * \note the data can be cleared with ClearDiagram() 
   * \note If the label name already exists, the name is replaced with a unique one by concatenating numbers to it.
   */
   void AddData2D(const std::map<double, double>& data2D, const std::string& label, ChartType type = ChartType::bar);
 
   /*!
   * \brief Removes data from the widget, works for 1D and 2D Data
   * \param label the name of the data that is also used as identifier.
   * \note the data can be cleared with ClearDiagram()
+  * \throws Invalid Argument Exception when the label cannot be found
   */
   void RemoveData(const std::string& label);
 
   /*!
   * \brief sets the color of one data entry (identifier is previously assigned label)
   *  \details the color name can be "red" or a hex number (#FF0000).
   * Either define all data entries with a color or none. If a mixed approach is used, different data entries could have the same color.
   * If an unknown label is given, nothing happens.
   *  \sa https://www.w3schools.com/cssref/css_colors.asp
   */
   void SetColor(const std::string& label, const std::string& colorName);
 
   /*!
   * \brief sets the line style of one data entry (identifier is previously assigned label)
   *  \details two line styles are possible: LineStyle::solid and LineStyle::dashed.
   * The default linestyle is solid.
   * If an unknown label is given, nothing happens.
   *  \warning only sets the line style if the current chart type is ChartType::line. However, the line style remains also if the chart changes (e.g. new chart type)
   */
   void SetLineStyle(const std::string& label, LineStyle style);
 
   std::vector<std::string> GetDataLabels() const;
 
   void SetXAxisLabel(const std::string& label);
   std::string GetXAxisLabel() const;
 
   void SetYAxisLabel(const std::string& label);
   std::string GetYAxisLabel() const;
 
   void SetDiagramTitle(const std::string &title);
   std::string GetDiagramTitle() const;
 
   /*!
   * \brief sets the chart type for a data entry
   * \details for available types, see ChartType
   * If an unknown label is given, nothing happens.
   *  \sa DiagramType for available types
   */
   void SetChartType(const std::string& label, ChartType type);
 
   void SetLegendPosition(LegendPosition position);
   LegendPosition GetLegendPosition() const;
 
   /*!
   * \brief Changes the chart type for all data entries and reloads the chart
   */
   void SetChartTypeForAllDataAndReload(ChartType type);
 
   /*!
   * \brief Displays the chart in the widget
   * \param showSubChart if a subchart is displayed inside the widget or not (see http://c3js.org/samples/options_subchart.html).
   * \exception if no data has been provided (\sa AddData1D AddData2D)
   */
   void Show(bool showSubChart=false);
 
   /*!
   * \brief Clears all data inside and resets the widget.
   */
   void Clear();
 
   /*!
   * \brief Changes the theme of the widget.
   */
   void SetTheme(ChartStyle themeEnabled);
 
   /*!
   * \brief Reloads the chart in the widget
   * \details reloading may be needed to display added data in an existing chart
   * \param showSubChart if a subchart is displayed inside the widget or not.
   */
   void Reload(bool showSubChart);
 
 private:
   class Impl;
   Impl* m_Impl;
 
 public slots:
   void OnLoadFinished(bool isLoadSuccessfull);
 
 signals:
   void PageSuccessfullyLoaded();
 };
 
 #endif
diff --git a/Modules/Chart/src/QmitkChartWidget.cpp b/Modules/Chart/src/QmitkChartWidget.cpp
index 1d142f293f..09c0cddd59 100644
--- a/Modules/Chart/src/QmitkChartWidget.cpp
+++ b/Modules/Chart/src/QmitkChartWidget.cpp
@@ -1,445 +1,452 @@
 /*===================================================================
 
 The Medical Imaging Interaction Toolkit (MITK)
 
 Copyright (c) German Cancer Research Center,
 Division of Medical and Biological Informatics.
 All rights reserved.
 
 This software is distributed WITHOUT ANY WARRANTY; without
 even the implied warranty of MERCHANTABILITY or FITNESS FOR
 A PARTICULAR PURPOSE.
 
 See LICENSE.txt or http://www.mitk.org for details.
 
 ===================================================================*/
 
 #include <QmitkChartWidget.h>
 #include <QGridLayout>
 #include <QWebChannel>
 #include <QWebEngineView>
 
 #include <QmitkChartData.h>
 #include <QmitkChartxyData.h>
 #include "mitkExceptionMacro.h"
 
 class QmitkChartWidget::Impl final
 {
 public:
   explicit Impl(QWidget* parent);
   ~Impl();
 
   Impl(const Impl&) = delete;
   Impl& operator=(const Impl&) = delete;
 
   void AddData1D(const std::vector<double>& data1D, const std::string& label, QmitkChartWidget::ChartType diagramType);
 
   void AddData2D(const std::map<double, double>& data2D, const std::string& label, QmitkChartWidget::ChartType diagramType);
 
   void RemoveData(const std::string& label);
 
   void ClearData();
 
   void SetColor(const std::string& label, const std::string& colorName);
   void SetLineStyle(const std::string& label, LineStyle style);
 
   void SetXAxisLabel(const std::string& label);
   std::string GetXAxisLabel() const;
 
   void SetYAxisLabel(const std::string& label);
   std::string GetYAxisLabel() const;
 
   void SetDiagramTitle(const std::string &title);
   std::string GetDiagramTitle() const;
 
   void SetLegendPosition(LegendPosition position);
   LegendPosition GetLegendPosition() const;
   std::string GetLegendPositionAsString() const;
 
   void SetChartType(const std::string& label, QmitkChartWidget::ChartType diagramType);
   std::string ConvertChartTypeToString(QmitkChartWidget::ChartType diagramType) const;
 
   void ClearJavaScriptChart();
   void InitializeJavaScriptChart();
   void CallJavaScriptFuntion(const QString& command);
 
   QmitkChartData* GetC3Data() const;
   std::vector<QmitkChartxyData*>* GetC3xyData() const;
 
 private:
   std::string GetUniqueLabelName(const QList<QVariant>& labelList, const std::string& label) const;
   QmitkChartxyData* GetElementByLabel(const std::vector<QmitkChartxyData*>* c3xyData, const std::string& label) const;
   QList<QVariant> GetDataLabels(const std::vector<QmitkChartxyData*>* c3xyData) const;
 
   QWebChannel* m_WebChannel;
   QWebEngineView* m_WebEngineView;
 
   QmitkChartData * m_C3Data;
   std::vector<QmitkChartxyData*> * m_C3xyData;
   std::map<QmitkChartWidget::ChartType, std::string> m_DiagramTypeToName;
   std::map<QmitkChartWidget::LegendPosition, std::string> m_LegendPositionToName;
   std::map<QmitkChartWidget::LineStyle, std::string> m_LineStyleToName;
 };
 
 QmitkChartWidget::Impl::Impl(QWidget* parent)
   : m_WebChannel(new QWebChannel(parent)),
   m_WebEngineView(new QWebEngineView(parent))
 {
   //disable context menu for QWebEngineView
   m_WebEngineView->setContextMenuPolicy(Qt::NoContextMenu);
 
   //Set the webengineview to an initial empty page. The actual chart will be loaded once the data is calculated.
   m_WebEngineView->setUrl(QUrl(QStringLiteral("qrc:///C3js/empty.html")));
   m_WebEngineView->page()->setWebChannel(m_WebChannel);
 
   connect(m_WebEngineView, SIGNAL(loadFinished(bool)), parent, SLOT(OnLoadFinished(bool)));
 
   auto layout = new QGridLayout(parent);
   layout->setMargin(0);
   layout->addWidget(m_WebEngineView);
 
   parent->setLayout(layout);
 
   m_DiagramTypeToName.emplace(ChartType::bar, "bar");
   m_DiagramTypeToName.emplace(ChartType::line, "line");
   m_DiagramTypeToName.emplace(ChartType::spline, "spline");
   m_DiagramTypeToName.emplace(ChartType::pie, "pie");
   m_DiagramTypeToName.emplace(ChartType::area, "area");
   m_DiagramTypeToName.emplace(ChartType::area_spline  , "area-spline");
 
   m_LegendPositionToName.emplace(LegendPosition::bottom, "bottom");
   m_LegendPositionToName.emplace(LegendPosition::right, "right");
   m_LegendPositionToName.emplace(LegendPosition::inset, "inset");
 
   m_LineStyleToName.emplace(LineStyle::solid, "solid");
   m_LineStyleToName.emplace(LineStyle::dashed, "dashed");
 
   m_C3Data = new QmitkChartData();
   m_C3xyData = new std::vector<QmitkChartxyData*>();
 }
 
 QmitkChartWidget::Impl::~Impl()
 {
   delete m_C3Data;
   delete m_C3xyData;
 }
 
 
 std::string QmitkChartWidget::Impl::GetUniqueLabelName(const QList<QVariant>& labelList, const std::string& label) const
 {
   QString currentLabel = QString::fromStdString(label);
   int counter = 0;
   while (labelList.contains(currentLabel))
   {
     currentLabel = QString::fromStdString(label + std::to_string(counter));
     counter++;
   }
   return currentLabel.toStdString();
 }
 
 void QmitkChartWidget::Impl::AddData1D(const std::vector<double>& data1D, const std::string& label, QmitkChartWidget::ChartType type) {
   QList<QVariant> data1DConverted;
   for (const auto& aValue : data1D) {
     data1DConverted.append(aValue);
   }
   const std::string diagramTypeName(m_DiagramTypeToName.at(type));
   auto definedLabels = GetDataLabels(GetC3xyData());
   auto uniqueLabel = GetUniqueLabelName(definedLabels, label);
 
   GetC3xyData()->push_back(new QmitkChartxyData(data1DConverted, QVariant(QString::fromStdString(uniqueLabel)), QVariant(QString::fromStdString(diagramTypeName))));
 }
 
 void QmitkChartWidget::Impl::RemoveData(const std::string& label) {
-  std::vector<QmitkChartxyData*>::const_iterator iter_temp;
-  for (std::vector<QmitkChartxyData*>::const_iterator iter = GetC3xyData()->begin(); iter != GetC3xyData()->end(); ++iter)
+  std::vector<QmitkChartxyData*>::iterator iter_temp = GetC3xyData()->end();
+  for (std::vector<QmitkChartxyData*>::iterator iter = GetC3xyData()->begin(); iter != GetC3xyData()->end(); ++iter)
   {
     const auto &temp = *iter;
     if (temp->GetLabel().toString().toStdString() == label)
     {
       iter_temp = iter;
+      break;
     }
   }
-  GetC3xyData()->erase(iter_temp);
+  if (iter_temp == GetC3xyData()->end()) {
+    throw std::invalid_argument("Cannot Remove Data because the label does not exist.");
+  }
+  else
+  {
+    GetC3xyData()->erase(iter_temp);
+  }
 }
 
 void QmitkChartWidget::Impl::AddData2D(const std::map<double, double>& data2D, const std::string& label, QmitkChartWidget::ChartType type) {
   QMap<QVariant, QVariant> data2DConverted;
   for (const auto& aValue : data2D) {
     data2DConverted.insert(aValue.first, aValue.second);
   }
   const std::string diagramTypeName(m_DiagramTypeToName.at(type));
 
   auto definedLabels = GetDataLabels(GetC3xyData());
   auto uniqueLabel = GetUniqueLabelName(definedLabels, label);
 
   GetC3xyData()->push_back(new QmitkChartxyData(data2DConverted, QVariant(QString::fromStdString(uniqueLabel)), QVariant(QString::fromStdString(diagramTypeName))));
 }
 
 void QmitkChartWidget::Impl::SetColor(const std::string& label, const std::string& colorName)
 {
   auto element = GetElementByLabel(GetC3xyData(), label);
   if (element) {
     element->SetColor(QVariant(QString::fromStdString(colorName)));
   }
 }
 
 void QmitkChartWidget::Impl::SetLineStyle(const std::string& label, LineStyle style) {
   auto element = GetElementByLabel(GetC3xyData(), label);
   //only has effect with chart type line
   if (element && element->GetChartType()==QVariant(QString::fromStdString(ConvertChartTypeToString(ChartType::line)))) {
     const std::string lineStyleName(m_LineStyleToName.at(style));
     element->SetLineStyle(QVariant(QString::fromStdString(lineStyleName)));
   }
 }
 
 QmitkChartxyData* QmitkChartWidget::Impl::GetElementByLabel(const std::vector<QmitkChartxyData*>* c3xyData, const std::string& label) const
 {
   for (auto element = c3xyData->begin(); element != c3xyData->end(); ++element) {
     if ((*element)->GetLabel().toString().toStdString() == label) {
       return *element;
     }
   }
   MITK_WARN << "label " << label << " not found in QmitkChartWidget";
   return nullptr;
 }
 
 QList<QVariant> QmitkChartWidget::Impl::GetDataLabels(const std::vector<QmitkChartxyData*>* c3xyData) const {
   QList<QVariant> dataLabels;
   for (auto element = c3xyData->begin(); element != c3xyData->end(); ++element) {
     dataLabels.push_back((*element)->GetLabel());
   }
   return dataLabels;
 }
 
 void QmitkChartWidget::Impl::SetXAxisLabel(const std::string& label) { 
   GetC3Data()->SetXAxisLabel(QString::fromStdString(label)); 
 }
 
 std::string QmitkChartWidget::Impl::GetXAxisLabel() const { 
   return GetC3Data()->GetXAxisLabel().toString().toStdString(); 
 }
 
 void QmitkChartWidget::Impl::SetYAxisLabel(const std::string& label) {
   GetC3Data()->SetYAxisLabel(QString::fromStdString(label)); 
 }
 
 std::string QmitkChartWidget::Impl::GetYAxisLabel() const { 
   return GetC3Data()->GetYAxisLabel().toString().toStdString(); 
 }
 
 void QmitkChartWidget::Impl::SetDiagramTitle(const std::string& title) {
   GetC3Data()->SetDiagramTitle(QString::fromStdString(title));
 }
 
 std::string QmitkChartWidget::Impl::GetDiagramTitle() const {
   return GetC3Data()->GetDiagramTitle().toString().toStdString();
 }
 
 void QmitkChartWidget::Impl::SetLegendPosition(QmitkChartWidget::LegendPosition legendPosition) {
   const std::string legendPositionName(m_LegendPositionToName.at(legendPosition));
   GetC3Data()->SetLegendPosition(QString::fromStdString(legendPositionName));
 }
 
 QmitkChartWidget::LegendPosition QmitkChartWidget::Impl::GetLegendPosition() const {
   for (const auto& aLegendPosition : m_LegendPositionToName) {
     if (aLegendPosition.second == GetLegendPositionAsString()) {
       return aLegendPosition.first;
     }
   }
   mitkThrow() << "can't find legend position!";
 }
 
 std::string QmitkChartWidget::Impl::GetLegendPositionAsString() const {
   return GetC3Data()->GetLegendPosition().toString().toStdString();
 }
 
 
 void QmitkChartWidget::Impl::SetChartType(const std::string& label, QmitkChartWidget::ChartType chartType) {
   auto element = GetElementByLabel(GetC3xyData(), label);
   if (element) {
     const std::string chartTypeName(m_DiagramTypeToName.at(chartType));
     element->SetChartType(QVariant(QString::fromStdString(chartTypeName)));
   }
 }
 
 std::string QmitkChartWidget::Impl::ConvertChartTypeToString(QmitkChartWidget::ChartType diagramType) const {
   return m_DiagramTypeToName.at(diagramType);
 }
 
 QmitkChartData* QmitkChartWidget::Impl::GetC3Data() const {
   return m_C3Data; 
 }
 
 std::vector<QmitkChartxyData*>* QmitkChartWidget::Impl::GetC3xyData() const {
   return m_C3xyData; 
 }
 
 void QmitkChartWidget::Impl::ClearData() {
   for (auto& xyData : *m_C3xyData) {
     m_WebChannel->deregisterObject(xyData);
   }
   GetC3xyData()->clear(); 
 }
 
 QmitkChartWidget::QmitkChartWidget(QWidget* parent)
   : QWidget(parent),
   m_Impl(new Impl(this))
 {
 }
 
 void QmitkChartWidget::Impl::CallJavaScriptFuntion(const QString& command)
 {
   m_WebEngineView->page()->runJavaScript(command);
 }
 
 void QmitkChartWidget::Impl::ClearJavaScriptChart()
 {
   m_WebEngineView->setUrl(QUrl(QStringLiteral("qrc:///C3js/empty.html")));
 }
 
 void QmitkChartWidget::Impl::InitializeJavaScriptChart()
 {
   m_WebChannel->registerObject(QStringLiteral("chartData"), m_C3Data);
   unsigned count = 0;
   for (auto& xyData : *m_C3xyData) {
 	  QString variableName = "xyData" + QString::number(count);
 	  m_WebChannel->registerObject(variableName, xyData);
 	  count++;
   }
   m_WebEngineView->load(QUrl(QStringLiteral("qrc:///C3js/QmitkChartWidget.html")));
 }
 
 QmitkChartWidget::~QmitkChartWidget()
 {
   delete m_Impl;
 }
 
 void QmitkChartWidget::AddData2D(const std::map<double, double>& data2D, const std::string& label, ChartType type)
 {
   m_Impl->AddData2D(data2D, label, type);
 }
 
 void QmitkChartWidget::SetColor(const std::string& label, const std::string& colorName)
 {
   m_Impl->SetColor(label, colorName);
 }
 
 void QmitkChartWidget::SetLineStyle(const std::string& label, LineStyle style)
 {
   m_Impl->SetLineStyle(label, style);
 }
 
 void QmitkChartWidget::AddData1D(const std::vector<double>& data1D, const std::string& label, ChartType type)
 {
   m_Impl->AddData1D(data1D, label, type);
 }
 
 void QmitkChartWidget::RemoveData(const std::string& label)
 {
   m_Impl->RemoveData(label);
 }
 
 void QmitkChartWidget::SetXAxisLabel(const std::string & label)
 {
 	m_Impl->SetXAxisLabel(label);
 }
 
 std::string QmitkChartWidget::GetXAxisLabel() const
 {
 	return m_Impl->GetXAxisLabel();
 }
 
 void QmitkChartWidget::SetYAxisLabel(const std::string & label)
 {
 	m_Impl->SetYAxisLabel(label);
 }
 
 std::string QmitkChartWidget::GetYAxisLabel() const
 {
 	return m_Impl->GetYAxisLabel();
 }
 
 void QmitkChartWidget::SetDiagramTitle(const std::string & title)
 {
   m_Impl->SetDiagramTitle(title);
 }
 
 std::string QmitkChartWidget::GetDiagramTitle() const
 {
   return m_Impl->GetDiagramTitle();
 }
 
 void QmitkChartWidget::SetChartType(const std::string& label, ChartType type)
 {
   m_Impl->SetChartType(label, type);
 }
 
 void QmitkChartWidget::SetLegendPosition(LegendPosition position)
 {
   m_Impl->SetLegendPosition(position);
 }
 
 QmitkChartWidget::LegendPosition QmitkChartWidget::GetLegendPosition() const
 {
   return m_Impl->GetLegendPosition();
 }
 
 void QmitkChartWidget::Show(bool showSubChart)
 {
   if (m_Impl->GetC3xyData()->empty()) {
     mitkThrow() << "no data available for display in chart";
   }
   this->m_Impl->GetC3Data()->SetAppearance(showSubChart, m_Impl->GetC3xyData()->front()->GetChartType()== QVariant("pie"));
   m_Impl->InitializeJavaScriptChart();
 }
 
 void QmitkChartWidget::Clear()
 {
 	m_Impl->ClearData();
 	m_Impl->ClearJavaScriptChart();
 }
 
 void QmitkChartWidget::OnLoadFinished(bool isLoadSuccessfull)
 {
   if(isLoadSuccessfull)
   {
     emit PageSuccessfullyLoaded();
   }
 }
 
 void QmitkChartWidget::SetChartTypeForAllDataAndReload(ChartType type)
 {
   auto allData = this->m_Impl->GetC3xyData();
   for (auto iterator = allData->begin(); iterator != allData->end(); ++iterator) {
     SetChartType((*iterator)->GetLabel().toString().toStdString(), type);
   }
   auto diagramTypeName = m_Impl->ConvertChartTypeToString(type);
   const QString command = QString::fromStdString("transformView('" + diagramTypeName + "')");
   m_Impl->CallJavaScriptFuntion(command);
 }
 
 void QmitkChartWidget::SetTheme(ChartStyle themeEnabled)
 {
   QString command;
   if (themeEnabled == ChartStyle::darkstyle)
   {
     command = QString("changeTheme('dark')");
   }
   else {
     command = QString("changeTheme('default')");
   }
   m_Impl->CallJavaScriptFuntion(command);
 }
 
 void QmitkChartWidget::Reload(bool showSubChart)
 {
   QString subChartString;
   if (showSubChart) {
     subChartString = "true";
   }
   else {
     subChartString = "false";
   }
   const QString command = QString("ReloadChart(" + subChartString + ")");
   m_Impl->CallJavaScriptFuntion(command);
 }