diff --git a/.classpath b/.classpath
index 373b83c7ad36b985d889e4699104d78f14456193..f31c84e7ce44c2258c6866e15c14dbcda6aa1406 100644
--- a/.classpath
+++ b/.classpath
@@ -1,10 +1,48 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="src" path="src/main/java"/>
+	<classpathentry kind="src" path="src/main/resources"/>
+	<classpathentry kind="src" path="src/test/java"/>
 	<classpathentry kind="lib" path="/Icy-App/plugins/adufour/ezplug/EzPlug.jar"/>
 	<classpathentry kind="lib" path="/Icy-App/plugins/adufour/blocks/Blocks.jar"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
 	<classpathentry kind="var" path="ICY_JAR"/>
-	<classpathentry kind="output" path="bin"/>
-	<referencedentry kind="lib" path="D:/Stephane/Documents/dev/GIT/Icy-App/lib/scifio.jar" sourcepath="D:/Stephane/Documents/dev/GIT/bioformats"/>
+	<classpathentry kind="lib" path="F:/SDKs/Java/jdk1.8.0_241/lib/tools.jar"/>
+	<classpathentry kind="var" path="USER_HOME/SDKs/Java/jdk1.8.0_251/lib/tools.jar"/>
+	<classpathentry kind="var" path="USER_HOME/SDKs/Java/jdk1.8.0_251/lib/tools.jar"/>
+	<classpathentry kind="var" path="USER_HOME/SDKs/Java/jdk1.8.0_251/lib/tools.jar"/>
+	<classpathentry kind="var" path="USER_HOME/SDKs/Java/jdk1.8.0_251/lib/tools.jar"/>
+	<classpathentry kind="var" path="USER_HOME/SDKs/Java/jdk1.8.0_251/lib/tools.jar"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/Maven: org.bioimageanalysis.icy:icy-kernel:2.1.0"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/Maven: net.sf.ehcache:ehcache:2.10.6"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/Maven: org.slf4j:slf4j-api:1.7.25"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/Maven: org.bioimageanalysis.icy:icy-bioformats:6.3.1"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/Maven: org.bioimageanalysis.icy:icy-insubstantial:7.3.7"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/Maven: org.bioimageanalysis.icy:icy-vtk:6.3.0.1"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/Maven: net.imagej:ij:1.52q"/>
+	<classpathentry kind="lib" path="D:/SDKs/Java/jdk1.8.0_241/lib/tools.jar"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/Maven: javax.media:jai-core:1.1.3"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/Maven: javax.media:jai-codec:1.1.3"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/Maven: org.jogamp.jogl:jogl-all:2.1.5-01"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/Maven: org.jogamp.jogl:jogl-all-natives-linux-amd64:2.1.5"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/Maven: org.jogamp.jogl:jogl-all-natives-linux-i586:2.1.5"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/Maven: org.jogamp.jogl:jogl-all-natives-macosx-universal:2.1.5"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/Maven: org.jogamp.jogl:jogl-all-natives-windows-amd64:2.1.5"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/Maven: org.jogamp.jogl:jogl-all-natives-windows-i586:2.1.5"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/Maven: org.jogamp.gluegen:gluegen-rt:2.1.5-01"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/Maven: org.jogamp.gluegen:gluegen-rt-natives-linux-amd64:2.1.5"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/Maven: org.jogamp.gluegen:gluegen-rt-natives-linux-i586:2.1.5"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/Maven: org.jogamp.gluegen:gluegen-rt-natives-macosx-universal:2.1.5"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/Maven: org.jogamp.gluegen:gluegen-rt-natives-windows-amd64:2.1.5"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/Maven: org.jogamp.gluegen:gluegen-rt-natives-windows-i586:2.1.5"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/Maven: org.javassist:javassist:3.22.0-GA"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/Maven: net.sourceforge.jexcelapi:jxl:2.6.12"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/Maven: log4j:log4j:1.2.14"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/Maven: org.swinglabs.swingx:swingx-all:1.6.5-1"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/Maven: org.bioimageanalysis.icy:icy-blocks:1.0.1"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/Maven: org.bioimageanalysis.icy:icy-protocols:3.0.9"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/Maven: org.bioimageanalysis.icy:icy-javadocparser:1.0.0"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/Maven: com.nativelibs4java:ochafik-util:0.12"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/Maven: org.bioimageanalysis.icy:icy-ezplug:3.15.13"/>
+	<classpathentry kind="output" path="target/classes"/>
 </classpath>
diff --git a/.gitignore b/.gitignore
index 88e283fbbe38edf75f524ead36b103a8eeb25e1a..18c1c4b324adf41df851fd5281471dcb9e2d0373 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,10 @@
-bin
-*.jar
+bin/
+target/
+.settings/
+pluginfile-sequence-blocks*.jar
+.idea/
+*.iml
+*.eml
+.project
+.classpath
 
