diff --git a/timeseriesviewer/pixelloader.py b/timeseriesviewer/pixelloader.py
index cf2e6ae8d149c1817fdd3f1327778e731fc925c4..4270bff79bb971cd646371792f90f988495d600f 100644
--- a/timeseriesviewer/pixelloader.py
+++ b/timeseriesviewer/pixelloader.py
@@ -179,10 +179,12 @@ def transformPoint2Px(trans, pt, gt):
     x, y, _ = trans.TransformPoint(pt.x(), pt.y())
     return geo2px(QgsPointXY(x, y), gt)
 
-def doLoaderTask(task):
+def doLoaderTask(taskWrapper:QgsTask, *args, **kwds):
 
+    assert isinstance(taskWrapper, QgsTask)
     #assert isinstance(task, PixelLoaderTask), '{}\n{}'.format(type(task), task)
-
+    task = args[0]
+    assert isinstance(task, PixelLoaderTask)
     result = task
 
     ds = gdal.Open(task.sourcePath, gdal.GA_ReadOnly)
@@ -384,7 +386,7 @@ class PixelLoader(QObject):
     Loads pixel from raster images
     Use QgsTaskManager interface in background
     """
-    sigPixelLoaded = pyqtSignal([int, int, object],[object])
+    sigPixelLoaded = pyqtSignal([int, int, object], [object])
     sigLoadingStarted = pyqtSignal()
     sigLoadingFinished = pyqtSignal(np.timedelta64)
     sigLoadingCanceled = pyqtSignal()
@@ -434,15 +436,23 @@ class PixelLoader(QObject):
         tm = self.taskManager()
 
         #todo: create chuncks
-
+        import uuid
         for plt in tasks:
             assert isinstance(plt, PixelLoaderTask)
 
-            qgsTask = QgsTask.fromFunction('pltTask', doLoaderTask, on_finished=)
+            name = 'pltTask.{}'.format(uuid.uuid4())
+            qgsTask = QgsTask.fromFunction(name, doLoaderTask, plt, on_finished=self.onLoadingFinished)
+            qgsTask
             self.mTasks.append(qgsTask)
             tm.addTask(qgsTask)
 
-    def onLoadingFinished(self, e, result):
+    def onLoadingFinished(self, *args):
+
+        err = args[0]
+        results = args[1:]
+
+
+        print('Loading finished')
         s  =""
 
     def cancelLoading(self):
diff --git a/timeseriesviewer/utils.py b/timeseriesviewer/utils.py
index 8a4acde2650413596f15b69131a11091b9352e29..98007939aaa29865ab14e0c67a6d8b3537793519 100644
--- a/timeseriesviewer/utils.py
+++ b/timeseriesviewer/utils.py
@@ -20,7 +20,7 @@
 """
 # noinspection PyPep8Naming
 
-import os, sys, math, re, io, fnmatch
+import os, sys, math, re, io, fnmatch, uuid
 
 
 from collections import defaultdict
@@ -255,6 +255,12 @@ class SpatialPoint(QgsPointXY):
         crs = mapCanvas.mapSettings().destinationCrs()
         return SpatialPoint(crs, mapCanvas.center())
 
+    @staticmethod
+    def fromMapLayerCenter(mapLayer:QgsMapLayer):
+        assert isinstance(mapLayer, QgsMapLayer) and mapLayer.isValid()
+        crs = mapLayer.crs()
+        return SpatialPoint(crs, mapLayer.extent().center())
+
     @staticmethod
     def fromSpatialExtent(spatialExtent):
         assert isinstance(spatialExtent, SpatialExtent)
@@ -1176,6 +1182,15 @@ def initQgisApplication(pythonPlugins=None, PATH_QGIS=None, qgisDebug=False, qgi
 
 
 class TestObjects():
+    @staticmethod
+    def createTestImageSeries(n=1) -> list:
+        assert n > 0
+
+        datasets = []
+        for i in range(n):
+            ds = TestObjects.inMemoryImage()
+            datasets.append(ds)
+        return datasets
 
     @staticmethod
     def inMemoryImage(nl=10, ns=20, nb=3, crs='EPSG:32632')->gdal.Dataset:
@@ -1189,8 +1204,8 @@ class TestObjects():
         """
         drv = gdal.GetDriverByName('GTiff')
         assert isinstance(drv, gdal.Driver)
-
-        path = '/vsimem/testimage.tif'
+        id = uuid.uuid4()
+        path = '/vsimem/testimage.multiband.{}.tif'.format(id)
         ds = drv.Create(path, ns, nl, bands=nb, eType=gdal.GDT_Float32)
 
         if isinstance(crs, str):
@@ -1217,11 +1232,12 @@ class TestObjects():
         scheme = ClassificationScheme()
         scheme.createClasses(n)
 
-        drv = gdal.GetDriverByName('MEM')
+        drv = gdal.GetDriverByName('GTiff')
         assert isinstance(drv, gdal.Driver)
 
-
-        ds = drv.Create('', ns, nl, bands=nb, eType=gdal.GDT_Byte)
+        id = uuid.uuid4()
+        path = '/vsimem/testimage.class._{}.tif'.format(id)
+        ds = drv.Create(path, ns, nl, bands=nb, eType=gdal.GDT_Byte)
 
         if isinstance(crs, str):
             c = QgsCoordinateReferenceSystem(crs)