diff --git a/source/ArmarXGui/libraries/PlotterController/PlotterController.cpp b/source/ArmarXGui/libraries/PlotterController/PlotterController.cpp
index 1415f5773919f1ea7687035a1b019b75046652a9..e8a82dc5642461efe386a85b006e78ff0e5ec138 100644
--- a/source/ArmarXGui/libraries/PlotterController/PlotterController.cpp
+++ b/source/ArmarXGui/libraries/PlotterController/PlotterController.cpp
@@ -110,7 +110,7 @@ void PlotterController::updateGraph()
 
     IceUtil::Time curTime = TimeUtil::GetTime();
     // erase old markers
-    for (auto& markerChannel : markers)
+    for (auto & markerChannel : markers)
     {
         for (auto it = markerChannel.second.begin(); it != markerChannel.second.end();)
         {
@@ -150,7 +150,7 @@ void PlotterController::updateGraph()
             marker->setLineStyle(QwtPlotMarker::VLine);
             marker->setLabelAlignment(Qt::AlignBottom | Qt::AlignLeft);
             int i = 0;
-            for (auto& markerSubMap : markers)
+            for (auto & markerSubMap : markers)
             {
                 if (markerSubMap.first == datafieldId)
                 {
@@ -428,7 +428,7 @@ std::map<std::string, VariantPtr> PlotterController::getData(const QStringList&
                 {
                     auto dict = JSONObject::ConvertToBasicVariantMap(json, var);
 
-                    for (const auto& e : dict)
+                    for (const auto & e : dict)
                     {
                         if (e.first == "timestamp") // TimedVariants always contain a timestamp field which is irrelevant
                         {
@@ -494,7 +494,7 @@ void PlotterController::setupCurves(int samplingIntervalMs)
         ScopedLock lock(dataMutex);
         clear();
         auto now = TimeUtil::GetTime();
-        std::map<std::string, ChannelHistory> histories;
+        std::map<std::string, TimedVariantBaseList> histories;
         markers.clear();
         //                for(auto marker : markers)
         //                    marker->detach();
@@ -510,15 +510,15 @@ void PlotterController::setupCurves(int samplingIntervalMs)
 
                 // get past data of that datafield
                 auto id = identifier->getIdentifierStr();
-                auto historiesIt = histories.find(identifier->channelName);
+                auto historiesIt = histories.find(id);
 
                 if (historiesIt == histories.end())
                 {
                     auto start = IceUtil::Time::now();
-                    histories[identifier->channelName] = prx->getPartialChannelHistory(identifier->channelName,
-                                                         (now - IceUtil::Time::seconds(shownInterval)).toMicroSeconds(), now.toMicroSeconds(), samplingIntervalMs);
+                    histories[id] = prx->getPartialDatafieldHistory(identifier->channelName, identifier->datafieldName,
+                                    (now - IceUtil::Time::seconds(shownInterval)).toMicroSeconds(), now.toMicroSeconds(), samplingIntervalMs);
                     ARMARX_DEBUG << "history data polling took : " << (IceUtil::Time::now() - start).toMilliSecondsDouble() << " got " << histories[identifier->channelName].size() << " entries";
-                    historiesIt = histories.find(identifier->channelName);
+                    historiesIt = histories.find(id);
                 }
 
                 long lastTimestamp = 0;
@@ -537,12 +537,12 @@ void PlotterController::setupCurves(int samplingIntervalMs)
                     QwtThermo* bar = createBar(selectedDatafields.at(i));
                     bars[selectedDatafields.at(i).toStdString()] = bar;
 
-                    for (auto& entry : historiesIt->second)
+                    for (TimedVariantBasePtr & entry : historiesIt->second)
                     {
-                        if (lastTimestamp + pollingInterval < entry.first)
+                        if (lastTimestamp + pollingInterval < entry->getTimestamp())
                         {
-                            dataMap[id].push_back(TimeData(IceUtil::Time::microSeconds(entry.first), VariantPtr::dynamicCast(entry.second[identifier->datafieldName].value)));
-                            lastTimestamp = entry.first;
+                            dataMap[id].push_back(TimeData(IceUtil::Time::microSeconds(entry->getTimestamp()), VariantPtr::dynamicCast(entry)));
+                            lastTimestamp = entry->getTimestamp();
                         }
                     }
                 }
@@ -573,12 +573,12 @@ void PlotterController::setupCurves(int samplingIntervalMs)
                             bars[key] = bar;
                         }
                     }
-                    for (auto& entry : historiesIt->second)
+                    for (auto & entry : historiesIt->second)
                     {
-                        if (lastTimestamp + pollingInterval < entry.first)
+                        if (lastTimestamp + pollingInterval < entry->getTimestamp())
                         {
-                            auto dict = JSONObject::ConvertToBasicVariantMap(json, entry.second[identifier->datafieldName].value);
-                            for (const auto& e : dict)
+                            auto dict = JSONObject::ConvertToBasicVariantMap(json, entry);
+                            for (const auto & e : dict)
                             {
                                 if (e.first == "timestamp") // TimedVariants always contain a timestamp field which is irrelevant
                                 {
@@ -600,7 +600,7 @@ void PlotterController::setupCurves(int samplingIntervalMs)
                                 }
                                 else
                                 {
-                                    dataMap[key].push_back(TimeData(IceUtil::Time::microSeconds(entry.first), var));
+                                    dataMap[key].push_back(TimeData(IceUtil::Time::microSeconds(entry->getTimestamp()), var));
                                 }
                             }
                         }