diff --git a/.gitignore b/.gitignore
index 198c988f98a0c7ee3299438321adf75b8ad024e6..57f16fb67c1b1589981416b323d7a9debc728665 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 381634a34153e4839055a5349777669955b40444..2148e5d7ecc779c7b887469284568351bc89e9bb 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 e99b35cb9a4b5140f71ac1ec059557457eb5c14b..2b36e40a643626a2210446d2795b4702459ce527 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 a6702c064fb465c45f6afc879bcdd11bfb982363..a32ec9a24c0df53a1f911d35b577b7493ae1ad1f 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 6e3417fb24cf7e849dd03835fef024888cd0c4d3..c5196093cca93b818af82d6ca2a84d8f723c0bed 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 a145a4e3743123fc6487226138048129fbef88a3..cd758ec6c7fca8d77560eeef60b845f5b03daa62 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 cc457d0eb71c867c17b38a1074fa28cc34d2a856..f70a890ea4259faef25e7b8ed117f74e47b5f2a8 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 a6afe8a65d9eab3f2cc699af1343351662affa0d..da84d61e558ed33c62e7a05433db89346082ab95 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 5613a6b87d41927f05940149e01bdc25e92d25c5..35ff8a53ebb2a1e6d9c8041ad5d0a122c4cd3c3a 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 68d5107b731ffd00e4611f26b053b1b2a57db45b..162832a92ef3a922e029be518ba84b85ab2daff5 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 c99e181eae0d9c71fa812934e57e7238c883bba6..889ccb324ad88f3cfc9817147b5a45ec4615ffaa 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 e91fea73ac1471725464ca20aeb7c211b708a3ba..0b8a7713c671ab143d2dd807dd0b33f559477db4 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 24aceb5b74a18342f92f628c57649b5535540182..acbbcfa0c3671a9d72cb21b1b4547cf818ef657d 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 af08430983c98356fd5982f850ee64db17a3061a..ee874f821394d682d143ddd7fef6a5db16bec33b 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 0ec592d60b89d86dc05d2ce687ba2a5a208cf730..3f3d18477b2284e9cf8f7042ab698279c7fb4193 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 b17f34bade25983da1cc6f36871417e05c6a47d4..4ec8e2d6428d2262ff43430c5bd984f22cc6fef8 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 789aec49b0089f5694006f966567b0ed27a394b4..154509dacd50e8d119349fea9ec14c0ac67a9256 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 06f3aaeff561fe9b088a8565720459e7d93afe71..d123fa2948ef29bee9c624092d06c868eb6ffb82 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 c4a4b5d2d0ee11e06d59bc267c9c5279ff39ad24..5f5532eedbd7fd16a1beebf8a030f37927203a33 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 3a513a68fde962471c5d3bb481b08069cefc280a..f4e913c8f22280fb57ded81754f761d809b6c179 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 44acd9b50582daaffa5438432be1a4e76c84b5aa..d52e71e5d660cd4ab9dd67daf96fee4c4d980322 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 4e0ed0ff9350c4b12b3e168c00f8672d636cee10..543e47641beb6e1b16f8483332452a473e7d0f06 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 7fadf75aedd5bd3442e3a2c6e1a39db6f16f1f89..8ad3e5df489c78535e4f17f98ae8efbdd6e38699 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 5946db43ad0538bb0b6dab9eec6b5e45bfb895cb..2a334c3431a7f381f138fb733368dfad394fd116 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 bddbd90da03b32b6ab13e0eb32a32a7c07997dbe..a62971e6b665a3269ced94c74f4a1e0637c2e905 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 a9d5193aa7784864c368c4a323aa60f01a992e52..6833000fdad82c1dd8afe8d9b301af3d047b9fc7 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 71c07759cd20599ca777efb502a1c307b3d215cf..92774af3de22a144d743b0533547ec33c635ecb5 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 ff67393be862744516d71d4a47021d7fde6b3bf1..dfeeccc9d88cc777fedc8c88a6edf04fd738b455 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 433321bcaf043c5737a74f683bd9e80e3353f47c..f8e9d63cbd1fc3c0ebc297b79ffb7bf17ba68ec3 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 3485794953ec3dde2d557d494811df2474abe805..3ee88cc1722e85cdf9be4b4d1d92dc410224468f 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 57ef46635c29707112c2dea82b01f6e1e0c3fc85..c6116ef6ab699965798ac306ec4da83094d9b339 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 dbfbc9bb48bb6efc835de65c121e05625511a120..fd531d6e725e479e00119346579e7c1e72648958 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 06f928046d26fd45a97402fc70520609dd6e6f31..1c955c4c136d0c3d7bb93693c84db1be081dcca6 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 a8057ce53dc0ef1745b106109e7bf341c507841e..9e933892f0681da4be8712e9aaa1119f5a6a18e8 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 3d7f3c9f9a0f8ef754d8e367f6230b433dfc4955..c4e590467390819078bbb68afe6c20cd304380cd 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 9a8b57e45fdb435c67c88cac34b2169c989dde9b..32691416de245bbf4762737669d39a8d5dfd63d2 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 374b4af5d78c1e0f970a4a13502f9700edea8ce7..ea2f5f5540582aa1e6e3463fc7f46ed1e756f1cf 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 5251a07d237039e146d41278e8453cbefad2d089..96fdfefb4a41802a779a7da012fedff0203e061c 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 97d49b19c0df68cabe1e4dde513312dd3f64d10f..112f498835b825a966591a9825b4de8ff20dd9e1 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 99c314b1060eff0592e298ee4a717141f6c18730..de620dc686b2dddfd52653904036ee65472b097b 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 322a46f9bba281001b4c0b4b30df6cc7b0f9d39e..114a8896b5295e2f9c5b8372d1b0b2bf81be18d3 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 2daceba14d5823cd8e6b4a4afeb6cb4c437bcb42..f5e805f2fb8c87155b0c9c148991de9d5533f30b 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 95b76ad7fb71d51b4eea03da494657fb39431b56..d0ef4561425cd63a838f9204e017c1ec6673c353 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 3654a058032f8c28e4f9a13e3c9237f8660b1bec..be27e3535f86dcd87c8dd5ec7e962ea36c401416 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 283b7592f5ffe125af5634151284e7035a2196a1..9de9bc835113fd5a5d8d7c18dfe09f9cf56830c3 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 0bc1e12b5ed4d49c48556bfb69c324b1156df1bb..37dd5ee5c886811bb81f5aca9aa3cc2f58cfae50 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 4f51fdf9c7507ebd7f873dd42b2339ae8c53612a..28440314e9480fb87a44de9a32196f6cb71855fc 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 46a6ed668a47d02c3f0e82758bba2ca9e29d78dc..99d6d1a082867b89078e792950e8aecd47696802 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 55e7085bb5b8d57a6eb6cf0f614dde3f5d5da1d3..ba636cde7a99df41c8cd63dcd48b6e673555d373 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 0323af89a1984f2959f516714191c195208d60f4..4e3b0fc27c5d9ebbbcfccfb5fcd9a93265f1c100 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 bc4a279828946ccb5d89d0c854c242a0bd7350d4..406c7aa1f9751703c4325a8bd37836253d7e6a04 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 65a6838243de31877df4f35ecb5db608d8e92c56..a576580743602997e82569f3d0c5370e942b1fcc 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 2ac3d0be007c6cf1ca41df853d9bb7813f934f78..6ea1e27b771e0e3f6d03c9e8f6ac90fa388ee52e 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 336b7f64c851d3b373bf297db3c00dcc3057121e..3cbf859db0407b7a48d65d47bd7bb5715956d929 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 d73549934a813fcec2d81dbc294bbb6f8cf64ca3..06ee39f06c7ffa329d54acd86d190fb1b5cf7b47 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 5abab03999f1b07ad3d2999e0426b601a49cc48a..5ed0eeea52815da4a8fed7afa7d3b174a50d1fcb 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 09c5873f6289f4c705f778f6bb2b113a49779b17..d85adf64cc7d9a9892e55e8dbaa99f4f6032963f 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 82085ef19daff9f08eb36d202dc35fed97e05cf2..4a72abd0d431fdc7fd0789668d1b17e5aa77f0aa 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 669aa86136b0b722db0bd79725156d62281cb1be..55061bb68ec91d83aca40944fd9da01694518c55 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 a1ac68a0ea2aa3e5901697f0fdb035046e39efe1..40593424fd1f04ae2120ebf7a9718b9e6bd456cd 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 41ac1526a2a92c84f040358796dcec3333067342..bb3466f77af1850e472a75c7d1aa45bb31673b83 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 14c7b67aab08d3b861507ed953facb542add3e3a..5aa367de5d1de06be66ba73fc309bc4abcdb3795 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 63439624f988c00aa39af233eca8ffcd7cc67f5c..bef55ba2a8fb8b5a0eb4d18f0a6cbc54b13c4d16 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 bf0d032401415acccf030bcc57f86ff153930cf1..d48c525348f501e2efa7bddd98e61c5670aa6ee9 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 9c554717841a9e39dec1876ca7e51ead35e7dedd..12645dc3f4e389887623f53ae02deeb4892421d2 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 3cf4b94fd33dda0b1ede6dc947a4bf2685bb6415..2fcabb7fe9b3ca710e591e414a7776ab369cf6be 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 e9d9950c72324b31934d8a901f5826074d0b5bd6..b7f5857d2d32ae5339ea726855b01b521ffa89db 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 2abea99463eb2e11762f98d8bdcd19612f716d0a..fbefe0bef89ee8434c8667195b50232dafd5261f 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 ffdeb1cbb5b598254490e11d87091e1e9d688e9b..c94a25732deea3e1f0491dab1f0c71d12da23b0a 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 8635b25ca0f1ff8bb79af9923442654ebe5b4a3b..5e9c7335ce709545a84168a785ed1ce15c95f465 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 0409bdd7ac655ad239aafcc378e16af2583f0075..7c2d175e203683a57aa5556111928105acfe6cf3 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 d5600bb0daa2889d477f5173cfbd489016f86c85..847d354df3486e9bf2d8713a8d29f2ae3e6cdd89 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 4e2a833a4ac9694a5f83ef8a75f4afc25fb504cf..777412482296e5fcc36ec1d3404aaeda602d61ed 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 7c86437ffecfa5465997e3f2e79abec770cc42bd..b272ca152d34cc7e0b7f249b06c240944c2c5f1c 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 d5acacfe146f27e7d9ea6b9cbfa19fe75d6ad7e5..e029008b4a92ac81ecf8bd48124314bcf01d2d82 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 8259bb6beefc087b19fa4d4688359033b25af470..4c63159799633a3745aff8221cdac62d7ac50ac2 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 b4a1fbb942c8b973d15ef23e74a66ccd39c6d5c4..37f82c1b55b0e475a582c22c66d455c228fb0aca 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 71577229ed4d6dcb48c79b96833a0094c7325e6a..e4bc694dcfec07b1923e93a8435eb00e91c7d83d 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 16a6de0b9757349e7340a91de060d16101230ace..c2da52ae752599a3abd247debac6426be3d0da29 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 eb6c415be9bf56012b155d3815f118b94d0a2016..fda9ddb07f1749f5b47f32707ec1d9bd568afd21 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 30fafeb4b606aed294d5bc6e384c26d1a4256cfe..cbb8543c07295f65a74a6412e4e7dcc3b5f4768d 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 352d4eb38a0aeb6a81adc1c6631cac5464888c03..0000000000000000000000000000000000000000
--- 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