diff --git a/pom.xml b/pom.xml
new file mode 100644
index 0000000000000000000000000000000000000000..7c8b1fb42f70ad23b8a1d5ad9c6125d1d67acb2e
--- /dev/null
+++ b/pom.xml
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+
+    <parent>
+        <artifactId>pom-icy</artifactId>
+        <groupId>org.bioimageanalysis.icy</groupId>
+        <version>1.0.4</version>
+    </parent>
+
+    <artifactId>icy-sequence-blocks</artifactId>
+    <version>2.0.15</version>
+
+    <name>SequenceBlocks</name>
+
+    <properties>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+        <jdk.version>1.8</jdk.version>
+
+        <maven.compiler.source>1.8</maven.compiler.source>
+        <maven.compiler.target>1.8</maven.compiler.target>
+    </properties>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.bioimageanalysis.icy</groupId>
+            <artifactId>icy-kernel</artifactId>
+            <version>2.1.0</version>
+        </dependency>
+        <dependency>
+            <groupId>org.bioimageanalysis.icy</groupId>
+            <artifactId>icy-blocks</artifactId>
+            <version>1.0.1</version>
+        </dependency>
+    </dependencies>
+
+    <repositories>
+        <repository>
+            <id>icy</id>
+            <url>https://icy-nexus.pasteur.fr/repository/Icy/</url>
+        </repository>
+    </repositories>
+</project>
\ No newline at end of file
diff --git a/src/plugins/tprovoost/sequenceblocks/SequenceBlocks.java b/src/main/java/plugins/tprovoost/sequenceblocks/SequenceBlocks.java
similarity index 100%
rename from src/plugins/tprovoost/sequenceblocks/SequenceBlocks.java
rename to src/main/java/plugins/tprovoost/sequenceblocks/SequenceBlocks.java
diff --git a/src/plugins/tprovoost/sequenceblocks/add/AddOverlays.java b/src/main/java/plugins/tprovoost/sequenceblocks/add/AddOverlays.java
similarity index 100%
rename from src/plugins/tprovoost/sequenceblocks/add/AddOverlays.java
rename to src/main/java/plugins/tprovoost/sequenceblocks/add/AddOverlays.java
diff --git a/src/plugins/tprovoost/sequenceblocks/add/AddRois.java b/src/main/java/plugins/tprovoost/sequenceblocks/add/AddRois.java
similarity index 92%
rename from src/plugins/tprovoost/sequenceblocks/add/AddRois.java
rename to src/main/java/plugins/tprovoost/sequenceblocks/add/AddRois.java
index d389298426610e460c616cc5bc049e11d4945a2c..cbf26c84a61aa965af654edd9d7f4973873a6d8e 100644
--- a/src/plugins/tprovoost/sequenceblocks/add/AddRois.java
+++ b/src/main/java/plugins/tprovoost/sequenceblocks/add/AddRois.java
@@ -16,11 +16,9 @@ import plugins.adufour.vars.util.VarException;
 import plugins.tprovoost.sequenceblocks.SequenceBlocks;
 
 /**
- * Block to add one or several {@link ROI} to a Sequence.
+ * Block to add one or several {@link ROI} to a Sequence
  * 
- * class: plugins.tprovoost.sequenceblocks.add.AddRois
- * 
- * @author Stephane Dallongeville
+ * @author Stephane
  */
 public class AddRois extends Plugin implements SequenceBlock, PluginLibrary, PluginBundled
 {
diff --git a/src/plugins/tprovoost/sequenceblocks/convert/ConvertColor.java b/src/main/java/plugins/tprovoost/sequenceblocks/convert/ConvertColor.java
similarity index 100%
rename from src/plugins/tprovoost/sequenceblocks/convert/ConvertColor.java
rename to src/main/java/plugins/tprovoost/sequenceblocks/convert/ConvertColor.java
diff --git a/src/plugins/tprovoost/sequenceblocks/convert/ConvertStack.java b/src/main/java/plugins/tprovoost/sequenceblocks/convert/ConvertStack.java
similarity index 100%
rename from src/plugins/tprovoost/sequenceblocks/convert/ConvertStack.java
rename to src/main/java/plugins/tprovoost/sequenceblocks/convert/ConvertStack.java
diff --git a/src/plugins/tprovoost/sequenceblocks/convert/ConvertType.java b/src/main/java/plugins/tprovoost/sequenceblocks/convert/ConvertType.java
similarity index 100%
rename from src/plugins/tprovoost/sequenceblocks/convert/ConvertType.java
rename to src/main/java/plugins/tprovoost/sequenceblocks/convert/ConvertType.java
diff --git a/src/plugins/tprovoost/sequenceblocks/convert/Resize.java b/src/main/java/plugins/tprovoost/sequenceblocks/convert/Resize.java
similarity index 100%
rename from src/plugins/tprovoost/sequenceblocks/convert/Resize.java
rename to src/main/java/plugins/tprovoost/sequenceblocks/convert/Resize.java
diff --git a/src/plugins/tprovoost/sequenceblocks/creation/CombineChannels.java b/src/main/java/plugins/tprovoost/sequenceblocks/creation/CombineChannels.java
similarity index 100%
rename from src/plugins/tprovoost/sequenceblocks/creation/CombineChannels.java
rename to src/main/java/plugins/tprovoost/sequenceblocks/creation/CombineChannels.java
diff --git a/src/plugins/tprovoost/sequenceblocks/creation/CreateSequence.java b/src/main/java/plugins/tprovoost/sequenceblocks/creation/CreateSequence.java
similarity index 100%
rename from src/plugins/tprovoost/sequenceblocks/creation/CreateSequence.java
rename to src/main/java/plugins/tprovoost/sequenceblocks/creation/CreateSequence.java
diff --git a/src/plugins/tprovoost/sequenceblocks/creation/DuplicateSequence.java b/src/main/java/plugins/tprovoost/sequenceblocks/creation/DuplicateSequence.java
similarity index 100%
rename from src/plugins/tprovoost/sequenceblocks/creation/DuplicateSequence.java
rename to src/main/java/plugins/tprovoost/sequenceblocks/creation/DuplicateSequence.java
diff --git a/src/plugins/tprovoost/sequenceblocks/extract/CropCZT.java b/src/main/java/plugins/tprovoost/sequenceblocks/extract/CropCZT.java
similarity index 100%
rename from src/plugins/tprovoost/sequenceblocks/extract/CropCZT.java
rename to src/main/java/plugins/tprovoost/sequenceblocks/extract/CropCZT.java
diff --git a/src/plugins/tprovoost/sequenceblocks/extract/CropSequence.java b/src/main/java/plugins/tprovoost/sequenceblocks/extract/CropSequence.java
similarity index 100%
rename from src/plugins/tprovoost/sequenceblocks/extract/CropSequence.java
rename to src/main/java/plugins/tprovoost/sequenceblocks/extract/CropSequence.java
diff --git a/src/plugins/tprovoost/sequenceblocks/extract/ExtractChannel.java b/src/main/java/plugins/tprovoost/sequenceblocks/extract/ExtractChannel.java
similarity index 100%
rename from src/plugins/tprovoost/sequenceblocks/extract/ExtractChannel.java
rename to src/main/java/plugins/tprovoost/sequenceblocks/extract/ExtractChannel.java
diff --git a/src/plugins/tprovoost/sequenceblocks/extract/ExtractMultiChannels.java b/src/main/java/plugins/tprovoost/sequenceblocks/extract/ExtractMultiChannels.java
similarity index 100%
rename from src/plugins/tprovoost/sequenceblocks/extract/ExtractMultiChannels.java
rename to src/main/java/plugins/tprovoost/sequenceblocks/extract/ExtractMultiChannels.java
diff --git a/src/plugins/tprovoost/sequenceblocks/extract/ExtractSlice.java b/src/main/java/plugins/tprovoost/sequenceblocks/extract/ExtractSlice.java
similarity index 100%
rename from src/plugins/tprovoost/sequenceblocks/extract/ExtractSlice.java
rename to src/main/java/plugins/tprovoost/sequenceblocks/extract/ExtractSlice.java
diff --git a/src/plugins/tprovoost/sequenceblocks/extract/ExtractTime.java b/src/main/java/plugins/tprovoost/sequenceblocks/extract/ExtractTime.java
similarity index 100%
rename from src/plugins/tprovoost/sequenceblocks/extract/ExtractTime.java
rename to src/main/java/plugins/tprovoost/sequenceblocks/extract/ExtractTime.java
diff --git a/src/plugins/tprovoost/sequenceblocks/files/IsFileValid.java b/src/main/java/plugins/tprovoost/sequenceblocks/files/IsFileValid.java
similarity index 100%
rename from src/plugins/tprovoost/sequenceblocks/files/IsFileValid.java
rename to src/main/java/plugins/tprovoost/sequenceblocks/files/IsFileValid.java
diff --git a/src/plugins/tprovoost/sequenceblocks/files/LoadMetadata.java b/src/main/java/plugins/tprovoost/sequenceblocks/files/LoadMetadata.java
similarity index 100%
rename from src/plugins/tprovoost/sequenceblocks/files/LoadMetadata.java
rename to src/main/java/plugins/tprovoost/sequenceblocks/files/LoadMetadata.java
diff --git a/src/plugins/tprovoost/sequenceblocks/files/LoadSequence.java b/src/main/java/plugins/tprovoost/sequenceblocks/files/LoadSequence.java
similarity index 100%
rename from src/plugins/tprovoost/sequenceblocks/files/LoadSequence.java
rename to src/main/java/plugins/tprovoost/sequenceblocks/files/LoadSequence.java
diff --git a/src/plugins/tprovoost/sequenceblocks/files/LoadSubSequence.java b/src/main/java/plugins/tprovoost/sequenceblocks/files/LoadSubSequence.java
similarity index 100%
rename from src/plugins/tprovoost/sequenceblocks/files/LoadSubSequence.java
rename to src/main/java/plugins/tprovoost/sequenceblocks/files/LoadSubSequence.java
diff --git a/src/plugins/tprovoost/sequenceblocks/files/SaveMetadata.java b/src/main/java/plugins/tprovoost/sequenceblocks/files/SaveMetadata.java
similarity index 100%
rename from src/plugins/tprovoost/sequenceblocks/files/SaveMetadata.java
rename to src/main/java/plugins/tprovoost/sequenceblocks/files/SaveMetadata.java
diff --git a/src/plugins/tprovoost/sequenceblocks/files/SaveSequence.java b/src/main/java/plugins/tprovoost/sequenceblocks/files/SaveSequence.java
similarity index 100%
rename from src/plugins/tprovoost/sequenceblocks/files/SaveSequence.java
rename to src/main/java/plugins/tprovoost/sequenceblocks/files/SaveSequence.java
diff --git a/src/plugins/tprovoost/sequenceblocks/images/AddImage.java b/src/main/java/plugins/tprovoost/sequenceblocks/images/AddImage.java
similarity index 100%
rename from src/plugins/tprovoost/sequenceblocks/images/AddImage.java
rename to src/main/java/plugins/tprovoost/sequenceblocks/images/AddImage.java
diff --git a/src/plugins/tprovoost/sequenceblocks/images/AsImageArray.java b/src/main/java/plugins/tprovoost/sequenceblocks/images/AsImageArray.java
similarity index 100%
rename from src/plugins/tprovoost/sequenceblocks/images/AsImageArray.java
rename to src/main/java/plugins/tprovoost/sequenceblocks/images/AsImageArray.java
diff --git a/src/plugins/tprovoost/sequenceblocks/images/GetImage.java b/src/main/java/plugins/tprovoost/sequenceblocks/images/GetImage.java
similarity index 100%
rename from src/plugins/tprovoost/sequenceblocks/images/GetImage.java
rename to src/main/java/plugins/tprovoost/sequenceblocks/images/GetImage.java
diff --git a/src/plugins/tprovoost/sequenceblocks/images/RemoveImage.java b/src/main/java/plugins/tprovoost/sequenceblocks/images/RemoveImage.java
similarity index 100%
rename from src/plugins/tprovoost/sequenceblocks/images/RemoveImage.java
rename to src/main/java/plugins/tprovoost/sequenceblocks/images/RemoveImage.java
diff --git a/src/plugins/tprovoost/sequenceblocks/images/SetImage.java b/src/main/java/plugins/tprovoost/sequenceblocks/images/SetImage.java
similarity index 100%
rename from src/plugins/tprovoost/sequenceblocks/images/SetImage.java
rename to src/main/java/plugins/tprovoost/sequenceblocks/images/SetImage.java
diff --git a/src/plugins/tprovoost/sequenceblocks/importer/PositionedSequenceFileImporter.java b/src/main/java/plugins/tprovoost/sequenceblocks/importer/PositionedSequenceFileImporter.java
similarity index 100%
rename from src/plugins/tprovoost/sequenceblocks/importer/PositionedSequenceFileImporter.java
rename to src/main/java/plugins/tprovoost/sequenceblocks/importer/PositionedSequenceFileImporter.java
diff --git a/src/plugins/tprovoost/sequenceblocks/importer/SequenceFileImporterClose.java b/src/main/java/plugins/tprovoost/sequenceblocks/importer/SequenceFileImporterClose.java
similarity index 100%
rename from src/plugins/tprovoost/sequenceblocks/importer/SequenceFileImporterClose.java
rename to src/main/java/plugins/tprovoost/sequenceblocks/importer/SequenceFileImporterClose.java
diff --git a/src/plugins/tprovoost/sequenceblocks/importer/SequenceFileImporterGetImage.java b/src/main/java/plugins/tprovoost/sequenceblocks/importer/SequenceFileImporterGetImage.java
similarity index 91%
rename from src/plugins/tprovoost/sequenceblocks/importer/SequenceFileImporterGetImage.java
rename to src/main/java/plugins/tprovoost/sequenceblocks/importer/SequenceFileImporterGetImage.java
index 7794f12ee8b40c846ca82ac3fb96fc0a7be69933..3720a15cafe134f661fc1b06283f41292e2f9546 100644
--- a/src/plugins/tprovoost/sequenceblocks/importer/SequenceFileImporterGetImage.java
+++ b/src/main/java/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", -1);
+        series = new VarInteger("Series", 0);
         resolution = new VarInteger("Resolution (0=full, 1=1/2, ..)", 0);
         region = new VarROIArray("XY region (ROI)", null);
-        zIndex = new VarInteger("Z (slice) index", -1);
-        tIndex = new VarInteger("T (frame) index", -1);
+        zIndex = new VarInteger("Z (slice) index", 0);
+        tIndex = new VarInteger("T (frame) index", 0);
         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;
 
-        // undefined values ? use internal position if any defined
+        // default values ? use internal position if any defined
         if ((s == 0) && (pi.s != -1))
             s = pi.s;
         if ((z == 0) && (pi.z != -1))
@@ -83,10 +83,6 @@ 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/SequenceFileImporterGetMetadata.java b/src/main/java/plugins/tprovoost/sequenceblocks/importer/SequenceFileImporterGetMetadata.java
similarity index 100%
rename from src/plugins/tprovoost/sequenceblocks/importer/SequenceFileImporterGetMetadata.java
rename to src/main/java/plugins/tprovoost/sequenceblocks/importer/SequenceFileImporterGetMetadata.java
diff --git a/src/plugins/tprovoost/sequenceblocks/importer/SequenceFileImporterGetThumbnail.java b/src/main/java/plugins/tprovoost/sequenceblocks/importer/SequenceFileImporterGetThumbnail.java
similarity index 100%
rename from src/plugins/tprovoost/sequenceblocks/importer/SequenceFileImporterGetThumbnail.java
rename to src/main/java/plugins/tprovoost/sequenceblocks/importer/SequenceFileImporterGetThumbnail.java
diff --git a/src/plugins/tprovoost/sequenceblocks/importer/SequenceFileImporterGetTileSize.java b/src/main/java/plugins/tprovoost/sequenceblocks/importer/SequenceFileImporterGetTileSize.java
similarity index 100%
rename from src/plugins/tprovoost/sequenceblocks/importer/SequenceFileImporterGetTileSize.java
rename to src/main/java/plugins/tprovoost/sequenceblocks/importer/SequenceFileImporterGetTileSize.java
diff --git a/src/plugins/tprovoost/sequenceblocks/importer/SequenceFileImporterLoadSequence.java b/src/main/java/plugins/tprovoost/sequenceblocks/importer/SequenceFileImporterLoadSequence.java
similarity index 93%
rename from src/plugins/tprovoost/sequenceblocks/importer/SequenceFileImporterLoadSequence.java
rename to src/main/java/plugins/tprovoost/sequenceblocks/importer/SequenceFileImporterLoadSequence.java
index 666f65cc710b68cabe97b37fd1ecaaf4b2c604b5..34c8ba2d6a387750d1b97aef4b1300a5f8c6dda8 100644
--- a/src/plugins/tprovoost/sequenceblocks/importer/SequenceFileImporterLoadSequence.java
+++ b/src/main/java/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", -1);
+        series = new VarInteger("Series", 0);
         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;
 
-        // undefined values ? use internal position if any defined
-        if ((s == -1) && (pi.s != -1))
+        // default values ? use internal position if any defined
+        if ((s == 0) && (pi.s != -1))
             s = pi.s;
         if ((minZ == -1) && (maxZ == -1) && (pi.z != -1))
         {
@@ -93,14 +93,10 @@ public class SequenceFileImporterLoadSequence extends Plugin implements IOBlock,
             minT = pi.t;
             maxT = pi.t;
         }
-        if ((c == -1) && (pi.c != -1))
+        if ((c == 0) && (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/importer/SequenceFileImporterOpen.java b/src/main/java/plugins/tprovoost/sequenceblocks/importer/SequenceFileImporterOpen.java
similarity index 100%
rename from src/plugins/tprovoost/sequenceblocks/importer/SequenceFileImporterOpen.java
rename to src/main/java/plugins/tprovoost/sequenceblocks/importer/SequenceFileImporterOpen.java
diff --git a/src/plugins/tprovoost/sequenceblocks/infos/CreateLinearColormap.java b/src/main/java/plugins/tprovoost/sequenceblocks/infos/CreateLinearColormap.java
similarity index 100%
rename from src/plugins/tprovoost/sequenceblocks/infos/CreateLinearColormap.java
rename to src/main/java/plugins/tprovoost/sequenceblocks/infos/CreateLinearColormap.java
diff --git a/src/plugins/tprovoost/sequenceblocks/infos/Dimensions.java b/src/main/java/plugins/tprovoost/sequenceblocks/infos/Dimensions.java
similarity index 100%
rename from src/plugins/tprovoost/sequenceblocks/infos/Dimensions.java
rename to src/main/java/plugins/tprovoost/sequenceblocks/infos/Dimensions.java
diff --git a/src/plugins/tprovoost/sequenceblocks/infos/EzVarColormap.java b/src/main/java/plugins/tprovoost/sequenceblocks/infos/EzVarColormap.java
similarity index 100%
rename from src/plugins/tprovoost/sequenceblocks/infos/EzVarColormap.java
rename to src/main/java/plugins/tprovoost/sequenceblocks/infos/EzVarColormap.java
diff --git a/src/plugins/tprovoost/sequenceblocks/infos/GetChannelName.java b/src/main/java/plugins/tprovoost/sequenceblocks/infos/GetChannelName.java
similarity index 100%
rename from src/plugins/tprovoost/sequenceblocks/infos/GetChannelName.java
rename to src/main/java/plugins/tprovoost/sequenceblocks/infos/GetChannelName.java
diff --git a/src/plugins/tprovoost/sequenceblocks/infos/GetChannelsName.java b/src/main/java/plugins/tprovoost/sequenceblocks/infos/GetChannelsName.java
similarity index 100%
rename from src/plugins/tprovoost/sequenceblocks/infos/GetChannelsName.java
rename to src/main/java/plugins/tprovoost/sequenceblocks/infos/GetChannelsName.java
diff --git a/src/plugins/tprovoost/sequenceblocks/infos/GetColormap.java b/src/main/java/plugins/tprovoost/sequenceblocks/infos/GetColormap.java
similarity index 100%
rename from src/plugins/tprovoost/sequenceblocks/infos/GetColormap.java
rename to src/main/java/plugins/tprovoost/sequenceblocks/infos/GetColormap.java
diff --git a/src/plugins/tprovoost/sequenceblocks/infos/GetColormaps.java b/src/main/java/plugins/tprovoost/sequenceblocks/infos/GetColormaps.java
similarity index 100%
rename from src/plugins/tprovoost/sequenceblocks/infos/GetColormaps.java
rename to src/main/java/plugins/tprovoost/sequenceblocks/infos/GetColormaps.java
diff --git a/src/plugins/tprovoost/sequenceblocks/infos/GetDataType.java b/src/main/java/plugins/tprovoost/sequenceblocks/infos/GetDataType.java
similarity index 100%
rename from src/plugins/tprovoost/sequenceblocks/infos/GetDataType.java
rename to src/main/java/plugins/tprovoost/sequenceblocks/infos/GetDataType.java
diff --git a/src/plugins/tprovoost/sequenceblocks/infos/GetFileName.java b/src/main/java/plugins/tprovoost/sequenceblocks/infos/GetFileName.java
similarity index 97%
rename from src/plugins/tprovoost/sequenceblocks/infos/GetFileName.java
rename to src/main/java/plugins/tprovoost/sequenceblocks/infos/GetFileName.java
index 2bf3699ee50a8651b20df613489457db5bc6e286..477a91549d9c19cffc6ad3aa69f178a3ca2b3cc5 100644
--- a/src/plugins/tprovoost/sequenceblocks/infos/GetFileName.java
+++ b/src/main/java/plugins/tprovoost/sequenceblocks/infos/GetFileName.java
@@ -42,7 +42,7 @@ public class GetFileName extends Plugin implements SequenceBlock, PluginBundled
             result = FileUtil.getFileName(result);
         // remove extension ?
         if (!withExtension.getValue().booleanValue())
-            result = FileUtil.setExtension(result, "");
+            FileUtil.setExtension(result, "");
 
         filename.setValue(result);
     }
diff --git a/src/plugins/tprovoost/sequenceblocks/infos/GetMetaData.java b/src/main/java/plugins/tprovoost/sequenceblocks/infos/GetMetaData.java
similarity index 100%
rename from src/plugins/tprovoost/sequenceblocks/infos/GetMetaData.java
rename to src/main/java/plugins/tprovoost/sequenceblocks/infos/GetMetaData.java
diff --git a/src/plugins/tprovoost/sequenceblocks/infos/GetName.java b/src/main/java/plugins/tprovoost/sequenceblocks/infos/GetName.java
similarity index 100%
rename from src/plugins/tprovoost/sequenceblocks/infos/GetName.java
rename to src/main/java/plugins/tprovoost/sequenceblocks/infos/GetName.java
diff --git a/src/plugins/tprovoost/sequenceblocks/infos/GetOutputFilename.java b/src/main/java/plugins/tprovoost/sequenceblocks/infos/GetOutputFilename.java
similarity index 100%
rename from src/plugins/tprovoost/sequenceblocks/infos/GetOutputFilename.java
rename to src/main/java/plugins/tprovoost/sequenceblocks/infos/GetOutputFilename.java
diff --git a/src/plugins/tprovoost/sequenceblocks/infos/GetResolution.java b/src/main/java/plugins/tprovoost/sequenceblocks/infos/GetResolution.java
similarity index 100%
rename from src/plugins/tprovoost/sequenceblocks/infos/GetResolution.java
rename to src/main/java/plugins/tprovoost/sequenceblocks/infos/GetResolution.java
diff --git a/src/plugins/tprovoost/sequenceblocks/infos/GetRoisAsRegion.java b/src/main/java/plugins/tprovoost/sequenceblocks/infos/GetRoisAsRegion.java
similarity index 100%
rename from src/plugins/tprovoost/sequenceblocks/infos/GetRoisAsRegion.java
rename to src/main/java/plugins/tprovoost/sequenceblocks/infos/GetRoisAsRegion.java
diff --git a/src/plugins/tprovoost/sequenceblocks/infos/ReadMetadata.java b/src/main/java/plugins/tprovoost/sequenceblocks/infos/ReadMetadata.java
similarity index 100%
rename from src/plugins/tprovoost/sequenceblocks/infos/ReadMetadata.java
rename to src/main/java/plugins/tprovoost/sequenceblocks/infos/ReadMetadata.java
diff --git a/src/plugins/tprovoost/sequenceblocks/infos/SetChannelName.java b/src/main/java/plugins/tprovoost/sequenceblocks/infos/SetChannelName.java
similarity index 100%
rename from src/plugins/tprovoost/sequenceblocks/infos/SetChannelName.java
rename to src/main/java/plugins/tprovoost/sequenceblocks/infos/SetChannelName.java
diff --git a/src/plugins/tprovoost/sequenceblocks/infos/SetChannelsName.java b/src/main/java/plugins/tprovoost/sequenceblocks/infos/SetChannelsName.java
similarity index 100%
rename from src/plugins/tprovoost/sequenceblocks/infos/SetChannelsName.java
rename to src/main/java/plugins/tprovoost/sequenceblocks/infos/SetChannelsName.java
diff --git a/src/plugins/tprovoost/sequenceblocks/infos/SetColormap.java b/src/main/java/plugins/tprovoost/sequenceblocks/infos/SetColormap.java
similarity index 100%
rename from src/plugins/tprovoost/sequenceblocks/infos/SetColormap.java
rename to src/main/java/plugins/tprovoost/sequenceblocks/infos/SetColormap.java
diff --git a/src/plugins/tprovoost/sequenceblocks/infos/SetColormaps.java b/src/main/java/plugins/tprovoost/sequenceblocks/infos/SetColormaps.java
similarity index 100%
rename from src/plugins/tprovoost/sequenceblocks/infos/SetColormaps.java
rename to src/main/java/plugins/tprovoost/sequenceblocks/infos/SetColormaps.java
diff --git a/src/plugins/tprovoost/sequenceblocks/infos/SetName.java b/src/main/java/plugins/tprovoost/sequenceblocks/infos/SetName.java
similarity index 100%
rename from src/plugins/tprovoost/sequenceblocks/infos/SetName.java
rename to src/main/java/plugins/tprovoost/sequenceblocks/infos/SetName.java
diff --git a/src/plugins/tprovoost/sequenceblocks/infos/SetResolution.java b/src/main/java/plugins/tprovoost/sequenceblocks/infos/SetResolution.java
similarity index 100%
rename from src/plugins/tprovoost/sequenceblocks/infos/SetResolution.java
rename to src/main/java/plugins/tprovoost/sequenceblocks/infos/SetResolution.java
diff --git a/src/plugins/tprovoost/sequenceblocks/infos/VarColormap.java b/src/main/java/plugins/tprovoost/sequenceblocks/infos/VarColormap.java
similarity index 97%
rename from src/plugins/tprovoost/sequenceblocks/infos/VarColormap.java
rename to src/main/java/plugins/tprovoost/sequenceblocks/infos/VarColormap.java
index d1776836e52a74e0452f8cc35bfb7b1add7c1203..017f8b950f6b668f493e16b8085eebd77cd6913a 100644
--- a/src/plugins/tprovoost/sequenceblocks/infos/VarColormap.java
+++ b/src/main/java/plugins/tprovoost/sequenceblocks/infos/VarColormap.java
@@ -50,7 +50,7 @@ public class VarColormap extends Var<IcyColorMap>
         // create the var editor (combo box type here)
         final ComboBox<IcyColorMap> result = new ComboBox<IcyColorMap>(this);
         // get the editor component
-        final JComboBox<?> combo = result.getEditorComponent();
+        final JComboBox combo = result.getEditorComponent();
         // and set a specific renderer
         combo.setRenderer(new ColormapComboBoxRenderer(combo));
 
diff --git a/src/plugins/tprovoost/sequenceblocks/loop/SequenceChannelBatch.java b/src/main/java/plugins/tprovoost/sequenceblocks/loop/SequenceChannelBatch.java
similarity index 92%
rename from src/plugins/tprovoost/sequenceblocks/loop/SequenceChannelBatch.java
rename to src/main/java/plugins/tprovoost/sequenceblocks/loop/SequenceChannelBatch.java
index 763ccaa66f8f588bbfdb8c9077948077494654e1..f227dcdf5f39c9831fca6562ccaf1e5788b66547 100644
--- a/src/plugins/tprovoost/sequenceblocks/loop/SequenceChannelBatch.java
+++ b/src/main/java/plugins/tprovoost/sequenceblocks/loop/SequenceChannelBatch.java
@@ -17,10 +17,15 @@ import plugins.tprovoost.sequenceblocks.SequenceBlocks;
  */
 public class SequenceChannelBatch extends Batch implements SequenceBlock, PluginLibrary, PluginBundled
 {
-    // important to not initialize here (even with null) and create them in getBatchSource() and getBatchElement()
+    // important to not initialize and create them in getBatchSource() and getBatchElement()
     protected VarSequence inputSequence;
     protected VarSequence element;
 
+    public SequenceChannelBatch()
+    {
+        super();
+    }
+
     @Override
     public VarSequence getBatchSource()
     {
diff --git a/src/plugins/tprovoost/sequenceblocks/loop/SequenceFileImporterBatch.java b/src/main/java/plugins/tprovoost/sequenceblocks/loop/SequenceFileImporterBatch.java
similarity index 63%
rename from src/plugins/tprovoost/sequenceblocks/loop/SequenceFileImporterBatch.java
rename to src/main/java/plugins/tprovoost/sequenceblocks/loop/SequenceFileImporterBatch.java
index 48ef8fb78bc0c06d0580986a67f365c3b701a6e0..782c76cf22a1fcc65214f96af01bd64148f79d4c 100644
--- a/src/plugins/tprovoost/sequenceblocks/loop/SequenceFileImporterBatch.java
+++ b/src/main/java/plugins/tprovoost/sequenceblocks/loop/SequenceFileImporterBatch.java
@@ -1,15 +1,11 @@
 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;
@@ -21,10 +17,9 @@ import plugins.tprovoost.sequenceblocks.importer.PositionedSequenceFileImporter;
  */
 public abstract class SequenceFileImporterBatch extends Batch implements SequenceBlock, PluginLibrary, PluginBundled
 {
-    // important to not initialize here (even with null) and create them in getBatchSource() and getBatchElement()
+    // important to not initialize and create them in getBatchSource() and getBatchElement()
     protected Var<PositionedSequenceFileImporter> positionedImporter;
     protected Var<PositionedSequenceFileImporter> element;
-    protected VarInteger series;
 
     // internal
     protected int limit;
@@ -63,42 +58,8 @@ public abstract class SequenceFileImporterBatch extends Batch implements Sequenc
         if (imp.getOpened() == null)
             throw new VarException(positionedImporter, "Importer is not opened !");
 
-        // create new positioned importer for element initialization
-        final PositionedSequenceFileImporter pi = new PositionedSequenceFileImporter(value);
-
-        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);
-
-        // lazy creation
-        if (series == null)
-            series = new VarInteger("Series", -1);
-
-        inputMap.add("series", series);
-    }
-
-    @Override
-    public void declareLoopVariables(List<Var<?>> loopVariables)
-    {
-        // need to be called after
-        super.declareLoopVariables(loopVariables);
-
-        // lazy creation
-        if (series == null)
-            series = new VarInteger("Series", -1);
-
-        loopVariables.add(series);
+        // init element with a copy of current positioned importer
+        element.setValue(new PositionedSequenceFileImporter(value));
     }
 
     @Override
diff --git a/src/plugins/tprovoost/sequenceblocks/loop/SequenceFileImporterChannelBatch.java b/src/main/java/plugins/tprovoost/sequenceblocks/loop/SequenceFileImporterChannelBatch.java
similarity index 91%
rename from src/plugins/tprovoost/sequenceblocks/loop/SequenceFileImporterChannelBatch.java
rename to src/main/java/plugins/tprovoost/sequenceblocks/loop/SequenceFileImporterChannelBatch.java
index afc3b0405731be0aab4532d1fec43677f797bbe9..46640c56371c0c1eade6faae2c6d3a23d531ce35 100644
--- a/src/plugins/tprovoost/sequenceblocks/loop/SequenceFileImporterChannelBatch.java
+++ b/src/main/java/plugins/tprovoost/sequenceblocks/loop/SequenceFileImporterChannelBatch.java
@@ -17,8 +17,7 @@ public class SequenceFileImporterChannelBatch extends SequenceFileImporterBatch
     {
         super.initializeLoop();
 
-        // can take position from element which should have been initialized here
-        final PositionedSequenceFileImporter pi = element.getValue();
+        final PositionedSequenceFileImporter pi = positionedImporter.getValue();
 
         try
         {
diff --git a/src/plugins/tprovoost/sequenceblocks/loop/SequenceFileImporterFrameBatch.java b/src/main/java/plugins/tprovoost/sequenceblocks/loop/SequenceFileImporterFrameBatch.java
similarity index 91%
rename from src/plugins/tprovoost/sequenceblocks/loop/SequenceFileImporterFrameBatch.java
rename to src/main/java/plugins/tprovoost/sequenceblocks/loop/SequenceFileImporterFrameBatch.java
index ba8bf1066324d59de57918deaf474eb654dae72b..e91d5f4ff98aba478bb7aa82b97957726f288141 100644
--- a/src/plugins/tprovoost/sequenceblocks/loop/SequenceFileImporterFrameBatch.java
+++ b/src/main/java/plugins/tprovoost/sequenceblocks/loop/SequenceFileImporterFrameBatch.java
@@ -17,8 +17,7 @@ public class SequenceFileImporterFrameBatch extends SequenceFileImporterBatch
     {
         super.initializeLoop();
 
-        // can take position from element which should have been initialized here
-        final PositionedSequenceFileImporter pi = element.getValue();
+        final PositionedSequenceFileImporter pi = positionedImporter.getValue();
 
         try
         {
diff --git a/src/plugins/tprovoost/sequenceblocks/loop/SequenceFileImporterRegionBatch.java b/src/main/java/plugins/tprovoost/sequenceblocks/loop/SequenceFileImporterRegionBatch.java
similarity index 94%
rename from src/plugins/tprovoost/sequenceblocks/loop/SequenceFileImporterRegionBatch.java
rename to src/main/java/plugins/tprovoost/sequenceblocks/loop/SequenceFileImporterRegionBatch.java
index 05f05183d8836780a5e821f1701ded158786fcc3..0bbd8bb263a02730c16eb1c2aa4fac2fd7dad8cd 100644
--- a/src/plugins/tprovoost/sequenceblocks/loop/SequenceFileImporterRegionBatch.java
+++ b/src/main/java/plugins/tprovoost/sequenceblocks/loop/SequenceFileImporterRegionBatch.java
@@ -24,7 +24,6 @@ import plugins.tprovoost.sequenceblocks.importer.PositionedSequenceFileImporter;
  */
 public class SequenceFileImporterRegionBatch extends SequenceFileImporterBatch
 {
-    // important to not initialize here (even with null) and create them in getBatchSource() and getBatchElement()
     protected VarROIArray rois;
     protected VarInteger inputRoisResolution;
     protected VarInteger inputRoisMargin;
@@ -35,8 +34,7 @@ public class SequenceFileImporterRegionBatch extends SequenceFileImporterBatch
     {
         super.initializeLoop();
 
-        // can take position from element which should have been initialized here
-        final PositionedSequenceFileImporter pi = element.getValue();
+        final PositionedSequenceFileImporter pi = positionedImporter.getValue();
 
         // can iterate over XY dimension ?
         if ((pi.xyRegion == null) && (rois.getValue() != null))
@@ -116,8 +114,6 @@ public class SequenceFileImporterRegionBatch extends SequenceFileImporterBatch
     @Override
     public void declareLoopVariables(List<Var<?>> loopVariables)
     {
-        super.declareLoopVariables(loopVariables);
-
         // lazy creation
         if (rois == null)
             rois = new VarROIArray("XY regions (ROIs)");
@@ -129,6 +125,8 @@ public class SequenceFileImporterRegionBatch extends SequenceFileImporterBatch
         loopVariables.add(rois);
         loopVariables.add(inputRoisResolution);
         loopVariables.add(inputRoisMargin);
+
+        super.declareLoopVariables(loopVariables);
     }
 
     @Override
diff --git a/src/main/java/plugins/tprovoost/sequenceblocks/loop/SequenceFileImporterSeriesBatch.java b/src/main/java/plugins/tprovoost/sequenceblocks/loop/SequenceFileImporterSeriesBatch.java
new file mode 100644
index 0000000000000000000000000000000000000000..255c14ceb98dbccc3ec8b09e5a4db47f420a240f
--- /dev/null
+++ b/src/main/java/plugins/tprovoost/sequenceblocks/loop/SequenceFileImporterSeriesBatch.java
@@ -0,0 +1,48 @@
+package plugins.tprovoost.sequenceblocks.loop;
+
+import icy.file.SequenceFileImporter;
+import icy.sequence.MetaDataUtil;
+import plugins.adufour.vars.util.VarException;
+import plugins.tprovoost.sequenceblocks.importer.PositionedSequenceFileImporter;
+
+/**
+ * Simple batch loop to iterate over all series from the specified opened {@link SequenceFileImporter} object.
+ * 
+ * @author Stephane
+ */
+public class SequenceFileImporterSeriesBatch extends SequenceFileImporterBatch
+{
+    @Override
+    public void initializeLoop()
+    {
+        super.initializeLoop();
+
+        final PositionedSequenceFileImporter pi = positionedImporter.getValue();
+
+        try
+        {
+            // force series iteration as by default series is set to 0
+            limit = MetaDataUtil.getNumSeries(pi.getMetadata());
+        }
+        catch (Exception e)
+        {
+            throw new VarException(element,
+                    "Error while initializing SequenceFileImporter series batch: " + e.getMessage());
+        }
+    }
+
+    @Override
+    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());
+    }
+
+    @Override
+    public boolean isStopConditionReached()
+    {
+        return getIterationCounter().getValue().intValue() >= limit;
+    }
+}
diff --git a/src/plugins/tprovoost/sequenceblocks/loop/SequenceFileImporterSliceBatch.java b/src/main/java/plugins/tprovoost/sequenceblocks/loop/SequenceFileImporterSliceBatch.java
similarity index 91%
rename from src/plugins/tprovoost/sequenceblocks/loop/SequenceFileImporterSliceBatch.java
rename to src/main/java/plugins/tprovoost/sequenceblocks/loop/SequenceFileImporterSliceBatch.java
index 93a5514285f7563ec343e5d173322757dc65f535..061b76de2ce25f577b22617ab6d0e5ec2b1049a7 100644
--- a/src/plugins/tprovoost/sequenceblocks/loop/SequenceFileImporterSliceBatch.java
+++ b/src/main/java/plugins/tprovoost/sequenceblocks/loop/SequenceFileImporterSliceBatch.java
@@ -17,8 +17,7 @@ public class SequenceFileImporterSliceBatch extends SequenceFileImporterBatch
     {
         super.initializeLoop();
 
-        // can take position from element which should have been initialized here
-        final PositionedSequenceFileImporter pi = element.getValue();
+        final PositionedSequenceFileImporter pi = positionedImporter.getValue();
 
         try
         {
diff --git a/src/plugins/tprovoost/sequenceblocks/loop/SequenceFileImporterTileBatch.java b/src/main/java/plugins/tprovoost/sequenceblocks/loop/SequenceFileImporterTileBatch.java
similarity index 68%
rename from src/plugins/tprovoost/sequenceblocks/loop/SequenceFileImporterTileBatch.java
rename to src/main/java/plugins/tprovoost/sequenceblocks/loop/SequenceFileImporterTileBatch.java
index 57d3af77dfe12a277bbc5710fe1efe70b8fcbdf8..5386fb6de960654e2274d0f96aebebc51482b1a6 100644
--- a/src/plugins/tprovoost/sequenceblocks/loop/SequenceFileImporterTileBatch.java
+++ b/src/main/java/plugins/tprovoost/sequenceblocks/loop/SequenceFileImporterTileBatch.java
@@ -6,10 +6,7 @@ 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;
 
@@ -20,19 +17,25 @@ import plugins.tprovoost.sequenceblocks.importer.PositionedSequenceFileImporter;
  */
 public class SequenceFileImporterTileBatch extends SequenceFileImporterBatch
 {
-    // important to not initialize here (even with null) and create them in getBatchSource() and getBatchElement()
-    protected VarInteger tileW;
-    protected VarInteger tileH;
+    protected final VarInteger tileW;
+    protected final 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();
 
-        // can take position from element which should have been initialized here
-        final PositionedSequenceFileImporter pi = element.getValue();
+        final PositionedSequenceFileImporter pi = positionedImporter.getValue();
 
         // can iterate over XY dimension ?
         if (pi.xyRegion == null)
@@ -60,7 +63,7 @@ public class SequenceFileImporterTileBatch extends SequenceFileImporterBatch
             }
             catch (Exception e)
             {
-                throw new VarException(element,
+                throw new VarException(positionedImporter,
                         "Error while initializing SequenceFileImporter tile batch: " + e.getMessage());
             }
 
@@ -85,37 +88,6 @@ 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)", -1);
-        if (tileH == null)
-            tileH = new VarInteger("Tile height (-1 = auto)", -1);
-
-        inputMap.add("tileWidht", tileW);
-        inputMap.add("tileHeight", tileH);
-    }
-
-    @Override
-    public void declareLoopVariables(List<Var<?>> loopVariables)
-    {
-        // need to be called after
-        super.declareLoopVariables(loopVariables);
-
-        // lazy creation
-        if (tileW == null)
-            tileW = new VarInteger("Tile width (-1 = auto)", -1);
-        if (tileH == null)
-            tileH = new VarInteger("Tile height (-1 = auto)", -1);
-
-        loopVariables.add(tileW);
-        loopVariables.add(tileH);
-    }
 
     @Override
     public void beforeIteration()
diff --git a/src/plugins/tprovoost/sequenceblocks/loop/SequenceFrameBatch.java b/src/main/java/plugins/tprovoost/sequenceblocks/loop/SequenceFrameBatch.java
similarity index 91%
rename from src/plugins/tprovoost/sequenceblocks/loop/SequenceFrameBatch.java
rename to src/main/java/plugins/tprovoost/sequenceblocks/loop/SequenceFrameBatch.java
index 0737a24c90b4b4c36ab9692f875098398f82614f..d06b0a6c91a7b520f7eb72e5bdeb9e26a14cf6e2 100644
--- a/src/plugins/tprovoost/sequenceblocks/loop/SequenceFrameBatch.java
+++ b/src/main/java/plugins/tprovoost/sequenceblocks/loop/SequenceFrameBatch.java
@@ -16,7 +16,7 @@ import plugins.tprovoost.sequenceblocks.SequenceBlocks;
  */
 public class SequenceFrameBatch extends Batch implements PluginLibrary, PluginBundled
 {
-    // important to not initialize here (even with null) and create them in getBatchSource() and getBatchElement()
+    // important to not initialize and create them in getBatchSource() and getBatchElement()
     protected VarSequence inputSequence;
     protected VarSequence element;
 
@@ -40,7 +40,7 @@ public class SequenceFrameBatch extends Batch implements PluginLibrary, PluginBu
     {
         // initialize element if needed
         if (element == null)
-            element = new VarSequence("Frame Sequence", null);
+            element = new VarSequence("Channel Sequence", null);
 
         return element;
     }
diff --git a/src/plugins/tprovoost/sequenceblocks/loop/SequenceRegionBatch.java b/src/main/java/plugins/tprovoost/sequenceblocks/loop/SequenceRegionBatch.java
similarity index 70%
rename from src/plugins/tprovoost/sequenceblocks/loop/SequenceRegionBatch.java
rename to src/main/java/plugins/tprovoost/sequenceblocks/loop/SequenceRegionBatch.java
index 4612efc37d930d0a0944c51631c5f7b009bf7ac3..548ba91b6ad96f97bda809d1c73ab7538d72fd88 100644
--- a/src/plugins/tprovoost/sequenceblocks/loop/SequenceRegionBatch.java
+++ b/src/main/java/plugins/tprovoost/sequenceblocks/loop/SequenceRegionBatch.java
@@ -4,7 +4,6 @@ import java.util.List;
 
 import icy.plugin.interface_.PluginBundled;
 import icy.plugin.interface_.PluginLibrary;
-import icy.roi.ROI;
 import icy.sequence.Sequence;
 import icy.sequence.SequenceUtil;
 import plugins.adufour.blocks.lang.Batch;
@@ -23,55 +22,36 @@ import plugins.tprovoost.sequenceblocks.SequenceBlocks;
  */
 public class SequenceRegionBatch extends Batch implements SequenceBlock, PluginLibrary, PluginBundled
 {
-    // important to not initialize here (even with null) and create them in getBatchSource() and getBatchElement()
+    // important to not initialize and create them in getBatchSource() and getBatchElement()
     protected VarSequence inputSequence;
     protected VarSequence element;
-    protected VarROIArray rois;
-    protected VarROIArray currentRoi;
+    protected final VarROIArray rois;
 
     public SequenceRegionBatch()
     {
         super();
-    }
-
-    @Override
-    public VarROIArray getBatchSource()
-    {
-        if (rois == null)
-            rois = new VarROIArray("ROI(s)");
-
-        return rois;
-    }
-
-    @Override
-    public VarSequence getBatchElement()
-    {
-        if (element == null)
-            element = new VarSequence("Region Sequence", null);
 
-        return element;
+        rois = new VarROIArray("ROI(s)");
     }
 
     @Override
-    public void declareInput(VarList inputMap)
+    public VarSequence getBatchSource()
     {
-        super.declareInput(inputMap);
-
+        // initialize variable if needed
         if (inputSequence == null)
             inputSequence = new VarSequence("Sequence", null);
 
-        inputMap.add(inputSequence.getName(), inputSequence);
+        return inputSequence;
     }
 
     @Override
-    public void declareOutput(VarList outputMap)
+    public VarSequence getBatchElement()
     {
-        super.declareOutput(outputMap);
-
-        if (currentRoi == null)
-            currentRoi = new VarROIArray("Current ROI");
+        // initialize element if needed
+        if (element == null)
+            element = new VarSequence("Channel Sequence", null);
 
-        outputMap.add(currentRoi.getName(), currentRoi);
+        return element;
     }
 
     @Override
@@ -90,10 +70,8 @@ public class SequenceRegionBatch extends Batch implements SequenceBlock, PluginL
     public void beforeIteration()
     {
         // set result in element
-        final ROI roi = rois.getValue()[getIterationCounter().getValue().intValue()];
-        
-        element.setValue(SequenceUtil.getSubSequence(inputSequence.getValue(), roi));
-        currentRoi.setValue(new ROI[] {roi});
+        element.setValue(SequenceUtil.getSubSequence(inputSequence.getValue(),
+                rois.getValue()[getIterationCounter().getValue().intValue()]));
     }
 
     @Override
@@ -102,12 +80,20 @@ public class SequenceRegionBatch extends Batch implements SequenceBlock, PluginL
         return getIterationCounter().getValue().intValue() >= rois.getValue().length;
     }
 
+    @Override
+    public void declareInput(VarList inputMap)
+    {
+        super.declareInput(inputMap);
+
+        inputMap.add("ROIs", rois);
+    }
+
     @Override
     public void declareLoopVariables(List<Var<?>> loopVariables)
     {
         super.declareLoopVariables(loopVariables);
-        loopVariables.add(inputSequence);
-        loopVariables.add(currentRoi);
+
+        loopVariables.add(rois);
     }
 
     @Override
diff --git a/src/plugins/tprovoost/sequenceblocks/loop/SequenceSliceBatch.java b/src/main/java/plugins/tprovoost/sequenceblocks/loop/SequenceSliceBatch.java
similarity index 91%
rename from src/plugins/tprovoost/sequenceblocks/loop/SequenceSliceBatch.java
rename to src/main/java/plugins/tprovoost/sequenceblocks/loop/SequenceSliceBatch.java
index e8c2003095f9ea416acb141df9c53a3fed7ed56d..d1bc6897915d2fb04e82c3327e30e83da2c8b802 100644
--- a/src/plugins/tprovoost/sequenceblocks/loop/SequenceSliceBatch.java
+++ b/src/main/java/plugins/tprovoost/sequenceblocks/loop/SequenceSliceBatch.java
@@ -17,7 +17,7 @@ import plugins.tprovoost.sequenceblocks.SequenceBlocks;
  */
 public class SequenceSliceBatch extends Batch implements SequenceBlock, PluginLibrary, PluginBundled
 {
-    // important to not initialize here (even with null) and create them in getBatchSource() and getBatchElement()
+    // important to not initialize and create them in getBatchSource() and getBatchElement()
     protected VarSequence inputSequence;
     protected VarSequence element;
 
@@ -36,7 +36,7 @@ public class SequenceSliceBatch extends Batch implements SequenceBlock, PluginLi
     {
         // initialize element if needed
         if (element == null)
-            element = new VarSequence("Slice Sequence", null);
+            element = new VarSequence("Channel Sequence", null);
 
         return element;
     }
diff --git a/src/plugins/tprovoost/sequenceblocks/op/AdditiveFillSequence.java b/src/main/java/plugins/tprovoost/sequenceblocks/op/AdditiveFillSequence.java
similarity index 100%
rename from src/plugins/tprovoost/sequenceblocks/op/AdditiveFillSequence.java
rename to src/main/java/plugins/tprovoost/sequenceblocks/op/AdditiveFillSequence.java
diff --git a/src/plugins/tprovoost/sequenceblocks/op/FillInnerSequence.java b/src/main/java/plugins/tprovoost/sequenceblocks/op/FillInnerSequence.java
similarity index 100%
rename from src/plugins/tprovoost/sequenceblocks/op/FillInnerSequence.java
rename to src/main/java/plugins/tprovoost/sequenceblocks/op/FillInnerSequence.java
diff --git a/src/plugins/tprovoost/sequenceblocks/op/FillOuterSequence.java b/src/main/java/plugins/tprovoost/sequenceblocks/op/FillOuterSequence.java
similarity index 100%
rename from src/plugins/tprovoost/sequenceblocks/op/FillOuterSequence.java
rename to src/main/java/plugins/tprovoost/sequenceblocks/op/FillOuterSequence.java
diff --git a/src/plugins/tprovoost/sequenceblocks/remove/RemoveAllRois.java b/src/main/java/plugins/tprovoost/sequenceblocks/remove/RemoveAllRois.java
similarity index 100%
rename from src/plugins/tprovoost/sequenceblocks/remove/RemoveAllRois.java
rename to src/main/java/plugins/tprovoost/sequenceblocks/remove/RemoveAllRois.java
diff --git a/src/plugins/tprovoost/sequenceblocks/remove/RemoveChannel.java b/src/main/java/plugins/tprovoost/sequenceblocks/remove/RemoveChannel.java
similarity index 100%
rename from src/plugins/tprovoost/sequenceblocks/remove/RemoveChannel.java
rename to src/main/java/plugins/tprovoost/sequenceblocks/remove/RemoveChannel.java
diff --git a/src/plugins/tprovoost/sequenceblocks/remove/RemoveFrame.java b/src/main/java/plugins/tprovoost/sequenceblocks/remove/RemoveFrame.java
similarity index 100%
rename from src/plugins/tprovoost/sequenceblocks/remove/RemoveFrame.java
rename to src/main/java/plugins/tprovoost/sequenceblocks/remove/RemoveFrame.java
diff --git a/src/plugins/tprovoost/sequenceblocks/remove/RemoveOverlays.java b/src/main/java/plugins/tprovoost/sequenceblocks/remove/RemoveOverlays.java
similarity index 100%
rename from src/plugins/tprovoost/sequenceblocks/remove/RemoveOverlays.java
rename to src/main/java/plugins/tprovoost/sequenceblocks/remove/RemoveOverlays.java
diff --git a/src/plugins/tprovoost/sequenceblocks/remove/RemoveRois.java b/src/main/java/plugins/tprovoost/sequenceblocks/remove/RemoveRois.java
similarity index 100%
rename from src/plugins/tprovoost/sequenceblocks/remove/RemoveRois.java
rename to src/main/java/plugins/tprovoost/sequenceblocks/remove/RemoveRois.java
diff --git a/src/plugins/tprovoost/sequenceblocks/remove/RemoveSlice.java b/src/main/java/plugins/tprovoost/sequenceblocks/remove/RemoveSlice.java
similarity index 100%
rename from src/plugins/tprovoost/sequenceblocks/remove/RemoveSlice.java
rename to src/main/java/plugins/tprovoost/sequenceblocks/remove/RemoveSlice.java
diff --git a/res/SequenceBlocks.xml b/src/main/resources/SequenceBlocks.xml
similarity index 100%
rename from res/SequenceBlocks.xml
rename to src/main/resources/SequenceBlocks.xml
diff --git a/res/SequenceBlocks_icon.png b/src/main/resources/SequenceBlocks_icon.png
similarity index 100%
rename from res/SequenceBlocks_icon.png
rename to src/main/resources/SequenceBlocks_icon.png
diff --git a/src/plugins/tprovoost/sequenceblocks/loop/SequenceFileImporterSeriesBatch.java b/src/plugins/tprovoost/sequenceblocks/loop/SequenceFileImporterSeriesBatch.java
deleted file mode 100644
index ffb8e57b7eec5d8a0c220be797cf52e763cae911..0000000000000000000000000000000000000000
--- a/src/plugins/tprovoost/sequenceblocks/loop/SequenceFileImporterSeriesBatch.java
+++ /dev/null
@@ -1,77 +0,0 @@
-package plugins.tprovoost.sequenceblocks.loop;
-
-import java.util.List;
-
-import icy.file.SequenceFileImporter;
-import icy.sequence.MetaDataUtil;
-import plugins.adufour.blocks.util.VarList;
-import plugins.adufour.vars.lang.Var;
-import plugins.adufour.vars.util.VarException;
-import plugins.tprovoost.sequenceblocks.importer.PositionedSequenceFileImporter;
-
-/**
- * Simple batch loop to iterate over all series from the specified opened {@link SequenceFileImporter} object.
- * 
- * @author Stephane
- */
-public class SequenceFileImporterSeriesBatch extends SequenceFileImporterBatch
-{
-    @Override
-    public void initializeLoop()
-    {
-        super.initializeLoop();
-
-        // can take position from element which should have been initialized here
-        final PositionedSequenceFileImporter pi = element.getValue();
-
-        try
-        {
-            // can iterate over S dimension ?
-            if (pi.s == -1)
-                limit = MetaDataUtil.getNumSeries(pi.getMetadata());
-            else
-                limit = 1;
-        }
-        catch (Exception e)
-        {
-            throw new VarException(element,
-                    "Error while initializing SequenceFileImporter series batch: " + e.getMessage());
-        }
-    }
-
-    @Override
-    public void declareInput(VarList inputMap)
-    {
-        super.declareInput(inputMap);
-
-        // we don't want it here
-        inputMap.remove(series);
-    }
-
-    @Override
-    public void declareLoopVariables(List<Var<?>> loopVariables)
-    {
-        super.declareLoopVariables(loopVariables);
-
-        // we don't want it here
-        loopVariables.remove(series);
-    }
-
-    @Override
-    public void beforeIteration()
-    {
-        // set current position S
-        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
-    public boolean isStopConditionReached()
-    {
-        return getIterationCounter().getValue().intValue() >= limit;
-    }
-}