diff --git a/src/plugins/tprovoost/sequenceblocks/importer/SequenceFileImporterGetImage.java b/src/plugins/tprovoost/sequenceblocks/importer/SequenceFileImporterGetImage.java
index 3720a15cafe134f661fc1b06283f41292e2f9546..7794f12ee8b40c846ca82ac3fb96fc0a7be69933 100644
--- a/src/plugins/tprovoost/sequenceblocks/importer/SequenceFileImporterGetImage.java
+++ b/src/plugins/tprovoost/sequenceblocks/importer/SequenceFileImporterGetImage.java
@@ -38,11 +38,11 @@ public class SequenceFileImporterGetImage extends Plugin implements IOBlock, Plu
         super();
 
         importer = new Var<PositionedSequenceFileImporter>("Importer", PositionedSequenceFileImporter.class);
-        series = new VarInteger("Series", 0);
+        series = new VarInteger("Series", -1);
         resolution = new VarInteger("Resolution (0=full, 1=1/2, ..)", 0);
         region = new VarROIArray("XY region (ROI)", null);
-        zIndex = new VarInteger("Z (slice) index", 0);
-        tIndex = new VarInteger("T (frame) index", 0);
+        zIndex = new VarInteger("Z (slice) index", -1);
+        tIndex = new VarInteger("T (frame) index", -1);
         cIndex = new VarInteger("C (channel) index", -1);
 
         image = new Var<IcyBufferedImage>("Image", IcyBufferedImage.class);
@@ -71,7 +71,7 @@ public class SequenceFileImporterGetImage extends Plugin implements IOBlock, Plu
         Rectangle rect = ((rois != null) && (rois.length > 0)) ? rois[0].getBounds5D().toRectangle2D().getBounds()
                 : null;
 
-        // default values ? use internal position if any defined
+        // undefined values ? use internal position if any defined
         if ((s == 0) && (pi.s != -1))
             s = pi.s;
         if ((z == 0) && (pi.z != -1))
@@ -83,6 +83,10 @@ public class SequenceFileImporterGetImage extends Plugin implements IOBlock, Plu
         if ((rect == null) && (pi.xyRegion != null))
             rect = pi.xyRegion;
 
