From 559af6f0211c794024e9bb78cfecd9cfa8900b83 Mon Sep 17 00:00:00 2001
From: Thomas <thomas.musset@pasteur.fr>
Date: Wed, 3 Jul 2024 01:54:25 +0200
Subject: [PATCH] updated pom to v3.0.0-a.1, fix classes accordingly to new
 architecture, added icon, updated .gitignore

---
 .gitignore                                    | 42 ++++++++++++---
 pom.xml                                       | 14 +++--
 .../sequenceblocks/SequenceBlocks.java        | 13 +++--
 .../sequenceblocks/add/AddOverlays.java       | 29 +++++-----
 .../tprovoost/sequenceblocks/add/AddRois.java | 27 +++++-----
 .../sequenceblocks/convert/ConvertColor.java  | 54 +++++++++----------
 .../sequenceblocks/convert/ConvertStack.java  | 29 +++++-----
 .../sequenceblocks/convert/ConvertType.java   | 31 +++++------
 .../sequenceblocks/convert/Resize.java        | 32 ++++++-----
 .../creation/CombineChannels.java             | 29 +++++-----
 .../creation/CreateSequence.java              | 29 +++++-----
 .../creation/DuplicateSequence.java           | 29 +++++-----
 .../sequenceblocks/extract/CropCZT.java       | 45 ++++++++++------
 .../sequenceblocks/extract/CropSequence.java  | 41 +++++++-------
 .../extract/ExtractChannel.java               | 29 +++++-----
 .../extract/ExtractMultiChannels.java         | 29 +++++-----
 .../sequenceblocks/extract/ExtractSlice.java  | 29 +++++-----
 .../sequenceblocks/extract/ExtractTime.java   | 29 +++++-----
 .../sequenceblocks/files/IsFileValid.java     | 29 +++++-----
 .../sequenceblocks/files/LoadMetadata.java    | 31 +++++------
 .../sequenceblocks/files/LoadSequence.java    | 29 +++++-----
 .../sequenceblocks/files/LoadSubSequence.java | 31 +++++------
 .../sequenceblocks/files/SaveMetadata.java    | 27 +++++-----
 .../sequenceblocks/files/SaveSequence.java    | 33 ++++++------
 .../sequenceblocks/images/AddImage.java       | 27 +++++-----
 .../sequenceblocks/images/AsImageArray.java   | 29 +++++-----
 .../sequenceblocks/images/GetImage.java       | 29 +++++-----
 .../sequenceblocks/images/RemoveImage.java    | 25 ++++-----
 .../sequenceblocks/images/SetImage.java       | 27 +++++-----
 .../PositionedSequenceFileImporter.java       | 29 ++++++----
 .../importer/SequenceFileImporterClose.java   | 23 ++++----
 .../SequenceFileImporterGetImage.java         | 31 +++++------
 .../SequenceFileImporterGetMetadata.java      | 29 +++++-----
 .../SequenceFileImporterGetThumbnail.java     | 29 +++++-----
 .../SequenceFileImporterGetTileSize.java      | 27 +++++-----
 .../SequenceFileImporterLoadSequence.java     | 31 +++++------
 .../importer/SequenceFileImporterOpen.java    | 33 ++++++------
 .../infos/CreateLinearColormap.java           | 25 +++++----
 .../sequenceblocks/infos/Dimensions.java      | 27 +++++-----
 .../sequenceblocks/infos/EzVarColormap.java   |  4 +-
 .../sequenceblocks/infos/GetChannelName.java  | 26 +++++----
 .../sequenceblocks/infos/GetChannelsName.java | 26 +++++----
 .../sequenceblocks/infos/GetColormap.java     | 28 +++++-----
 .../sequenceblocks/infos/GetColormaps.java    | 28 +++++-----
 .../sequenceblocks/infos/GetDataType.java     | 30 +++++------
 .../sequenceblocks/infos/GetFileName.java     | 28 +++++-----
 .../sequenceblocks/infos/GetMetaData.java     | 28 +++++-----
 .../sequenceblocks/infos/GetName.java         | 26 +++++----
 .../infos/GetOutputFilename.java              | 28 +++++-----
 .../sequenceblocks/infos/GetResolution.java   | 28 +++++-----
 .../sequenceblocks/infos/GetRoisAsRegion.java | 47 +++++++---------
 .../infos/GetSequenceProperty.java            | 27 +++++-----
 .../sequenceblocks/infos/ReadMetadata.java    | 29 +++++-----
 .../sequenceblocks/infos/SetChannelName.java  | 26 +++++----
 .../sequenceblocks/infos/SetChannelsName.java | 24 ++++-----
 .../sequenceblocks/infos/SetColormap.java     | 26 +++++----
 .../sequenceblocks/infos/SetColormaps.java    | 24 ++++-----
 .../sequenceblocks/infos/SetName.java         | 24 ++++-----
 .../sequenceblocks/infos/SetResolution.java   | 26 +++++----
 .../infos/SetSequenceProperty.java            | 25 ++++-----
 .../sequenceblocks/infos/VarColormap.java     | 12 ++---
 .../loop/SequenceChannelBatch.java            | 22 ++++----
 .../loop/SequenceFileImporterBatch.java       | 20 +++----
 .../SequenceFileImporterChannelBatch.java     | 12 +++--
 .../loop/SequenceFileImporterFrameBatch.java  | 12 +++--
 .../loop/SequenceFileImporterRegionBatch.java | 16 +++---
 .../loop/SequenceFileImporterSeriesBatch.java | 12 +++--
 .../loop/SequenceFileImporterSliceBatch.java  | 12 +++--
 .../loop/SequenceFileImporterTileBatch.java   | 14 +++--
 .../loop/SequenceFrameBatch.java              | 22 ++++----
 .../loop/SequenceRegionBatch.java             | 24 ++++-----
 .../loop/SequenceSliceBatch.java              | 25 ++++-----
 .../op/AdditiveFillSequence.java              | 35 ++++++------
 .../sequenceblocks/op/FillInnerSequence.java  | 31 +++++------
 .../sequenceblocks/op/FillOuterSequence.java  | 41 +++++++-------
 .../sequenceblocks/remove/RemoveAllRois.java  | 27 +++++-----
 .../sequenceblocks/remove/RemoveChannel.java  | 27 +++++-----
 .../sequenceblocks/remove/RemoveFrame.java    | 27 +++++-----
 .../sequenceblocks/remove/RemoveOverlays.java | 27 +++++-----
 .../sequenceblocks/remove/RemoveRois.java     | 27 +++++-----
 .../sequenceblocks/remove/RemoveSlice.java    | 27 +++++-----
 src/main/resources/SequenceBlocks.xml         | 22 --------
 82 files changed, 1040 insertions(+), 1173 deletions(-)
 delete mode 100644 src/main/resources/SequenceBlocks.xml

diff --git a/.gitignore b/.gitignore
index 198c988..57f16fb 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,11 +1,41 @@
-bin/
+/build*
+/workspace
+setting.xml
+release/
 target/
-.settings/
+!.mvn/wrapper/maven-wrapper.jar
+!**/src/main/**/target/
+!**/src/test/**/target/
+icy.log
+
+### IntelliJ IDEA ###
 .idea/
+*.iws
 *.iml
-*.eml
-*.jar
-.project
+*.ipr
+
+### Eclipse ###
+.apt_generated
 .classpath
-export.jardesc
+.factorypath
+.project
+.settings
+.springBeans
+.sts4-cache
+
+### NetBeans ###
+/nbproject/private/
+/nbbuild/
+/dist/
+/nbdist/
+/.nb-gradle/
+build/
+!**/src/main/**/build/
+!**/src/test/**/build/
+
+### VS Code ###
+.vscode/
+
+### Mac OS ###
 **/.DS_Store
+Icon?
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index 381634a..2148e5d 100644
--- a/pom.xml
+++ b/pom.xml
@@ -7,15 +7,23 @@
     <parent>
         <groupId>org.bioimageanalysis.icy</groupId>
         <artifactId>pom-icy</artifactId>
-        <version>2.2.0</version>
+        <version>3.0.0-a.1</version>
     </parent>
 
     <artifactId>sequence-blocks</artifactId>
-    <version>3.0.0</version>
+    <version>3.0.0-a.1</version>
 
     <name>SequenceBlocks</name>
 
     <dependencies>
+        <dependency>
+            <groupId>org.bioimageanalysis.icy</groupId>
+            <artifactId>kernel-extensions</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.bioimageanalysis.icy</groupId>
+            <artifactId>ezplug</artifactId>
+        </dependency>
         <dependency>
             <groupId>org.bioimageanalysis.icy</groupId>
             <artifactId>protocols</artifactId>
@@ -25,7 +33,7 @@
     <repositories>
         <repository>
             <id>icy</id>
-            <url>https://icy-nexus.pasteur.fr/repository/Icy/</url>
+            <url>https://nexus-icy.pasteur.cloud/repository/icy/</url>
         </repository>
     </repositories>
 </project>
\ No newline at end of file
diff --git a/src/main/java/plugins/tprovoost/sequenceblocks/SequenceBlocks.java b/src/main/java/plugins/tprovoost/sequenceblocks/SequenceBlocks.java
index e99b35c..2b36e40 100644
--- a/src/main/java/plugins/tprovoost/sequenceblocks/SequenceBlocks.java
+++ b/src/main/java/plugins/tprovoost/sequenceblocks/SequenceBlocks.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010-2023. Institut Pasteur.
+ * Copyright (c) 2010-2024. Institut Pasteur.
  *
  * This file is part of Icy.
  * Icy is free software: you can redistribute it and/or modify
@@ -18,16 +18,19 @@
 
 package plugins.tprovoost.sequenceblocks;
 
-import icy.plugin.abstract_.Plugin;
-import icy.plugin.interface_.PluginLibrary;
+import org.bioimageanalysis.icy.extension.plugin.abstract_.Plugin;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginIcon;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginName;
 
 /**
  * This class is used as a main class for all the blocks contained in this
  * package. Each Block has a specified dedicated purpose. More documentation on
  * the concerned files.
  *
- * @author thomasprovoost
+ * @author Thomas Provoost
  */
