diff --git a/timeseriesviewer/mapcanvas.py b/timeseriesviewer/mapcanvas.py
index ef48d6919ae7c83547e5d285d2b81e3d4927b438..e75e26fd38228bbec68e47457cff180367697268 100644
--- a/timeseriesviewer/mapcanvas.py
+++ b/timeseriesviewer/mapcanvas.py
@@ -94,8 +94,9 @@ class MapCanvas(QgsMapCanvas):
             QgsMapLayerRegistry.instance().addMapLayers(mls, False)
             del self.mLazyRasterSources[:]
             self.mLayers.extend(mls)
-            self.setRasterRenderer(self.mRendererRaster, refresh=False)
-            self.setVectorRenderer(self.mRendererVector, refresh=False)
+            self.setRenderer(self.mRendererVector, refresh=False)
+            self.setRenderer(self.mRendererRaster, refresh=False)
+
         return self.mLayers
 
     def addLazyRasterSources(self, sources):
@@ -368,18 +369,13 @@ class MapCanvas(QgsMapCanvas):
             SETTINGS.setValue('CANVAS_SAVE_IMG_DIR', os.path.dirname(path))
 
 
-    def setRenderer(self, renderer):
-        #print('Set renderer {}'.format(self.objectName()))
-        #lyrs = [l for l in self.mapLayersToRender() if str(l.source()) == targetLayerUri]
-        isRasterRenderer = isinstance(renderer, QgsRasterRenderer)
-        if isRasterRenderer:
-            self.setRasterRenderer(renderer, refresh=False)
-        else:
-            self.setVectorRenderer(renderer, refresh=False)
-
-        self.refresh()
+    def setRenderer(self, renderer, refresh=True):
+        from utils import copyRenderer
+        success = [copyRenderer(renderer, lyr) for lyr in self.mLayers]
+        if refresh and any(success):
+            self.refresh()
 
-    def setVectorRenderer(self, renderer, refresh=True):
+    def depr_setVectorRenderer(self, renderer, refresh=True):
         self.mRendererVector = renderer
         lyrs = [l for l in self.mLayers if isinstance(l, QgsVectorLayer)]
         for lyr in lyrs:
@@ -388,7 +384,7 @@ class MapCanvas(QgsMapCanvas):
         if refresh:
             self.refresh()
 
-    def setRasterRenderer(self, renderer, refresh=False):
+    def depr_setRasterRenderer(self, renderer, refresh=False):
         self.mRendererRaster = renderer
         lyrs = [l for l in self.mLayers if isinstance(l, QgsRasterLayer)]
         for lyr in lyrs:
diff --git a/timeseriesviewer/utils.py b/timeseriesviewer/utils.py
index 1c2225529b4ea28bb81fce87f72986c921d13ce9..57f2642f334a44638ff604fb278a7fab1eb3e84f 100644
--- a/timeseriesviewer/utils.py
+++ b/timeseriesviewer/utils.py
@@ -298,6 +298,35 @@ def filterSubLayers(filePaths, subLayerEndings):
             pass
     return results
 
+def copyRenderer(renderer, targetLayer):
+    """
+    Copies and applies renderer to targetLayer.
+    :param renderer:
+    :param targetLayer:
+    :return: True, if 'renderer' could be copied and applied to 'targetLayer'
+    """
+    if isinstance(targetLayer, QgsRasterLayer):
+        if isinstance(renderer, QgsMultiBandColorRenderer):
+            r = renderer.clone()
+            r.setInput(targetLayer.dataProvider())
+            targetLayer.setRenderer(r)
+            return True
+        elif isinstance(renderer, QgsSingleBandPseudoColorRenderer):
+            r = renderer.clone()
+            # r = QgsSingleBandPseudoColorRenderer(None, renderer.band(), None)
+            r.setInput(targetLayer.dataProvider())
+            cmin = renderer.classificationMin()
+            cmax = renderer.classificationMax()
+            r.setClassificationMin(cmin)
+            r.setClassificationMax(cmax)
+            targetLayer.setRenderer(r)
+            return True
+    elif isinstance(targetLayer, QgsVectorLayer):
+        #todo: add render-specific switches
+        targetLayer.setRenderer(renderer)
+        return True
+    else:
+        return False
 
 def getIface():
     """