+        // still undefined ? --> set default value for series
+        if (s == -1)
+            s = 0;
+
         try
         {
             image.setValue(imp.getImage(s, res, rect, z, t, c));
diff --git a/src/plugins/tprovoost/sequenceblocks/importer/SequenceFileImporterLoadSequence.java b/src/plugins/tprovoost/sequenceblocks/importer/SequenceFileImporterLoadSequence.java
index 34c8ba2d6a387750d1b97aef4b1300a5f8c6dda8..666f65cc710b68cabe97b37fd1ecaaf4b2c604b5 100644
--- a/src/plugins/tprovoost/sequenceblocks/importer/SequenceFileImporterLoadSequence.java
+++ b/src/plugins/tprovoost/sequenceblocks/importer/SequenceFileImporterLoadSequence.java
@@ -43,7 +43,7 @@ public class SequenceFileImporterLoadSequence extends Plugin implements IOBlock,
 
         importer = new Var<PositionedSequenceFileImporter>("Importer", PositionedSequenceFileImporter.class);
 
-        series = new VarInteger("Series", 0);
+        series = new VarInteger("Series", -1);
         resolution = new VarInteger("Resolution (0=full, 1=1/2, ..)", 0);
         region = new VarROIArray("XY region (ROI)", null);
         minZIndex = new VarInteger("Z min (slice)", -1);
@@ -80,8 +80,8 @@ public class SequenceFileImporterLoadSequence extends Plugin implements IOBlock,
         Rectangle rect = ((rois != null) && (rois.length > 0)) ? rois[0].getBounds5D().toRectangle2D().getBounds()
                 : null;
 
-        // default values ? use internal position if any defined
-        if ((s == 0) && (pi.s != -1))
+        // undefined values ? use internal position if any defined
+        if ((s == -1) && (pi.s != -1))
             s = pi.s;
         if ((minZ == -1) && (maxZ == -1) && (pi.z != -1))
         {
@@ -93,10 +93,14 @@ public class SequenceFileImporterLoadSequence extends Plugin implements IOBlock,
             minT = pi.t;
             maxT = pi.t;
         }
-        if ((c == 0) && (pi.c != -1))
+        if ((c == -1) && (pi.c != -1))
             c = pi.c;
         if ((rect == null) && (pi.xyRegion != null))
             rect = pi.xyRegion;
+        
+        // still undefined ? --> set default value for series
+        if (s == -1)
+            s = 0;
 
         try
         {
diff --git a/src/plugins/tprovoost/sequenceblocks/loop/SequenceFileImporterBatch.java b/src/plugins/tprovoost/sequenceblocks/loop/SequenceFileImporterBatch.java
index 782c76cf22a1fcc65214f96af01bd64148f79d4c..134d9af71ed8971b8503e86dc944698a857de19c 100644
--- a/src/plugins/tprovoost/sequenceblocks/loop/SequenceFileImporterBatch.java
+++ b/src/plugins/tprovoost/sequenceblocks/loop/SequenceFileImporterBatch.java
@@ -1,11 +1,15 @@
 package plugins.tprovoost.sequenceblocks.loop;
 
+import java.util.List;
+
 import icy.file.SequenceFileImporter;
 import icy.plugin.interface_.PluginBundled;
 import icy.plugin.interface_.PluginLibrary;
 import plugins.adufour.blocks.lang.Batch;
 import plugins.adufour.blocks.tools.sequence.SequenceBlock;
+import plugins.adufour.blocks.util.VarList;
 import plugins.adufour.vars.lang.Var;
+import plugins.adufour.vars.lang.VarInteger;
 import plugins.adufour.vars.util.VarException;
 import plugins.tprovoost.sequenceblocks.SequenceBlocks;
 import plugins.tprovoost.sequenceblocks.importer.PositionedSequenceFileImporter;
@@ -18,11 +22,21 @@ import plugins.tprovoost.sequenceblocks.importer.PositionedSequenceFileImporter;
 public abstract class SequenceFileImporterBatch extends Batch implements SequenceBlock, PluginLibrary, PluginBundled
 {
     // important to not initialize and create them in getBatchSource() and getBatchElement()
-    protected Var<PositionedSequenceFileImporter> positionedImporter;
-    protected Var<PositionedSequenceFileImporter> element;
+    protected Var<PositionedSequenceFileImporter> positionedImporter = null;
+    protected Var<PositionedSequenceFileImporter> element = null;
+    protected VarInteger series = null;
 
     // internal
     protected int limit;
+    protected boolean showSeriesField;
+
+    public SequenceFileImporterBatch()
+    {
+        super();
+
+        // we want it by default
+        showSeriesField = true;
+    }
 
     @Override
     public Var<PositionedSequenceFileImporter> getBatchSource()
@@ -58,8 +72,52 @@ public abstract class SequenceFileImporterBatch extends Batch implements Sequenc
         if (imp.getOpened() == null)
             throw new VarException(positionedImporter, "Importer is not opened !");
 
-        // init element with a copy of current positioned importer
-        element.setValue(new PositionedSequenceFileImporter(value));
+        // create new positioned importer for element initialization
+        final PositionedSequenceFileImporter pi = new PositionedSequenceFileImporter(value);
+
+        // series field active ?
+        if (showSeriesField)
+        {
+            final int s = series.getValue().intValue();
+
+            // defined series ? --> set series position
+            if (s != -1)
+                pi.s = s;
+        }
+
+        // init element with a copy of current positioned importer (and eventually set serie position)
+        element.setValue(pi);
+    }
+
+    @Override
+    public void declareInput(VarList inputMap)
+    {
+        super.declareInput(inputMap);
+
+        if (showSeriesField)
+        {
+            // lazy creation
+            if (series == null)
+                series = new VarInteger("Series", -1);
+
+            inputMap.add("series", series);
+        }
+    }
+
+    @Override
+    public void declareLoopVariables(List<Var<?>> loopVariables)
+    {
+        if (showSeriesField)
+        {
+            // lazy creation
+            if (series == null)
+                series = new VarInteger("Series", -1);
+
+            loopVariables.add(series);
+        }
+
+        // need to be called after
+        super.declareLoopVariables(loopVariables);
     }
 
     @Override
diff --git a/src/plugins/tprovoost/sequenceblocks/loop/SequenceFileImporterChannelBatch.java b/src/plugins/tprovoost/sequenceblocks/loop/SequenceFileImporterChannelBatch.java
index 46640c56371c0c1eade6faae2c6d3a23d531ce35..afc3b0405731be0aab4532d1fec43677f797bbe9 100644
--- a/src/plugins/tprovoost/sequenceblocks/loop/SequenceFileImporterChannelBatch.java
+++ b/src/plugins/tprovoost/sequenceblocks/loop/SequenceFileImporterChannelBatch.java
@@ -17,7 +17,8 @@ public class SequenceFileImporterChannelBatch extends SequenceFileImporterBatch
     {
         super.initializeLoop();
 
-        final PositionedSequenceFileImporter pi = positionedImporter.getValue();
+        // can take position from element which should have been initialized here
+        final PositionedSequenceFileImporter pi = element.getValue();
 
         try
         {
diff --git a/src/plugins/tprovoost/sequenceblocks/loop/SequenceFileImporterFrameBatch.java b/src/plugins/tprovoost/sequenceblocks/loop/SequenceFileImporterFrameBatch.java
index e91d5f4ff98aba478bb7aa82b97957726f288141..ba8bf1066324d59de57918deaf474eb654dae72b 100644
--- a/src/plugins/tprovoost/sequenceblocks/loop/SequenceFileImporterFrameBatch.java
+++ b/src/plugins/tprovoost/sequenceblocks/loop/SequenceFileImporterFrameBatch.java
@@ -17,7 +17,8 @@ public class SequenceFileImporterFrameBatch extends SequenceFileImporterBatch
     {
         super.initializeLoop();
 
-        final PositionedSequenceFileImporter pi = positionedImporter.getValue();
+        // can take position from element which should have been initialized here
+        final PositionedSequenceFileImporter pi = element.getValue();
 
         try
         {
diff --git a/src/plugins/tprovoost/sequenceblocks/loop/SequenceFileImporterRegionBatch.java b/src/plugins/tprovoost/sequenceblocks/loop/SequenceFileImporterRegionBatch.java
index 0bbd8bb263a02730c16eb1c2aa4fac2fd7dad8cd..98ab352ebf2a023456d4109e83fe45150b073fc6 100644
--- a/src/plugins/tprovoost/sequenceblocks/loop/SequenceFileImporterRegionBatch.java
+++ b/src/plugins/tprovoost/sequenceblocks/loop/SequenceFileImporterRegionBatch.java
@@ -24,9 +24,9 @@ import plugins.tprovoost.sequenceblocks.importer.PositionedSequenceFileImporter;
  */
 public class SequenceFileImporterRegionBatch extends SequenceFileImporterBatch
 {
-    protected VarROIArray rois;
-    protected VarInteger inputRoisResolution;
-    protected VarInteger inputRoisMargin;
+    protected VarROIArray rois = null;
+    protected VarInteger inputRoisResolution = null;
+    protected VarInteger inputRoisMargin = null;
     protected List<Rectangle> regions;
 
     @Override
@@ -34,7 +34,8 @@ public class SequenceFileImporterRegionBatch extends SequenceFileImporterBatch
     {
         super.initializeLoop();
 
-        final PositionedSequenceFileImporter pi = positionedImporter.getValue();
+        // can take position from element which should have been initialized here
+        final PositionedSequenceFileImporter pi = element.getValue();
 
         // can iterate over XY dimension ?
         if ((pi.xyRegion == null) && (rois.getValue() != null))
diff --git a/src/plugins/tprovoost/sequenceblocks/loop/SequenceFileImporterSeriesBatch.java b/src/plugins/tprovoost/sequenceblocks/loop/SequenceFileImporterSeriesBatch.java
index 255c14ceb98dbccc3ec8b09e5a4db47f420a240f..c08970f3bfc25a3dabeae22bd5489de1ab988f26 100644
--- a/src/plugins/tprovoost/sequenceblocks/loop/SequenceFileImporterSeriesBatch.java
+++ b/src/plugins/tprovoost/sequenceblocks/loop/SequenceFileImporterSeriesBatch.java
@@ -12,17 +12,29 @@ import plugins.tprovoost.sequenceblocks.importer.PositionedSequenceFileImporter;
  */
 public class SequenceFileImporterSeriesBatch extends SequenceFileImporterBatch
 {
+    public SequenceFileImporterSeriesBatch()
+    {
+        super();
+
+        // add series field here
+        showSeriesField = false;
+    }
+
     @Override
     public void initializeLoop()
     {
         super.initializeLoop();
 
-        final PositionedSequenceFileImporter pi = positionedImporter.getValue();
+        // can take position from element which should have been initialized here
+        final PositionedSequenceFileImporter pi = element.getValue();
 
         try
         {
-            // force series iteration as by default series is set to 0
-            limit = MetaDataUtil.getNumSeries(pi.getMetadata());
+            // can iterate over S dimension ?
+            if (pi.s == -1)
+                limit = MetaDataUtil.getNumSeries(pi.getMetadata());
+            else
+                limit = 1;
         }
         catch (Exception e)
         {
@@ -35,9 +47,12 @@ public class SequenceFileImporterSeriesBatch extends SequenceFileImporterBatch
     public void beforeIteration()
     {
         // set current position S
-        element.getValue().s = getIterationCounter().getValue().intValue();
-        // force element changed event so loop get correctly executed
-        element.valueChanged(element, element.getValue(), element.getValue());
+        if (positionedImporter.getValue().s == -1)
+        {
+            element.getValue().s = getIterationCounter().getValue().intValue();
+            // force element changed event so loop get correctly executed
+            element.valueChanged(element, element.getValue(), element.getValue());
+        }
     }
 
     @Override
diff --git a/src/plugins/tprovoost/sequenceblocks/loop/SequenceFileImporterSliceBatch.java b/src/plugins/tprovoost/sequenceblocks/loop/SequenceFileImporterSliceBatch.java
index 061b76de2ce25f577b22617ab6d0e5ec2b1049a7..93a5514285f7563ec343e5d173322757dc65f535 100644
--- a/src/plugins/tprovoost/sequenceblocks/loop/SequenceFileImporterSliceBatch.java
+++ b/src/plugins/tprovoost/sequenceblocks/loop/SequenceFileImporterSliceBatch.java
@@ -17,7 +17,8 @@ public class SequenceFileImporterSliceBatch extends SequenceFileImporterBatch
     {
         super.initializeLoop();
 
-        final PositionedSequenceFileImporter pi = positionedImporter.getValue();
+        // can take position from element which should have been initialized here
+        final PositionedSequenceFileImporter pi = element.getValue();
 
         try
         {
diff --git a/src/plugins/tprovoost/sequenceblocks/loop/SequenceFileImporterTileBatch.java b/src/plugins/tprovoost/sequenceblocks/loop/SequenceFileImporterTileBatch.java
index 5386fb6de960654e2274d0f96aebebc51482b1a6..b831e80c1a090fc5333e150300b372bf4caf1827 100644
--- a/src/plugins/tprovoost/sequenceblocks/loop/SequenceFileImporterTileBatch.java
+++ b/src/plugins/tprovoost/sequenceblocks/loop/SequenceFileImporterTileBatch.java
@@ -6,7 +6,10 @@ import java.util.List;
 import icy.file.SequenceFileImporter;
 import icy.image.ImageUtil;
 import icy.sequence.MetaDataUtil;
+import plugins.adufour.blocks.util.VarList;
+import plugins.adufour.vars.lang.Var;
 import plugins.adufour.vars.lang.VarInteger;
+import plugins.adufour.vars.lang.VarROIArray;
 import plugins.adufour.vars.util.VarException;
 import plugins.tprovoost.sequenceblocks.importer.PositionedSequenceFileImporter;
 
@@ -17,25 +20,18 @@ import plugins.tprovoost.sequenceblocks.importer.PositionedSequenceFileImporter;
  */
 public class SequenceFileImporterTileBatch extends SequenceFileImporterBatch
 {
-    protected final VarInteger tileW;
-    protected final VarInteger tileH;
+    protected VarInteger tileW;
+    protected VarInteger tileH;
 
     protected List<Rectangle> tiles;
 
-    public SequenceFileImporterTileBatch()
-    {
-        super();
-
-        tileW = new VarInteger("Tile width (-1 = auto)", 0);
-        tileH = new VarInteger("Tile height (-1 = auto)", 0);
-    }
-
     @Override
     public void initializeLoop()
     {
         super.initializeLoop();
 
-        final PositionedSequenceFileImporter pi = positionedImporter.getValue();
+        // can take position from element which should have been initialized here
+        final PositionedSequenceFileImporter pi = element.getValue();
 
         // can iterate over XY dimension ?
         if (pi.xyRegion == null)
@@ -63,7 +59,7 @@ public class SequenceFileImporterTileBatch extends SequenceFileImporterBatch
             }
             catch (Exception e)
             {
-                throw new VarException(positionedImporter,
+                throw new VarException(element,
                         "Error while initializing SequenceFileImporter tile batch: " + e.getMessage());
             }
 
@@ -88,6 +84,37 @@ public class SequenceFileImporterTileBatch extends SequenceFileImporterBatch
         else
             limit = 1;
     }
+    
+    @Override
+    public void declareInput(VarList inputMap)
+    {
+        super.declareInput(inputMap);
+        
+        // lazy creation
+        if (tileW == null)
+            tileW = new VarInteger("Tile width (-1 = auto)", 0);
+        if (tileH == null)
+            tileH = new VarInteger("Tile height (-1 = auto)", 0);
+
+        inputMap.add("tileWidht", tileW);
+        inputMap.add("tileHeight", tileH);
+    }
+
+    @Override
+    public void declareLoopVariables(List<Var<?>> loopVariables)
+    {
+        // lazy creation
+        if (tileW == null)
+            tileW = new VarInteger("Tile width (-1 = auto)", 0);
+        if (tileH == null)
+            tileH = new VarInteger("Tile height (-1 = auto)", 0);
+
+        loopVariables.add(tileW);
+        loopVariables.add(tileH);
+
+        // need to be called after
+        super.declareLoopVariables(loopVariables);
+    }
 
     @Override
     public void beforeIteration()