-public class SequenceBlocks extends Plugin implements PluginLibrary {
+@IcyPluginName("Sequence Blocks")
+@IcyPluginIcon(path = "/SequenceBlocks_icon.png")
+public class SequenceBlocks extends Plugin {
     //
 }
diff --git a/src/main/java/plugins/tprovoost/sequenceblocks/add/AddOverlays.java b/src/main/java/plugins/tprovoost/sequenceblocks/add/AddOverlays.java
index a6702c0..a32ec9a 100644
--- a/src/main/java/plugins/tprovoost/sequenceblocks/add/AddOverlays.java
+++ b/src/main/java/plugins/tprovoost/sequenceblocks/add/AddOverlays.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010-2023. Institut Pasteur.
+ * Copyright (c) 2010-2024. Institut Pasteur.
  *
  * This file is part of Icy.
  * Icy is free software: you can redistribute it and/or modify
@@ -18,28 +18,30 @@
 
 package plugins.tprovoost.sequenceblocks.add;
 
-import icy.painter.Overlay;
-import icy.plugin.abstract_.Plugin;
-import icy.plugin.interface_.PluginBundled;
-import icy.plugin.interface_.PluginLibrary;
-import icy.sequence.Sequence;
+import org.bioimageanalysis.icy.extension.plugin.abstract_.Plugin;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginIcon;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginName;
+import org.bioimageanalysis.icy.model.overlay.Overlay;
+import org.bioimageanalysis.icy.model.sequence.Sequence;
+import org.jetbrains.annotations.NotNull;
 import plugins.adufour.blocks.tools.sequence.SequenceBlock;
 import plugins.adufour.blocks.util.VarList;
 import plugins.adufour.vars.lang.VarArray;
 import plugins.adufour.vars.lang.VarSequence;
 import plugins.adufour.vars.util.VarException;
-import plugins.tprovoost.sequenceblocks.SequenceBlocks;
 
 /**
  * Block to add one or several {@link Overlay} to a Sequence
  *
- * @author Stephane
+ * @author Stephane Dallongeville
  */
-public class AddOverlays extends Plugin implements SequenceBlock, PluginLibrary, PluginBundled {
+@IcyPluginName("Add Overlays")
+@IcyPluginIcon(path = "/SequenceBlocks_icon.png")
+public class AddOverlays extends Plugin implements SequenceBlock {
     final protected VarSequence inputSequence = new VarSequence("Sequence", null);
     final protected VarArray<Overlay> overlays = new VarArray<>("Overlay(s)", Overlay[].class, new Overlay[0]) {
         @Override
-        public String getValueAsString() {
+        public @NotNull String getValueAsString() {
             final Overlay[] value = getValue();
 
             if (value == null || value.length == 0)
@@ -70,7 +72,7 @@ public class AddOverlays extends Plugin implements SequenceBlock, PluginLibrary,
     }
 
     @Override
-    public void declareInput(final VarList inputMap) {
+    public void declareInput(final @NotNull VarList inputMap) {
         inputMap.add("sequence", inputSequence);
         inputMap.add("overlay(s)", overlays);
     }
@@ -79,9 +81,4 @@ public class AddOverlays extends Plugin implements SequenceBlock, PluginLibrary,
     public void declareOutput(final VarList outputMap) {
         //
     }
-
-    @Override
-    public String getMainPluginClassName() {
-        return SequenceBlocks.class.getName();
-    }
 }
diff --git a/src/main/java/plugins/tprovoost/sequenceblocks/add/AddRois.java b/src/main/java/plugins/tprovoost/sequenceblocks/add/AddRois.java
index 6e3417f..c519609 100644
--- a/src/main/java/plugins/tprovoost/sequenceblocks/add/AddRois.java
+++ b/src/main/java/plugins/tprovoost/sequenceblocks/add/AddRois.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010-2023. Institut Pasteur.
+ * Copyright (c) 2010-2024. Institut Pasteur.
  *
  * This file is part of Icy.
  * Icy is free software: you can redistribute it and/or modify
@@ -18,27 +18,29 @@
 
 package plugins.tprovoost.sequenceblocks.add;
 
-import icy.plugin.abstract_.Plugin;
-import icy.plugin.interface_.PluginBundled;
-import icy.plugin.interface_.PluginLibrary;
-import icy.roi.ROI;
-import icy.sequence.Sequence;
+import org.bioimageanalysis.icy.extension.plugin.abstract_.Plugin;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginIcon;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginName;
+import org.bioimageanalysis.icy.model.roi.ROI;
+import org.bioimageanalysis.icy.model.sequence.Sequence;
+import org.jetbrains.annotations.NotNull;
 import plugins.adufour.blocks.tools.sequence.SequenceBlock;
 import plugins.adufour.blocks.util.VarList;
 import plugins.adufour.vars.lang.VarBoolean;
 import plugins.adufour.vars.lang.VarROIArray;
 import plugins.adufour.vars.lang.VarSequence;
 import plugins.adufour.vars.util.VarException;
-import plugins.tprovoost.sequenceblocks.SequenceBlocks;
 
 import java.util.Arrays;
 
 /**
  * Block to add one or several {@link ROI} to a Sequence
  *
- * @author Stephane
+ * @author Stephane Dallongeville
  */
-public class AddRois extends Plugin implements SequenceBlock, PluginLibrary, PluginBundled {
+@IcyPluginName("Add ROIs")
+@IcyPluginIcon(path = "/SequenceBlocks_icon.png")
+public class AddRois extends Plugin implements SequenceBlock {
     final protected VarSequence inputSequence = new VarSequence("Sequence", null);
     final protected VarROIArray rois = new VarROIArray("Roi(s)");
     final protected VarBoolean removePrevious = new VarBoolean("Remove previous", Boolean.FALSE);
@@ -58,7 +60,7 @@ public class AddRois extends Plugin implements SequenceBlock, PluginLibrary, Plu
     }
 
     @Override
-    public void declareInput(final VarList inputMap) {
+    public void declareInput(final @NotNull VarList inputMap) {
         inputMap.add("sequence", inputSequence);
         inputMap.add("rois(s)", rois);
         inputMap.add("remove", removePrevious);
@@ -68,9 +70,4 @@ public class AddRois extends Plugin implements SequenceBlock, PluginLibrary, Plu
     public void declareOutput(final VarList outputMap) {
         //
     }
-
-    @Override
-    public String getMainPluginClassName() {
-        return SequenceBlocks.class.getName();
-    }
 }
diff --git a/src/main/java/plugins/tprovoost/sequenceblocks/convert/ConvertColor.java b/src/main/java/plugins/tprovoost/sequenceblocks/convert/ConvertColor.java
index a145a4e..cd758ec 100644
--- a/src/main/java/plugins/tprovoost/sequenceblocks/convert/ConvertColor.java
+++ b/src/main/java/plugins/tprovoost/sequenceblocks/convert/ConvertColor.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010-2023. Institut Pasteur.
+ * Copyright (c) 2010-2024. Institut Pasteur.
  *
  * This file is part of Icy.
  * Icy is free software: you can redistribute it and/or modify
@@ -18,19 +18,21 @@
 
 package plugins.tprovoost.sequenceblocks.convert;
 
-import icy.image.IcyBufferedImageUtil;
-import icy.image.lut.LUT;
-import icy.plugin.abstract_.Plugin;
-import icy.plugin.interface_.PluginBundled;
-import icy.sequence.Sequence;
-import icy.util.OMEUtil;
+import org.bioimageanalysis.icy.extension.plugin.abstract_.Plugin;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginIcon;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginName;
+import org.bioimageanalysis.icy.model.OMEUtil;
+import org.bioimageanalysis.icy.model.image.IcyBufferedImageUtil;
+import org.bioimageanalysis.icy.model.lut.LUT;
+import org.bioimageanalysis.icy.model.sequence.Sequence;
+import org.jetbrains.annotations.Contract;
+import org.jetbrains.annotations.NotNull;
 import plugins.adufour.blocks.tools.sequence.SequenceBlock;
 import plugins.adufour.blocks.util.VarList;
 import plugins.adufour.vars.lang.Var;
 import plugins.adufour.vars.lang.VarEnum;
 import plugins.adufour.vars.lang.VarSequence;
 import plugins.adufour.vars.util.VarException;
-import plugins.tprovoost.sequenceblocks.SequenceBlocks;
 
 import java.awt.image.BufferedImage;
 
@@ -38,9 +40,11 @@ import java.awt.image.BufferedImage;
  * Block to render a given Sequence using a specific LUT.<br>
  * The result can be provided ARGB, RGB or GRAY sequence.
  *
- * @author Stephane
+ * @author Stephane Dallongeville
  */
-public class ConvertColor extends Plugin implements SequenceBlock, PluginBundled {
+@IcyPluginName("Convert Color")
+@IcyPluginIcon(path = "/SequenceBlocks_icon.png")
+public class ConvertColor extends Plugin implements SequenceBlock {
     public enum ColorConversion {
         GRAY, RGB, ARGB
     }
@@ -68,37 +72,27 @@ public class ConvertColor extends Plugin implements SequenceBlock, PluginBundled
     }
 
     @Override
-    public void declareInput(final VarList inputMap) {
+    public void declareInput(final @NotNull VarList inputMap) {
         inputMap.add("Sequence", EZseq);
         inputMap.add("Conversion", EZtype);
         inputMap.add("Lut", EZlut);
     }
 
     @Override
-    public void declareOutput(final VarList outputMap) {
+    public void declareOutput(final @NotNull VarList outputMap) {
         outputMap.add("Out", varOut);
     }
 
-    @Override
-    public String getMainPluginClassName() {
-        return SequenceBlocks.class.getName();
-    }
-
-    public static int getImageType(final ColorConversion value) {
-        switch (value) {
-            default:
-            case ARGB:
-                return BufferedImage.TYPE_INT_ARGB;
-
-            case RGB:
-                return BufferedImage.TYPE_INT_RGB;
-
-            case GRAY:
-                return BufferedImage.TYPE_BYTE_GRAY;
-        }
+    @Contract(pure = true)
+    public static int getImageType(final @NotNull ColorConversion value) {
+        return switch (value) {
+            default -> BufferedImage.TYPE_INT_ARGB;
+            case RGB -> BufferedImage.TYPE_INT_RGB;
+            case GRAY -> BufferedImage.TYPE_BYTE_GRAY;
+        };
     }
 
-    public static Sequence convertColor(final Sequence source, final int imageType, final LUT lut) throws IllegalArgumentException, InterruptedException {
+    public static @NotNull Sequence convertColor(final @NotNull Sequence source, final int imageType, final LUT lut) throws IllegalArgumentException, InterruptedException {
         final Sequence result = new Sequence(OMEUtil.createOMEXMLMetadata(source.getOMEXMLMetadata()));
         // image receiver
         final BufferedImage imgOut = new BufferedImage(source.getSizeX(), source.getSizeY(), imageType);
diff --git a/src/main/java/plugins/tprovoost/sequenceblocks/convert/ConvertStack.java b/src/main/java/plugins/tprovoost/sequenceblocks/convert/ConvertStack.java
index cc457d0..f70a890 100644
--- a/src/main/java/plugins/tprovoost/sequenceblocks/convert/ConvertStack.java
+++ b/src/main/java/plugins/tprovoost/sequenceblocks/convert/ConvertStack.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010-2023. Institut Pasteur.
+ * Copyright (c) 2010-2024. Institut Pasteur.
  *
  * This file is part of Icy.
  * Icy is free software: you can redistribute it and/or modify
@@ -18,21 +18,24 @@
 
 package plugins.tprovoost.sequenceblocks.convert;
 
-import icy.plugin.abstract_.Plugin;
-import icy.plugin.interface_.PluginBundled;
-import icy.sequence.Sequence;
-import icy.sequence.SequenceUtil;
+import org.bioimageanalysis.icy.extension.plugin.abstract_.Plugin;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginIcon;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginName;
+import org.bioimageanalysis.icy.model.sequence.Sequence;
+import org.bioimageanalysis.icy.model.sequence.SequenceUtil;
+import org.jetbrains.annotations.NotNull;
 import plugins.adufour.blocks.tools.sequence.SequenceBlock;
 import plugins.adufour.blocks.util.VarList;
 import plugins.adufour.vars.lang.VarEnum;
 import plugins.adufour.vars.lang.VarSequence;
 import plugins.adufour.vars.util.VarException;
-import plugins.tprovoost.sequenceblocks.SequenceBlocks;
 
 /**
- * @author thomasprovoost
+ * @author Thomas Provoost
  */
-public class ConvertStack extends Plugin implements SequenceBlock, PluginBundled {
+@IcyPluginName("Convert Stack <-> Time")
+@IcyPluginIcon(path = "/SequenceBlocks_icon.png")
+public class ConvertStack extends Plugin implements SequenceBlock {
     public enum TypeConversion {
         STACK, TIME
     }
@@ -62,19 +65,13 @@ public class ConvertStack extends Plugin implements SequenceBlock, PluginBundled
     }
 
     @Override
-    public void declareInput(final VarList inputMap) {
+    public void declareInput(final @NotNull VarList inputMap) {
         inputMap.add("sequence", inputSequence);
         inputMap.add("Type Wanted", type);
     }
 
     @Override
-    public void declareOutput(final VarList outputMap) {
+    public void declareOutput(final @NotNull VarList outputMap) {
         outputMap.add("out", outputSequence);
     }
-
-    @Override
-    public String getMainPluginClassName() {
-        return SequenceBlocks.class.getName();
-    }
-
 }
diff --git a/src/main/java/plugins/tprovoost/sequenceblocks/convert/ConvertType.java b/src/main/java/plugins/tprovoost/sequenceblocks/convert/ConvertType.java
index a6afe8a..da84d61 100644
--- a/src/main/java/plugins/tprovoost/sequenceblocks/convert/ConvertType.java
+++ b/src/main/java/plugins/tprovoost/sequenceblocks/convert/ConvertType.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010-2023. Institut Pasteur.
+ * Copyright (c) 2010-2024. Institut Pasteur.
  *
  * This file is part of Icy.
  * Icy is free software: you can redistribute it and/or modify
@@ -18,24 +18,26 @@
 
 package plugins.tprovoost.sequenceblocks.convert;
 
-import icy.plugin.abstract_.Plugin;
-import icy.plugin.interface_.PluginBundled;
-import icy.plugin.interface_.PluginLibrary;
-import icy.sequence.Sequence;
-import icy.sequence.SequenceUtil;
-import icy.type.DataType;
+import org.bioimageanalysis.icy.common.type.DataType;
+import org.bioimageanalysis.icy.extension.plugin.abstract_.Plugin;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginIcon;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginName;
+import org.bioimageanalysis.icy.model.sequence.Sequence;
+import org.bioimageanalysis.icy.model.sequence.SequenceUtil;
+import org.jetbrains.annotations.NotNull;
 import plugins.adufour.blocks.tools.sequence.SequenceBlock;
 import plugins.adufour.blocks.util.VarList;
 import plugins.adufour.vars.lang.VarBoolean;
 import plugins.adufour.vars.lang.VarEnum;
 import plugins.adufour.vars.lang.VarSequence;
 import plugins.adufour.vars.util.VarException;
-import plugins.tprovoost.sequenceblocks.SequenceBlocks;
 
 /**
- * @author thomasprovoost
+ * @author Thomas Provoost
  */
-public class ConvertType extends Plugin implements SequenceBlock, PluginLibrary, PluginBundled {
+@IcyPluginName("Convert Type")
+@IcyPluginIcon(path = "/SequenceBlocks_icon.png")
+public class ConvertType extends Plugin implements SequenceBlock {
     final protected VarEnum<DataType> type = new VarEnum<>("Type Wanted", DataType.UBYTE);
     final protected VarSequence inputSequence = new VarSequence("sequence", null);
     final protected VarSequence outputSequence = new VarSequence("converted", null);
@@ -56,19 +58,14 @@ public class ConvertType extends Plugin implements SequenceBlock, PluginLibrary,
     }
 
     @Override
-    public void declareInput(final VarList inputMap) {
+    public void declareInput(final @NotNull VarList inputMap) {
         inputMap.add("sequence", inputSequence);
         inputMap.add("Type Wanted", type);
         inputMap.add("Rescale", rescale);
     }
 
     @Override
-    public void declareOutput(final VarList outputMap) {
+    public void declareOutput(final @NotNull VarList outputMap) {
         outputMap.add("converted", outputSequence);
     }
-
-    @Override
-    public String getMainPluginClassName() {
-        return SequenceBlocks.class.getName();
-    }
 }
diff --git a/src/main/java/plugins/tprovoost/sequenceblocks/convert/Resize.java b/src/main/java/plugins/tprovoost/sequenceblocks/convert/Resize.java
index 5613a6b..35ff8a5 100644
--- a/src/main/java/plugins/tprovoost/sequenceblocks/convert/Resize.java
+++ b/src/main/java/plugins/tprovoost/sequenceblocks/convert/Resize.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010-2023. Institut Pasteur.
+ * Copyright (c) 2010-2024. Institut Pasteur.
  *
  * This file is part of Icy.
  * Icy is free software: you can redistribute it and/or modify
@@ -18,11 +18,13 @@
 
 package plugins.tprovoost.sequenceblocks.convert;
 
-import icy.image.IcyBufferedImageUtil.FilterType;
-import icy.plugin.abstract_.Plugin;
-import icy.plugin.interface_.PluginBundled;
-import icy.sequence.Sequence;
-import icy.sequence.SequenceUtil;
+import org.bioimageanalysis.icy.extension.plugin.abstract_.Plugin;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginIcon;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginName;
+import org.bioimageanalysis.icy.model.image.IcyBufferedImageUtil;
+import org.bioimageanalysis.icy.model.sequence.Sequence;
+import org.bioimageanalysis.icy.model.sequence.SequenceUtil;
+import org.jetbrains.annotations.NotNull;
 import plugins.adufour.blocks.tools.sequence.SequenceBlock;
 import plugins.adufour.blocks.util.VarList;
 import plugins.adufour.vars.lang.VarBoolean;
@@ -30,11 +32,12 @@ import plugins.adufour.vars.lang.VarEnum;
 import plugins.adufour.vars.lang.VarInteger;
 import plugins.adufour.vars.lang.VarSequence;
 import plugins.adufour.vars.util.VarException;
-import plugins.tprovoost.sequenceblocks.SequenceBlocks;
 
 import javax.swing.*;
 
-public class Resize extends Plugin implements SequenceBlock, PluginBundled {
+@IcyPluginName("Resize")
+@IcyPluginIcon(path = "/SequenceBlocks_icon.png")
+public class Resize extends Plugin implements SequenceBlock {
     protected enum Proportional {
         NO, TO_WIDTH, TO_HEIGHT
     }
@@ -44,14 +47,14 @@ public class Resize extends Plugin implements SequenceBlock, PluginBundled {
     final protected VarInteger EZsizeh = new VarInteger("Height", 200);
     final protected VarEnum<Proportional> EZproportional = new VarEnum<>("Proportional", Proportional.NO);
     final protected VarBoolean EZscale = new VarBoolean("Scale content", Boolean.TRUE);
-    final protected VarEnum<FilterType> EZtype = new VarEnum<>("Filter", FilterType.BICUBIC);
+    final protected VarEnum<IcyBufferedImageUtil.FilterType> EZtype = new VarEnum<>("Filter", IcyBufferedImageUtil.FilterType.BICUBIC);
     final protected VarSequence varOut = new VarSequence("Out", null);
 
     @Override
     public void run() {
         final Sequence s;
         int w, h;
-        final FilterType type;
+        final IcyBufferedImageUtil.FilterType type;
 
         // EZ PLUG
         s = EZseq.getValue();
@@ -81,7 +84,7 @@ public class Resize extends Plugin implements SequenceBlock, PluginBundled {
     }
 
     @Override
-    public void declareInput(final VarList inputMap) {
+    public void declareInput(final @NotNull VarList inputMap) {
         inputMap.add("Sequence", EZseq);
         inputMap.add("Width", EZsizew);
         inputMap.add("Height", EZsizeh);
@@ -91,12 +94,7 @@ public class Resize extends Plugin implements SequenceBlock, PluginBundled {
     }
 
     @Override
-    public void declareOutput(final VarList outputMap) {
+    public void declareOutput(final @NotNull VarList outputMap) {
         outputMap.add("Out", varOut);
     }
-
-    @Override
-    public String getMainPluginClassName() {
-        return SequenceBlocks.class.getName();
-    }
 }
diff --git a/src/main/java/plugins/tprovoost/sequenceblocks/creation/CombineChannels.java b/src/main/java/plugins/tprovoost/sequenceblocks/creation/CombineChannels.java
index 68d5107..162832a 100644
--- a/src/main/java/plugins/tprovoost/sequenceblocks/creation/CombineChannels.java
+++ b/src/main/java/plugins/tprovoost/sequenceblocks/creation/CombineChannels.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010-2023. Institut Pasteur.
+ * Copyright (c) 2010-2024. Institut Pasteur.
  *
  * This file is part of Icy.
  * Icy is free software: you can redistribute it and/or modify
@@ -18,23 +18,25 @@
 
 package plugins.tprovoost.sequenceblocks.creation;
 
-import icy.plugin.abstract_.Plugin;
-import icy.plugin.interface_.PluginBundled;
-import icy.plugin.interface_.PluginLibrary;
-import icy.sequence.Sequence;
-import icy.sequence.SequenceUtil;
+import org.bioimageanalysis.icy.extension.plugin.abstract_.Plugin;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginIcon;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginName;
+import org.bioimageanalysis.icy.model.sequence.Sequence;
+import org.bioimageanalysis.icy.model.sequence.SequenceUtil;
+import org.jetbrains.annotations.NotNull;
 import plugins.adufour.blocks.tools.sequence.SequenceBlock;
 import plugins.adufour.blocks.util.VarList;
 import plugins.adufour.vars.lang.VarBoolean;
 import plugins.adufour.vars.lang.VarIntegerArrayNative;
 import plugins.adufour.vars.lang.VarSequence;
 import plugins.adufour.vars.util.VarException;
-import plugins.tprovoost.sequenceblocks.SequenceBlocks;
 
 /**
- * @author thomasprovoost
+ * @author Thomas Provoost
  */
-public class CombineChannels extends Plugin implements SequenceBlock, PluginLibrary, PluginBundled {
+@IcyPluginName("Combine Channels")
+@IcyPluginIcon(path = "/SequenceBlocks_icon.png")
+public class CombineChannels extends Plugin implements SequenceBlock {
     final protected VarSequence inputSequence = new VarSequence("Sequence 1", null);
     final protected VarSequence inputSequence2 = new VarSequence("Sequence 2", null);
     final protected VarSequence outputSequence = new VarSequence("Merged", null);
@@ -78,7 +80,7 @@ public class CombineChannels extends Plugin implements SequenceBlock, PluginLibr
     }
 
     @Override
-    public void declareInput(final VarList inputMap) {
+    public void declareInput(final @NotNull VarList inputMap) {
         inputMap.add("sequence 1", inputSequence);
         inputMap.add("Channel 1", channelIdx);
         inputMap.add("sequence 2", inputSequence2);
@@ -88,12 +90,7 @@ public class CombineChannels extends Plugin implements SequenceBlock, PluginLibr
     }
 
     @Override
-    public void declareOutput(final VarList outputMap) {
+    public void declareOutput(final @NotNull VarList outputMap) {
         outputMap.add("out", outputSequence);
     }
-
-    @Override
-    public String getMainPluginClassName() {
-        return SequenceBlocks.class.getName();
-    }
 }
diff --git a/src/main/java/plugins/tprovoost/sequenceblocks/creation/CreateSequence.java b/src/main/java/plugins/tprovoost/sequenceblocks/creation/CreateSequence.java
index c99e181..889ccb3 100644
--- a/src/main/java/plugins/tprovoost/sequenceblocks/creation/CreateSequence.java
+++ b/src/main/java/plugins/tprovoost/sequenceblocks/creation/CreateSequence.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010-2023. Institut Pasteur.
+ * Copyright (c) 2010-2024. Institut Pasteur.
  *
  * This file is part of Icy.
  * Icy is free software: you can redistribute it and/or modify
@@ -18,21 +18,23 @@
 
 package plugins.tprovoost.sequenceblocks.creation;
 
-import icy.image.IcyBufferedImage;
-import icy.plugin.abstract_.Plugin;
-import icy.plugin.interface_.PluginBundled;
-import icy.plugin.interface_.PluginLibrary;
-import icy.sequence.Sequence;
+import org.bioimageanalysis.icy.extension.plugin.abstract_.Plugin;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginIcon;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginName;
+import org.bioimageanalysis.icy.model.image.IcyBufferedImage;
+import org.bioimageanalysis.icy.model.sequence.Sequence;
+import org.jetbrains.annotations.NotNull;
 import plugins.adufour.blocks.tools.sequence.SequenceBlock;
 import plugins.adufour.blocks.util.VarList;
 import plugins.adufour.vars.lang.Var;
 import plugins.adufour.vars.lang.VarSequence;
-import plugins.tprovoost.sequenceblocks.SequenceBlocks;
 
 /**
- * @author thomasprovoost
+ * @author Thomas Provoost
  */
-public class CreateSequence extends Plugin implements SequenceBlock, PluginLibrary, PluginBundled {
+@IcyPluginName("Create Sequence")
+@IcyPluginIcon(path = "/SequenceBlocks_icon.png")
+public class CreateSequence extends Plugin implements SequenceBlock {
     final protected Var<IcyBufferedImage> in = new Var<>("image (optional)", IcyBufferedImage.class);
     final protected VarSequence out = new VarSequence("sequence", null);
 
@@ -42,17 +44,12 @@ public class CreateSequence extends Plugin implements SequenceBlock, PluginLibra
     }
 
     @Override
-    public void declareInput(final VarList inputMap) {
+    public void declareInput(final @NotNull VarList inputMap) {
         inputMap.add("image (optional)", in);
     }
 
     @Override
-    public void declareOutput(final VarList outputMap) {
+    public void declareOutput(final @NotNull VarList outputMap) {
         outputMap.add("sequence", out);
     }
-
-    @Override
-    public String getMainPluginClassName() {
-        return SequenceBlocks.class.getName();
-    }
 }
diff --git a/src/main/java/plugins/tprovoost/sequenceblocks/creation/DuplicateSequence.java b/src/main/java/plugins/tprovoost/sequenceblocks/creation/DuplicateSequence.java
index e91fea7..0b8a771 100644
--- a/src/main/java/plugins/tprovoost/sequenceblocks/creation/DuplicateSequence.java
+++ b/src/main/java/plugins/tprovoost/sequenceblocks/creation/DuplicateSequence.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010-2023. Institut Pasteur.
+ * Copyright (c) 2010-2024. Institut Pasteur.
  *
  * This file is part of Icy.
  * Icy is free software: you can redistribute it and/or modify
@@ -18,21 +18,23 @@
 
 package plugins.tprovoost.sequenceblocks.creation;
 
-import icy.plugin.abstract_.Plugin;
-import icy.plugin.interface_.PluginBundled;
-import icy.plugin.interface_.PluginLibrary;
-import icy.sequence.Sequence;
-import icy.sequence.SequenceUtil;
+import org.bioimageanalysis.icy.extension.plugin.abstract_.Plugin;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginIcon;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginName;
+import org.bioimageanalysis.icy.model.sequence.Sequence;
+import org.bioimageanalysis.icy.model.sequence.SequenceUtil;
+import org.jetbrains.annotations.NotNull;
 import plugins.adufour.blocks.tools.sequence.SequenceBlock;
 import plugins.adufour.blocks.util.VarList;
 import plugins.adufour.vars.lang.VarSequence;
 import plugins.adufour.vars.util.VarException;
-import plugins.tprovoost.sequenceblocks.SequenceBlocks;
 
 /**
- * @author thomasprovoost
+ * @author Thomas Provoost
  */
-public class DuplicateSequence extends Plugin implements SequenceBlock, PluginLibrary, PluginBundled {
+@IcyPluginName("Duplicate Sequence")
+@IcyPluginIcon(path = "/SequenceBlocks_icon.png")
+public class DuplicateSequence extends Plugin implements SequenceBlock {
     final protected VarSequence in = new VarSequence("sequence", null);
     final protected VarSequence out = new VarSequence("duplicated", null);
 
@@ -51,17 +53,12 @@ public class DuplicateSequence extends Plugin implements SequenceBlock, PluginLi
     }
 
     @Override
-    public void declareInput(final VarList inputMap) {
+    public void declareInput(final @NotNull VarList inputMap) {
         inputMap.add("sequence", in);
     }
 
     @Override
-    public void declareOutput(final VarList outputMap) {
+    public void declareOutput(final @NotNull VarList outputMap) {
         outputMap.add("duplicated", out);
     }
-
-    @Override
-    public String getMainPluginClassName() {
-        return SequenceBlocks.class.getName();
-    }
 }
diff --git a/src/main/java/plugins/tprovoost/sequenceblocks/extract/CropCZT.java b/src/main/java/plugins/tprovoost/sequenceblocks/extract/CropCZT.java
index 24aceb5..acbbcfa 100644
--- a/src/main/java/plugins/tprovoost/sequenceblocks/extract/CropCZT.java
+++ b/src/main/java/plugins/tprovoost/sequenceblocks/extract/CropCZT.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010-2023. Institut Pasteur.
+ * Copyright (c) 2010-2024. Institut Pasteur.
  *
  * This file is part of Icy.
  * Icy is free software: you can redistribute it and/or modify
@@ -18,19 +18,22 @@
 
 package plugins.tprovoost.sequenceblocks.extract;
 
-import icy.plugin.abstract_.Plugin;
-import icy.plugin.interface_.PluginBundled;
-import icy.sequence.Sequence;
-import icy.sequence.SequenceUtil;
-import icy.type.rectangle.Rectangle5D;
+import org.bioimageanalysis.icy.common.geom.rectangle.Rectangle5D;
+import org.bioimageanalysis.icy.extension.plugin.abstract_.Plugin;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginIcon;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginName;
+import org.bioimageanalysis.icy.model.sequence.Sequence;
+import org.bioimageanalysis.icy.model.sequence.SequenceUtil;
+import org.jetbrains.annotations.NotNull;
 import plugins.adufour.blocks.tools.sequence.SequenceBlock;
 import plugins.adufour.blocks.util.VarList;
 import plugins.adufour.vars.lang.VarInteger;
 import plugins.adufour.vars.lang.VarSequence;
 import plugins.adufour.vars.util.VarException;
-import plugins.tprovoost.sequenceblocks.SequenceBlocks;
 
-public class CropCZT extends Plugin implements SequenceBlock, PluginBundled {
+@IcyPluginName("Crop CZT")
+@IcyPluginIcon(path = "/SequenceBlocks_icon.png")
+public class CropCZT extends Plugin implements SequenceBlock {
     final protected VarSequence varSeq = new VarSequence("Sequence", null);
     final protected VarInteger varStartC = new VarInteger("Start index C", 0);
     final protected VarInteger varSizeC = new VarInteger("Size C", 1);
@@ -70,12 +73,25 @@ public class CropCZT extends Plugin implements SequenceBlock, PluginBundled {
         if ((sizeC <= 0) || (sizeZ <= 0) || (sizeT <= 0))
             throw new VarException(null, "Size C/Z/T cannot be <= 0 !");
 
-        varOut.setValue(SequenceUtil.getSubSequence(seq,
-                new Rectangle5D.Integer(startX, startY, startZ, startT, startC, sizeX, sizeY, sizeZ, sizeT, sizeC)));
+        varOut.setValue(SequenceUtil.getSubSequence(
+                seq,
+                new Rectangle5D.Integer(
+                        startX,
+                        startY,
+                        startZ,
+                        startT,
+                        startC,
+                        sizeX,
+                        sizeY,
+                        sizeZ,
+                        sizeT,
+                        sizeC
+                )
+        ));
     }
 
     @Override
-    public void declareInput(final VarList inputMap) {
+    public void declareInput(final @NotNull VarList inputMap) {
         inputMap.add("Sequence", varSeq);
         inputMap.add("Start index C", varStartC);
         inputMap.add("Size C", varSizeC);
@@ -86,12 +102,7 @@ public class CropCZT extends Plugin implements SequenceBlock, PluginBundled {
     }
 
     @Override
-    public void declareOutput(final VarList outputMap) {
+    public void declareOutput(final @NotNull VarList outputMap) {
         outputMap.add("Out", varOut);
     }
-
-    @Override
-    public String getMainPluginClassName() {
-        return SequenceBlocks.class.getName();
-    }
 }
diff --git a/src/main/java/plugins/tprovoost/sequenceblocks/extract/CropSequence.java b/src/main/java/plugins/tprovoost/sequenceblocks/extract/CropSequence.java
index af08430..ee874f8 100644
--- a/src/main/java/plugins/tprovoost/sequenceblocks/extract/CropSequence.java
+++ b/src/main/java/plugins/tprovoost/sequenceblocks/extract/CropSequence.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010-2023. Institut Pasteur.
+ * Copyright (c) 2010-2024. Institut Pasteur.
  *
  * This file is part of Icy.
  * Icy is free software: you can redistribute it and/or modify
@@ -18,33 +18,35 @@
 
 package plugins.tprovoost.sequenceblocks.extract;
 
-import icy.plugin.abstract_.Plugin;
-import icy.plugin.interface_.PluginBundled;
-import icy.plugin.interface_.PluginLibrary;
-import icy.roi.ROI;
-import icy.roi.ROIUtil;
-import icy.sequence.Sequence;
-import icy.sequence.SequenceUtil;
-import icy.type.collection.CollectionUtil;
-import icy.util.ShapeUtil.BooleanOperator;
+import org.bioimageanalysis.icy.common.collection.CollectionUtil;
+import org.bioimageanalysis.icy.common.geom.shape.ShapeUtil;
+import org.bioimageanalysis.icy.extension.plugin.abstract_.Plugin;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginIcon;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginName;
+import org.bioimageanalysis.icy.model.roi.ROI;
+import org.bioimageanalysis.icy.model.roi.ROIUtil;
+import org.bioimageanalysis.icy.model.sequence.Sequence;
+import org.bioimageanalysis.icy.model.sequence.SequenceUtil;
+import org.jetbrains.annotations.NotNull;
 import plugins.adufour.blocks.tools.sequence.SequenceBlock;
 import plugins.adufour.blocks.util.VarList;
 import plugins.adufour.vars.lang.Var;
 import plugins.adufour.vars.lang.VarMutable;
 import plugins.adufour.vars.lang.VarSequence;
-import plugins.tprovoost.sequenceblocks.SequenceBlocks;
 
 import java.util.ArrayList;
 import java.util.List;
 
 /**
- * @author thomasprovoost
+ * @author Thomas Provoost
  */
-public class CropSequence extends Plugin implements SequenceBlock, PluginLibrary, PluginBundled {
+@IcyPluginName("Crop Sequence")
+@IcyPluginIcon(path = "/SequenceBlocks_icon.png")
+public class CropSequence extends Plugin implements SequenceBlock {
     final protected VarSequence inputSequence = new VarSequence("Sequence", null);
     VarMutable inputROIs = new VarMutable("ROI(s)", null) {
         @Override
-        public boolean isAssignableFrom(final Var source) {
+        public boolean isAssignableFrom(final @NotNull Var source) {
             return (ROI.class == source.getType()) || (ROI[].class == source.getType());
         }
     };
@@ -72,7 +74,7 @@ public class CropSequence extends Plugin implements SequenceBlock, PluginLibrary
             rois = CollectionUtil.asList((ROI[]) obj);
 
         try {
-            final ROI roi = ROIUtil.merge(rois, BooleanOperator.OR);
+            final ROI roi = ROIUtil.merge(rois, ShapeUtil.BooleanOperator.OR);
 
             outputSequence.setValue(SequenceUtil.getSubSequence(s, roi));
         }
@@ -82,18 +84,13 @@ public class CropSequence extends Plugin implements SequenceBlock, PluginLibrary
     }
 
     @Override
-    public void declareInput(final VarList inputMap) {
+    public void declareInput(final @NotNull VarList inputMap) {
         inputMap.add("sequence", inputSequence);
         inputMap.add("roi", inputROIs);
     }
 
     @Override
-    public void declareOutput(final VarList outputMap) {
+    public void declareOutput(final @NotNull VarList outputMap) {
         outputMap.add("cropped", outputSequence);
     }
-
-    @Override
-    public String getMainPluginClassName() {
-        return SequenceBlocks.class.getName();
-    }
 }
diff --git a/src/main/java/plugins/tprovoost/sequenceblocks/extract/ExtractChannel.java b/src/main/java/plugins/tprovoost/sequenceblocks/extract/ExtractChannel.java
index 0ec592d..3f3d184 100644
--- a/src/main/java/plugins/tprovoost/sequenceblocks/extract/ExtractChannel.java
+++ b/src/main/java/plugins/tprovoost/sequenceblocks/extract/ExtractChannel.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010-2023. Institut Pasteur.
+ * Copyright (c) 2010-2024. Institut Pasteur.
  *
  * This file is part of Icy.
  * Icy is free software: you can redistribute it and/or modify
@@ -18,22 +18,24 @@
 
 package plugins.tprovoost.sequenceblocks.extract;
 
-import icy.plugin.abstract_.Plugin;
-import icy.plugin.interface_.PluginBundled;
-import icy.plugin.interface_.PluginLibrary;
-import icy.sequence.Sequence;
-import icy.sequence.SequenceUtil;
+import org.bioimageanalysis.icy.extension.plugin.abstract_.Plugin;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginIcon;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginName;
+import org.bioimageanalysis.icy.model.sequence.Sequence;
+import org.bioimageanalysis.icy.model.sequence.SequenceUtil;
+import org.jetbrains.annotations.NotNull;
 import plugins.adufour.blocks.tools.sequence.SequenceBlock;
 import plugins.adufour.blocks.util.VarList;
 import plugins.adufour.vars.lang.VarInteger;
 import plugins.adufour.vars.lang.VarSequence;
 import plugins.adufour.vars.util.VarException;
-import plugins.tprovoost.sequenceblocks.SequenceBlocks;
 
 /**
- * @author thomasprovoost
+ * @author Thomas Provoost
  */
-public class ExtractChannel extends Plugin implements SequenceBlock, PluginLibrary, PluginBundled {
+@IcyPluginName("Extract Channel")
+@IcyPluginIcon(path = "/SequenceBlocks_icon.png")
+public class ExtractChannel extends Plugin implements SequenceBlock {
     final protected VarSequence inputSequence = new VarSequence("Sequence", null);
     final protected VarSequence outputSequence = new VarSequence("Extracted", null);
     final protected VarInteger channelIdx = new VarInteger("Channel", 0);
@@ -60,18 +62,13 @@ public class ExtractChannel extends Plugin implements SequenceBlock, PluginLibra
     }
 
     @Override
-    public void declareInput(final VarList inputMap) {
+    public void declareInput(final @NotNull VarList inputMap) {
         inputMap.add("sequence", inputSequence);
         inputMap.add("channel", channelIdx);
     }
 
     @Override
-    public void declareOutput(final VarList outputMap) {
+    public void declareOutput(final @NotNull VarList outputMap) {
         outputMap.add("extracted", outputSequence);
     }
-
-    @Override
-    public String getMainPluginClassName() {
-        return SequenceBlocks.class.getName();
-    }
 }
diff --git a/src/main/java/plugins/tprovoost/sequenceblocks/extract/ExtractMultiChannels.java b/src/main/java/plugins/tprovoost/sequenceblocks/extract/ExtractMultiChannels.java
index b17f34b..4ec8e2d 100644
--- a/src/main/java/plugins/tprovoost/sequenceblocks/extract/ExtractMultiChannels.java
+++ b/src/main/java/plugins/tprovoost/sequenceblocks/extract/ExtractMultiChannels.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010-2023. Institut Pasteur.
+ * Copyright (c) 2010-2024. Institut Pasteur.
  *
  * This file is part of Icy.
  * Icy is free software: you can redistribute it and/or modify
@@ -18,24 +18,26 @@
 
 package plugins.tprovoost.sequenceblocks.extract;
 
-import icy.plugin.abstract_.Plugin;
-import icy.plugin.interface_.PluginBundled;
-import icy.plugin.interface_.PluginLibrary;
-import icy.sequence.Sequence;
-import icy.sequence.SequenceUtil;
+import org.bioimageanalysis.icy.extension.plugin.abstract_.Plugin;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginIcon;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginName;
+import org.bioimageanalysis.icy.model.sequence.Sequence;
+import org.bioimageanalysis.icy.model.sequence.SequenceUtil;
+import org.jetbrains.annotations.NotNull;
 import plugins.adufour.blocks.tools.sequence.SequenceBlock;
 import plugins.adufour.blocks.util.VarList;
 import plugins.adufour.vars.lang.VarIntegerArrayNative;
 import plugins.adufour.vars.lang.VarSequence;
 import plugins.adufour.vars.util.VarException;
-import plugins.tprovoost.sequenceblocks.SequenceBlocks;
 
 import java.util.Arrays;
 
 /**
- * @author thomasprovoost
+ * @author Thomas Provoost
  */
-public class ExtractMultiChannels extends Plugin implements SequenceBlock, PluginLibrary, PluginBundled {
+@IcyPluginName("Extract Multiple Channels")
+@IcyPluginIcon(path = "/SequenceBlocks_icon.png")
+public class ExtractMultiChannels extends Plugin implements SequenceBlock {
     final protected VarSequence inputSequence = new VarSequence("Sequence", null);
     final protected VarSequence outputSequence = new VarSequence("Extracted", null);
     final protected VarIntegerArrayNative channelIdx = new VarIntegerArrayNative("Channel(s)", new int[]{0});
@@ -57,18 +59,13 @@ public class ExtractMultiChannels extends Plugin implements SequenceBlock, Plugi
     }
 
     @Override
-    public void declareInput(final VarList inputMap) {
+    public void declareInput(final @NotNull VarList inputMap) {
         inputMap.add("sequence", inputSequence);
         inputMap.add("Channel", channelIdx);
     }
 
     @Override
-    public void declareOutput(final VarList outputMap) {
+    public void declareOutput(final @NotNull VarList outputMap) {
         outputMap.add("extracted", outputSequence);
     }
-
-    @Override
-    public String getMainPluginClassName() {
-        return SequenceBlocks.class.getName();
-    }
 }
diff --git a/src/main/java/plugins/tprovoost/sequenceblocks/extract/ExtractSlice.java b/src/main/java/plugins/tprovoost/sequenceblocks/extract/ExtractSlice.java
index 789aec4..154509d 100644
--- a/src/main/java/plugins/tprovoost/sequenceblocks/extract/ExtractSlice.java
+++ b/src/main/java/plugins/tprovoost/sequenceblocks/extract/ExtractSlice.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010-2023. Institut Pasteur.
+ * Copyright (c) 2010-2024. Institut Pasteur.
  *
  * This file is part of Icy.
  * Icy is free software: you can redistribute it and/or modify
@@ -18,22 +18,24 @@
 
 package plugins.tprovoost.sequenceblocks.extract;
 
-import icy.plugin.abstract_.Plugin;
-import icy.plugin.interface_.PluginBundled;
-import icy.plugin.interface_.PluginLibrary;
-import icy.sequence.Sequence;
-import icy.sequence.SequenceUtil;
+import org.bioimageanalysis.icy.extension.plugin.abstract_.Plugin;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginIcon;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginName;
+import org.bioimageanalysis.icy.model.sequence.Sequence;
+import org.bioimageanalysis.icy.model.sequence.SequenceUtil;
+import org.jetbrains.annotations.NotNull;
 import plugins.adufour.blocks.tools.sequence.SequenceBlock;
 import plugins.adufour.blocks.util.VarList;
 import plugins.adufour.vars.lang.VarInteger;
 import plugins.adufour.vars.lang.VarSequence;
 import plugins.adufour.vars.util.VarException;
-import plugins.tprovoost.sequenceblocks.SequenceBlocks;
 
 /**
- * @author thomasprovoost
+ * @author Thomas Provoost
  */
-public class ExtractSlice extends Plugin implements SequenceBlock, PluginLibrary, PluginBundled {
+@IcyPluginName("Extract Slice")
+@IcyPluginIcon(path = "/SequenceBlocks_icon.png")
+public class ExtractSlice extends Plugin implements SequenceBlock {
     final protected VarSequence inputSequence = new VarSequence("Sequence", null);
     final protected VarSequence outputSequence = new VarSequence("Extracted", null);
     final protected VarInteger chosenZ = new VarInteger("Z", 0);
@@ -48,18 +50,13 @@ public class ExtractSlice extends Plugin implements SequenceBlock, PluginLibrary
     }
 
     @Override
-    public void declareInput(final VarList inputMap) {
+    public void declareInput(final @NotNull VarList inputMap) {
         inputMap.add("sequence", inputSequence);
         inputMap.add("Z pos", chosenZ);
     }
 
     @Override
-    public void declareOutput(final VarList outputMap) {
+    public void declareOutput(final @NotNull VarList outputMap) {
         outputMap.add("extracted", outputSequence);
     }
-
-    @Override
-    public String getMainPluginClassName() {
-        return SequenceBlocks.class.getName();
-    }
 }
diff --git a/src/main/java/plugins/tprovoost/sequenceblocks/extract/ExtractTime.java b/src/main/java/plugins/tprovoost/sequenceblocks/extract/ExtractTime.java
index 06f3aae..d123fa2 100644
--- a/src/main/java/plugins/tprovoost/sequenceblocks/extract/ExtractTime.java
+++ b/src/main/java/plugins/tprovoost/sequenceblocks/extract/ExtractTime.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010-2023. Institut Pasteur.
+ * Copyright (c) 2010-2024. Institut Pasteur.
  *
  * This file is part of Icy.
  * Icy is free software: you can redistribute it and/or modify
@@ -18,22 +18,24 @@
 
 package plugins.tprovoost.sequenceblocks.extract;
 
-import icy.plugin.abstract_.Plugin;
-import icy.plugin.interface_.PluginBundled;
-import icy.plugin.interface_.PluginLibrary;
-import icy.sequence.Sequence;
-import icy.sequence.SequenceUtil;
+import org.bioimageanalysis.icy.extension.plugin.abstract_.Plugin;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginIcon;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginName;
+import org.bioimageanalysis.icy.model.sequence.Sequence;
+import org.bioimageanalysis.icy.model.sequence.SequenceUtil;
+import org.jetbrains.annotations.NotNull;
 import plugins.adufour.blocks.tools.sequence.SequenceBlock;
 import plugins.adufour.blocks.util.VarList;
 import plugins.adufour.vars.lang.VarInteger;
 import plugins.adufour.vars.lang.VarSequence;
 import plugins.adufour.vars.util.VarException;
-import plugins.tprovoost.sequenceblocks.SequenceBlocks;
 
 /**
- * @author thomasprovoost
+ * @author Thomas Provoost
  */
-public class ExtractTime extends Plugin implements SequenceBlock, PluginLibrary, PluginBundled {
+@IcyPluginName("Extract Time")
+@IcyPluginIcon(path = "/SequenceBlocks_icon.png")
+public class ExtractTime extends Plugin implements SequenceBlock {
     final protected VarSequence inputSequence = new VarSequence("Sequence", null);
     final protected VarSequence outputSequence = new VarSequence("Extracted", null);
     final protected VarInteger chosenT = new VarInteger("T", 0);
@@ -48,18 +50,13 @@ public class ExtractTime extends Plugin implements SequenceBlock, PluginLibrary,
     }
 
     @Override
-    public void declareInput(final VarList inputMap) {
+    public void declareInput(final @NotNull VarList inputMap) {
         inputMap.add("sequence", inputSequence);
         inputMap.add("T pos", chosenT);
     }
 
     @Override
-    public void declareOutput(final VarList outputMap) {
+    public void declareOutput(final @NotNull VarList outputMap) {
         outputMap.add("extracted", outputSequence);
     }
-
-    @Override
-    public String getMainPluginClassName() {
-        return SequenceBlocks.class.getName();
-    }
 }
diff --git a/src/main/java/plugins/tprovoost/sequenceblocks/files/IsFileValid.java b/src/main/java/plugins/tprovoost/sequenceblocks/files/IsFileValid.java
index c4a4b5d..5f5532e 100644
--- a/src/main/java/plugins/tprovoost/sequenceblocks/files/IsFileValid.java
+++ b/src/main/java/plugins/tprovoost/sequenceblocks/files/IsFileValid.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010-2023. Institut Pasteur.
+ * Copyright (c) 2010-2024. Institut Pasteur.
  *
  * This file is part of Icy.
  * Icy is free software: you can redistribute it and/or modify
@@ -18,28 +18,30 @@
 
 package plugins.tprovoost.sequenceblocks.files;
 
-import icy.file.Loader;
-import icy.plugin.abstract_.Plugin;
-import icy.plugin.interface_.PluginBundled;
-import icy.plugin.interface_.PluginLibrary;
+import org.bioimageanalysis.icy.extension.plugin.abstract_.Plugin;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginIcon;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginName;
+import org.bioimageanalysis.icy.io.Loader;
+import org.jetbrains.annotations.NotNull;
 import plugins.adufour.blocks.tools.sequence.SequenceBlock;
 import plugins.adufour.blocks.util.VarList;
 import plugins.adufour.vars.lang.Var;
 import plugins.adufour.vars.lang.VarBoolean;
 import plugins.adufour.vars.lang.VarMutable;
-import plugins.tprovoost.sequenceblocks.SequenceBlocks;
 
 import java.io.File;
 
 /**
  * Block to know if a file represents an image file
  *
- * @author Stephane
+ * @author Stephane Dallongeville
  */
-public class IsFileValid extends Plugin implements PluginLibrary, SequenceBlock, PluginBundled {
+@IcyPluginName("Is Image File")
+@IcyPluginIcon(path = "/SequenceBlocks_icon.png")
+public class IsFileValid extends Plugin implements SequenceBlock {
     final protected VarMutable f_in = new VarMutable("File", null) {
         @Override
-        public boolean isAssignableFrom(final Var source) {
+        public boolean isAssignableFrom(final @NotNull Var source) {
             return String.class == source.getType() || File.class == source.getType();
         }
     };
@@ -61,17 +63,12 @@ public class IsFileValid extends Plugin implements PluginLibrary, SequenceBlock,
     }
 
     @Override
-    public void declareInput(final VarList inputMap) {
+    public void declareInput(final @NotNull VarList inputMap) {
         inputMap.add("file", f_in);
     }
 
     @Override
-    public void declareOutput(final VarList outputMap) {
+    public void declareOutput(final @NotNull VarList outputMap) {
         outputMap.add("valid", result);
     }
-
-    @Override
-    public String getMainPluginClassName() {
-        return SequenceBlocks.class.getName();
-    }
 }
diff --git a/src/main/java/plugins/tprovoost/sequenceblocks/files/LoadMetadata.java b/src/main/java/plugins/tprovoost/sequenceblocks/files/LoadMetadata.java
index 3a513a6..f4e913c 100644
--- a/src/main/java/plugins/tprovoost/sequenceblocks/files/LoadMetadata.java
+++ b/src/main/java/plugins/tprovoost/sequenceblocks/files/LoadMetadata.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010-2023. Institut Pasteur.
+ * Copyright (c) 2010-2024. Institut Pasteur.
  *
  * This file is part of Icy.
  * Icy is free software: you can redistribute it and/or modify
@@ -18,31 +18,33 @@
 
 package plugins.tprovoost.sequenceblocks.files;
 
-import icy.file.Loader;
-import icy.plugin.abstract_.Plugin;
-import icy.plugin.interface_.PluginBundled;
-import icy.plugin.interface_.PluginLibrary;
-import icy.sequence.MetaDataUtil;
 import ome.xml.meta.OMEXMLMetadata;
+import org.bioimageanalysis.icy.extension.plugin.abstract_.Plugin;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginIcon;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginName;
+import org.bioimageanalysis.icy.io.Loader;
+import org.bioimageanalysis.icy.model.sequence.MetaDataUtil;
+import org.jetbrains.annotations.NotNull;
 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.lang.VarMutable;
 import plugins.adufour.vars.util.VarException;
-import plugins.tprovoost.sequenceblocks.SequenceBlocks;
 
 import java.io.File;
 
 /**
  * Block to load Sequence metadata from a file
  *
- * @author Stephane
+ * @author Stephane Dallongeville
  */
-public class LoadMetadata extends Plugin implements SequenceBlock, PluginLibrary, PluginBundled {
+@IcyPluginName("Load Metadata")
+@IcyPluginIcon(path = "/SequenceBlocks_icon.png")
+public class LoadMetadata extends Plugin implements SequenceBlock {
     final protected VarMutable f_in = new VarMutable("File", null) {
         @Override
-        public boolean isAssignableFrom(final Var source) {
+        public boolean isAssignableFrom(final @NotNull Var source) {
             return (String.class == source.getType()) || (File.class == source.getType());
         }
     };
@@ -75,18 +77,13 @@ public class LoadMetadata extends Plugin implements SequenceBlock, PluginLibrary
     }
 
     @Override
-    public void declareInput(final VarList inputMap) {
+    public void declareInput(final @NotNull VarList inputMap) {
         inputMap.add("file", f_in);
     }
 
     @Override
-    public void declareOutput(final VarList outputMap) {
+    public void declareOutput(final @NotNull VarList outputMap) {
         outputMap.add("Metadata", output);
         outputMap.add("Serie number", numSerie);
     }
-
-    @Override
-    public String getMainPluginClassName() {
-        return SequenceBlocks.class.getName();
-    }
 }
diff --git a/src/main/java/plugins/tprovoost/sequenceblocks/files/LoadSequence.java b/src/main/java/plugins/tprovoost/sequenceblocks/files/LoadSequence.java
index 44acd9b..d52e71e 100644
--- a/src/main/java/plugins/tprovoost/sequenceblocks/files/LoadSequence.java
+++ b/src/main/java/plugins/tprovoost/sequenceblocks/files/LoadSequence.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010-2023. Institut Pasteur.
+ * Copyright (c) 2010-2024. Institut Pasteur.
  *
  * This file is part of Icy.
  * Icy is free software: you can redistribute it and/or modify
@@ -18,29 +18,31 @@
 
 package plugins.tprovoost.sequenceblocks.files;
 
-import icy.file.Loader;
-import icy.plugin.abstract_.Plugin;
-import icy.plugin.interface_.PluginBundled;
-import icy.plugin.interface_.PluginLibrary;
+import org.bioimageanalysis.icy.extension.plugin.abstract_.Plugin;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginIcon;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginName;
+import org.bioimageanalysis.icy.io.Loader;
+import org.jetbrains.annotations.NotNull;
 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.lang.VarMutable;
 import plugins.adufour.vars.lang.VarSequence;
-import plugins.tprovoost.sequenceblocks.SequenceBlocks;
 
 import java.io.File;
 
 /**
  * Block to load a Sequence from a file
  *
- * @author Stephane
+ * @author Stephane Dallongeville
  */
-public class LoadSequence extends Plugin implements SequenceBlock, PluginLibrary, PluginBundled {
+@IcyPluginName("Load Sequence")
+@IcyPluginIcon(path = "/SequenceBlocks_icon.png")
+public class LoadSequence extends Plugin implements SequenceBlock {
     final protected VarMutable f_in = new VarMutable("File", null) {
         @Override
-        public boolean isAssignableFrom(final Var source) {
+        public boolean isAssignableFrom(final @NotNull Var source) {
             return (String.class == source.getType()) || (File.class == source.getType());
         }
     };
@@ -66,19 +68,14 @@ public class LoadSequence extends Plugin implements SequenceBlock, PluginLibrary
     }
 
     @Override
-    public void declareInput(final VarList inputMap) {
+    public void declareInput(final @NotNull VarList inputMap) {
         inputMap.add("file", f_in);
         inputMap.add("serie", serie_in);
     }
 
     @Override
-    public void declareOutput(final VarList outputMap) {
+    public void declareOutput(final @NotNull VarList outputMap) {
         outputMap.add("sequence", outputSequence);
 
     }
-
-    @Override
-    public String getMainPluginClassName() {
-        return SequenceBlocks.class.getName();
-    }
 }
diff --git a/src/main/java/plugins/tprovoost/sequenceblocks/files/LoadSubSequence.java b/src/main/java/plugins/tprovoost/sequenceblocks/files/LoadSubSequence.java
index 4e0ed0f..543e476 100644
--- a/src/main/java/plugins/tprovoost/sequenceblocks/files/LoadSubSequence.java
+++ b/src/main/java/plugins/tprovoost/sequenceblocks/files/LoadSubSequence.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010-2023. Institut Pasteur.
+ * Copyright (c) 2010-2024. Institut Pasteur.
  *
  * This file is part of Icy.
  * Icy is free software: you can redistribute it and/or modify
@@ -18,26 +18,28 @@
 
 package plugins.tprovoost.sequenceblocks.files;
 
-import icy.file.Loader;
-import icy.file.SequenceFileImporter;
-import icy.plugin.abstract_.Plugin;
-import icy.plugin.interface_.PluginBundled;
-import icy.plugin.interface_.PluginLibrary;
-import icy.roi.ROI;
+import org.bioimageanalysis.icy.extension.plugin.abstract_.Plugin;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginIcon;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginName;
+import org.bioimageanalysis.icy.io.Loader;
+import org.bioimageanalysis.icy.io.SequenceFileImporter;
+import org.bioimageanalysis.icy.model.roi.ROI;
+import org.jetbrains.annotations.NotNull;
 import plugins.adufour.blocks.tools.io.IOBlock;
 import plugins.adufour.blocks.util.VarList;
 import plugins.adufour.vars.lang.*;
 import plugins.adufour.vars.util.VarException;
-import plugins.tprovoost.sequenceblocks.SequenceBlocks;
 
 import java.io.File;
 
 /**
  * Block to returns a Sequence with the given parameters from the specified closed) SequenceFileImporter.
  *
- * @author Stephane
+ * @author Stephane Dallongeville
  */
-public class LoadSubSequence extends Plugin implements IOBlock, PluginLibrary, PluginBundled {
+@IcyPluginName("Load Sub-Sequence")
+@IcyPluginIcon(path = "/SequenceBlocks_icon.png")
+public class LoadSubSequence extends Plugin implements IOBlock {
     final protected Var<SequenceFileImporter> importer;
     final protected VarMutable file;
     final protected VarInteger series;
@@ -126,7 +128,7 @@ public class LoadSubSequence extends Plugin implements IOBlock, PluginLibrary, P
     }
 
     @Override
-    public void declareInput(final VarList inputMap) {
+    public void declareInput(final @NotNull VarList inputMap) {
         inputMap.add("file", file);
         inputMap.add("importer", importer);
         inputMap.add("series", series);
@@ -141,12 +143,7 @@ public class LoadSubSequence extends Plugin implements IOBlock, PluginLibrary, P
     }
 
     @Override
-    public void declareOutput(final VarList outputMap) {
+    public void declareOutput(final @NotNull VarList outputMap) {
         outputMap.add("sequence", sequence);
     }
-
-    @Override
-    public String getMainPluginClassName() {
-        return SequenceBlocks.class.getName();
-    }
 }
diff --git a/src/main/java/plugins/tprovoost/sequenceblocks/files/SaveMetadata.java b/src/main/java/plugins/tprovoost/sequenceblocks/files/SaveMetadata.java
index 7fadf75..8ad3e5d 100644
--- a/src/main/java/plugins/tprovoost/sequenceblocks/files/SaveMetadata.java
+++ b/src/main/java/plugins/tprovoost/sequenceblocks/files/SaveMetadata.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010-2023. Institut Pasteur.
+ * Copyright (c) 2010-2024. Institut Pasteur.
  *
  * This file is part of Icy.
  * Icy is free software: you can redistribute it and/or modify
@@ -18,23 +18,25 @@
 
 package plugins.tprovoost.sequenceblocks.files;
 
-import icy.plugin.abstract_.Plugin;
-import icy.plugin.interface_.PluginBundled;
-import icy.plugin.interface_.PluginLibrary;
-import icy.sequence.Sequence;
+import org.bioimageanalysis.icy.extension.plugin.abstract_.Plugin;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginIcon;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginName;
+import org.bioimageanalysis.icy.model.sequence.Sequence;
+import org.jetbrains.annotations.NotNull;
 import plugins.adufour.blocks.tools.sequence.SequenceBlock;
 import plugins.adufour.blocks.util.VarList;
 import plugins.adufour.vars.lang.VarBoolean;
 import plugins.adufour.vars.lang.VarSequence;
 import plugins.adufour.vars.util.VarException;
-import plugins.tprovoost.sequenceblocks.SequenceBlocks;
 
 /**
  * Block to save Sequence metadata
  *
- * @author Stephane
+ * @author Stephane Dallongeville
  */
-public class SaveMetadata extends Plugin implements SequenceBlock, PluginLibrary, PluginBundled {
+@IcyPluginName("Save Metadata")
+@IcyPluginIcon(path = "/SequenceBlocks_icon.png")
+public class SaveMetadata extends Plugin implements SequenceBlock {
     final protected VarSequence sequence = new VarSequence("Sequence", null);
     final protected VarBoolean success = new VarBoolean("Success", Boolean.FALSE);
 
@@ -48,17 +50,12 @@ public class SaveMetadata extends Plugin implements SequenceBlock, PluginLibrary
     }
 
     @Override
-    public void declareInput(final VarList inputMap) {
+    public void declareInput(final @NotNull VarList inputMap) {
         inputMap.add("sequence", sequence);
     }
 
     @Override
-    public void declareOutput(final VarList outputMap) {
+    public void declareOutput(final @NotNull VarList outputMap) {
         outputMap.add("success", success);
     }
-
-    @Override
-    public String getMainPluginClassName() {
-        return SequenceBlocks.class.getName();
-    }
 }
diff --git a/src/main/java/plugins/tprovoost/sequenceblocks/files/SaveSequence.java b/src/main/java/plugins/tprovoost/sequenceblocks/files/SaveSequence.java
index 5946db4..2a334c3 100644
--- a/src/main/java/plugins/tprovoost/sequenceblocks/files/SaveSequence.java
+++ b/src/main/java/plugins/tprovoost/sequenceblocks/files/SaveSequence.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010-2023. Institut Pasteur.
+ * Copyright (c) 2010-2024. Institut Pasteur.
  *
  * This file is part of Icy.
  * Icy is free software: you can redistribute it and/or modify
@@ -18,30 +18,32 @@
 
 package plugins.tprovoost.sequenceblocks.files;
 
-import icy.file.FileUtil;
-import icy.file.ImageFileFormat;
-import icy.file.Saver;
-import icy.plugin.abstract_.Plugin;
-import icy.plugin.interface_.PluginBundled;
-import icy.plugin.interface_.PluginLibrary;
-import icy.sequence.Sequence;
+import org.bioimageanalysis.icy.extension.plugin.abstract_.Plugin;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginIcon;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginName;
+import org.bioimageanalysis.icy.io.FileUtil;
+import org.bioimageanalysis.icy.io.ImageFileFormat;
+import org.bioimageanalysis.icy.io.Saver;
+import org.bioimageanalysis.icy.model.sequence.Sequence;
+import org.jetbrains.annotations.NotNull;
 import plugins.adufour.blocks.tools.sequence.SequenceBlock;
 import plugins.adufour.blocks.util.VarList;
 import plugins.adufour.vars.lang.*;
 import plugins.adufour.vars.util.VarException;
-import plugins.tprovoost.sequenceblocks.SequenceBlocks;
 
 import java.io.File;
 
 /**
  * Block to save a Sequence into a file
  *
- * @author Stephane
+ * @author Stephane Dallongeville
  */
-public class SaveSequence extends Plugin implements SequenceBlock, PluginLibrary, PluginBundled {
+@IcyPluginName("Save Sequence")
+@IcyPluginIcon(path = "/SequenceBlocks_icon.png")
+public class SaveSequence extends Plugin implements SequenceBlock {
     final protected VarMutable f_in = new VarMutable("File", null) {
         @Override
-        public boolean isAssignableFrom(final Var source) {
+        public boolean isAssignableFrom(final @NotNull Var source) {
             return String.class == source.getType() || File.class == source.getType();
         }
     };
@@ -83,7 +85,7 @@ public class SaveSequence extends Plugin implements SequenceBlock, PluginLibrary
     }
 
     @Override
-    public void declareInput(final VarList inputMap) {
+    public void declareInput(final @NotNull VarList inputMap) {
         inputMap.add("file", f_in);
         inputMap.add("sequence", sequence);
         inputMap.add("format", format);
@@ -95,9 +97,4 @@ public class SaveSequence extends Plugin implements SequenceBlock, PluginLibrary
     public void declareOutput(final VarList outputMap) {
         //
     }
-
-    @Override
-    public String getMainPluginClassName() {
-        return SequenceBlocks.class.getName();
-    }
 }
diff --git a/src/main/java/plugins/tprovoost/sequenceblocks/images/AddImage.java b/src/main/java/plugins/tprovoost/sequenceblocks/images/AddImage.java
index bddbd90..a62971e 100644
--- a/src/main/java/plugins/tprovoost/sequenceblocks/images/AddImage.java
+++ b/src/main/java/plugins/tprovoost/sequenceblocks/images/AddImage.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010-2023. Institut Pasteur.
+ * Copyright (c) 2010-2024. Institut Pasteur.
  *
  * This file is part of Icy.
  * Icy is free software: you can redistribute it and/or modify
@@ -18,24 +18,26 @@
 
 package plugins.tprovoost.sequenceblocks.images;
 
-import icy.image.IcyBufferedImage;
-import icy.plugin.abstract_.Plugin;
-import icy.plugin.interface_.PluginBundled;
-import icy.plugin.interface_.PluginLibrary;
-import icy.sequence.Sequence;
+import org.bioimageanalysis.icy.extension.plugin.abstract_.Plugin;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginIcon;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginName;
+import org.bioimageanalysis.icy.model.image.IcyBufferedImage;
+import org.bioimageanalysis.icy.model.sequence.Sequence;
+import org.jetbrains.annotations.NotNull;
 import plugins.adufour.blocks.tools.sequence.SequenceBlock;
 import plugins.adufour.blocks.util.VarList;
 import plugins.adufour.vars.lang.Var;
 import plugins.adufour.vars.lang.VarSequence;
 import plugins.adufour.vars.util.VarException;
-import plugins.tprovoost.sequenceblocks.SequenceBlocks;
 
 /**
  * Add an image to the Sequence.
  *
- * @author thomasprovoost
+ * @author Thomas Provoost
  */
-public class AddImage extends Plugin implements SequenceBlock, PluginLibrary, PluginBundled {
+@IcyPluginName("Add Image")
+@IcyPluginIcon(path = "/SequenceBlocks_icon.png")
+public class AddImage extends Plugin implements SequenceBlock {
     final protected Var<IcyBufferedImage> in = new Var<>("Image", IcyBufferedImage.class);
     final protected VarSequence varSeq = new VarSequence("Sequence", null);
 
@@ -48,7 +50,7 @@ public class AddImage extends Plugin implements SequenceBlock, PluginLibrary, Pl
     }
 
     @Override
-    public void declareInput(final VarList inputMap) {
+    public void declareInput(final @NotNull VarList inputMap) {
         inputMap.add("sequence", varSeq);
         inputMap.add("image", in);
     }
@@ -57,9 +59,4 @@ public class AddImage extends Plugin implements SequenceBlock, PluginLibrary, Pl
     public void declareOutput(final VarList outputMap) {
         //
     }
-
-    @Override
-    public String getMainPluginClassName() {
-        return SequenceBlocks.class.getName();
-    }
 }
diff --git a/src/main/java/plugins/tprovoost/sequenceblocks/images/AsImageArray.java b/src/main/java/plugins/tprovoost/sequenceblocks/images/AsImageArray.java
index a9d5193..6833000 100644
--- a/src/main/java/plugins/tprovoost/sequenceblocks/images/AsImageArray.java
+++ b/src/main/java/plugins/tprovoost/sequenceblocks/images/AsImageArray.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010-2023. Institut Pasteur.
+ * Copyright (c) 2010-2024. Institut Pasteur.
  *
  * This file is part of Icy.
  * Icy is free software: you can redistribute it and/or modify
@@ -18,24 +18,26 @@
 
 package plugins.tprovoost.sequenceblocks.images;
 
-import icy.image.IcyBufferedImage;
-import icy.plugin.abstract_.Plugin;
-import icy.plugin.interface_.PluginBundled;
-import icy.plugin.interface_.PluginLibrary;
-import icy.sequence.Sequence;
+import org.bioimageanalysis.icy.extension.plugin.abstract_.Plugin;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginIcon;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginName;
+import org.bioimageanalysis.icy.model.image.IcyBufferedImage;
+import org.bioimageanalysis.icy.model.sequence.Sequence;
+import org.jetbrains.annotations.NotNull;
 import plugins.adufour.blocks.tools.sequence.SequenceBlock;
 import plugins.adufour.blocks.util.VarList;
 import plugins.adufour.vars.lang.VarArray;
 import plugins.adufour.vars.lang.VarSequence;
 import plugins.adufour.vars.util.VarException;
-import plugins.tprovoost.sequenceblocks.SequenceBlocks;
 
 /**
  * Returns all images from the Sequence as an image array.
  *
- * @author thomasprovoost
+ * @author Thomas Provoost
  */
-public class AsImageArray extends Plugin implements SequenceBlock, PluginLibrary, PluginBundled {
+@IcyPluginName("Get Images")
+@IcyPluginIcon(path = "/SequenceBlocks_icon.png")
+public class AsImageArray extends Plugin implements SequenceBlock {
     final protected VarArray<IcyBufferedImage> out = new VarArray<>("Image array", IcyBufferedImage[].class, null);
     final protected VarSequence varSeq = new VarSequence("Sequence", null);
 
@@ -48,17 +50,12 @@ public class AsImageArray extends Plugin implements SequenceBlock, PluginLibrary
     }
 
     @Override
-    public void declareInput(final VarList inputMap) {
+    public void declareInput(final @NotNull VarList inputMap) {
         inputMap.add("sequence", varSeq);
     }
 
     @Override
-    public void declareOutput(final VarList outputMap) {
+    public void declareOutput(final @NotNull VarList outputMap) {
         outputMap.add("image array", out);
     }
-
-    @Override
-    public String getMainPluginClassName() {
-        return SequenceBlocks.class.getName();
-    }
 }
diff --git a/src/main/java/plugins/tprovoost/sequenceblocks/images/GetImage.java b/src/main/java/plugins/tprovoost/sequenceblocks/images/GetImage.java
index 71c0775..92774af 100644
--- a/src/main/java/plugins/tprovoost/sequenceblocks/images/GetImage.java
+++ b/src/main/java/plugins/tprovoost/sequenceblocks/images/GetImage.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010-2023. Institut Pasteur.
+ * Copyright (c) 2010-2024. Institut Pasteur.
  *
  * This file is part of Icy.
  * Icy is free software: you can redistribute it and/or modify
@@ -18,25 +18,27 @@
 
 package plugins.tprovoost.sequenceblocks.images;
 
-import icy.image.IcyBufferedImage;
-import icy.plugin.abstract_.Plugin;
-import icy.plugin.interface_.PluginBundled;
-import icy.plugin.interface_.PluginLibrary;
-import icy.sequence.Sequence;
+import org.bioimageanalysis.icy.extension.plugin.abstract_.Plugin;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginIcon;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginName;
+import org.bioimageanalysis.icy.model.image.IcyBufferedImage;
+import org.bioimageanalysis.icy.model.sequence.Sequence;
+import org.jetbrains.annotations.NotNull;
 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.lang.VarSequence;
 import plugins.adufour.vars.util.VarException;
-import plugins.tprovoost.sequenceblocks.SequenceBlocks;
 
 /**
  * Get the image at the given [T,Z] position from the Sequence.
  *
- * @author thomasprovoost
+ * @author Thomas Provoost
  */
-public class GetImage extends Plugin implements SequenceBlock, PluginLibrary, PluginBundled {
+@IcyPluginName("Get Image")
+@IcyPluginIcon(path = "/SequenceBlocks_icon.png")
+public class GetImage extends Plugin implements SequenceBlock {
     final protected VarSequence varSeq = new VarSequence("Sequence", null);
     final protected VarInteger imgIdxT = new VarInteger("T", -1);
     final protected VarInteger imgIdxZ = new VarInteger("Z", -1);
@@ -51,19 +53,14 @@ public class GetImage extends Plugin implements SequenceBlock, PluginLibrary, Pl
     }
 
     @Override
-    public void declareInput(final VarList inputMap) {
+    public void declareInput(final @NotNull VarList inputMap) {
         inputMap.add("sequence", varSeq);
         inputMap.add("Idx T", imgIdxT);
         inputMap.add("Idx Z", imgIdxZ);
     }
 
     @Override
-    public void declareOutput(final VarList outputMap) {
+    public void declareOutput(final @NotNull VarList outputMap) {
         outputMap.add("out", out);
     }
-
-    @Override
-    public String getMainPluginClassName() {
-        return SequenceBlocks.class.getName();
-    }
 }
diff --git a/src/main/java/plugins/tprovoost/sequenceblocks/images/RemoveImage.java b/src/main/java/plugins/tprovoost/sequenceblocks/images/RemoveImage.java
index ff67393..dfeeccc 100644
--- a/src/main/java/plugins/tprovoost/sequenceblocks/images/RemoveImage.java
+++ b/src/main/java/plugins/tprovoost/sequenceblocks/images/RemoveImage.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010-2023. Institut Pasteur.
+ * Copyright (c) 2010-2024. Institut Pasteur.
  *
  * This file is part of Icy.
  * Icy is free software: you can redistribute it and/or modify
@@ -18,23 +18,25 @@
 
 package plugins.tprovoost.sequenceblocks.images;
 
-import icy.plugin.abstract_.Plugin;
-import icy.plugin.interface_.PluginBundled;
-import icy.plugin.interface_.PluginLibrary;
-import icy.sequence.Sequence;
+import org.bioimageanalysis.icy.extension.plugin.abstract_.Plugin;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginIcon;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginName;
+import org.bioimageanalysis.icy.model.sequence.Sequence;
+import org.jetbrains.annotations.NotNull;
 import plugins.adufour.blocks.tools.sequence.SequenceBlock;
 import plugins.adufour.blocks.util.VarList;
 import plugins.adufour.vars.lang.VarInteger;
 import plugins.adufour.vars.lang.VarSequence;
 import plugins.adufour.vars.util.VarException;
-import plugins.tprovoost.sequenceblocks.SequenceBlocks;
 
 /**
  * Remove an image from the Sequence.
  *
- * @author thomasprovoost
+ * @author Thomas Provoost
  */
-public class RemoveImage extends Plugin implements SequenceBlock, PluginLibrary, PluginBundled {
+@IcyPluginName("Remove Image")
+@IcyPluginIcon(path = "/SequenceBlocks_icon.png")
+public class RemoveImage extends Plugin implements SequenceBlock {
     VarSequence varSeq = new VarSequence("Sequence", null);
     VarInteger imgIdxT = new VarInteger("T", 0);
     VarInteger imgIdxZ = new VarInteger("Z", 0);
@@ -49,7 +51,7 @@ public class RemoveImage extends Plugin implements SequenceBlock, PluginLibrary,
     }
 
     @Override
-    public void declareInput(final VarList inputMap) {
+    public void declareInput(final @NotNull VarList inputMap) {
         inputMap.add("sequence", varSeq);
         inputMap.add("Idx T", imgIdxT);
         inputMap.add("Idx Z", imgIdxZ);
@@ -59,9 +61,4 @@ public class RemoveImage extends Plugin implements SequenceBlock, PluginLibrary,
     public void declareOutput(final VarList outputMap) {
         //
     }
-
-    @Override
-    public String getMainPluginClassName() {
-        return SequenceBlocks.class.getName();
-    }
 }
diff --git a/src/main/java/plugins/tprovoost/sequenceblocks/images/SetImage.java b/src/main/java/plugins/tprovoost/sequenceblocks/images/SetImage.java
index 433321b..f8e9d63 100644
--- a/src/main/java/plugins/tprovoost/sequenceblocks/images/SetImage.java
+++ b/src/main/java/plugins/tprovoost/sequenceblocks/images/SetImage.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010-2023. Institut Pasteur.
+ * Copyright (c) 2010-2024. Institut Pasteur.
  *
  * This file is part of Icy.
  * Icy is free software: you can redistribute it and/or modify
@@ -18,25 +18,27 @@
 
 package plugins.tprovoost.sequenceblocks.images;
 
-import icy.image.IcyBufferedImage;
-import icy.plugin.abstract_.Plugin;
-import icy.plugin.interface_.PluginBundled;
-import icy.plugin.interface_.PluginLibrary;
-import icy.sequence.Sequence;
+import org.bioimageanalysis.icy.extension.plugin.abstract_.Plugin;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginIcon;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginName;
+import org.bioimageanalysis.icy.model.image.IcyBufferedImage;
+import org.bioimageanalysis.icy.model.sequence.Sequence;
+import org.jetbrains.annotations.NotNull;
 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.lang.VarSequence;
 import plugins.adufour.vars.util.VarException;
-import plugins.tprovoost.sequenceblocks.SequenceBlocks;
 
 /**
  * Set an image at the given [T,Z] position from the Sequence.
  *
- * @author thomasprovoost
+ * @author Thomas Provoost
  */
-public class SetImage extends Plugin implements SequenceBlock, PluginLibrary, PluginBundled {
+@IcyPluginName("Set Iamge")
+@IcyPluginIcon(path = "/SequenceBlocks_icon.png")
+public class SetImage extends Plugin implements SequenceBlock {
     Var<IcyBufferedImage> in = new Var<>("Image", IcyBufferedImage.class);
     VarSequence varSeq = new VarSequence("Sequence", null);
     VarInteger imgIdxT = new VarInteger("T", 0);
@@ -51,7 +53,7 @@ public class SetImage extends Plugin implements SequenceBlock, PluginLibrary, Pl
     }
 
     @Override
-    public void declareInput(final VarList inputMap) {
+    public void declareInput(final @NotNull VarList inputMap) {
         inputMap.add("sequence", varSeq);
         inputMap.add("image", in);
         inputMap.add("Idx T", imgIdxT);
@@ -62,9 +64,4 @@ public class SetImage extends Plugin implements SequenceBlock, PluginLibrary, Pl
     public void declareOutput(final VarList outputMap) {
         //
     }
-
-    @Override
-    public String getMainPluginClassName() {
-        return SequenceBlocks.class.getName();
-    }
 }
diff --git a/src/main/java/plugins/tprovoost/sequenceblocks/importer/PositionedSequenceFileImporter.java b/src/main/java/plugins/tprovoost/sequenceblocks/importer/PositionedSequenceFileImporter.java
index 3485794..3ee88cc 100644
--- a/src/main/java/plugins/tprovoost/sequenceblocks/importer/PositionedSequenceFileImporter.java
+++ b/src/main/java/plugins/tprovoost/sequenceblocks/importer/PositionedSequenceFileImporter.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010-2023. Institut Pasteur.
+ * Copyright (c) 2010-2024. Institut Pasteur.
  *
  * This file is part of Icy.
  * Icy is free software: you can redistribute it and/or modify
@@ -18,19 +18,19 @@
 
 package plugins.tprovoost.sequenceblocks.importer;
 
-import icy.common.exception.UnsupportedFormatException;
-import icy.file.SequenceFileImporter;
-import icy.sequence.MetaDataUtil;
 import ome.xml.meta.OMEXMLMetadata;
+import org.bioimageanalysis.icy.io.SequenceFileImporter;
+import org.bioimageanalysis.icy.model.sequence.MetaDataUtil;
+import org.jetbrains.annotations.Contract;
+import org.jetbrains.annotations.NotNull;
 
 import java.awt.*;
-import java.io.IOException;
 
 /**
  * This class allow to use a {@link SequenceFileImporter} while storing a current position information to make its usage
  * more convenient with Protocols.
  *
- * @author Stephane
+ * @author Stephane Dallongeville
  */
 public class PositionedSequenceFileImporter {
     public SequenceFileImporter importer;
@@ -41,7 +41,16 @@ public class PositionedSequenceFileImporter {
     public int c;
     public Rectangle xyRegion;
 
-    public PositionedSequenceFileImporter(final SequenceFileImporter importer, final OMEXMLMetadata metadata, final int s, final int t, final int z, final int c, final Rectangle xyRegion) {
+    @Contract(pure = true)
+    public PositionedSequenceFileImporter(
+            final SequenceFileImporter importer,
+            final OMEXMLMetadata metadata,
+            final int s,
+            final int t,
+            final int z,
+            final int c,
+            final Rectangle xyRegion
+    ) {
         super();
 
         this.importer = importer;
@@ -53,11 +62,13 @@ public class PositionedSequenceFileImporter {
         this.c = c;
     }
 
+    @Contract(pure = true)
     public PositionedSequenceFileImporter(final SequenceFileImporter importer) {
         this(importer, null, -1, -1, -1, -1, null);
     }
 
-    public PositionedSequenceFileImporter(final PositionedSequenceFileImporter positionedImporter) {
+    @Contract(pure = true)
+    public PositionedSequenceFileImporter(final @NotNull PositionedSequenceFileImporter positionedImporter) {
         this(
                 positionedImporter.importer,
                 positionedImporter.metadata,
@@ -69,7 +80,7 @@ public class PositionedSequenceFileImporter {
         );
     }
 
-    public OMEXMLMetadata getMetadata() throws UnsupportedFormatException, IOException, InterruptedException {
+    public OMEXMLMetadata getMetadata() throws Exception {
         // not yet defined --> take it from importer if possible
         if ((metadata == null) && (importer.getOpened() != null)) {
             metadata = importer.getOMEXMLMetaData();
diff --git a/src/main/java/plugins/tprovoost/sequenceblocks/importer/SequenceFileImporterClose.java b/src/main/java/plugins/tprovoost/sequenceblocks/importer/SequenceFileImporterClose.java
index 57ef466..c6116ef 100644
--- a/src/main/java/plugins/tprovoost/sequenceblocks/importer/SequenceFileImporterClose.java
+++ b/src/main/java/plugins/tprovoost/sequenceblocks/importer/SequenceFileImporterClose.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010-2023. Institut Pasteur.
+ * Copyright (c) 2010-2024. Institut Pasteur.
  *
  * This file is part of Icy.
  * Icy is free software: you can redistribute it and/or modify
@@ -18,21 +18,23 @@
 
 package plugins.tprovoost.sequenceblocks.importer;
 
-import icy.plugin.abstract_.Plugin;
-import icy.plugin.interface_.PluginBundled;
-import icy.plugin.interface_.PluginLibrary;
+import org.bioimageanalysis.icy.extension.plugin.abstract_.Plugin;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginIcon;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginName;
+import org.jetbrains.annotations.NotNull;
 import plugins.adufour.blocks.tools.io.IOBlock;
 import plugins.adufour.blocks.util.VarList;
 import plugins.adufour.vars.lang.Var;
 import plugins.adufour.vars.util.VarException;
-import plugins.tprovoost.sequenceblocks.SequenceBlocks;
 
 /**
  * Block to close currently opened SequenceFileImporter.
  *
- * @author Stephane
+ * @author Stephane Dallongeville
  */
-public class SequenceFileImporterClose extends Plugin implements IOBlock, PluginLibrary, PluginBundled {
+@IcyPluginName("Close SequenceFileImporter")
+@IcyPluginIcon(path = "/SequenceBlocks_icon.png")
+public class SequenceFileImporterClose extends Plugin implements IOBlock {
     final protected Var<PositionedSequenceFileImporter> importer;
 
     public SequenceFileImporterClose() {
@@ -57,7 +59,7 @@ public class SequenceFileImporterClose extends Plugin implements IOBlock, Plugin
     }
 
     @Override
-    public void declareInput(final VarList inputMap) {
+    public void declareInput(final @NotNull VarList inputMap) {
         inputMap.add("importer", importer);
     }
 
@@ -65,9 +67,4 @@ public class SequenceFileImporterClose extends Plugin implements IOBlock, Plugin
     public void declareOutput(final VarList outputMap) {
         //
     }
-
-    @Override
-    public String getMainPluginClassName() {
-        return SequenceBlocks.class.getName();
-    }
 }
diff --git a/src/main/java/plugins/tprovoost/sequenceblocks/importer/SequenceFileImporterGetImage.java b/src/main/java/plugins/tprovoost/sequenceblocks/importer/SequenceFileImporterGetImage.java
index dbfbc9b..fd531d6 100644
--- a/src/main/java/plugins/tprovoost/sequenceblocks/importer/SequenceFileImporterGetImage.java
+++ b/src/main/java/plugins/tprovoost/sequenceblocks/importer/SequenceFileImporterGetImage.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010-2023. Institut Pasteur.
+ * Copyright (c) 2010-2024. Institut Pasteur.
  *
  * This file is part of Icy.
  * Icy is free software: you can redistribute it and/or modify
@@ -18,28 +18,30 @@
 
 package plugins.tprovoost.sequenceblocks.importer;
 
-import icy.file.SequenceFileImporter;
-import icy.image.IcyBufferedImage;
-import icy.plugin.abstract_.Plugin;
-import icy.plugin.interface_.PluginBundled;
-import icy.plugin.interface_.PluginLibrary;
-import icy.roi.ROI;
+import org.bioimageanalysis.icy.extension.plugin.abstract_.Plugin;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginIcon;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginName;
+import org.bioimageanalysis.icy.io.SequenceFileImporter;
+import org.bioimageanalysis.icy.model.image.IcyBufferedImage;
+import org.bioimageanalysis.icy.model.roi.ROI;
+import org.jetbrains.annotations.NotNull;
 import plugins.adufour.blocks.tools.io.IOBlock;
 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.SequenceBlocks;
 
 import java.awt.*;
 
 /**
  * Block to returns an image from the given parameters and opened SequenceFileImporter.
  *
- * @author Stephane
+ * @author Stephane Dallongeville
  */
-public class SequenceFileImporterGetImage extends Plugin implements IOBlock, PluginLibrary, PluginBundled {
+@IcyPluginName("Get Image from SequenceFileImporter")
+@IcyPluginIcon(path = "/SequenceBlocks_icon.png")
+public class SequenceFileImporterGetImage extends Plugin implements IOBlock {
     final protected Var<PositionedSequenceFileImporter> importer;
     final protected VarInteger series;
     final protected VarInteger resolution;
@@ -111,7 +113,7 @@ public class SequenceFileImporterGetImage extends Plugin implements IOBlock, Plu
     }
 
     @Override
-    public void declareInput(final VarList inputMap) {
+    public void declareInput(final @NotNull VarList inputMap) {
         inputMap.add("importer", importer);
         inputMap.add("series", series);
         inputMap.add("resolution", resolution);
@@ -122,12 +124,7 @@ public class SequenceFileImporterGetImage extends Plugin implements IOBlock, Plu
     }
 
     @Override
-    public void declareOutput(final VarList outputMap) {
+    public void declareOutput(final @NotNull VarList outputMap) {
         outputMap.add("image", image);
     }
-
-    @Override
-    public String getMainPluginClassName() {
-        return SequenceBlocks.class.getName();
-    }
 }
diff --git a/src/main/java/plugins/tprovoost/sequenceblocks/importer/SequenceFileImporterGetMetadata.java b/src/main/java/plugins/tprovoost/sequenceblocks/importer/SequenceFileImporterGetMetadata.java
index 06f9280..1c955c4 100644
--- a/src/main/java/plugins/tprovoost/sequenceblocks/importer/SequenceFileImporterGetMetadata.java
+++ b/src/main/java/plugins/tprovoost/sequenceblocks/importer/SequenceFileImporterGetMetadata.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010-2023. Institut Pasteur.
+ * Copyright (c) 2010-2024. Institut Pasteur.
  *
  * This file is part of Icy.
  * Icy is free software: you can redistribute it and/or modify
@@ -18,27 +18,29 @@
 
 package plugins.tprovoost.sequenceblocks.importer;
 
-import icy.file.SequenceFileImporter;
-import icy.plugin.abstract_.Plugin;
-import icy.plugin.interface_.PluginBundled;
-import icy.plugin.interface_.PluginLibrary;
-import icy.sequence.MetaDataUtil;
 import ome.xml.meta.OMEXMLMetadata;
+import org.bioimageanalysis.icy.extension.plugin.abstract_.Plugin;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginIcon;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginName;
+import org.bioimageanalysis.icy.io.SequenceFileImporter;
+import org.bioimageanalysis.icy.model.sequence.MetaDataUtil;
+import org.jetbrains.annotations.NotNull;
 import plugins.adufour.blocks.tools.io.IOBlock;
 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.infos.ReadMetadata;
 
 /**
  * Block to returns the metadata from the specified opened SequenceFileImporter.
  *
- * @author Stephane
+ * @author Stephane Dallongeville
  * @see ReadMetadata
  */
-public class SequenceFileImporterGetMetadata extends Plugin implements IOBlock, PluginLibrary, PluginBundled {
+@IcyPluginName("Get Metadata from SequenceFileImporter")
+@IcyPluginIcon(path = "/SequenceBlocks_icon.png")
+public class SequenceFileImporterGetMetadata extends Plugin implements IOBlock {
     final protected Var<PositionedSequenceFileImporter> importer;
     final protected Var<OMEXMLMetadata> metadata;
     final protected VarInteger numSeries;
@@ -77,18 +79,13 @@ public class SequenceFileImporterGetMetadata extends Plugin implements IOBlock,
     }
 
     @Override
-    public void declareInput(final VarList inputMap) {
+    public void declareInput(final @NotNull VarList inputMap) {
         inputMap.add("importer", importer);
     }
 
     @Override
-    public void declareOutput(final VarList outputMap) {
+    public void declareOutput(final @NotNull VarList outputMap) {
         outputMap.add("metadata", metadata);
         outputMap.add("numSerie", numSeries);
     }
-
-    @Override
-    public String getMainPluginClassName() {
-        return SequenceBlocks.class.getName();
-    }
 }
diff --git a/src/main/java/plugins/tprovoost/sequenceblocks/importer/SequenceFileImporterGetThumbnail.java b/src/main/java/plugins/tprovoost/sequenceblocks/importer/SequenceFileImporterGetThumbnail.java
index a8057ce..9e93389 100644
--- a/src/main/java/plugins/tprovoost/sequenceblocks/importer/SequenceFileImporterGetThumbnail.java
+++ b/src/main/java/plugins/tprovoost/sequenceblocks/importer/SequenceFileImporterGetThumbnail.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010-2023. Institut Pasteur.
+ * Copyright (c) 2010-2024. Institut Pasteur.
  *
  * This file is part of Icy.
  * Icy is free software: you can redistribute it and/or modify
@@ -18,24 +18,26 @@
 
 package plugins.tprovoost.sequenceblocks.importer;
 
-import icy.file.SequenceFileImporter;
-import icy.image.IcyBufferedImage;
-import icy.plugin.abstract_.Plugin;
-import icy.plugin.interface_.PluginBundled;
-import icy.plugin.interface_.PluginLibrary;
+import org.bioimageanalysis.icy.extension.plugin.abstract_.Plugin;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginIcon;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginName;
+import org.bioimageanalysis.icy.io.SequenceFileImporter;
+import org.bioimageanalysis.icy.model.image.IcyBufferedImage;
+import org.jetbrains.annotations.NotNull;
 import plugins.adufour.blocks.tools.io.IOBlock;
 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;
 
 /**
  * Block to returns a thumbnail from the specified opened SequenceFileImporter.
  *
- * @author Stephane
+ * @author Stephane Dallongeville
  */
-public class SequenceFileImporterGetThumbnail extends Plugin implements IOBlock, PluginLibrary, PluginBundled {
+@IcyPluginName("Get Thumbnail from SequenceFileImporter")
+@IcyPluginIcon(path = "/SequenceBlocks_icon.png")
+public class SequenceFileImporterGetThumbnail extends Plugin implements IOBlock {
     final protected Var<PositionedSequenceFileImporter> importer;
     final protected VarInteger series;
     final protected Var<IcyBufferedImage> thumbnail;
@@ -71,18 +73,13 @@ public class SequenceFileImporterGetThumbnail extends Plugin implements IOBlock,
     }
 
     @Override
-    public void declareInput(final VarList inputMap) {
+    public void declareInput(final @NotNull VarList inputMap) {
         inputMap.add("importer", importer);
         inputMap.add("series", series);
     }
 
     @Override
-    public void declareOutput(final VarList outputMap) {
+    public void declareOutput(final @NotNull VarList outputMap) {
         outputMap.add("thumbnail", thumbnail);
     }
-
-    @Override
-    public String getMainPluginClassName() {
-        return SequenceBlocks.class.getName();
-    }
 }
diff --git a/src/main/java/plugins/tprovoost/sequenceblocks/importer/SequenceFileImporterGetTileSize.java b/src/main/java/plugins/tprovoost/sequenceblocks/importer/SequenceFileImporterGetTileSize.java
index 3d7f3c9..c4e5904 100644
--- a/src/main/java/plugins/tprovoost/sequenceblocks/importer/SequenceFileImporterGetTileSize.java
+++ b/src/main/java/plugins/tprovoost/sequenceblocks/importer/SequenceFileImporterGetTileSize.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010-2023. Institut Pasteur.
+ * Copyright (c) 2010-2024. Institut Pasteur.
  *
  * This file is part of Icy.
  * Icy is free software: you can redistribute it and/or modify
@@ -18,23 +18,25 @@
 
 package plugins.tprovoost.sequenceblocks.importer;
 
-import icy.file.SequenceFileImporter;
-import icy.plugin.abstract_.Plugin;
-import icy.plugin.interface_.PluginBundled;
-import icy.plugin.interface_.PluginLibrary;
+import org.bioimageanalysis.icy.extension.plugin.abstract_.Plugin;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginIcon;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginName;
+import org.bioimageanalysis.icy.io.SequenceFileImporter;
+import org.jetbrains.annotations.NotNull;
 import plugins.adufour.blocks.tools.io.IOBlock;
 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;
 
 /**
  * Block to returns the optimal tile size for region reading from the specified opened SequenceFileImporter.
  *
- * @author Stephane
+ * @author Stephane Dallongeville
  */
-public class SequenceFileImporterGetTileSize extends Plugin implements IOBlock, PluginLibrary, PluginBundled {
+@IcyPluginName("Get Tile Size from SequenceFileImporter")
+@IcyPluginIcon(path = "/SequenceBlocks_icon.png")
+public class SequenceFileImporterGetTileSize extends Plugin implements IOBlock {
     final protected Var<PositionedSequenceFileImporter> importer;
     final protected VarInteger series;
     final protected VarInteger tileW;
@@ -73,19 +75,14 @@ public class SequenceFileImporterGetTileSize extends Plugin implements IOBlock,
     }
 
     @Override
-    public void declareInput(final VarList inputMap) {
+    public void declareInput(final @NotNull VarList inputMap) {
         inputMap.add("importer", importer);
         inputMap.add("series", series);
     }
 
     @Override
-    public void declareOutput(final VarList outputMap) {
+    public void declareOutput(final @NotNull VarList outputMap) {
         outputMap.add("tileW", tileW);
         outputMap.add("tileH", tileH);
     }
-
-    @Override
-    public String getMainPluginClassName() {
-        return SequenceBlocks.class.getName();
-    }
 }
diff --git a/src/main/java/plugins/tprovoost/sequenceblocks/importer/SequenceFileImporterLoadSequence.java b/src/main/java/plugins/tprovoost/sequenceblocks/importer/SequenceFileImporterLoadSequence.java
index 9a8b57e..3269141 100644
--- a/src/main/java/plugins/tprovoost/sequenceblocks/importer/SequenceFileImporterLoadSequence.java
+++ b/src/main/java/plugins/tprovoost/sequenceblocks/importer/SequenceFileImporterLoadSequence.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010-2023. Institut Pasteur.
+ * Copyright (c) 2010-2024. Institut Pasteur.
  *
  * This file is part of Icy.
  * Icy is free software: you can redistribute it and/or modify
@@ -18,13 +18,14 @@
 
 package plugins.tprovoost.sequenceblocks.importer;
 
-import icy.file.Loader;
-import icy.file.SequenceFileImporter;
-import icy.plugin.abstract_.Plugin;
-import icy.plugin.interface_.PluginBundled;
-import icy.plugin.interface_.PluginLibrary;
-import icy.roi.ROI;
 import ome.xml.meta.OMEXMLMetadata;
+import org.bioimageanalysis.icy.extension.plugin.abstract_.Plugin;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginIcon;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginName;
+import org.bioimageanalysis.icy.io.Loader;
+import org.bioimageanalysis.icy.io.SequenceFileImporter;
+import org.bioimageanalysis.icy.model.roi.ROI;
+import org.jetbrains.annotations.NotNull;
 import plugins.adufour.blocks.tools.io.IOBlock;
 import plugins.adufour.blocks.util.VarList;
 import plugins.adufour.vars.lang.Var;
@@ -32,16 +33,17 @@ import plugins.adufour.vars.lang.VarInteger;
 import plugins.adufour.vars.lang.VarROIArray;
 import plugins.adufour.vars.lang.VarSequence;
 import plugins.adufour.vars.util.VarException;
-import plugins.tprovoost.sequenceblocks.SequenceBlocks;
 
 import java.awt.*;
 
 /**
  * Block to returns a Sequence from the given parameters and opened SequenceFileImporter.
  *
- * @author Stephane
+ * @author Stephane Dallongeville
  */
-public class SequenceFileImporterLoadSequence extends Plugin implements IOBlock, PluginLibrary, PluginBundled {
+@IcyPluginName("Load Sequence from SequenceFileImporter")
+@IcyPluginIcon(path = "/SequenceBlocks_icon.png")
+public class SequenceFileImporterLoadSequence extends Plugin implements IOBlock {
     final protected Var<PositionedSequenceFileImporter> importer;
     final protected VarInteger series;
     final protected VarInteger resolution;
@@ -126,7 +128,7 @@ public class SequenceFileImporterLoadSequence extends Plugin implements IOBlock,
     }
 
     @Override
-    public void declareInput(final VarList inputMap) {
+    public void declareInput(final @NotNull VarList inputMap) {
         inputMap.add("importer", importer);
         inputMap.add("series", series);
         inputMap.add("resolution", resolution);
@@ -139,12 +141,7 @@ public class SequenceFileImporterLoadSequence extends Plugin implements IOBlock,
     }
 
     @Override
-    public void declareOutput(final VarList outputMap) {
+    public void declareOutput(final @NotNull VarList outputMap) {
         outputMap.add("sequence", sequence);
     }
-
-    @Override
-    public String getMainPluginClassName() {
-        return SequenceBlocks.class.getName();
-    }
 }
diff --git a/src/main/java/plugins/tprovoost/sequenceblocks/importer/SequenceFileImporterOpen.java b/src/main/java/plugins/tprovoost/sequenceblocks/importer/SequenceFileImporterOpen.java
index 374b4af..ea2f5f5 100644
--- a/src/main/java/plugins/tprovoost/sequenceblocks/importer/SequenceFileImporterOpen.java
+++ b/src/main/java/plugins/tprovoost/sequenceblocks/importer/SequenceFileImporterOpen.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010-2023. Institut Pasteur.
+ * Copyright (c) 2010-2024. Institut Pasteur.
  *
  * This file is part of Icy.
  * Icy is free software: you can redistribute it and/or modify
@@ -18,12 +18,13 @@
 
 package plugins.tprovoost.sequenceblocks.importer;
 
-import icy.file.Loader;
-import icy.file.SequenceFileImporter;
-import icy.plugin.abstract_.Plugin;
-import icy.plugin.interface_.PluginBundled;
-import icy.plugin.interface_.PluginLibrary;
-import icy.util.ClassUtil;
+import org.bioimageanalysis.icy.common.reflect.ClassUtil;
+import org.bioimageanalysis.icy.extension.plugin.abstract_.Plugin;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginIcon;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginName;
+import org.bioimageanalysis.icy.io.Loader;
+import org.bioimageanalysis.icy.io.SequenceFileImporter;
+import org.jetbrains.annotations.NotNull;
 import plugins.adufour.blocks.tools.io.IOBlock;
 import plugins.adufour.blocks.util.VarList;
 import plugins.adufour.vars.gui.model.ValueSelectionModel;
@@ -32,7 +33,6 @@ import plugins.adufour.vars.lang.VarInteger;
 import plugins.adufour.vars.lang.VarMutable;
 import plugins.adufour.vars.lang.VarString;
 import plugins.adufour.vars.util.VarException;
-import plugins.tprovoost.sequenceblocks.SequenceBlocks;
 
 import java.io.File;
 import java.util.ArrayList;
@@ -43,9 +43,11 @@ import java.util.Map;
 /**
  * Block to open a file with a given SequenceFileImporter.
  *
- * @author Stephane
+ * @author Stephane Dallongeville
  */
-public class SequenceFileImporterOpen extends Plugin implements IOBlock, PluginLibrary, PluginBundled {
+@IcyPluginName("Open File w/ SequenceFileImporter")
+@IcyPluginIcon(path = "/SequenceBlocks_icon.png")
+public class SequenceFileImporterOpen extends Plugin implements IOBlock {
     final static String ID_AUTO = "Automatic";
 
     final protected VarString importerName;
@@ -82,7 +84,7 @@ public class SequenceFileImporterOpen extends Plugin implements IOBlock, PluginL
         }
 
         // initialize importer selector field
-        importerName.setDefaultEditorModel(new ValueSelectionModel<>(importersName.toArray(new String[0]), importersName.get(0), false));
+        importerName.setDefaultEditorModel(new ValueSelectionModel<>(importersName.toArray(new String[0]), importersName.getFirst(), false));
 
         importer = new Var<>("Importer", PositionedSequenceFileImporter.class);
         file = new VarMutable("File", null) {
@@ -132,19 +134,14 @@ public class SequenceFileImporterOpen extends Plugin implements IOBlock, PluginL
     }
 
     @Override
-    public void declareInput(final VarList inputMap) {
+    public void declareInput(final @NotNull VarList inputMap) {
         inputMap.add("name", importerName);
         inputMap.add("file", file);
         inputMap.add("flag", flag);
     }
 
     @Override
-    public void declareOutput(final VarList outputMap) {
+    public void declareOutput(final @NotNull VarList outputMap) {
         outputMap.add("importer", importer);
     }
-
-    @Override
-    public String getMainPluginClassName() {
-        return SequenceBlocks.class.getName();
-    }
 }
diff --git a/src/main/java/plugins/tprovoost/sequenceblocks/infos/CreateLinearColormap.java b/src/main/java/plugins/tprovoost/sequenceblocks/infos/CreateLinearColormap.java
index 5251a07..96fdfef 100644
--- a/src/main/java/plugins/tprovoost/sequenceblocks/infos/CreateLinearColormap.java
+++ b/src/main/java/plugins/tprovoost/sequenceblocks/infos/CreateLinearColormap.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010-2023. Institut Pasteur.
+ * Copyright (c) 2010-2024. Institut Pasteur.
  *
  * This file is part of Icy.
  * Icy is free software: you can redistribute it and/or modify
@@ -18,9 +18,11 @@
 
 package plugins.tprovoost.sequenceblocks.infos;
 
-import icy.image.colormap.LinearColorMap;
-import icy.plugin.abstract_.Plugin;
-import icy.plugin.interface_.PluginBundled;
+import org.bioimageanalysis.icy.extension.plugin.abstract_.Plugin;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginIcon;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginName;
+import org.bioimageanalysis.icy.model.colormap.LinearColorMap;
+import org.jetbrains.annotations.NotNull;
 import plugins.adufour.blocks.tools.sequence.SequenceBlock;
 import plugins.adufour.blocks.util.VarList;
 import plugins.adufour.vars.lang.VarColor;
@@ -31,20 +33,22 @@ import java.awt.*;
 /**
  * Block to create a linear colormap from a color value
  *
- * @author Stephane
+ * @author Stephane Dallongeville
  * @see SetColormap
  */
-public class CreateLinearColormap extends Plugin implements SequenceBlock, PluginBundled {
+@IcyPluginName("Create Linear Colormap")
+@IcyPluginIcon(path = "/SequenceBlocks_icon.png")
+public class CreateLinearColormap extends Plugin implements SequenceBlock {
     private final VarColor color = new VarColor("Color", Color.white);
     private final VarColormap colormap = new VarColormap("Color map", LinearColorMap.gray_);
 
     @Override
-    public void declareInput(final VarList inputMap) {
+    public void declareInput(final @NotNull VarList inputMap) {
         inputMap.add("input", color);
     }
 
     @Override
-    public void declareOutput(final VarList outputMap) {
+    public void declareOutput(final @NotNull VarList outputMap) {
         outputMap.add("output", colormap);
     }
 
@@ -52,9 +56,4 @@ public class CreateLinearColormap extends Plugin implements SequenceBlock, Plugi
     public void run() {
         colormap.setValue(new LinearColorMap("color", color.getValue()));
     }
-
-    @Override
-    public String getMainPluginClassName() {
-        return SequenceBlocks.class.getName();
-    }
 }
diff --git a/src/main/java/plugins/tprovoost/sequenceblocks/infos/Dimensions.java b/src/main/java/plugins/tprovoost/sequenceblocks/infos/Dimensions.java
index 97d49b1..112f498 100644
--- a/src/main/java/plugins/tprovoost/sequenceblocks/infos/Dimensions.java
+++ b/src/main/java/plugins/tprovoost/sequenceblocks/infos/Dimensions.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010-2023. Institut Pasteur.
+ * Copyright (c) 2010-2024. Institut Pasteur.
  *
  * This file is part of Icy.
  * Icy is free software: you can redistribute it and/or modify
@@ -18,21 +18,23 @@
 
 package plugins.tprovoost.sequenceblocks.infos;
 
-import icy.plugin.abstract_.Plugin;
-import icy.plugin.interface_.PluginBundled;
-import icy.plugin.interface_.PluginLibrary;
-import icy.sequence.Sequence;
+import org.bioimageanalysis.icy.extension.plugin.abstract_.Plugin;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginIcon;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginName;
+import org.bioimageanalysis.icy.model.sequence.Sequence;
+import org.jetbrains.annotations.NotNull;
 import plugins.adufour.blocks.tools.sequence.SequenceBlock;
 import plugins.adufour.blocks.util.VarList;
 import plugins.adufour.vars.lang.VarInteger;
 import plugins.adufour.vars.lang.VarSequence;
 import plugins.adufour.vars.util.VarException;
-import plugins.tprovoost.sequenceblocks.SequenceBlocks;
 
 /**
- * @author thomasprovoost
+ * @author Thomas Provoost
  */
-public class Dimensions extends Plugin implements SequenceBlock, PluginLibrary, PluginBundled {
+@IcyPluginName("Get Sequence Dimensions")
+@IcyPluginIcon(path = "/SequenceBlocks_icon.png")
+public class Dimensions extends Plugin implements SequenceBlock {
     VarSequence varSeq = new VarSequence("Sequence", null);
     VarInteger sizeZ = new VarInteger("Size Z", 1);
     VarInteger sizeT = new VarInteger("Size T", 1);
@@ -54,21 +56,16 @@ public class Dimensions extends Plugin implements SequenceBlock, PluginLibrary,
     }
 
     @Override
-    public void declareInput(final VarList inputMap) {
+    public void declareInput(final @NotNull VarList inputMap) {
         inputMap.add("sequence", varSeq);
     }
 
     @Override
-    public void declareOutput(final VarList outputMap) {
+    public void declareOutput(final @NotNull VarList outputMap) {
         outputMap.add("width", width);
         outputMap.add("height", height);
         outputMap.add("size C", sizeC);
         outputMap.add("size Z", sizeZ);
         outputMap.add("size T", sizeT);
     }
-
-    @Override
-    public String getMainPluginClassName() {
-        return SequenceBlocks.class.getName();
-    }
 }
diff --git a/src/main/java/plugins/tprovoost/sequenceblocks/infos/EzVarColormap.java b/src/main/java/plugins/tprovoost/sequenceblocks/infos/EzVarColormap.java
index 99c314b..de620dc 100644
--- a/src/main/java/plugins/tprovoost/sequenceblocks/infos/EzVarColormap.java
+++ b/src/main/java/plugins/tprovoost/sequenceblocks/infos/EzVarColormap.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010-2023. Institut Pasteur.
+ * Copyright (c) 2010-2024. Institut Pasteur.
  *
  * This file is part of Icy.
  * Icy is free software: you can redistribute it and/or modify
@@ -18,7 +18,7 @@
 
 package plugins.tprovoost.sequenceblocks.infos;
 
-import icy.image.colormap.IcyColorMap;
+import org.bioimageanalysis.icy.model.colormap.IcyColorMap;
 import plugins.adufour.ezplug.EzVar;
 import plugins.tprovoost.sequenceblocks.infos.VarColormap.ColormapSelectionModel;
 
diff --git a/src/main/java/plugins/tprovoost/sequenceblocks/infos/GetChannelName.java b/src/main/java/plugins/tprovoost/sequenceblocks/infos/GetChannelName.java
index 322a46f..114a889 100644
--- a/src/main/java/plugins/tprovoost/sequenceblocks/infos/GetChannelName.java
+++ b/src/main/java/plugins/tprovoost/sequenceblocks/infos/GetChannelName.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010-2023. Institut Pasteur.
+ * Copyright (c) 2010-2024. Institut Pasteur.
  *
  * This file is part of Icy.
  * Icy is free software: you can redistribute it and/or modify
@@ -18,21 +18,24 @@
 
 package plugins.tprovoost.sequenceblocks.infos;
 
-import icy.plugin.abstract_.Plugin;
-import icy.plugin.interface_.PluginBundled;
-import icy.sequence.Sequence;
+import org.bioimageanalysis.icy.extension.plugin.abstract_.Plugin;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginIcon;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginName;
+import org.bioimageanalysis.icy.model.sequence.Sequence;
+import org.jetbrains.annotations.NotNull;
 import plugins.adufour.blocks.tools.sequence.SequenceBlock;
 import plugins.adufour.blocks.util.VarList;
 import plugins.adufour.vars.lang.VarInteger;
 import plugins.adufour.vars.lang.VarSequence;
 import plugins.adufour.vars.lang.VarString;
 import plugins.adufour.vars.util.VarException;
-import plugins.tprovoost.sequenceblocks.SequenceBlocks;
 
 /**
- * @author thomasprovoost
+ * @author Thomas Provoost
  */
-public class GetChannelName extends Plugin implements SequenceBlock, PluginBundled {
+@IcyPluginName("Get Channel Name")
+@IcyPluginIcon(path = "/SequenceBlocks_icon.png")
+public class GetChannelName extends Plugin implements SequenceBlock {
     private final VarSequence varSequence = new VarSequence("Sequence", null);
     private final VarInteger varIdx = new VarInteger("Channel", 0);
     private final VarString varName = new VarString("Name", "");
@@ -51,18 +54,13 @@ public class GetChannelName extends Plugin implements SequenceBlock, PluginBundl
     }
 
     @Override
-    public void declareInput(final VarList inputMap) {
+    public void declareInput(final @NotNull VarList inputMap) {
         inputMap.add("sequence", varSequence);
         inputMap.add("index", varIdx);
     }
 
     @Override
-    public void declareOutput(final VarList outputMap) {
+    public void declareOutput(final @NotNull VarList outputMap) {
         outputMap.add("name", varName);
     }
-
-    @Override
-    public String getMainPluginClassName() {
-        return SequenceBlocks.class.getName();
-    }
 }
diff --git a/src/main/java/plugins/tprovoost/sequenceblocks/infos/GetChannelsName.java b/src/main/java/plugins/tprovoost/sequenceblocks/infos/GetChannelsName.java
index 2daceba..f5e805f 100644
--- a/src/main/java/plugins/tprovoost/sequenceblocks/infos/GetChannelsName.java
+++ b/src/main/java/plugins/tprovoost/sequenceblocks/infos/GetChannelsName.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010-2023. Institut Pasteur.
+ * Copyright (c) 2010-2024. Institut Pasteur.
  *
  * This file is part of Icy.
  * Icy is free software: you can redistribute it and/or modify
@@ -18,15 +18,16 @@
 
 package plugins.tprovoost.sequenceblocks.infos;
 
-import icy.plugin.abstract_.Plugin;
-import icy.plugin.interface_.PluginBundled;
-import icy.sequence.Sequence;
+import org.bioimageanalysis.icy.extension.plugin.abstract_.Plugin;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginIcon;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginName;
+import org.bioimageanalysis.icy.model.sequence.Sequence;
+import org.jetbrains.annotations.NotNull;
 import plugins.adufour.blocks.tools.sequence.SequenceBlock;
 import plugins.adufour.blocks.util.VarList;
 import plugins.adufour.vars.lang.VarArray;
 import plugins.adufour.vars.lang.VarSequence;
 import plugins.adufour.vars.util.VarException;
-import plugins.tprovoost.sequenceblocks.SequenceBlocks;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -34,11 +35,13 @@ import java.util.List;
 /**
  * Block to retrieve all channels name from a given sequence
  *
- * @author Stephane
+ * @author Stephane Dallongeville
  * @see GetChannelName
  * @see SetChannelsName
  */
-public class GetChannelsName extends Plugin implements SequenceBlock, PluginBundled {
+@IcyPluginName("Get Channels Name")
+@IcyPluginIcon(path = "/SequenceBlocks_icon.png")
+public class GetChannelsName extends Plugin implements SequenceBlock {
     private final VarSequence varSequence = new VarSequence("Sequence", null);
     private final VarArray<String> varNames = new VarArray<>("Names", String[].class, new String[0]);
 
@@ -57,17 +60,12 @@ public class GetChannelsName extends Plugin implements SequenceBlock, PluginBund
     }
 
     @Override
-    public void declareInput(final VarList inputMap) {
+    public void declareInput(final @NotNull VarList inputMap) {
         inputMap.add("sequence", varSequence);
     }
 
     @Override
-    public void declareOutput(final VarList outputMap) {
+    public void declareOutput(final @NotNull VarList outputMap) {
         outputMap.add("names", varNames);
     }
-
-    @Override
-    public String getMainPluginClassName() {
-        return SequenceBlocks.class.getName();
-    }
 }
diff --git a/src/main/java/plugins/tprovoost/sequenceblocks/infos/GetColormap.java b/src/main/java/plugins/tprovoost/sequenceblocks/infos/GetColormap.java
index 95b76ad..d0ef456 100644
--- a/src/main/java/plugins/tprovoost/sequenceblocks/infos/GetColormap.java
+++ b/src/main/java/plugins/tprovoost/sequenceblocks/infos/GetColormap.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010-2023. Institut Pasteur.
+ * Copyright (c) 2010-2024. Institut Pasteur.
  *
  * This file is part of Icy.
  * Icy is free software: you can redistribute it and/or modify
@@ -18,36 +18,39 @@
 
 package plugins.tprovoost.sequenceblocks.infos;
 
-import icy.image.colormap.LinearColorMap;
-import icy.plugin.abstract_.Plugin;
-import icy.plugin.interface_.PluginBundled;
-import icy.sequence.Sequence;
+import org.bioimageanalysis.icy.extension.plugin.abstract_.Plugin;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginIcon;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginName;
+import org.bioimageanalysis.icy.model.colormap.LinearColorMap;
+import org.bioimageanalysis.icy.model.sequence.Sequence;
+import org.jetbrains.annotations.NotNull;
 import plugins.adufour.blocks.tools.sequence.SequenceBlock;
 import plugins.adufour.blocks.util.BlocksException;
 import plugins.adufour.blocks.util.VarList;
 import plugins.adufour.vars.lang.VarInteger;
 import plugins.adufour.vars.lang.VarSequence;
-import plugins.tprovoost.sequenceblocks.SequenceBlocks;
 
 /**
  * Block to retrieve a channel colormap from a given sequence
  *
- * @author Stephane
+ * @author Stephane Dallongeville
  * @see SetColormap
  */
-public class GetColormap extends Plugin implements SequenceBlock, PluginBundled {
+@IcyPluginName("Get Colormap")
+@IcyPluginIcon(path = "/SequenceBlocks_icon.png")
+public class GetColormap extends Plugin implements SequenceBlock {
     private final VarSequence sequenceIn = new VarSequence("Sequence", null);
     private final VarInteger numChannel = new VarInteger("Channel", 0);
     private final VarColormap colormap = new VarColormap("Color map", LinearColorMap.gray_);
 
     @Override
-    public void declareInput(final VarList inputMap) {
+    public void declareInput(final @NotNull VarList inputMap) {
         inputMap.add("input", sequenceIn);
         inputMap.add("numChannel", numChannel);
     }
 
     @Override
-    public void declareOutput(final VarList outputMap) {
+    public void declareOutput(final @NotNull VarList outputMap) {
         outputMap.add("output", colormap);
     }
 
@@ -64,9 +67,4 @@ public class GetColormap extends Plugin implements SequenceBlock, PluginBundled
                 throw new BlocksException("Block 'Get Colormap': illegal channel number for this sequence !", true);
         }
     }
-
-    @Override
-    public String getMainPluginClassName() {
-        return SequenceBlocks.class.getName();
-    }
 }
diff --git a/src/main/java/plugins/tprovoost/sequenceblocks/infos/GetColormaps.java b/src/main/java/plugins/tprovoost/sequenceblocks/infos/GetColormaps.java
index 3654a05..be27e35 100644
--- a/src/main/java/plugins/tprovoost/sequenceblocks/infos/GetColormaps.java
+++ b/src/main/java/plugins/tprovoost/sequenceblocks/infos/GetColormaps.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010-2023. Institut Pasteur.
+ * Copyright (c) 2010-2024. Institut Pasteur.
  *
  * This file is part of Icy.
  * Icy is free software: you can redistribute it and/or modify
@@ -18,16 +18,17 @@
 
 package plugins.tprovoost.sequenceblocks.infos;
 
-import icy.image.colormap.IcyColorMap;
-import icy.plugin.abstract_.Plugin;
-import icy.plugin.interface_.PluginBundled;
-import icy.sequence.Sequence;
+import org.bioimageanalysis.icy.extension.plugin.abstract_.Plugin;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginIcon;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginName;
+import org.bioimageanalysis.icy.model.colormap.IcyColorMap;
+import org.bioimageanalysis.icy.model.sequence.Sequence;
+import org.jetbrains.annotations.NotNull;
 import plugins.adufour.blocks.tools.sequence.SequenceBlock;
 import plugins.adufour.blocks.util.VarList;
 import plugins.adufour.vars.lang.VarArray;
 import plugins.adufour.vars.lang.VarSequence;
 import plugins.adufour.vars.util.VarException;
-import plugins.tprovoost.sequenceblocks.SequenceBlocks;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -35,20 +36,22 @@ import java.util.List;
 /**
  * Block to retrieve all channels colormap from a given sequence
  *
- * @author Stephane
+ * @author Stephane Dallongeville
  * @see SetColormaps
  */
-public class GetColormaps extends Plugin implements SequenceBlock, PluginBundled {
+@IcyPluginName("Get Colormaps")
+@IcyPluginIcon(path = "/SequenceBlocks_icon.png")
+public class GetColormaps extends Plugin implements SequenceBlock {
     private final VarSequence sequenceIn = new VarSequence("Sequence", null);
     private final VarArray<IcyColorMap> colormaps = new VarArray<>("Color maps", IcyColorMap[].class, new IcyColorMap[0]);
 
     @Override
-    public void declareInput(final VarList inputMap) {
+    public void declareInput(final @NotNull VarList inputMap) {
         inputMap.add("input", sequenceIn);
     }
 
     @Override
-    public void declareOutput(final VarList outputMap) {
+    public void declareOutput(final @NotNull VarList outputMap) {
         outputMap.add("Colormaps", colormaps);
     }
 
@@ -65,9 +68,4 @@ public class GetColormaps extends Plugin implements SequenceBlock, PluginBundled
 
         colormaps.setValue(cms.toArray(new IcyColorMap[0]));
     }
-
-    @Override
-    public String getMainPluginClassName() {
-        return SequenceBlocks.class.getName();
-    }
 }
diff --git a/src/main/java/plugins/tprovoost/sequenceblocks/infos/GetDataType.java b/src/main/java/plugins/tprovoost/sequenceblocks/infos/GetDataType.java
index 283b759..9de9bc8 100644
--- a/src/main/java/plugins/tprovoost/sequenceblocks/infos/GetDataType.java
+++ b/src/main/java/plugins/tprovoost/sequenceblocks/infos/GetDataType.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010-2023. Institut Pasteur.
+ * Copyright (c) 2010-2024. Institut Pasteur.
  *
  * This file is part of Icy.
  * Icy is free software: you can redistribute it and/or modify
@@ -18,23 +18,26 @@
 
 package plugins.tprovoost.sequenceblocks.infos;
 
-import icy.plugin.abstract_.Plugin;
-import icy.plugin.interface_.PluginBundled;
-import icy.sequence.Sequence;
-import icy.type.DataType;
+import org.bioimageanalysis.icy.common.type.DataType;
+import org.bioimageanalysis.icy.extension.plugin.abstract_.Plugin;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginIcon;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginName;
+import org.bioimageanalysis.icy.model.sequence.Sequence;
+import org.jetbrains.annotations.NotNull;
 import plugins.adufour.blocks.tools.sequence.SequenceBlock;
 import plugins.adufour.blocks.util.VarList;
 import plugins.adufour.vars.lang.VarEnum;
 import plugins.adufour.vars.lang.VarSequence;
 import plugins.adufour.vars.util.VarException;
-import plugins.tprovoost.sequenceblocks.SequenceBlocks;
 
 /**
  * Returns the DataType of the Sequence object
  *
- * @author Stephane
+ * @author Stephane Dallongeville
  */
-public class GetDataType extends Plugin implements SequenceBlock, PluginBundled {
+@IcyPluginName("Get DataType")
+@IcyPluginIcon(path = "/SequenceBlocks_icon.png")
+public class GetDataType extends Plugin implements SequenceBlock {
     final protected VarSequence varSequence = new VarSequence("Sequence", null);
     final protected VarEnum<DataType> type = new VarEnum<>("Data type", DataType.UBYTE);
 
@@ -43,21 +46,16 @@ public class GetDataType extends Plugin implements SequenceBlock, PluginBundled
         final Sequence s = varSequence.getValue();
         if (s == null)
             throw new VarException(varSequence, "Sequence is null");
-        type.setValue(s.getDataType_());
+        type.setValue(s.getDataType());
     }
 
     @Override
-    public void declareInput(final VarList inputMap) {
+    public void declareInput(final @NotNull VarList inputMap) {
         inputMap.add("sequence", varSequence);
     }
 
     @Override
-    public void declareOutput(final VarList outputMap) {
+    public void declareOutput(final @NotNull VarList outputMap) {
         outputMap.add("type", type);
     }
-
-    @Override
-    public String getMainPluginClassName() {
-        return SequenceBlocks.class.getName();
-    }
 }
diff --git a/src/main/java/plugins/tprovoost/sequenceblocks/infos/GetFileName.java b/src/main/java/plugins/tprovoost/sequenceblocks/infos/GetFileName.java
index 0bc1e12..37dd5ee 100644
--- a/src/main/java/plugins/tprovoost/sequenceblocks/infos/GetFileName.java
+++ b/src/main/java/plugins/tprovoost/sequenceblocks/infos/GetFileName.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010-2023. Institut Pasteur.
+ * Copyright (c) 2010-2024. Institut Pasteur.
  *
  * This file is part of Icy.
  * Icy is free software: you can redistribute it and/or modify
@@ -18,24 +18,27 @@
 
 package plugins.tprovoost.sequenceblocks.infos;
 
-import icy.file.FileUtil;
-import icy.plugin.abstract_.Plugin;
-import icy.plugin.interface_.PluginBundled;
-import icy.sequence.Sequence;
+import org.bioimageanalysis.icy.extension.plugin.abstract_.Plugin;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginIcon;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginName;
+import org.bioimageanalysis.icy.io.FileUtil;
+import org.bioimageanalysis.icy.model.sequence.Sequence;
+import org.jetbrains.annotations.NotNull;
 import plugins.adufour.blocks.tools.sequence.SequenceBlock;
 import plugins.adufour.blocks.util.VarList;
 import plugins.adufour.vars.lang.VarBoolean;
 import plugins.adufour.vars.lang.VarSequence;
 import plugins.adufour.vars.lang.VarString;
 import plugins.adufour.vars.util.VarException;
-import plugins.tprovoost.sequenceblocks.SequenceBlocks;
 
 /**
  * Returns the origin filename (from where the sequence has been loaded / saved)
  *
- * @author Stephane
+ * @author Stephane Dallongeville
  */
-public class GetFileName extends Plugin implements SequenceBlock, PluginBundled {
+@IcyPluginName("Get File Name")
+@IcyPluginIcon(path = "/SequenceBlocks_icon.png")
+public class GetFileName extends Plugin implements SequenceBlock {
     final protected VarSequence varSequence = new VarSequence("Sequence", null);
     final protected VarString filename = new VarString("Filename", "");
     final protected VarBoolean withFolder = new VarBoolean("Folder", Boolean.TRUE);
@@ -61,19 +64,14 @@ public class GetFileName extends Plugin implements SequenceBlock, PluginBundled
     }
 
     @Override
-    public void declareInput(final VarList inputMap) {
+    public void declareInput(final @NotNull VarList inputMap) {
         inputMap.add("sequence", varSequence);
         inputMap.add("folder", withFolder);
         inputMap.add("extension", withExtension);
     }
 
     @Override
-    public void declareOutput(final VarList outputMap) {
+    public void declareOutput(final @NotNull VarList outputMap) {
         outputMap.add("name", filename);
     }
-
-    @Override
-    public String getMainPluginClassName() {
-        return SequenceBlocks.class.getName();
-    }
 }
\ No newline at end of file
diff --git a/src/main/java/plugins/tprovoost/sequenceblocks/infos/GetMetaData.java b/src/main/java/plugins/tprovoost/sequenceblocks/infos/GetMetaData.java
index 4f51fdf..2844031 100644
--- a/src/main/java/plugins/tprovoost/sequenceblocks/infos/GetMetaData.java
+++ b/src/main/java/plugins/tprovoost/sequenceblocks/infos/GetMetaData.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010-2023. Institut Pasteur.
+ * Copyright (c) 2010-2024. Institut Pasteur.
  *
  * This file is part of Icy.
  * Icy is free software: you can redistribute it and/or modify
@@ -18,26 +18,29 @@
 
 package plugins.tprovoost.sequenceblocks.infos;
 
-import icy.math.UnitUtil;
-import icy.plugin.abstract_.Plugin;
-import icy.plugin.interface_.PluginBundled;
-import icy.sequence.Sequence;
 import ome.xml.meta.OMEXMLMetadata;
+import org.bioimageanalysis.icy.common.math.UnitUtil;
+import org.bioimageanalysis.icy.extension.plugin.abstract_.Plugin;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginIcon;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginName;
+import org.bioimageanalysis.icy.model.sequence.Sequence;
+import org.jetbrains.annotations.NotNull;
 import plugins.adufour.blocks.tools.sequence.SequenceBlock;
 import plugins.adufour.blocks.util.VarList;
 import plugins.adufour.vars.lang.*;
 import plugins.adufour.vars.util.VarException;
-import plugins.tprovoost.sequenceblocks.SequenceBlocks;
 
 import java.awt.*;
 
 /**
  * Block to return metadata information from a Sequence object.
  *
- * @author Stephane
+ * @author Stephane Dallongeville
  * @see ReadMetadata
  */
-public class GetMetaData extends Plugin implements SequenceBlock, PluginBundled {
+@IcyPluginName("Get Metadata")
+@IcyPluginIcon(path = "/SequenceBlocks_icon.png")
+public class GetMetaData extends Plugin implements SequenceBlock {
     final protected VarSequence varSequence = new VarSequence("Sequence", null);
     final protected Var<OMEXMLMetadata> metaData = new Var<>("Metadata", OMEXMLMetadata.class);
     final protected VarString name = new VarString("Name", "");
@@ -84,12 +87,12 @@ public class GetMetaData extends Plugin implements SequenceBlock, PluginBundled
     }
 
     @Override
-    public void declareInput(final VarList inputMap) {
+    public void declareInput(final @NotNull VarList inputMap) {
         inputMap.add("sequence", varSequence);
     }
 
     @Override
-    public void declareOutput(final VarList outputMap) {
+    public void declareOutput(final @NotNull VarList outputMap) {
         outputMap.add("metadata", metaData);
         outputMap.add("name", name);
         outputMap.add("seriesIndex", seriesIndex);
@@ -108,9 +111,4 @@ public class GetMetaData extends Plugin implements SequenceBlock, PluginBundled
         outputMap.add("originTMax", originTMax);
         outputMap.add("originChannel", originChannel);
     }
-
-    @Override
-    public String getMainPluginClassName() {
-        return SequenceBlocks.class.getName();
-    }
 }
diff --git a/src/main/java/plugins/tprovoost/sequenceblocks/infos/GetName.java b/src/main/java/plugins/tprovoost/sequenceblocks/infos/GetName.java
index 46a6ed6..99d6d1a 100644
--- a/src/main/java/plugins/tprovoost/sequenceblocks/infos/GetName.java
+++ b/src/main/java/plugins/tprovoost/sequenceblocks/infos/GetName.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010-2023. Institut Pasteur.
+ * Copyright (c) 2010-2024. Institut Pasteur.
  *
  * This file is part of Icy.
  * Icy is free software: you can redistribute it and/or modify
@@ -18,22 +18,25 @@
 
 package plugins.tprovoost.sequenceblocks.infos;
 
-import icy.plugin.abstract_.Plugin;
-import icy.plugin.interface_.PluginBundled;
-import icy.sequence.Sequence;
+import org.bioimageanalysis.icy.extension.plugin.abstract_.Plugin;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginIcon;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginName;
+import org.bioimageanalysis.icy.model.sequence.Sequence;
+import org.jetbrains.annotations.NotNull;
 import plugins.adufour.blocks.tools.sequence.SequenceBlock;
 import plugins.adufour.blocks.util.VarList;
 import plugins.adufour.vars.lang.VarSequence;
 import plugins.adufour.vars.lang.VarString;
 import plugins.adufour.vars.util.VarException;
-import plugins.tprovoost.sequenceblocks.SequenceBlocks;
 
 /**
  * Returns the name of the Sequence object
  *
- * @author Stephane
+ * @author Stephane Dallongeville
  */
-public class GetName extends Plugin implements SequenceBlock, PluginBundled {
+@IcyPluginName("Get Name")
+@IcyPluginIcon(path = "/SequenceBlocks_icon.png")
+public class GetName extends Plugin implements SequenceBlock {
     final protected VarSequence varSequence = new VarSequence("Sequence", null);
     final protected VarString name = new VarString("Name", "");
 
@@ -46,17 +49,12 @@ public class GetName extends Plugin implements SequenceBlock, PluginBundled {
     }
 
     @Override
-    public void declareInput(final VarList inputMap) {
+    public void declareInput(final @NotNull VarList inputMap) {
         inputMap.add("sequence", varSequence);
     }
 
     @Override
-    public void declareOutput(final VarList outputMap) {
+    public void declareOutput(final @NotNull VarList outputMap) {
         outputMap.add("name", name);
     }
-
-    @Override
-    public String getMainPluginClassName() {
-        return SequenceBlocks.class.getName();
-    }
 }
diff --git a/src/main/java/plugins/tprovoost/sequenceblocks/infos/GetOutputFilename.java b/src/main/java/plugins/tprovoost/sequenceblocks/infos/GetOutputFilename.java
index 55e7085..ba636cd 100644
--- a/src/main/java/plugins/tprovoost/sequenceblocks/infos/GetOutputFilename.java
+++ b/src/main/java/plugins/tprovoost/sequenceblocks/infos/GetOutputFilename.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010-2023. Institut Pasteur.
+ * Copyright (c) 2010-2024. Institut Pasteur.
  *
  * This file is part of Icy.
  * Icy is free software: you can redistribute it and/or modify
@@ -18,24 +18,27 @@
 
 package plugins.tprovoost.sequenceblocks.infos;
 
-import icy.file.FileUtil;
-import icy.plugin.abstract_.Plugin;
-import icy.plugin.interface_.PluginBundled;
-import icy.sequence.Sequence;
+import org.bioimageanalysis.icy.extension.plugin.abstract_.Plugin;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginIcon;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginName;
+import org.bioimageanalysis.icy.io.FileUtil;
+import org.bioimageanalysis.icy.model.sequence.Sequence;
+import org.jetbrains.annotations.NotNull;
 import plugins.adufour.blocks.tools.sequence.SequenceBlock;
 import plugins.adufour.blocks.util.VarList;
 import plugins.adufour.vars.lang.VarBoolean;
 import plugins.adufour.vars.lang.VarSequence;
 import plugins.adufour.vars.lang.VarString;
 import plugins.adufour.vars.util.VarException;
-import plugins.tprovoost.sequenceblocks.SequenceBlocks;
 
 /**
  * Returns the output filename generated from origin filename and internal partitioning information
  *
- * @author Stephane
+ * @author Stephane Dallongeville
  */
-public class GetOutputFilename extends Plugin implements SequenceBlock, PluginBundled {
+@IcyPluginName("Get Output File Name")
+@IcyPluginIcon(path = "/SequenceBlocks_icon.png")
+public class GetOutputFilename extends Plugin implements SequenceBlock {
     final protected VarSequence varSequence = new VarSequence("Sequence", null);
     final protected VarString outFilename = new VarString("Output filename", "");
     final protected VarBoolean withFolder = new VarBoolean("Folder", Boolean.TRUE);
@@ -56,19 +59,14 @@ public class GetOutputFilename extends Plugin implements SequenceBlock, PluginBu
     }
 
     @Override
-    public void declareInput(final VarList inputMap) {
+    public void declareInput(final @NotNull VarList inputMap) {
         inputMap.add("sequence", varSequence);
         inputMap.add("folder", withFolder);
         inputMap.add("extension", withExtension);
     }
 
     @Override
-    public void declareOutput(final VarList outputMap) {
+    public void declareOutput(final @NotNull VarList outputMap) {
         outputMap.add("outFilename", outFilename);
     }
-
-    @Override
-    public String getMainPluginClassName() {
-        return SequenceBlocks.class.getName();
-    }
 }
\ No newline at end of file
diff --git a/src/main/java/plugins/tprovoost/sequenceblocks/infos/GetResolution.java b/src/main/java/plugins/tprovoost/sequenceblocks/infos/GetResolution.java
index 0323af8..4e3b0fc 100644
--- a/src/main/java/plugins/tprovoost/sequenceblocks/infos/GetResolution.java
+++ b/src/main/java/plugins/tprovoost/sequenceblocks/infos/GetResolution.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010-2023. Institut Pasteur.
+ * Copyright (c) 2010-2024. Institut Pasteur.
  *
  * This file is part of Icy.
  * Icy is free software: you can redistribute it and/or modify
@@ -18,25 +18,28 @@
 
 package plugins.tprovoost.sequenceblocks.infos;
 
-import icy.math.UnitUtil;
-import icy.plugin.abstract_.Plugin;
-import icy.plugin.interface_.PluginBundled;
-import icy.sequence.Sequence;
+import org.bioimageanalysis.icy.common.math.UnitUtil;
+import org.bioimageanalysis.icy.extension.plugin.abstract_.Plugin;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginIcon;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginName;
+import org.bioimageanalysis.icy.model.sequence.Sequence;
+import org.jetbrains.annotations.NotNull;
 import plugins.adufour.blocks.tools.sequence.SequenceBlock;
 import plugins.adufour.blocks.util.VarList;
 import plugins.adufour.vars.lang.VarDouble;
 import plugins.adufour.vars.lang.VarSequence;
 import plugins.adufour.vars.util.VarException;
-import plugins.tprovoost.sequenceblocks.SequenceBlocks;
 
 /**
  * Block to return pixel size and time interval information from a Sequence object.
  *
- * @author Stephane
+ * @author Stephane Dallongeville
  * @see ReadMetadata
  * @see GetMetaData
  */
-public class GetResolution extends Plugin implements SequenceBlock, PluginBundled {
+@IcyPluginName("Get Sequence Resolution")
+@IcyPluginIcon(path = "/SequenceBlocks_icon.png")
+public class GetResolution extends Plugin implements SequenceBlock {
     final protected VarSequence varSequence = new VarSequence("Sequence", null);
     final protected VarDouble pxSizeX = new VarDouble("Pixel Size X (" + UnitUtil.MICRO_STRING + "m)", 1d);
     final protected VarDouble pxSizeY = new VarDouble("Pixel Size Y (" + UnitUtil.MICRO_STRING + "m)", 1d);
@@ -58,20 +61,15 @@ public class GetResolution extends Plugin implements SequenceBlock, PluginBundle
     }
 
     @Override
-    public void declareInput(final VarList inputMap) {
+    public void declareInput(final @NotNull VarList inputMap) {
         inputMap.add("sequence", varSequence);
     }
 
     @Override
-    public void declareOutput(final VarList outputMap) {
+    public void declareOutput(final @NotNull VarList outputMap) {
         outputMap.add("Pixel Size X (" + UnitUtil.MICRO_STRING + "m)", pxSizeX);
         outputMap.add("Pixel Size Y (" + UnitUtil.MICRO_STRING + "m)", pxSizeY);
         outputMap.add("Pixel Size Z (" + UnitUtil.MICRO_STRING + "m)", pxSizeZ);
         outputMap.add("Time interval T (s)", timeIntT);
     }
-
-    @Override
-    public String getMainPluginClassName() {
-        return SequenceBlocks.class.getName();
-    }
 }
diff --git a/src/main/java/plugins/tprovoost/sequenceblocks/infos/GetRoisAsRegion.java b/src/main/java/plugins/tprovoost/sequenceblocks/infos/GetRoisAsRegion.java
index bc4a279..406c7aa 100644
--- a/src/main/java/plugins/tprovoost/sequenceblocks/infos/GetRoisAsRegion.java
+++ b/src/main/java/plugins/tprovoost/sequenceblocks/infos/GetRoisAsRegion.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010-2023. Institut Pasteur.
+ * Copyright (c) 2010-2024. Institut Pasteur.
  *
  * This file is part of Icy.
  * Icy is free software: you can redistribute it and/or modify
@@ -18,12 +18,14 @@
 
 package plugins.tprovoost.sequenceblocks.infos;
 
-import icy.plugin.abstract_.Plugin;
-import icy.plugin.interface_.PluginBundled;
-import icy.plugin.interface_.PluginLibrary;
-import icy.roi.ROI;
-import icy.sequence.Sequence;
-import icy.sequence.SequenceUtil;
+import org.bioimageanalysis.extension.kernel.roi.roi2d.ROI2DRectangle;
+import org.bioimageanalysis.icy.extension.plugin.abstract_.Plugin;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginIcon;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginName;
+import org.bioimageanalysis.icy.model.roi.ROI;
+import org.bioimageanalysis.icy.model.sequence.Sequence;
+import org.bioimageanalysis.icy.model.sequence.SequenceUtil;
+import org.jetbrains.annotations.NotNull;
 import plugins.adufour.blocks.tools.sequence.SequenceBlock;
 import plugins.adufour.blocks.util.VarList;
 import plugins.adufour.vars.lang.VarBoolean;
@@ -31,8 +33,6 @@ import plugins.adufour.vars.lang.VarEnum;
 import plugins.adufour.vars.lang.VarROIArray;
 import plugins.adufour.vars.lang.VarSequence;
 import plugins.adufour.vars.util.VarException;
-import plugins.kernel.roi.roi2d.ROI2DRectangle;
-import plugins.tprovoost.sequenceblocks.SequenceBlocks;
 
 import java.awt.*;
 import java.util.ArrayList;
@@ -43,9 +43,11 @@ import java.util.List;
  * The <i>origin resolution</i> parameter indicate if we want to rescale ROI to the original image resolution in case we
  * have a Sequence which represents a sub resolution of the original image.
  *
- * @author Stephane
+ * @author Stephane Dallongeville
  */
-public class GetRoisAsRegion extends Plugin implements SequenceBlock, PluginLibrary, PluginBundled {
+@IcyPluginName("Get ROIs as Region")
+@IcyPluginIcon(path = "/SequenceBlocks_icon.png")
+public class GetRoisAsRegion extends Plugin implements SequenceBlock {
     public enum TypeSelection {
         ALL, SELECTED
     }
@@ -55,6 +57,7 @@ public class GetRoisAsRegion extends Plugin implements SequenceBlock, PluginLibr
     final protected VarBoolean originResolution = new VarBoolean("Origin resolution", Boolean.TRUE);
     final protected VarROIArray regionsRois = new VarROIArray("Region ROI(s)", null);
 
+    @SuppressWarnings("SwitchStatementWithTooFewBranches")
     @Override
     public void run() {
         final Sequence sequence = inputSequence.getValue();
@@ -64,15 +67,10 @@ public class GetRoisAsRegion extends Plugin implements SequenceBlock, PluginLibr
         final List<ROI> rois;
         final List<ROI2DRectangle> result = new ArrayList<>();
 
-        switch (type.getValue()) {
-            default:
-            case ALL:
-                rois = sequence.getROIs();
-                break;
-            case SELECTED:
-                rois = sequence.getSelectedROIs();
-                break;
-        }
+        rois = switch (type.getValue()) {
+            default -> sequence.getROIs();
+            case SELECTED -> sequence.getSelectedROIs();
+        };
 
         final boolean scale = originResolution.getValue();
 
@@ -93,19 +91,14 @@ public class GetRoisAsRegion extends Plugin implements SequenceBlock, PluginLibr
     }
 
     @Override
-    public void declareInput(final VarList inputMap) {
+    public void declareInput(final @NotNull VarList inputMap) {
         inputMap.add("sequence", inputSequence);
         inputMap.add("type", type);
         inputMap.add("originResolution", originResolution);
     }
 
     @Override
-    public void declareOutput(final VarList outputMap) {
+    public void declareOutput(final @NotNull VarList outputMap) {
         outputMap.add("regionsRois", regionsRois);
     }
-
-    @Override
-    public String getMainPluginClassName() {
-        return SequenceBlocks.class.getName();
-    }
 }
diff --git a/src/main/java/plugins/tprovoost/sequenceblocks/infos/GetSequenceProperty.java b/src/main/java/plugins/tprovoost/sequenceblocks/infos/GetSequenceProperty.java
index 65a6838..a576580 100644
--- a/src/main/java/plugins/tprovoost/sequenceblocks/infos/GetSequenceProperty.java
+++ b/src/main/java/plugins/tprovoost/sequenceblocks/infos/GetSequenceProperty.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010-2023. Institut Pasteur.
+ * Copyright (c) 2010-2024. Institut Pasteur.
  *
  * This file is part of Icy.
  * Icy is free software: you can redistribute it and/or modify
@@ -18,15 +18,15 @@
 
 package plugins.tprovoost.sequenceblocks.infos;
 
-import icy.plugin.abstract_.Plugin;
-import icy.plugin.interface_.PluginBundled;
-import icy.plugin.interface_.PluginLibrary;
-import icy.sequence.Sequence;
+import org.bioimageanalysis.icy.extension.plugin.abstract_.Plugin;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginIcon;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginName;
+import org.bioimageanalysis.icy.model.sequence.Sequence;
+import org.jetbrains.annotations.NotNull;
 import plugins.adufour.blocks.tools.sequence.SequenceBlock;
 import plugins.adufour.blocks.util.VarList;
 import plugins.adufour.vars.lang.VarSequence;
 import plugins.adufour.vars.lang.VarString;
-import plugins.tprovoost.sequenceblocks.SequenceBlocks;
 
 /**
  * Block to retrieve value (in String format) of a Sequence property (name, pixel size, custom...)<br>
@@ -48,9 +48,11 @@ import plugins.tprovoost.sequenceblocks.SequenceBlocks;
  * <li><i>virtual</i> = virtual mode enabled on the dataset</li>
  * </ul>
  *
- * @author Stephane
+ * @author Stephane Dallongeville
  */
-public class GetSequenceProperty extends Plugin implements SequenceBlock, PluginLibrary, PluginBundled {
+@IcyPluginName("Get Sequence Property")
+@IcyPluginIcon(path = "/SequenceBlocks_icon.png")
+public class GetSequenceProperty extends Plugin implements SequenceBlock {
     protected VarSequence sequence = new VarSequence("Sequence", null);
     protected VarString propertyName = new VarString("Property", "name");
     protected VarString value = new VarString("Value", "");
@@ -64,18 +66,13 @@ public class GetSequenceProperty extends Plugin implements SequenceBlock, Plugin
     }
 
     @Override
-    public void declareInput(final VarList inputMap) {
+    public void declareInput(final @NotNull VarList inputMap) {
         inputMap.add("sequence", sequence);
         inputMap.add("property", propertyName);
     }
 
     @Override
-    public void declareOutput(final VarList outputMap) {
+    public void declareOutput(final @NotNull VarList outputMap) {
         outputMap.add("value", value);
     }
-
-    @Override
-    public String getMainPluginClassName() {
-        return SequenceBlocks.class.getName();
-    }
 }
diff --git a/src/main/java/plugins/tprovoost/sequenceblocks/infos/ReadMetadata.java b/src/main/java/plugins/tprovoost/sequenceblocks/infos/ReadMetadata.java
index 2ac3d0b..6ea1e27 100644
--- a/src/main/java/plugins/tprovoost/sequenceblocks/infos/ReadMetadata.java
+++ b/src/main/java/plugins/tprovoost/sequenceblocks/infos/ReadMetadata.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010-2023. Institut Pasteur.
+ * Copyright (c) 2010-2024. Institut Pasteur.
  *
  * This file is part of Icy.
  * Icy is free software: you can redistribute it and/or modify
@@ -18,12 +18,13 @@
 
 package plugins.tprovoost.sequenceblocks.infos;
 
-import icy.math.UnitUtil;
-import icy.plugin.abstract_.Plugin;
-import icy.plugin.interface_.PluginBundled;
-import icy.plugin.interface_.PluginLibrary;
-import icy.sequence.MetaDataUtil;
 import ome.xml.meta.OMEXMLMetadata;
+import org.bioimageanalysis.icy.common.math.UnitUtil;
+import org.bioimageanalysis.icy.extension.plugin.abstract_.Plugin;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginIcon;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginName;
+import org.bioimageanalysis.icy.model.sequence.MetaDataUtil;
+import org.jetbrains.annotations.NotNull;
 import plugins.adufour.blocks.tools.sequence.SequenceBlock;
 import plugins.adufour.blocks.util.VarList;
 import plugins.adufour.vars.lang.Var;
@@ -31,16 +32,17 @@ import plugins.adufour.vars.lang.VarDouble;
 import plugins.adufour.vars.lang.VarInteger;
 import plugins.adufour.vars.lang.VarString;
 import plugins.adufour.vars.util.VarException;
-import plugins.tprovoost.sequenceblocks.SequenceBlocks;
 import plugins.tprovoost.sequenceblocks.files.LoadMetadata;
 
 /**
  * Block to return main informations from a metadata object.
  *
- * @author Stephane
+ * @author Stephane Dallongeville
  * @see LoadMetadata
  */
-public class ReadMetadata extends Plugin implements SequenceBlock, PluginLibrary, PluginBundled {
+@IcyPluginName("Read Metadata")
+@IcyPluginIcon(path = "/SequenceBlocks_icon.png")
+public class ReadMetadata extends Plugin implements SequenceBlock {
     final protected Var<OMEXMLMetadata> metadata = new Var<>("Metadata", OMEXMLMetadata.class);
     final protected VarInteger serie = new VarInteger("Series", 0);
 
@@ -90,13 +92,13 @@ public class ReadMetadata extends Plugin implements SequenceBlock, PluginLibrary
     }
 
     @Override
-    public void declareInput(final VarList inputMap) {
+    public void declareInput(final @NotNull VarList inputMap) {
         inputMap.add("Metadata", metadata);
         inputMap.add("Serie", serie);
     }
 
     @Override
-    public void declareOutput(final VarList outputMap) {
+    public void declareOutput(final @NotNull VarList outputMap) {
         outputMap.add("numSerie", numSerie);
         outputMap.add("Name", name);
         outputMap.add("Size X", sizeX);
@@ -112,9 +114,4 @@ public class ReadMetadata extends Plugin implements SequenceBlock, PluginLibrary
         outputMap.add("positiony", positionY);
         outputMap.add("positionz", positionZ);
     }
-
-    @Override
-    public String getMainPluginClassName() {
-        return SequenceBlocks.class.getName();
-    }
 }
\ No newline at end of file
diff --git a/src/main/java/plugins/tprovoost/sequenceblocks/infos/SetChannelName.java b/src/main/java/plugins/tprovoost/sequenceblocks/infos/SetChannelName.java
index 336b7f6..3cbf859 100644
--- a/src/main/java/plugins/tprovoost/sequenceblocks/infos/SetChannelName.java
+++ b/src/main/java/plugins/tprovoost/sequenceblocks/infos/SetChannelName.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010-2023. Institut Pasteur.
+ * Copyright (c) 2010-2024. Institut Pasteur.
  *
  * This file is part of Icy.
  * Icy is free software: you can redistribute it and/or modify
@@ -18,26 +18,29 @@
 
 package plugins.tprovoost.sequenceblocks.infos;
 
-import icy.plugin.abstract_.Plugin;
-import icy.plugin.interface_.PluginBundled;
-import icy.sequence.Sequence;
-import icy.util.StringUtil;
+import org.bioimageanalysis.icy.common.string.StringUtil;
+import org.bioimageanalysis.icy.extension.plugin.abstract_.Plugin;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginIcon;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginName;
+import org.bioimageanalysis.icy.model.sequence.Sequence;
+import org.jetbrains.annotations.NotNull;
 import plugins.adufour.blocks.tools.sequence.SequenceBlock;
 import plugins.adufour.blocks.util.VarList;
 import plugins.adufour.vars.lang.VarInteger;
 import plugins.adufour.vars.lang.VarSequence;
 import plugins.adufour.vars.lang.VarString;
 import plugins.adufour.vars.util.VarException;
-import plugins.tprovoost.sequenceblocks.SequenceBlocks;
 
 /**
  * Block to set channel name of the specified sequence
  *
- * @author Stephane
+ * @author Stephane Dallongeville
  * @see GetChannelsName
  * @see SetChannelName
  */
-public class SetChannelName extends Plugin implements SequenceBlock, PluginBundled {
+@IcyPluginName("Set Channel Name")
+@IcyPluginIcon(path = "/SequenceBlocks_icon.png")
+public class SetChannelName extends Plugin implements SequenceBlock {
     final protected VarSequence varSequence = new VarSequence("Sequence", null);
     final protected VarString varName = new VarString("Name", "");
     final protected VarInteger idx = new VarInteger("Channel", 0);
@@ -60,7 +63,7 @@ public class SetChannelName extends Plugin implements SequenceBlock, PluginBundl
     }
 
     @Override
-    public void declareInput(final VarList inputMap) {
+    public void declareInput(final @NotNull VarList inputMap) {
         inputMap.add("sequence", varSequence);
         inputMap.add("index", idx);
         inputMap.add("name", varName);
@@ -70,9 +73,4 @@ public class SetChannelName extends Plugin implements SequenceBlock, PluginBundl
     public void declareOutput(final VarList outputMap) {
         //
     }
-
-    @Override
-    public String getMainPluginClassName() {
-        return SequenceBlocks.class.getName();
-    }
 }
diff --git a/src/main/java/plugins/tprovoost/sequenceblocks/infos/SetChannelsName.java b/src/main/java/plugins/tprovoost/sequenceblocks/infos/SetChannelsName.java
index d735499..06ee39f 100644
--- a/src/main/java/plugins/tprovoost/sequenceblocks/infos/SetChannelsName.java
+++ b/src/main/java/plugins/tprovoost/sequenceblocks/infos/SetChannelsName.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010-2023. Institut Pasteur.
+ * Copyright (c) 2010-2024. Institut Pasteur.
  *
  * This file is part of Icy.
  * Icy is free software: you can redistribute it and/or modify
@@ -18,24 +18,27 @@
 
 package plugins.tprovoost.sequenceblocks.infos;
 
-import icy.plugin.abstract_.Plugin;
-import icy.plugin.interface_.PluginBundled;
-import icy.sequence.Sequence;
+import org.bioimageanalysis.icy.extension.plugin.abstract_.Plugin;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginIcon;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginName;
+import org.bioimageanalysis.icy.model.sequence.Sequence;
+import org.jetbrains.annotations.NotNull;
 import plugins.adufour.blocks.tools.sequence.SequenceBlock;
 import plugins.adufour.blocks.util.VarList;
 import plugins.adufour.vars.lang.VarArray;
 import plugins.adufour.vars.lang.VarSequence;
 import plugins.adufour.vars.util.VarException;
-import plugins.tprovoost.sequenceblocks.SequenceBlocks;
 
 /**
  * Block to set all channels name of the specified sequence
  *
- * @author Stephane
+ * @author Stephane Dallongeville
  * @see GetChannelsName
  * @see SetChannelName
  */
-public class SetChannelsName extends Plugin implements SequenceBlock, PluginBundled {
+@IcyPluginName("Set Channels Name")
+@IcyPluginIcon(path = "/SequenceBlocks_icon.png")
+public class SetChannelsName extends Plugin implements SequenceBlock {
     final protected VarSequence varSequence = new VarSequence("Sequence", null);
     final protected VarArray<String> varNames = new VarArray<>("Names", String[].class, new String[0]);
 
@@ -54,7 +57,7 @@ public class SetChannelsName extends Plugin implements SequenceBlock, PluginBund
     }
 
     @Override
-    public void declareInput(final VarList inputMap) {
+    public void declareInput(final @NotNull VarList inputMap) {
         inputMap.add("sequence", varSequence);
         inputMap.add("names", varNames);
     }
@@ -63,9 +66,4 @@ public class SetChannelsName extends Plugin implements SequenceBlock, PluginBund
     public void declareOutput(final VarList outputMap) {
         //
     }
-
-    @Override
-    public String getMainPluginClassName() {
-        return SequenceBlocks.class.getName();
-    }
 }
diff --git a/src/main/java/plugins/tprovoost/sequenceblocks/infos/SetColormap.java b/src/main/java/plugins/tprovoost/sequenceblocks/infos/SetColormap.java
index 5abab03..5ed0eee 100644
--- a/src/main/java/plugins/tprovoost/sequenceblocks/infos/SetColormap.java
+++ b/src/main/java/plugins/tprovoost/sequenceblocks/infos/SetColormap.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010-2023. Institut Pasteur.
+ * Copyright (c) 2010-2024. Institut Pasteur.
  *
  * This file is part of Icy.
  * Icy is free software: you can redistribute it and/or modify
@@ -18,25 +18,28 @@
 
 package plugins.tprovoost.sequenceblocks.infos;
 
-import icy.image.colormap.IcyColorMap;
-import icy.image.colormap.LinearColorMap;
-import icy.plugin.abstract_.Plugin;
-import icy.plugin.interface_.PluginBundled;
-import icy.sequence.Sequence;
+import org.bioimageanalysis.icy.extension.plugin.abstract_.Plugin;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginIcon;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginName;
+import org.bioimageanalysis.icy.model.colormap.IcyColorMap;
+import org.bioimageanalysis.icy.model.colormap.LinearColorMap;
+import org.bioimageanalysis.icy.model.sequence.Sequence;
+import org.jetbrains.annotations.NotNull;
 import plugins.adufour.blocks.tools.sequence.SequenceBlock;
 import plugins.adufour.blocks.util.BlocksException;
 import plugins.adufour.blocks.util.VarList;
 import plugins.adufour.vars.lang.VarInteger;
 import plugins.adufour.vars.lang.VarSequence;
-import plugins.tprovoost.sequenceblocks.SequenceBlocks;
 
-public class SetColormap extends Plugin implements SequenceBlock, PluginBundled {
+@IcyPluginName("Set Colormap")
+@IcyPluginIcon(path = "/SequenceBlocks_icon.png")
+public class SetColormap extends Plugin implements SequenceBlock {
     final protected VarSequence sequenceIn = new VarSequence("Sequence", null);
     final protected VarInteger numChannel = new VarInteger("Channel", 0);
     final protected VarColormap colormap = new VarColormap("Color map", LinearColorMap.gray_);
 
     @Override
-    public void declareInput(final VarList inputMap) {
+    public void declareInput(final @NotNull VarList inputMap) {
         inputMap.add("input", sequenceIn);
         inputMap.add("numChannel", numChannel);
         inputMap.add("colormap", colormap);
@@ -61,9 +64,4 @@ public class SetColormap extends Plugin implements SequenceBlock, PluginBundled
                 throw new BlocksException("Block 'Set Colormap': illegal channel number for this sequence !", true);
         }
     }
-
-    @Override
-    public String getMainPluginClassName() {
-        return SequenceBlocks.class.getName();
-    }
 }
diff --git a/src/main/java/plugins/tprovoost/sequenceblocks/infos/SetColormaps.java b/src/main/java/plugins/tprovoost/sequenceblocks/infos/SetColormaps.java
index 09c5873..d85adf6 100644
--- a/src/main/java/plugins/tprovoost/sequenceblocks/infos/SetColormaps.java
+++ b/src/main/java/plugins/tprovoost/sequenceblocks/infos/SetColormaps.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010-2023. Institut Pasteur.
+ * Copyright (c) 2010-2024. Institut Pasteur.
  *
  * This file is part of Icy.
  * Icy is free software: you can redistribute it and/or modify
@@ -18,23 +18,26 @@
 
 package plugins.tprovoost.sequenceblocks.infos;
 
-import icy.image.colormap.IcyColorMap;
-import icy.plugin.abstract_.Plugin;
-import icy.plugin.interface_.PluginBundled;
-import icy.sequence.Sequence;
+import org.bioimageanalysis.icy.extension.plugin.abstract_.Plugin;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginIcon;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginName;
+import org.bioimageanalysis.icy.model.colormap.IcyColorMap;
+import org.bioimageanalysis.icy.model.sequence.Sequence;
+import org.jetbrains.annotations.NotNull;
 import plugins.adufour.blocks.tools.sequence.SequenceBlock;
 import plugins.adufour.blocks.util.VarList;
 import plugins.adufour.vars.lang.VarArray;
 import plugins.adufour.vars.lang.VarSequence;
 import plugins.adufour.vars.util.VarException;
-import plugins.tprovoost.sequenceblocks.SequenceBlocks;
 
-public class SetColormaps extends Plugin implements SequenceBlock, PluginBundled {
+@IcyPluginName("Set Colormaps")
+@IcyPluginIcon(path = "/SequenceBlocks_icon.png")
+public class SetColormaps extends Plugin implements SequenceBlock {
     final protected VarSequence sequenceIn = new VarSequence("Input", null);
     final protected VarArray<IcyColorMap> colormaps = new VarArray<>("Color maps", IcyColorMap[].class, new IcyColorMap[0]);
 
     @Override
-    public void declareInput(final VarList inputMap) {
+    public void declareInput(final @NotNull VarList inputMap) {
         inputMap.add("input", sequenceIn);
         inputMap.add("colormaps", colormaps);
     }
@@ -57,9 +60,4 @@ public class SetColormaps extends Plugin implements SequenceBlock, PluginBundled
         for (int c = 0; c < Math.min(seq.getSizeC(), cms.length); c++)
             seq.setColormap(c, cms[c], cms[c].isAlpha());
     }
-
-    @Override
-    public String getMainPluginClassName() {
-        return SequenceBlocks.class.getName();
-    }
 }
diff --git a/src/main/java/plugins/tprovoost/sequenceblocks/infos/SetName.java b/src/main/java/plugins/tprovoost/sequenceblocks/infos/SetName.java
index 82085ef..4a72abd 100644
--- a/src/main/java/plugins/tprovoost/sequenceblocks/infos/SetName.java
+++ b/src/main/java/plugins/tprovoost/sequenceblocks/infos/SetName.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010-2023. Institut Pasteur.
+ * Copyright (c) 2010-2024. Institut Pasteur.
  *
  * This file is part of Icy.
  * Icy is free software: you can redistribute it and/or modify
@@ -18,20 +18,23 @@
 
 package plugins.tprovoost.sequenceblocks.infos;
 
-import icy.plugin.abstract_.Plugin;
-import icy.plugin.interface_.PluginBundled;
-import icy.sequence.Sequence;
+import org.bioimageanalysis.icy.extension.plugin.abstract_.Plugin;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginIcon;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginName;
+import org.bioimageanalysis.icy.model.sequence.Sequence;
+import org.jetbrains.annotations.NotNull;
 import plugins.adufour.blocks.tools.sequence.SequenceBlock;
 import plugins.adufour.blocks.util.VarList;
 import plugins.adufour.vars.lang.VarSequence;
 import plugins.adufour.vars.lang.VarString;
 import plugins.adufour.vars.util.VarException;
-import plugins.tprovoost.sequenceblocks.SequenceBlocks;
 
 /**
- * @author thomasprovoost
+ * @author Thomas Provoost
  */
-public class SetName extends Plugin implements SequenceBlock, PluginBundled {
+@IcyPluginName("Set Name")
+@IcyPluginIcon(path = "/SequenceBlocks_icon.png")
+public class SetName extends Plugin implements SequenceBlock {
     final protected VarSequence varSequence = new VarSequence("Sequence", null);
     final protected VarString name = new VarString("Name", "");
 
@@ -47,7 +50,7 @@ public class SetName extends Plugin implements SequenceBlock, PluginBundled {
     }
 
     @Override
-    public void declareInput(final VarList inputMap) {
+    public void declareInput(final @NotNull VarList inputMap) {
         inputMap.add("sequence", varSequence);
         inputMap.add("name", name);
     }
@@ -56,9 +59,4 @@ public class SetName extends Plugin implements SequenceBlock, PluginBundled {
     public void declareOutput(final VarList outputMap) {
         //
     }
-
-    @Override
-    public String getMainPluginClassName() {
-        return SequenceBlocks.class.getName();
-    }
 }
diff --git a/src/main/java/plugins/tprovoost/sequenceblocks/infos/SetResolution.java b/src/main/java/plugins/tprovoost/sequenceblocks/infos/SetResolution.java
index 669aa86..55061bb 100644
--- a/src/main/java/plugins/tprovoost/sequenceblocks/infos/SetResolution.java
+++ b/src/main/java/plugins/tprovoost/sequenceblocks/infos/SetResolution.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010-2023. Institut Pasteur.
+ * Copyright (c) 2010-2024. Institut Pasteur.
  *
  * This file is part of Icy.
  * Icy is free software: you can redistribute it and/or modify
@@ -18,21 +18,24 @@
 
 package plugins.tprovoost.sequenceblocks.infos;
 
-import icy.math.UnitUtil;
-import icy.plugin.abstract_.Plugin;
-import icy.plugin.interface_.PluginBundled;
-import icy.sequence.Sequence;
+import org.bioimageanalysis.icy.common.math.UnitUtil;
+import org.bioimageanalysis.icy.extension.plugin.abstract_.Plugin;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginIcon;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginName;
+import org.bioimageanalysis.icy.model.sequence.Sequence;
+import org.jetbrains.annotations.NotNull;
 import plugins.adufour.blocks.tools.sequence.SequenceBlock;
 import plugins.adufour.blocks.util.VarList;
 import plugins.adufour.vars.lang.VarDouble;
 import plugins.adufour.vars.lang.VarSequence;
 import plugins.adufour.vars.util.VarException;
-import plugins.tprovoost.sequenceblocks.SequenceBlocks;
 
 /**
- * @author thomasprovoost
+ * @author Thomas Provoost
  */
-public class SetResolution extends Plugin implements SequenceBlock, PluginBundled {
+@IcyPluginName("Set Resolution")
+@IcyPluginIcon(path = "/SequenceBlocks_icon.png")
+public class SetResolution extends Plugin implements SequenceBlock {
     final protected VarSequence varSequence = new VarSequence("Sequence", null);
     final protected VarDouble pxSizeX = new VarDouble("Pixel Size X (" + UnitUtil.MICRO_STRING + "m)", 1d);
     final protected VarDouble pxSizeY = new VarDouble("Pixel Size Y (" + UnitUtil.MICRO_STRING + "m)", 1d);
@@ -63,7 +66,7 @@ public class SetResolution extends Plugin implements SequenceBlock, PluginBundle
     }
 
     @Override
-    public void declareInput(final VarList inputMap) {
+    public void declareInput(final @NotNull VarList inputMap) {
         inputMap.add("sequence", varSequence);
         inputMap.add("PxSize X (" + UnitUtil.MICRO_STRING + "m)", pxSizeX);
         inputMap.add("PxSize Y (" + UnitUtil.MICRO_STRING + "m)", pxSizeY);
@@ -75,9 +78,4 @@ public class SetResolution extends Plugin implements SequenceBlock, PluginBundle
     public void declareOutput(final VarList outputMap) {
         //
     }
-
-    @Override
-    public String getMainPluginClassName() {
-        return SequenceBlocks.class.getName();
-    }
 }
diff --git a/src/main/java/plugins/tprovoost/sequenceblocks/infos/SetSequenceProperty.java b/src/main/java/plugins/tprovoost/sequenceblocks/infos/SetSequenceProperty.java
index a1ac68a..4059342 100644
--- a/src/main/java/plugins/tprovoost/sequenceblocks/infos/SetSequenceProperty.java
+++ b/src/main/java/plugins/tprovoost/sequenceblocks/infos/SetSequenceProperty.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010-2023. Institut Pasteur.
+ * Copyright (c) 2010-2024. Institut Pasteur.
  *
  * This file is part of Icy.
  * Icy is free software: you can redistribute it and/or modify
@@ -18,15 +18,15 @@
 
 package plugins.tprovoost.sequenceblocks.infos;
 
-import icy.plugin.abstract_.Plugin;
-import icy.plugin.interface_.PluginBundled;
-import icy.plugin.interface_.PluginLibrary;
-import icy.sequence.Sequence;
+import org.bioimageanalysis.icy.extension.plugin.abstract_.Plugin;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginIcon;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginName;
+import org.bioimageanalysis.icy.model.sequence.Sequence;
+import org.jetbrains.annotations.NotNull;
 import plugins.adufour.blocks.tools.sequence.SequenceBlock;
 import plugins.adufour.blocks.util.VarList;
 import plugins.adufour.vars.lang.VarSequence;
 import plugins.adufour.vars.lang.VarString;
-import plugins.tprovoost.sequenceblocks.SequenceBlocks;
 
 /**
  * Block to set value (in String format) of a Sequence property (name, pixel size, custom...)<br>
@@ -48,9 +48,11 @@ import plugins.tprovoost.sequenceblocks.SequenceBlocks;
  * <li><i>virtual</i> = virtual mode enabled on the dataset</li>
  * </ul>
  *
- * @author Stephane
+ * @author Stephane Dallongeville
  */
-public class SetSequenceProperty extends Plugin implements SequenceBlock, PluginLibrary, PluginBundled {
+@IcyPluginName("Set Sequence Property")
+@IcyPluginIcon(path = "/SequenceBlocks_icon.png")
+public class SetSequenceProperty extends Plugin implements SequenceBlock {
     protected VarSequence sequence = new VarSequence("Sequence", null);
     protected VarString propertyName = new VarString("Property", "name");
     protected VarString value = new VarString("Value", "");
@@ -64,7 +66,7 @@ public class SetSequenceProperty extends Plugin implements SequenceBlock, Plugin
     }
 
     @Override
-    public void declareInput(final VarList inputMap) {
+    public void declareInput(final @NotNull VarList inputMap) {
         inputMap.add("sequence", sequence);
         inputMap.add("property", propertyName);
         inputMap.add("value", value);
@@ -74,9 +76,4 @@ public class SetSequenceProperty extends Plugin implements SequenceBlock, Plugin
     public void declareOutput(final VarList outputMap) {
         //
     }
-
-    @Override
-    public String getMainPluginClassName() {
-        return SequenceBlocks.class.getName();
-    }
 }
diff --git a/src/main/java/plugins/tprovoost/sequenceblocks/infos/VarColormap.java b/src/main/java/plugins/tprovoost/sequenceblocks/infos/VarColormap.java
index 41ac152..bb3466f 100644
--- a/src/main/java/plugins/tprovoost/sequenceblocks/infos/VarColormap.java
+++ b/src/main/java/plugins/tprovoost/sequenceblocks/infos/VarColormap.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010-2023. Institut Pasteur.
+ * Copyright (c) 2010-2024. Institut Pasteur.
  *
  * This file is part of Icy.
  * Icy is free software: you can redistribute it and/or modify
@@ -18,10 +18,10 @@
 
 package plugins.tprovoost.sequenceblocks.infos;
 
-import icy.gui.component.renderer.ColormapComboBoxRenderer;
-import icy.image.colormap.IcyColorMap;
-import icy.image.colormap.LinearColorMap;
-import icy.util.XMLUtil;
+import org.bioimageanalysis.icy.gui.component.renderer.ColormapComboBoxRenderer;
+import org.bioimageanalysis.icy.io.xml.XMLUtil;
+import org.bioimageanalysis.icy.model.colormap.IcyColorMap;
+import org.bioimageanalysis.icy.model.colormap.LinearColorMap;
 import org.w3c.dom.Node;
 import plugins.adufour.vars.gui.VarEditor;
 import plugins.adufour.vars.gui.model.ValueSelectionModel;
@@ -33,7 +33,7 @@ import javax.swing.*;
 /**
  * Define a specific Var type for ColorMap object
  *
- * @author emilie
+ * @author Emilie
  */
 public class VarColormap extends Var<IcyColorMap> {
     public static class ColormapSelectionModel extends ValueSelectionModel<IcyColorMap> {
diff --git a/src/main/java/plugins/tprovoost/sequenceblocks/loop/SequenceChannelBatch.java b/src/main/java/plugins/tprovoost/sequenceblocks/loop/SequenceChannelBatch.java
index 14c7b67..5aa367d 100644
--- a/src/main/java/plugins/tprovoost/sequenceblocks/loop/SequenceChannelBatch.java
+++ b/src/main/java/plugins/tprovoost/sequenceblocks/loop/SequenceChannelBatch.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010-2023. Institut Pasteur.
+ * Copyright (c) 2010-2024. Institut Pasteur.
  *
  * This file is part of Icy.
  * Icy is free software: you can redistribute it and/or modify
@@ -18,22 +18,23 @@
 
 package plugins.tprovoost.sequenceblocks.loop;
 
-import icy.plugin.interface_.PluginBundled;
-import icy.plugin.interface_.PluginLibrary;
-import icy.sequence.Sequence;
-import icy.sequence.SequenceUtil;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginIcon;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginName;
+import org.bioimageanalysis.icy.model.sequence.Sequence;
+import org.bioimageanalysis.icy.model.sequence.SequenceUtil;
 import plugins.adufour.blocks.lang.Batch;
 import plugins.adufour.blocks.tools.sequence.SequenceBlock;
 import plugins.adufour.vars.lang.VarSequence;
 import plugins.adufour.vars.util.VarException;
-import plugins.tprovoost.sequenceblocks.SequenceBlocks;
 
 /**
  * Simple batch loop to iterate over all C channel from an input Sequence.
  *
- * @author Stephane
+ * @author Stephane Dallongeville
  */
-public class SequenceChannelBatch extends Batch implements SequenceBlock, PluginLibrary, PluginBundled {
+@IcyPluginName("Sequence Channel Batch")
+@IcyPluginIcon(path = "/SequenceBlocks_icon.png")
+public class SequenceChannelBatch extends Batch implements SequenceBlock {
     // important to not initialize here (even with null) and create them in getBatchSource() and getBatchElement()
     protected VarSequence inputSequence;
     protected VarSequence element;
@@ -79,9 +80,4 @@ public class SequenceChannelBatch extends Batch implements SequenceBlock, Plugin
     public boolean isStopConditionReached() {
         return getIterationCounter().getValue() >= inputSequence.getValue().getSizeC();
     }
-
-    @Override
-    public String getMainPluginClassName() {
-        return SequenceBlocks.class.getName();
-    }
 }
diff --git a/src/main/java/plugins/tprovoost/sequenceblocks/loop/SequenceFileImporterBatch.java b/src/main/java/plugins/tprovoost/sequenceblocks/loop/SequenceFileImporterBatch.java
index 6343962..bef55ba 100644
--- a/src/main/java/plugins/tprovoost/sequenceblocks/loop/SequenceFileImporterBatch.java
+++ b/src/main/java/plugins/tprovoost/sequenceblocks/loop/SequenceFileImporterBatch.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010-2023. Institut Pasteur.
+ * Copyright (c) 2010-2024. Institut Pasteur.
  *
  * This file is part of Icy.
  * Icy is free software: you can redistribute it and/or modify
@@ -18,16 +18,15 @@
 
 package plugins.tprovoost.sequenceblocks.loop;
 
-import icy.file.SequenceFileImporter;
-import icy.plugin.interface_.PluginBundled;
-import icy.plugin.interface_.PluginLibrary;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginIcon;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginName;
+import org.bioimageanalysis.icy.io.SequenceFileImporter;
 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;
 
 import java.util.List;
@@ -35,9 +34,11 @@ import java.util.List;
 /**
  * Base abstract class for {@link SequenceFileImporter} batch loop.
  *
- * @author Stephane
+ * @author Stephane Dallongeville
  */
-public abstract class SequenceFileImporterBatch extends Batch implements SequenceBlock, PluginLibrary, PluginBundled {
+@IcyPluginName("SequenceFileImporter Batch")
+@IcyPluginIcon(path = "/SequenceBlocks_icon.png")
+public abstract class SequenceFileImporterBatch extends Batch implements SequenceBlock {
     // important to not initialize and create them in getBatchSource() and getBatchElement()
     protected Var<PositionedSequenceFileImporter> positionedImporter;
     protected Var<PositionedSequenceFileImporter> element;
@@ -112,9 +113,4 @@ public abstract class SequenceFileImporterBatch extends Batch implements Sequenc
 
         loopVariables.add(series);
     }
-
-    @Override
-    public String getMainPluginClassName() {
-        return SequenceBlocks.class.getName();
-    }
 }
diff --git a/src/main/java/plugins/tprovoost/sequenceblocks/loop/SequenceFileImporterChannelBatch.java b/src/main/java/plugins/tprovoost/sequenceblocks/loop/SequenceFileImporterChannelBatch.java
index bf0d032..d48c525 100644
--- a/src/main/java/plugins/tprovoost/sequenceblocks/loop/SequenceFileImporterChannelBatch.java
+++ b/src/main/java/plugins/tprovoost/sequenceblocks/loop/SequenceFileImporterChannelBatch.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010-2023. Institut Pasteur.
+ * Copyright (c) 2010-2024. Institut Pasteur.
  *
  * This file is part of Icy.
  * Icy is free software: you can redistribute it and/or modify
@@ -18,16 +18,20 @@
 
 package plugins.tprovoost.sequenceblocks.loop;
 
-import icy.file.SequenceFileImporter;
-import icy.sequence.MetaDataUtil;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginIcon;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginName;
+import org.bioimageanalysis.icy.io.SequenceFileImporter;
+import org.bioimageanalysis.icy.model.sequence.MetaDataUtil;
 import plugins.adufour.vars.util.VarException;
 import plugins.tprovoost.sequenceblocks.importer.PositionedSequenceFileImporter;
 
 /**
  * Simple batch loop to iterate over all C channel from specified opened {@link SequenceFileImporter} object.
  *
- * @author Stephane
+ * @author Stephane Dallongeville
  */
+@IcyPluginName("SequenceFileImporter Channel Batch")
+@IcyPluginIcon(path = "/SequenceBlocks_icon.png")
 public class SequenceFileImporterChannelBatch extends SequenceFileImporterBatch {
     @Override
     public void initializeLoop() {
diff --git a/src/main/java/plugins/tprovoost/sequenceblocks/loop/SequenceFileImporterFrameBatch.java b/src/main/java/plugins/tprovoost/sequenceblocks/loop/SequenceFileImporterFrameBatch.java
index 9c55471..12645dc 100644
--- a/src/main/java/plugins/tprovoost/sequenceblocks/loop/SequenceFileImporterFrameBatch.java
+++ b/src/main/java/plugins/tprovoost/sequenceblocks/loop/SequenceFileImporterFrameBatch.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010-2023. Institut Pasteur.
+ * Copyright (c) 2010-2024. Institut Pasteur.
  *
  * This file is part of Icy.
  * Icy is free software: you can redistribute it and/or modify
@@ -18,16 +18,20 @@
 
 package plugins.tprovoost.sequenceblocks.loop;
 
-import icy.file.SequenceFileImporter;
-import icy.sequence.MetaDataUtil;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginIcon;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginName;
+import org.bioimageanalysis.icy.io.SequenceFileImporter;
+import org.bioimageanalysis.icy.model.sequence.MetaDataUtil;
 import plugins.adufour.vars.util.VarException;
 import plugins.tprovoost.sequenceblocks.importer.PositionedSequenceFileImporter;
 
 /**
  * Simple batch loop to iterate over all T frame from the specified opened {@link SequenceFileImporter} object.
  *
- * @author Stephane
+ * @author Stephane Dallongeville
  */
+@IcyPluginName("SequenceFileImporter Frame Batch")
+@IcyPluginIcon(path = "/SequenceBlocks_icon.png")
 public class SequenceFileImporterFrameBatch extends SequenceFileImporterBatch {
     @Override
     public void initializeLoop() {
diff --git a/src/main/java/plugins/tprovoost/sequenceblocks/loop/SequenceFileImporterRegionBatch.java b/src/main/java/plugins/tprovoost/sequenceblocks/loop/SequenceFileImporterRegionBatch.java
index 3cf4b94..2fcabb7 100644
--- a/src/main/java/plugins/tprovoost/sequenceblocks/loop/SequenceFileImporterRegionBatch.java
+++ b/src/main/java/plugins/tprovoost/sequenceblocks/loop/SequenceFileImporterRegionBatch.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010-2023. Institut Pasteur.
+ * Copyright (c) 2010-2024. Institut Pasteur.
  *
  * This file is part of Icy.
  * Icy is free software: you can redistribute it and/or modify
@@ -18,10 +18,12 @@
 
 package plugins.tprovoost.sequenceblocks.loop;
 
-import icy.file.SequenceFileImporter;
-import icy.roi.ROI;
-import icy.sequence.MetaDataUtil;
-import icy.type.rectangle.Rectangle2DUtil;
+import org.bioimageanalysis.icy.common.geom.rectangle.Rectangle2DUtil;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginIcon;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginName;
+import org.bioimageanalysis.icy.io.SequenceFileImporter;
+import org.bioimageanalysis.icy.model.roi.ROI;
+import org.bioimageanalysis.icy.model.sequence.MetaDataUtil;
 import plugins.adufour.blocks.util.VarList;
 import plugins.adufour.vars.lang.Var;
 import plugins.adufour.vars.lang.VarInteger;
@@ -38,8 +40,10 @@ import java.util.List;
  * Simple batch loop to iterate over a set of XY region defined by ROIs from the specified opened
  * {@link SequenceFileImporter} object.
  *
- * @author Stephane
+ * @author Stephane Dallongeville
  */
+@IcyPluginName("SequenceFileImporter Region Batch")
+@IcyPluginIcon(path = "/SequenceBlocks_icon.png")
 public class SequenceFileImporterRegionBatch extends SequenceFileImporterBatch {
     // important to not initialize here (even with null) and create them in getBatchSource() and getBatchElement()
     protected VarROIArray rois;
diff --git a/src/main/java/plugins/tprovoost/sequenceblocks/loop/SequenceFileImporterSeriesBatch.java b/src/main/java/plugins/tprovoost/sequenceblocks/loop/SequenceFileImporterSeriesBatch.java
index e9d9950..b7f5857 100644
--- a/src/main/java/plugins/tprovoost/sequenceblocks/loop/SequenceFileImporterSeriesBatch.java
+++ b/src/main/java/plugins/tprovoost/sequenceblocks/loop/SequenceFileImporterSeriesBatch.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010-2023. Institut Pasteur.
+ * Copyright (c) 2010-2024. Institut Pasteur.
  *
  * This file is part of Icy.
  * Icy is free software: you can redistribute it and/or modify
@@ -18,8 +18,10 @@
 
 package plugins.tprovoost.sequenceblocks.loop;
 
-import icy.file.SequenceFileImporter;
-import icy.sequence.MetaDataUtil;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginIcon;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginName;
+import org.bioimageanalysis.icy.io.SequenceFileImporter;
+import org.bioimageanalysis.icy.model.sequence.MetaDataUtil;
 import plugins.adufour.blocks.util.VarList;
 import plugins.adufour.vars.lang.Var;
 import plugins.adufour.vars.util.VarException;
@@ -30,8 +32,10 @@ import java.util.List;
 /**
  * Simple batch loop to iterate over all series from the specified opened {@link SequenceFileImporter} object.
  *
- * @author Stephane
+ * @author Stephane Dallongeville
  */
+@IcyPluginName("SequenceFileImporter Series Batch")
+@IcyPluginIcon(path = "/SequenceBlocks_icon.png")
 public class SequenceFileImporterSeriesBatch extends SequenceFileImporterBatch {
     @Override
     public void initializeLoop() {
diff --git a/src/main/java/plugins/tprovoost/sequenceblocks/loop/SequenceFileImporterSliceBatch.java b/src/main/java/plugins/tprovoost/sequenceblocks/loop/SequenceFileImporterSliceBatch.java
index 2abea99..fbefe0b 100644
--- a/src/main/java/plugins/tprovoost/sequenceblocks/loop/SequenceFileImporterSliceBatch.java
+++ b/src/main/java/plugins/tprovoost/sequenceblocks/loop/SequenceFileImporterSliceBatch.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010-2023. Institut Pasteur.
+ * Copyright (c) 2010-2024. Institut Pasteur.
  *
  * This file is part of Icy.
  * Icy is free software: you can redistribute it and/or modify
@@ -18,16 +18,20 @@
 
 package plugins.tprovoost.sequenceblocks.loop;
 
-import icy.file.SequenceFileImporter;
-import icy.sequence.MetaDataUtil;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginIcon;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginName;
+import org.bioimageanalysis.icy.io.SequenceFileImporter;
+import org.bioimageanalysis.icy.model.sequence.MetaDataUtil;
 import plugins.adufour.vars.util.VarException;
 import plugins.tprovoost.sequenceblocks.importer.PositionedSequenceFileImporter;
 
 /**
  * Simple batch loop to iterate over all Z slice from specified opened {@link SequenceFileImporter} object.
  *
- * @author Stephane
+ * @author Stephane Dallongeville
  */
+@IcyPluginName("SequenceFileImporter Slice Batch")
+@IcyPluginIcon(path = "/SequenceBlocks_icon.png")
 public class SequenceFileImporterSliceBatch extends SequenceFileImporterBatch {
     @Override
     public void initializeLoop() {
diff --git a/src/main/java/plugins/tprovoost/sequenceblocks/loop/SequenceFileImporterTileBatch.java b/src/main/java/plugins/tprovoost/sequenceblocks/loop/SequenceFileImporterTileBatch.java
index ffdeb1c..c94a257 100644
--- a/src/main/java/plugins/tprovoost/sequenceblocks/loop/SequenceFileImporterTileBatch.java
+++ b/src/main/java/plugins/tprovoost/sequenceblocks/loop/SequenceFileImporterTileBatch.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010-2023. Institut Pasteur.
+ * Copyright (c) 2010-2024. Institut Pasteur.
  *
  * This file is part of Icy.
  * Icy is free software: you can redistribute it and/or modify
@@ -18,9 +18,11 @@
 
 package plugins.tprovoost.sequenceblocks.loop;
 
-import icy.file.SequenceFileImporter;
-import icy.image.ImageUtil;
-import icy.sequence.MetaDataUtil;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginIcon;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginName;
+import org.bioimageanalysis.icy.io.SequenceFileImporter;
+import org.bioimageanalysis.icy.model.image.ImageUtil;
+import org.bioimageanalysis.icy.model.sequence.MetaDataUtil;
 import plugins.adufour.blocks.util.VarList;
 import plugins.adufour.vars.lang.Var;
 import plugins.adufour.vars.lang.VarInteger;
@@ -33,8 +35,10 @@ import java.util.List;
 /**
  * Simple batch loop to iterate over all XY tile from the specified opened {@link SequenceFileImporter} object.
  *
- * @author Stephane
+ * @author Stephane Dallongeville
  */
+@IcyPluginName("SequenceFileImporter Tile Batch")
+@IcyPluginIcon(path = "/SequenceBlocks_icon.png")
 public class SequenceFileImporterTileBatch extends SequenceFileImporterBatch {
     // important to not initialize here (even with null) and create them in getBatchSource() and getBatchElement()
     protected VarInteger tileW;
diff --git a/src/main/java/plugins/tprovoost/sequenceblocks/loop/SequenceFrameBatch.java b/src/main/java/plugins/tprovoost/sequenceblocks/loop/SequenceFrameBatch.java
index 8635b25..5e9c733 100644
--- a/src/main/java/plugins/tprovoost/sequenceblocks/loop/SequenceFrameBatch.java
+++ b/src/main/java/plugins/tprovoost/sequenceblocks/loop/SequenceFrameBatch.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010-2023. Institut Pasteur.
+ * Copyright (c) 2010-2024. Institut Pasteur.
  *
  * This file is part of Icy.
  * Icy is free software: you can redistribute it and/or modify
@@ -18,21 +18,22 @@
 
 package plugins.tprovoost.sequenceblocks.loop;
 
-import icy.plugin.interface_.PluginBundled;
-import icy.plugin.interface_.PluginLibrary;
-import icy.sequence.Sequence;
-import icy.sequence.SequenceUtil;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginIcon;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginName;
+import org.bioimageanalysis.icy.model.sequence.Sequence;
+import org.bioimageanalysis.icy.model.sequence.SequenceUtil;
 import plugins.adufour.blocks.lang.Batch;
 import plugins.adufour.vars.lang.VarSequence;
 import plugins.adufour.vars.util.VarException;
-import plugins.tprovoost.sequenceblocks.SequenceBlocks;
 
 /**
  * Simple batch loop to iterate over all T frame from an input Sequence.
  *
- * @author Stephane
+ * @author Stephane Dallongeville
  */
-public class SequenceFrameBatch extends Batch implements PluginLibrary, PluginBundled {
+@IcyPluginName("Sequence Frame Batch")
+@IcyPluginIcon(path = "/SequenceBlocks_icon.png")
+public class SequenceFrameBatch extends Batch {
     // important to not initialize and create them in getBatchSource() and getBatchElement()
     protected VarSequence inputSequence;
     protected VarSequence element;
@@ -77,9 +78,4 @@ public class SequenceFrameBatch extends Batch implements PluginLibrary, PluginBu
     public boolean isStopConditionReached() {
         return getIterationCounter().getValue() >= inputSequence.getValue().getSizeT();
     }
-
-    @Override
-    public String getMainPluginClassName() {
-        return SequenceBlocks.class.getName();
-    }
 }
diff --git a/src/main/java/plugins/tprovoost/sequenceblocks/loop/SequenceRegionBatch.java b/src/main/java/plugins/tprovoost/sequenceblocks/loop/SequenceRegionBatch.java
index 0409bdd..7c2d175 100644
--- a/src/main/java/plugins/tprovoost/sequenceblocks/loop/SequenceRegionBatch.java
+++ b/src/main/java/plugins/tprovoost/sequenceblocks/loop/SequenceRegionBatch.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010-2023. Institut Pasteur.
+ * Copyright (c) 2010-2024. Institut Pasteur.
  *
  * This file is part of Icy.
  * Icy is free software: you can redistribute it and/or modify
@@ -18,11 +18,11 @@
 
 package plugins.tprovoost.sequenceblocks.loop;
 
-import icy.plugin.interface_.PluginBundled;
-import icy.plugin.interface_.PluginLibrary;
-import icy.roi.ROI;
-import icy.sequence.Sequence;
-import icy.sequence.SequenceUtil;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginIcon;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginName;
+import org.bioimageanalysis.icy.model.roi.ROI;
+import org.bioimageanalysis.icy.model.sequence.Sequence;
+import org.bioimageanalysis.icy.model.sequence.SequenceUtil;
 import plugins.adufour.blocks.lang.Batch;
 import plugins.adufour.blocks.tools.sequence.SequenceBlock;
 import plugins.adufour.blocks.util.VarList;
@@ -30,16 +30,17 @@ import plugins.adufour.vars.lang.Var;
 import plugins.adufour.vars.lang.VarROIArray;
 import plugins.adufour.vars.lang.VarSequence;
 import plugins.adufour.vars.util.VarException;
-import plugins.tprovoost.sequenceblocks.SequenceBlocks;
 
 import java.util.List;
 
 /**
  * Simple batch loop to iterate over a set of Region (ROIs) from an input Sequence.
  *
- * @author Stephane
+ * @author Stephane Dallongeville
  */
-public class SequenceRegionBatch extends Batch implements SequenceBlock, PluginLibrary, PluginBundled {
+@IcyPluginName("Sequence Region Batch")
+@IcyPluginIcon(path = "/SequenceBlocks_icon.png")
+public class SequenceRegionBatch extends Batch implements SequenceBlock {
     // important to not initialize here (even with null) and create them in getBatchSource() and getBatchElement()
     protected VarSequence inputSequence;
     protected VarSequence element;
@@ -122,9 +123,4 @@ public class SequenceRegionBatch extends Batch implements SequenceBlock, PluginL
         loopVariables.add(inputSequence);
         loopVariables.add(currentRoi);
     }
-
-    @Override
-    public String getMainPluginClassName() {
-        return SequenceBlocks.class.getName();
-    }
 }
diff --git a/src/main/java/plugins/tprovoost/sequenceblocks/loop/SequenceSliceBatch.java b/src/main/java/plugins/tprovoost/sequenceblocks/loop/SequenceSliceBatch.java
index d5600bb..847d354 100644
--- a/src/main/java/plugins/tprovoost/sequenceblocks/loop/SequenceSliceBatch.java
+++ b/src/main/java/plugins/tprovoost/sequenceblocks/loop/SequenceSliceBatch.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010-2023. Institut Pasteur.
+ * Copyright (c) 2010-2024. Institut Pasteur.
  *
  * This file is part of Icy.
  * Icy is free software: you can redistribute it and/or modify
@@ -18,22 +18,23 @@
 
 package plugins.tprovoost.sequenceblocks.loop;
 
-import icy.plugin.interface_.PluginBundled;
-import icy.plugin.interface_.PluginLibrary;
-import icy.sequence.Sequence;
-import icy.sequence.SequenceUtil;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginIcon;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginName;
+import org.bioimageanalysis.icy.model.sequence.Sequence;
+import org.bioimageanalysis.icy.model.sequence.SequenceUtil;
 import plugins.adufour.blocks.lang.Batch;
 import plugins.adufour.blocks.tools.sequence.SequenceBlock;
 import plugins.adufour.vars.lang.VarSequence;
 import plugins.adufour.vars.util.VarException;
-import plugins.tprovoost.sequenceblocks.SequenceBlocks;
 
 /**
  * Simple batch loop to iterate over all Z slice from an input Sequence.
  *
- * @author Stephane
+ * @author Stephane Dallongeville
  */
-public class SequenceSliceBatch extends Batch implements SequenceBlock, PluginLibrary, PluginBundled {
+@IcyPluginName("Sequence Slice Batch")
+@IcyPluginIcon(path = "/SequenceBlocks_icon.png")
+public class SequenceSliceBatch extends Batch implements SequenceBlock {
     // important to not initialize here (even with null) and create them in getBatchSource() and getBatchElement()
     protected VarSequence inputSequence;
     protected VarSequence element;
@@ -67,17 +68,11 @@ public class SequenceSliceBatch extends Batch implements SequenceBlock, PluginLi
     @Override
     public void beforeIteration() {
         // set result in element
-        element.setValue(
-                SequenceUtil.extractSlice(inputSequence.getValue(), getIterationCounter().getValue()));
+        element.setValue(SequenceUtil.extractSlice(inputSequence.getValue(), getIterationCounter().getValue()));
     }
 
     @Override
     public boolean isStopConditionReached() {
         return getIterationCounter().getValue() >= inputSequence.getValue().getSizeZ();
     }
-
-    @Override
-    public String getMainPluginClassName() {
-        return SequenceBlocks.class.getName();
-    }
 }
diff --git a/src/main/java/plugins/tprovoost/sequenceblocks/op/AdditiveFillSequence.java b/src/main/java/plugins/tprovoost/sequenceblocks/op/AdditiveFillSequence.java
index 4e2a833..7774124 100644
--- a/src/main/java/plugins/tprovoost/sequenceblocks/op/AdditiveFillSequence.java
+++ b/src/main/java/plugins/tprovoost/sequenceblocks/op/AdditiveFillSequence.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010-2023. Institut Pasteur.
+ * Copyright (c) 2010-2024. Institut Pasteur.
  *
  * This file is part of Icy.
  * Icy is free software: you can redistribute it and/or modify
@@ -18,28 +18,30 @@
 
 package plugins.tprovoost.sequenceblocks.op;
 
-import icy.image.ImageDataIterator;
-import icy.plugin.abstract_.Plugin;
-import icy.plugin.interface_.PluginBundled;
-import icy.plugin.interface_.PluginLibrary;
-import icy.roi.ROI;
-import icy.sequence.Sequence;
-import icy.sequence.SequenceDataIterator;
-import icy.type.DataIterator;
+import org.bioimageanalysis.icy.common.type.DataIterator;
+import org.bioimageanalysis.icy.extension.plugin.abstract_.Plugin;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginIcon;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginName;
+import org.bioimageanalysis.icy.model.image.ImageDataIterator;
+import org.bioimageanalysis.icy.model.roi.ROI;
+import org.bioimageanalysis.icy.model.sequence.Sequence;
+import org.bioimageanalysis.icy.model.sequence.SequenceDataIterator;
+import org.jetbrains.annotations.NotNull;
 import plugins.adufour.blocks.tools.sequence.SequenceBlock;
 import plugins.adufour.blocks.util.VarList;
 import plugins.adufour.vars.lang.VarROIArray;
 import plugins.adufour.vars.lang.VarSequence;
 import plugins.adufour.vars.util.VarException;
-import plugins.tprovoost.sequenceblocks.SequenceBlocks;
 
 /**
  * Block to do additive fill of area inside the ROI regions with the specified value.<br>
  * The result of this operation is similar to heatmap production from ROIs.
  *
- * @author Stephane
+ * @author Stephane Dallongeville
  */
-public class AdditiveFillSequence extends Plugin implements SequenceBlock, PluginLibrary, PluginBundled {
+@IcyPluginName("Additive Fill")
+@IcyPluginIcon(path = "/SequenceBlocks_icon.png")
+public class AdditiveFillSequence extends Plugin implements SequenceBlock {
     final protected VarSequence inputSequence = new VarSequence("Sequence", null);
     final protected VarROIArray rois = new VarROIArray("Roi(s)");
 
@@ -66,7 +68,7 @@ public class AdditiveFillSequence extends Plugin implements SequenceBlock, Plugi
         doAdditiveFill(new SequenceDataIterator(sequence, roi), value);
     }
 
-    public static void doAdditiveFill(final DataIterator it, final double value) throws InterruptedException {
+    public static void doAdditiveFill(final @NotNull DataIterator it, final double value) throws InterruptedException {
         it.reset();
 
         while (!it.done()) {
@@ -87,7 +89,7 @@ public class AdditiveFillSequence extends Plugin implements SequenceBlock, Plugi
     }
 
     @Override
-    public void declareInput(final VarList inputMap) {
+    public void declareInput(final @NotNull VarList inputMap) {
         inputMap.add("sequence", inputSequence);
         inputMap.add("rois", rois);
     }
@@ -96,9 +98,4 @@ public class AdditiveFillSequence extends Plugin implements SequenceBlock, Plugi
     public void declareOutput(final VarList outputMap) {
         //
     }
-
-    @Override
-    public String getMainPluginClassName() {
-        return SequenceBlocks.class.getName();
-    }
 }
\ No newline at end of file
diff --git a/src/main/java/plugins/tprovoost/sequenceblocks/op/FillInnerSequence.java b/src/main/java/plugins/tprovoost/sequenceblocks/op/FillInnerSequence.java
index 7c86437..b272ca1 100644
--- a/src/main/java/plugins/tprovoost/sequenceblocks/op/FillInnerSequence.java
+++ b/src/main/java/plugins/tprovoost/sequenceblocks/op/FillInnerSequence.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010-2023. Institut Pasteur.
+ * Copyright (c) 2010-2024. Institut Pasteur.
  *
  * This file is part of Icy.
  * Icy is free software: you can redistribute it and/or modify
@@ -18,27 +18,29 @@
 
 package plugins.tprovoost.sequenceblocks.op;
 
-import icy.plugin.abstract_.Plugin;
-import icy.plugin.interface_.PluginBundled;
-import icy.plugin.interface_.PluginLibrary;
-import icy.roi.ROI;
-import icy.sequence.Sequence;
-import icy.sequence.SequenceDataIterator;
-import icy.type.DataIteratorUtil;
+import org.bioimageanalysis.icy.common.type.DataIteratorUtil;
+import org.bioimageanalysis.icy.extension.plugin.abstract_.Plugin;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginIcon;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginName;
+import org.bioimageanalysis.icy.model.roi.ROI;
+import org.bioimageanalysis.icy.model.sequence.Sequence;
+import org.bioimageanalysis.icy.model.sequence.SequenceDataIterator;
+import org.jetbrains.annotations.NotNull;
 import plugins.adufour.blocks.tools.sequence.SequenceBlock;
 import plugins.adufour.blocks.util.VarList;
 import plugins.adufour.vars.lang.VarDouble;
 import plugins.adufour.vars.lang.VarROIArray;
 import plugins.adufour.vars.lang.VarSequence;
 import plugins.adufour.vars.util.VarException;
-import plugins.tprovoost.sequenceblocks.SequenceBlocks;
 
 /**
  * Block to fill area inside the ROI regions with the specified value
  *
- * @author Stephane
+ * @author Stephane Dallongeville
  */
-public class FillInnerSequence extends Plugin implements SequenceBlock, PluginLibrary, PluginBundled {
+@IcyPluginName("Fill Inside ROI")
+@IcyPluginIcon(path = "/SequenceBlocks_icon.png")
+public class FillInnerSequence extends Plugin implements SequenceBlock {
     final protected VarSequence inputSequence = new VarSequence("Sequence", null);
     final protected VarROIArray rois = new VarROIArray("Roi(s)");
     final protected VarDouble fillValue = new VarDouble("Value", 0d);
@@ -65,7 +67,7 @@ public class FillInnerSequence extends Plugin implements SequenceBlock, PluginLi
     }
 
     @Override
-    public void declareInput(final VarList inputMap) {
+    public void declareInput(final @NotNull VarList inputMap) {
         inputMap.add("sequence", inputSequence);
         inputMap.add("rois", rois);
         inputMap.add("value", fillValue);
@@ -75,9 +77,4 @@ public class FillInnerSequence extends Plugin implements SequenceBlock, PluginLi
     public void declareOutput(final VarList outputMap) {
         //
     }
-
-    @Override
-    public String getMainPluginClassName() {
-        return SequenceBlocks.class.getName();
-    }
 }
\ No newline at end of file
diff --git a/src/main/java/plugins/tprovoost/sequenceblocks/op/FillOuterSequence.java b/src/main/java/plugins/tprovoost/sequenceblocks/op/FillOuterSequence.java
index d5acacf..e029008 100644
--- a/src/main/java/plugins/tprovoost/sequenceblocks/op/FillOuterSequence.java
+++ b/src/main/java/plugins/tprovoost/sequenceblocks/op/FillOuterSequence.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010-2023. Institut Pasteur.
+ * Copyright (c) 2010-2024. Institut Pasteur.
  *
  * This file is part of Icy.
  * Icy is free software: you can redistribute it and/or modify
@@ -18,31 +18,33 @@
 
 package plugins.tprovoost.sequenceblocks.op;
 
-import icy.plugin.abstract_.Plugin;
-import icy.plugin.interface_.PluginBundled;
-import icy.plugin.interface_.PluginLibrary;
-import icy.roi.ROI;
-import icy.roi.ROIUtil;
-import icy.sequence.Sequence;
-import icy.sequence.SequenceDataIterator;
-import icy.type.DataIteratorUtil;
-import icy.type.collection.CollectionUtil;
-import icy.util.ShapeUtil.BooleanOperator;
+import org.bioimageanalysis.extension.kernel.roi.roi3d.ROI3DBox;
+import org.bioimageanalysis.icy.common.collection.CollectionUtil;
+import org.bioimageanalysis.icy.common.geom.shape.ShapeUtil;
+import org.bioimageanalysis.icy.common.type.DataIteratorUtil;
+import org.bioimageanalysis.icy.extension.plugin.abstract_.Plugin;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginIcon;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginName;
+import org.bioimageanalysis.icy.model.roi.ROI;
+import org.bioimageanalysis.icy.model.roi.ROIUtil;
+import org.bioimageanalysis.icy.model.sequence.Sequence;
+import org.bioimageanalysis.icy.model.sequence.SequenceDataIterator;
+import org.jetbrains.annotations.NotNull;
 import plugins.adufour.blocks.tools.sequence.SequenceBlock;
 import plugins.adufour.blocks.util.VarList;
 import plugins.adufour.vars.lang.VarDouble;
 import plugins.adufour.vars.lang.VarROIArray;
 import plugins.adufour.vars.lang.VarSequence;
 import plugins.adufour.vars.util.VarException;
-import plugins.kernel.roi.roi3d.ROI3DBox;
-import plugins.tprovoost.sequenceblocks.SequenceBlocks;
 
 /**
  * Block to fill area outside the ROI regions with the specified value
  *
- * @author Stephane
+ * @author Stephane Dallongeville
  */
-public class FillOuterSequence extends Plugin implements SequenceBlock, PluginLibrary, PluginBundled {
+@IcyPluginName("Fill Outside ROI")
+@IcyPluginIcon(path = "/SequenceBlocks_icon.png")
+public class FillOuterSequence extends Plugin implements SequenceBlock {
     final protected VarSequence inputSequence = new VarSequence("Sequence", null);
     final protected VarROIArray rois = new VarROIArray("Roi(s)");
     final protected VarDouble fillValue = new VarDouble("Value", 0d);
@@ -56,7 +58,7 @@ public class FillOuterSequence extends Plugin implements SequenceBlock, PluginLi
         try {
             if (rois.getValue() != null) {
                 try {
-                    final ROI roiUnion = ROIUtil.merge(CollectionUtil.asList(rois.getValue()), BooleanOperator.OR);
+                    final ROI roiUnion = ROIUtil.merge(CollectionUtil.asList(rois.getValue()), ShapeUtil.BooleanOperator.OR);
                     final ROI roiSeq = new ROI3DBox(sequence.getBounds5D().toRectangle3D());
                     final ROI roi = roiSeq.getSubtraction(roiUnion);
 
@@ -77,7 +79,7 @@ public class FillOuterSequence extends Plugin implements SequenceBlock, PluginLi
     }
 
     @Override
-    public void declareInput(final VarList inputMap) {
+    public void declareInput(final @NotNull VarList inputMap) {
         inputMap.add("sequence", inputSequence);
         inputMap.add("rois", rois);
         inputMap.add("value", fillValue);
@@ -87,9 +89,4 @@ public class FillOuterSequence extends Plugin implements SequenceBlock, PluginLi
     public void declareOutput(final VarList outputMap) {
         //
     }
-
-    @Override
-    public String getMainPluginClassName() {
-        return SequenceBlocks.class.getName();
-    }
 }
\ No newline at end of file
diff --git a/src/main/java/plugins/tprovoost/sequenceblocks/remove/RemoveAllRois.java b/src/main/java/plugins/tprovoost/sequenceblocks/remove/RemoveAllRois.java
index 8259bb6..4c63159 100644
--- a/src/main/java/plugins/tprovoost/sequenceblocks/remove/RemoveAllRois.java
+++ b/src/main/java/plugins/tprovoost/sequenceblocks/remove/RemoveAllRois.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010-2023. Institut Pasteur.
+ * Copyright (c) 2010-2024. Institut Pasteur.
  *
  * This file is part of Icy.
  * Icy is free software: you can redistribute it and/or modify
@@ -18,23 +18,25 @@
 
 package plugins.tprovoost.sequenceblocks.remove;
 
-import icy.plugin.abstract_.Plugin;
-import icy.plugin.interface_.PluginBundled;
-import icy.plugin.interface_.PluginLibrary;
-import icy.roi.ROI;
-import icy.sequence.Sequence;
+import org.bioimageanalysis.icy.extension.plugin.abstract_.Plugin;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginIcon;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginName;
+import org.bioimageanalysis.icy.model.roi.ROI;
+import org.bioimageanalysis.icy.model.sequence.Sequence;
+import org.jetbrains.annotations.NotNull;
 import plugins.adufour.blocks.tools.sequence.SequenceBlock;
 import plugins.adufour.blocks.util.VarList;
 import plugins.adufour.vars.lang.VarSequence;
 import plugins.adufour.vars.util.VarException;
-import plugins.tprovoost.sequenceblocks.SequenceBlocks;
 
 /**
  * Block to remove all the {@link ROI} from a Sequence
  *
- * @author Stephane
+ * @author Stephane Dallongeville
  */
-public class RemoveAllRois extends Plugin implements SequenceBlock, PluginLibrary, PluginBundled {
+@IcyPluginName("Remove All ROIs")
+@IcyPluginIcon(path = "/SequenceBlocks_icon.png")
+public class RemoveAllRois extends Plugin implements SequenceBlock {
     final protected VarSequence inputSequence = new VarSequence("Sequence", null);
 
     @Override
@@ -47,7 +49,7 @@ public class RemoveAllRois extends Plugin implements SequenceBlock, PluginLibrar
     }
 
     @Override
-    public void declareInput(final VarList inputMap) {
+    public void declareInput(final @NotNull VarList inputMap) {
         inputMap.add("sequence", inputSequence);
     }
 
@@ -55,9 +57,4 @@ public class RemoveAllRois extends Plugin implements SequenceBlock, PluginLibrar
     public void declareOutput(final VarList outputMap) {
         //
     }
-
-    @Override
-    public String getMainPluginClassName() {
-        return SequenceBlocks.class.getName();
-    }
 }
diff --git a/src/main/java/plugins/tprovoost/sequenceblocks/remove/RemoveChannel.java b/src/main/java/plugins/tprovoost/sequenceblocks/remove/RemoveChannel.java
index b4a1fbb..37f82c1 100644
--- a/src/main/java/plugins/tprovoost/sequenceblocks/remove/RemoveChannel.java
+++ b/src/main/java/plugins/tprovoost/sequenceblocks/remove/RemoveChannel.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010-2023. Institut Pasteur.
+ * Copyright (c) 2010-2024. Institut Pasteur.
  *
  * This file is part of Icy.
  * Icy is free software: you can redistribute it and/or modify
@@ -18,24 +18,26 @@
 
 package plugins.tprovoost.sequenceblocks.remove;
 
-import icy.plugin.abstract_.Plugin;
-import icy.plugin.interface_.PluginBundled;
-import icy.plugin.interface_.PluginLibrary;
-import icy.sequence.Sequence;
-import icy.sequence.SequenceUtil;
+import org.bioimageanalysis.icy.extension.plugin.abstract_.Plugin;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginIcon;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginName;
+import org.bioimageanalysis.icy.model.sequence.Sequence;
+import org.bioimageanalysis.icy.model.sequence.SequenceUtil;
+import org.jetbrains.annotations.NotNull;
 import plugins.adufour.blocks.tools.sequence.SequenceBlock;
 import plugins.adufour.blocks.util.VarList;
 import plugins.adufour.vars.lang.VarInteger;
 import plugins.adufour.vars.lang.VarSequence;
 import plugins.adufour.vars.util.VarException;
-import plugins.tprovoost.sequenceblocks.SequenceBlocks;
 
 /**
  * Block to remove a channel from a Sequence
  *
- * @author Stephane
+ * @author Stephane Dallongeville
  */
-public class RemoveChannel extends Plugin implements SequenceBlock, PluginLibrary, PluginBundled {
+@IcyPluginName("Remove Channel")
+@IcyPluginIcon(path = "/SequenceBlocks_icon.png")
+public class RemoveChannel extends Plugin implements SequenceBlock {
     final protected VarSequence inputSequence = new VarSequence("Sequence", null);
     final protected VarInteger channelIdx = new VarInteger("Channel", 0);
 
@@ -60,7 +62,7 @@ public class RemoveChannel extends Plugin implements SequenceBlock, PluginLibrar
     }
 
     @Override
-    public void declareInput(final VarList inputMap) {
+    public void declareInput(final @NotNull VarList inputMap) {
         inputMap.add("sequence", inputSequence);
         inputMap.add("channel", channelIdx);
     }
@@ -69,9 +71,4 @@ public class RemoveChannel extends Plugin implements SequenceBlock, PluginLibrar
     public void declareOutput(final VarList outputMap) {
         //
     }
-
-    @Override
-    public String getMainPluginClassName() {
-        return SequenceBlocks.class.getName();
-    }
 }
diff --git a/src/main/java/plugins/tprovoost/sequenceblocks/remove/RemoveFrame.java b/src/main/java/plugins/tprovoost/sequenceblocks/remove/RemoveFrame.java
index 7157722..e4bc694 100644
--- a/src/main/java/plugins/tprovoost/sequenceblocks/remove/RemoveFrame.java
+++ b/src/main/java/plugins/tprovoost/sequenceblocks/remove/RemoveFrame.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010-2023. Institut Pasteur.
+ * Copyright (c) 2010-2024. Institut Pasteur.
  *
  * This file is part of Icy.
  * Icy is free software: you can redistribute it and/or modify
@@ -18,24 +18,26 @@
 
 package plugins.tprovoost.sequenceblocks.remove;
 
-import icy.plugin.abstract_.Plugin;
-import icy.plugin.interface_.PluginBundled;
-import icy.plugin.interface_.PluginLibrary;
-import icy.sequence.Sequence;
-import icy.sequence.SequenceUtil;
+import org.bioimageanalysis.icy.extension.plugin.abstract_.Plugin;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginIcon;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginName;
+import org.bioimageanalysis.icy.model.sequence.Sequence;
+import org.bioimageanalysis.icy.model.sequence.SequenceUtil;
+import org.jetbrains.annotations.NotNull;
 import plugins.adufour.blocks.tools.sequence.SequenceBlock;
 import plugins.adufour.blocks.util.VarList;
 import plugins.adufour.vars.lang.VarInteger;
 import plugins.adufour.vars.lang.VarSequence;
 import plugins.adufour.vars.util.VarException;
-import plugins.tprovoost.sequenceblocks.SequenceBlocks;
 
 /**
  * Block to remove a frame from a Sequence
  *
- * @author Stephane
+ * @author Stephane Dallongeville
  */
-public class RemoveFrame extends Plugin implements SequenceBlock, PluginLibrary, PluginBundled {
+@IcyPluginName("Remove Frame")
+@IcyPluginIcon(path = "/SequenceBlocks_icon.png")
+public class RemoveFrame extends Plugin implements SequenceBlock {
     final protected VarSequence inputSequence = new VarSequence("Sequence", null);
     final protected VarInteger frameInd = new VarInteger("Frame", 0);
 
@@ -49,7 +51,7 @@ public class RemoveFrame extends Plugin implements SequenceBlock, PluginLibrary,
     }
 
     @Override
-    public void declareInput(final VarList inputMap) {
+    public void declareInput(final @NotNull VarList inputMap) {
         inputMap.add("sequence", inputSequence);
         inputMap.add("frame", frameInd);
     }
@@ -58,9 +60,4 @@ public class RemoveFrame extends Plugin implements SequenceBlock, PluginLibrary,
     public void declareOutput(final VarList outputMap) {
         //
     }
-
-    @Override
-    public String getMainPluginClassName() {
-        return SequenceBlocks.class.getName();
-    }
 }
\ No newline at end of file
diff --git a/src/main/java/plugins/tprovoost/sequenceblocks/remove/RemoveOverlays.java b/src/main/java/plugins/tprovoost/sequenceblocks/remove/RemoveOverlays.java
index 16a6de0..c2da52a 100644
--- a/src/main/java/plugins/tprovoost/sequenceblocks/remove/RemoveOverlays.java
+++ b/src/main/java/plugins/tprovoost/sequenceblocks/remove/RemoveOverlays.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010-2023. Institut Pasteur.
+ * Copyright (c) 2010-2024. Institut Pasteur.
  *
  * This file is part of Icy.
  * Icy is free software: you can redistribute it and/or modify
@@ -18,24 +18,26 @@
 
 package plugins.tprovoost.sequenceblocks.remove;
 
-import icy.painter.Overlay;
-import icy.plugin.abstract_.Plugin;
-import icy.plugin.interface_.PluginBundled;
-import icy.plugin.interface_.PluginLibrary;
-import icy.sequence.Sequence;
+import org.bioimageanalysis.icy.extension.plugin.abstract_.Plugin;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginIcon;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginName;
+import org.bioimageanalysis.icy.model.overlay.Overlay;
+import org.bioimageanalysis.icy.model.sequence.Sequence;
+import org.jetbrains.annotations.NotNull;
 import plugins.adufour.blocks.tools.sequence.SequenceBlock;
 import plugins.adufour.blocks.util.VarList;
 import plugins.adufour.vars.lang.VarArray;
 import plugins.adufour.vars.lang.VarSequence;
 import plugins.adufour.vars.util.VarException;
-import plugins.tprovoost.sequenceblocks.SequenceBlocks;
 
 /**
  * Block to remove one or several {@link Overlay} from a {@link Sequence}
  *
- * @author Stephane
+ * @author Stephane Dallongeville
  */
-public class RemoveOverlays extends Plugin implements SequenceBlock, PluginLibrary, PluginBundled {
+@IcyPluginName("Remove Overlays")
+@IcyPluginIcon(path = "/SequenceBlocks_icon.png")
+public class RemoveOverlays extends Plugin implements SequenceBlock {
     final protected VarSequence inputSequence = new VarSequence("Sequence", null);
     final protected VarArray<Overlay> overlays = new VarArray<>("Overlay(s)", Overlay[].class, new Overlay[0]);
 
@@ -59,7 +61,7 @@ public class RemoveOverlays extends Plugin implements SequenceBlock, PluginLibra
     }
 
     @Override
-    public void declareInput(final VarList inputMap) {
+    public void declareInput(final @NotNull VarList inputMap) {
         inputMap.add("sequence", inputSequence);
         inputMap.add("overlay(s)", overlays);
     }
@@ -68,9 +70,4 @@ public class RemoveOverlays extends Plugin implements SequenceBlock, PluginLibra
     public void declareOutput(final VarList outputMap) {
         //
     }
-
-    @Override
-    public String getMainPluginClassName() {
-        return SequenceBlocks.class.getName();
-    }
 }
diff --git a/src/main/java/plugins/tprovoost/sequenceblocks/remove/RemoveRois.java b/src/main/java/plugins/tprovoost/sequenceblocks/remove/RemoveRois.java
index eb6c415..fda9ddb 100644
--- a/src/main/java/plugins/tprovoost/sequenceblocks/remove/RemoveRois.java
+++ b/src/main/java/plugins/tprovoost/sequenceblocks/remove/RemoveRois.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010-2023. Institut Pasteur.
+ * Copyright (c) 2010-2024. Institut Pasteur.
  *
  * This file is part of Icy.
  * Icy is free software: you can redistribute it and/or modify
@@ -18,26 +18,28 @@
 
 package plugins.tprovoost.sequenceblocks.remove;
 
-import icy.plugin.abstract_.Plugin;
-import icy.plugin.interface_.PluginBundled;
-import icy.plugin.interface_.PluginLibrary;
-import icy.roi.ROI;
-import icy.sequence.Sequence;
+import org.bioimageanalysis.icy.extension.plugin.abstract_.Plugin;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginIcon;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginName;
+import org.bioimageanalysis.icy.model.roi.ROI;
+import org.bioimageanalysis.icy.model.sequence.Sequence;
+import org.jetbrains.annotations.NotNull;
 import plugins.adufour.blocks.tools.sequence.SequenceBlock;
 import plugins.adufour.blocks.util.VarList;
 import plugins.adufour.vars.lang.VarROIArray;
 import plugins.adufour.vars.lang.VarSequence;
 import plugins.adufour.vars.util.VarException;
-import plugins.tprovoost.sequenceblocks.SequenceBlocks;
 
 import java.util.Arrays;
 
 /**
  * Block to remove one or several {@link ROI} from a Sequence
  *
- * @author Stephane
+ * @author Stephane Dallongeville
  */
-public class RemoveRois extends Plugin implements SequenceBlock, PluginLibrary, PluginBundled {
+@IcyPluginName("Remove ROIs")
+@IcyPluginIcon(path = "/SequenceBlocks_icon.png")
+public class RemoveRois extends Plugin implements SequenceBlock {
     final protected VarSequence inputSequence = new VarSequence("Sequence", null);
     final protected VarROIArray rois = new VarROIArray("Roi(s)");
 
@@ -53,7 +55,7 @@ public class RemoveRois extends Plugin implements SequenceBlock, PluginLibrary,
     }
 
     @Override
-    public void declareInput(final VarList inputMap) {
+    public void declareInput(final @NotNull VarList inputMap) {
         inputMap.add("sequence", inputSequence);
         inputMap.add("rois(s)", rois);
     }
@@ -62,9 +64,4 @@ public class RemoveRois extends Plugin implements SequenceBlock, PluginLibrary,
     public void declareOutput(final VarList outputMap) {
         //
     }
-
-    @Override
-    public String getMainPluginClassName() {
-        return SequenceBlocks.class.getName();
-    }
 }
diff --git a/src/main/java/plugins/tprovoost/sequenceblocks/remove/RemoveSlice.java b/src/main/java/plugins/tprovoost/sequenceblocks/remove/RemoveSlice.java
index 30fafeb..cbb8543 100644
--- a/src/main/java/plugins/tprovoost/sequenceblocks/remove/RemoveSlice.java
+++ b/src/main/java/plugins/tprovoost/sequenceblocks/remove/RemoveSlice.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010-2023. Institut Pasteur.
+ * Copyright (c) 2010-2024. Institut Pasteur.
  *
  * This file is part of Icy.
  * Icy is free software: you can redistribute it and/or modify
@@ -18,24 +18,26 @@
 
 package plugins.tprovoost.sequenceblocks.remove;
 
-import icy.plugin.abstract_.Plugin;
-import icy.plugin.interface_.PluginBundled;
-import icy.plugin.interface_.PluginLibrary;
-import icy.sequence.Sequence;
-import icy.sequence.SequenceUtil;
+import org.bioimageanalysis.icy.extension.plugin.abstract_.Plugin;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginIcon;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginName;
+import org.bioimageanalysis.icy.model.sequence.Sequence;
+import org.bioimageanalysis.icy.model.sequence.SequenceUtil;
+import org.jetbrains.annotations.NotNull;
 import plugins.adufour.blocks.tools.sequence.SequenceBlock;
 import plugins.adufour.blocks.util.VarList;
 import plugins.adufour.vars.lang.VarInteger;
 import plugins.adufour.vars.lang.VarSequence;
 import plugins.adufour.vars.util.VarException;
-import plugins.tprovoost.sequenceblocks.SequenceBlocks;
 
 /**
  * Block to remove a Z slice from a Sequence
  *
- * @author Stephane
+ * @author Stephane Dallongeville
  */
-public class RemoveSlice extends Plugin implements SequenceBlock, PluginLibrary, PluginBundled {
+@IcyPluginName("Remove Slice")
+@IcyPluginIcon(path = "/SequenceBlocks_icon.png")
+public class RemoveSlice extends Plugin implements SequenceBlock {
     final protected VarSequence inputSequence = new VarSequence("Sequence", null);
     final protected VarInteger sliceInd = new VarInteger("Slice", 0);
 
@@ -49,7 +51,7 @@ public class RemoveSlice extends Plugin implements SequenceBlock, PluginLibrary,
     }
 
     @Override
-    public void declareInput(final VarList inputMap) {
+    public void declareInput(final @NotNull VarList inputMap) {
         inputMap.add("sequence", inputSequence);
         inputMap.add("slice", sliceInd);
     }
@@ -58,9 +60,4 @@ public class RemoveSlice extends Plugin implements SequenceBlock, PluginLibrary,
     public void declareOutput(final VarList outputMap) {
         //
     }
-
-    @Override
-    public String getMainPluginClassName() {
-        return SequenceBlocks.class.getName();
-    }
 }
\ No newline at end of file
diff --git a/src/main/resources/SequenceBlocks.xml b/src/main/resources/SequenceBlocks.xml
deleted file mode 100644
index 352d4eb..0000000
--- a/src/main/resources/SequenceBlocks.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version='1.0' encoding='ISO-8859-1' standalone='no'?>
-<root>
-<url><![CDATA[http://www.bioimageanalysis.org/icy/repository/getXMLPluginFile.php?pluginId=182&beta=0]]></url><name>Sequence Blocks</name><version>1.0.0.1</version><required_kernel_version>1.2.5.0</required_kernel_version><kernel_ver>1.2.5.0</kernel_ver><jar_url><![CDATA[http://www.bioimageanalysis.org/icy/repository/getJarFile.php?pluginId=182&beta=0]]></jar_url><icon_url><![CDATA[http://bioimageanalysis.org/icy/image.php?idAttach=1256]]></icon_url><image_url></image_url><description><![CDATA[This plugin allows one to use various basic sequence operations within Blocks.]]></description><classname><![CDATA[plugins.tprovoost.sequenceblocks.SequenceBlocks]]></classname><author><![CDATA[tprovoost - Thomas Provoost]]></author><changelog><![CDATA[-
-Version 1.0.0.1
-Date 2012-06-22 15:17:27
-
-Added Description to the Blocks.
-Corrected Save Sequence block name.
-
--
-Version 1.0.0.0
-Date 2012-06-21 15:37:19
-
-First real version.
-
--
-Version 0.0.1.0
-Date 2012-06-21 15:00:05
-
-
-
-]]></changelog><dependencies><dependency><classname>plugins.adufour.blocks.Blocks</classname><version>0.0.0.1</version></dependency></dependencies></root>
\ No newline at end of file
-- 
GitLab