diff --git a/.gitignore b/.gitignore
index d4c3a6c5e5d37c1d2e1b9bcdddf30fb1530593bd..57f16fb67c1b1589981416b323d7a9debc728665 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,12 +1,41 @@
-.idea/
-.settings/
-build/
+/build*
+/workspace
+setting.xml
+release/
 target/
-bin/
+!.mvn/wrapper/maven-wrapper.jar
+!**/src/main/**/target/
+!**/src/test/**/target/
+icy.log
+
+### IntelliJ IDEA ###
+.idea/
+*.iws
 *.iml
-*.eml
-*.jar
+*.ipr
+
+### Eclipse ###
+.apt_generated
 .classpath
+.factorypath
 .project
-export.jardesc
-**/.DS_Store
\ No newline at end of file
+.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 1ac5ed60cf6b5586bb20c3aac3bb9a853c90be83..2c74297cdfc04b2124e3c2104590281667561198 100644
--- a/pom.xml
+++ b/pom.xml
@@ -7,11 +7,11 @@
     <parent>
         <groupId>org.bioimageanalysis.icy</groupId>
         <artifactId>pom-icy</artifactId>
-        <version>2.2.0</version>
+        <version>3.0.0-a.1</version>
     </parent>
 
     <artifactId>micromanager-block</artifactId>
-    <version>2.0.0</version>
+    <version>2.0.0-a.1</version>
 
     <name>Micro-Manager Block</name>
     <description>
@@ -21,19 +21,23 @@
     <dependencies>
         <dependency>
             <groupId>org.bioimageanalysis.icy</groupId>
-            <artifactId>micromanager</artifactId>
+            <artifactId>ezplug</artifactId>
         </dependency>
-
         <dependency>
             <groupId>org.bioimageanalysis.icy</groupId>
             <artifactId>protocols</artifactId>
         </dependency>
+
+        <dependency>
+            <groupId>org.bioimageanalysis.icy</groupId>
+            <artifactId>micromanager</artifactId>
+        </dependency>
     </dependencies>
 
     <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/stef/micromanager/block/AbstractMicroscopeBlock.java b/src/main/java/plugins/stef/micromanager/block/AbstractMicroscopeBlock.java
index 24ba799a9cf2cb5d7ec6726050b7dc47288f1492..1988b78fbb59356e6e33e03fdd1ae6134d2726a4 100644
--- a/src/main/java/plugins/stef/micromanager/block/AbstractMicroscopeBlock.java
+++ b/src/main/java/plugins/stef/micromanager/block/AbstractMicroscopeBlock.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,18 +18,19 @@
 
 package plugins.stef.micromanager.block;
 
-import icy.gui.dialog.MessageDialog;
-import icy.plugin.abstract_.Plugin;
-import icy.plugin.interface_.PluginBundled;
-import icy.plugin.interface_.PluginLibrary;
 import mmcorej.CMMCore;
+import org.bioimageanalysis.icy.extension.plugin.abstract_.Plugin;
+import org.bioimageanalysis.icy.extension.plugin.interface_.PluginBundled;
+import org.bioimageanalysis.icy.extension.plugin.interface_.PluginLibrary;
+import org.bioimageanalysis.icy.gui.dialog.MessageDialog;
+import org.jetbrains.annotations.Nullable;
 import org.micromanager.utils.ReportingUtils;
 import plugins.adufour.blocks.lang.Block;
 import plugins.tprovoost.Microscopy.MicroManager.MicroManager;
 import plugins.tprovoost.Microscopy.MicroManagerForIcy.MicromanagerPlugin;
 
 /**
- * @author Stephane
+ * @author Stephane Dallongeville
  */
 public abstract class AbstractMicroscopeBlock extends Plugin implements Block, PluginLibrary, PluginBundled {
     public AbstractMicroscopeBlock() {
@@ -46,7 +47,7 @@ public abstract class AbstractMicroscopeBlock extends Plugin implements Block, P
         return MicroscopyBlocks.class.getName();
     }
 
-    public static CMMCore getMMCore(final boolean throwException) {
+    public static @Nullable CMMCore getMMCore(final boolean throwException) {
         try {
             return MicroManager.getCore();
         }
diff --git a/src/main/java/plugins/stef/micromanager/block/MicroscopyBlocks.java b/src/main/java/plugins/stef/micromanager/block/MicroscopyBlocks.java
index a61fa1725b396379c44e8068577e721b0cecad97..7d7d331cf205dd326677ae60dcb9817365a8662b 100644
--- a/src/main/java/plugins/stef/micromanager/block/MicroscopyBlocks.java
+++ b/src/main/java/plugins/stef/micromanager/block/MicroscopyBlocks.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,13 @@
 
 package plugins.stef.micromanager.block;
 
-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;
+import org.bioimageanalysis.icy.extension.plugin.interface_.PluginLibrary;
 
+@IcyPluginName("Microscopy Blocks")
+@IcyPluginIcon(path = "/mm_blocks.png")
 public class MicroscopyBlocks extends Plugin implements PluginLibrary {
     public MicroscopyBlocks() {
         super();
diff --git a/src/main/java/plugins/stef/micromanager/block/capture/MicroscopeGetMetadata.java b/src/main/java/plugins/stef/micromanager/block/capture/MicroscopeGetMetadata.java
index bd0f6c2ed13695dbb5f4b7519de54b9f3b174a49..1c8911064e0b0d71513f537728395f36b658ad0d 100644
--- a/src/main/java/plugins/stef/micromanager/block/capture/MicroscopeGetMetadata.java
+++ b/src/main/java/plugins/stef/micromanager/block/capture/MicroscopeGetMetadata.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,6 +18,9 @@
 
 package plugins.stef.micromanager.block.capture;
 
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginIcon;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginName;
+import org.jetbrains.annotations.NotNull;
 import org.json.JSONObject;
 import plugins.adufour.blocks.util.VarList;
 import plugins.adufour.vars.lang.Var;
@@ -28,8 +31,10 @@ import plugins.tprovoost.Microscopy.MicroManager.MicroManager;
 /**
  * Retrieve global acquisition metadata and last acquired image metadata (Micro-Manager)
  *
- * @author Stephane
+ * @author Stephane Dallongeville
  */
+@IcyPluginName("Get Micro-Manager Metadata")
+@IcyPluginIcon(path = "/mm_blocks.png")
 public class MicroscopeGetMetadata extends AbstractMicroscopeBlock {
     VarInteger channel = new VarInteger("Channel", 0);
     Var<JSONObject> metadata = new Var<>("Image metadata", JSONObject.class);
@@ -42,18 +47,13 @@ public class MicroscopeGetMetadata extends AbstractMicroscopeBlock {
     }
 
     @Override
-    public void declareInput(final VarList inputMap) {
+    public void declareInput(final @NotNull VarList inputMap) {
         inputMap.add("channel", channel);
     }
 
     @Override
-    public void declareOutput(final VarList outputMap) {
+    public void declareOutput(final @NotNull VarList outputMap) {
         outputMap.add("imageMetadata", metadata);
         outputMap.add("acqMetadata", acqMetadata);
     }
-
-    @Override
-    public String getName() {
-        return "Get Micro-Manager Metadata";
-    }
 }
diff --git a/src/main/java/plugins/stef/micromanager/block/capture/MicroscopeSetTaggedImage.java b/src/main/java/plugins/stef/micromanager/block/capture/MicroscopeSetTaggedImage.java
index a6b988253dd3d21afa8df4d37ee23f9111a9bb16..25a3c1f4653e5509ce086f51eb7ebc132b83d864 100644
--- a/src/main/java/plugins/stef/micromanager/block/capture/MicroscopeSetTaggedImage.java
+++ b/src/main/java/plugins/stef/micromanager/block/capture/MicroscopeSetTaggedImage.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
@@ -19,6 +19,9 @@
 package plugins.stef.micromanager.block.capture;
 
 import mmcorej.TaggedImage;
+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.util.VarList;
 import plugins.adufour.vars.lang.VarArray;
 import plugins.adufour.vars.lang.VarInteger;
@@ -32,6 +35,8 @@ import plugins.tprovoost.Microscopy.MicroManager.tools.MMUtils;
  *
  * @author Stephane Dallongeville
  */
+@IcyPluginName("Set Tagged Image(s)")
+@IcyPluginIcon(path = "/mm_blocks.png")
 public class MicroscopeSetTaggedImage extends AbstractMicroscopeBlock {
     VarArray<TaggedImage> taggedImages = new VarArray<>("Tagged image(s)", TaggedImage[].class, new TaggedImage[0]);
     VarSequence seq = new VarSequence("Sequence", null);
@@ -66,7 +71,7 @@ public class MicroscopeSetTaggedImage extends AbstractMicroscopeBlock {
     }
 
     @Override
-    public void declareInput(final VarList inputMap) {
+    public void declareInput(final @NotNull VarList inputMap) {
         inputMap.add("taggedImage", taggedImages);
         inputMap.add("seq", seq);
         inputMap.add("t", posT);
@@ -81,9 +86,4 @@ public class MicroscopeSetTaggedImage extends AbstractMicroscopeBlock {
     public void declareOutput(final VarList outputMap) {
         //
     }
-
-    @Override
-    public String getName() {
-        return "Set Tagged Image(s)";
-    }
 }
diff --git a/src/main/java/plugins/stef/micromanager/block/capture/MicroscopeSnapChannels.java b/src/main/java/plugins/stef/micromanager/block/capture/MicroscopeSnapChannels.java
index 05c7845fb8001282c1013b2356e56bed0f519ba4..062fb6124f4336a7463769f9fe2d7b07c62a2242 100644
--- a/src/main/java/plugins/stef/micromanager/block/capture/MicroscopeSnapChannels.java
+++ b/src/main/java/plugins/stef/micromanager/block/capture/MicroscopeSnapChannels.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
@@ -21,11 +21,14 @@ package plugins.stef.micromanager.block.capture;
 import java.util.ArrayList;
 import java.util.List;
 
+import org.bioimageanalysis.icy.common.string.StringUtil;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginIcon;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginName;
+import org.jetbrains.annotations.NotNull;
 import org.json.JSONObject;
 import org.micromanager.utils.ChannelSpec;
 import org.micromanager.utils.MDUtils;
 
-import icy.util.StringUtil;
 import mmcorej.TaggedImage;
 import plugins.adufour.blocks.util.VarList;
 import plugins.adufour.vars.lang.VarArray;
@@ -41,8 +44,10 @@ import plugins.tprovoost.Microscopy.MicroManager.tools.StageMover;
  * Snap multi channel image (Micro-Manager)
  * Class in standby until an EzPlug fix
  *
- * @author Stephane
+ * @author Stephane Dallongeville
  */
+@IcyPluginName("Snap Channel(s)")
+@IcyPluginIcon(path = "/mm_blocks.png")
 public class MicroscopeSnapChannels extends AbstractMicroscopeBlock {
     VarObject trigger;
     VarMMGroup group;
@@ -130,19 +135,14 @@ public class MicroscopeSnapChannels extends AbstractMicroscopeBlock {
     }
 
     @Override
-    public void declareInput(final VarList inputMap) {
+    public void declareInput(final @NotNull VarList inputMap) {
         inputMap.add("trigger", trigger);
         inputMap.add("group", group);
         inputMap.add("channels", channels);
     }
 
     @Override
-    public void declareOutput(final VarList outputMap) {
+    public void declareOutput(final @NotNull VarList outputMap) {
         outputMap.add("out", out);
     }
-
-    @Override
-    public String getName() {
-        return "Snap Channel(s)";
-    }
 }
diff --git a/src/main/java/plugins/stef/micromanager/block/capture/MicroscopeSnapImage.java b/src/main/java/plugins/stef/micromanager/block/capture/MicroscopeSnapImage.java
index 7105ac8bd0e039ebe3a7c810ce706b932c2778c3..1e47dd944f6b30f89533efbfc0b4f71b9c125696 100644
--- a/src/main/java/plugins/stef/micromanager/block/capture/MicroscopeSnapImage.java
+++ b/src/main/java/plugins/stef/micromanager/block/capture/MicroscopeSnapImage.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
@@ -19,6 +19,9 @@
 package plugins.stef.micromanager.block.capture;
 
 import mmcorej.TaggedImage;
+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.util.VarList;
 import plugins.adufour.vars.lang.VarArray;
 import plugins.adufour.vars.lang.VarObject;
@@ -33,6 +36,8 @@ import java.util.List;
  *
  * @author Stephane Dallongeville
  */
+@IcyPluginName("Snap Image")
+@IcyPluginIcon(path = "/mm_blocks.png")
 public class MicroscopeSnapImage extends AbstractMicroscopeBlock {
     VarArray<TaggedImage> out = new VarArray<>("Tagged image(s)", TaggedImage[].class, new TaggedImage[0]);
     VarObject trigger = new VarObject("Trigger", null);
@@ -52,17 +57,12 @@ public class MicroscopeSnapImage extends AbstractMicroscopeBlock {
     }
 
     @Override
-    public void declareInput(final VarList inputMap) {
+    public void declareInput(final @NotNull VarList inputMap) {
         inputMap.add("trigger", trigger);
     }
 
     @Override
-    public void declareOutput(final VarList outputMap) {
+    public void declareOutput(final @NotNull VarList outputMap) {
         outputMap.add("out", out);
     }
-
-    @Override
-    public String getName() {
-        return "Snap Image";
-    }
 }
diff --git a/src/main/java/plugins/stef/micromanager/block/lang/VarChannels.java b/src/main/java/plugins/stef/micromanager/block/lang/VarChannels.java
index 005b165619417e9164e1c0ece5f42c99c78c3977..f97cb8080b0bde101ec95e333e973a4ec2dda150 100644
--- a/src/main/java/plugins/stef/micromanager/block/lang/VarChannels.java
+++ b/src/main/java/plugins/stef/micromanager/block/lang/VarChannels.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.stef.micromanager.block.lang;
 
-import icy.type.collection.CollectionUtil;
+import org.bioimageanalysis.icy.common.collection.CollectionUtil;
 import org.micromanager.utils.ChannelSpec;
 import plugins.adufour.vars.gui.VarEditor;
 import plugins.adufour.vars.lang.Var;
diff --git a/src/main/java/plugins/stef/micromanager/block/lang/VarChannelsEditor.java b/src/main/java/plugins/stef/micromanager/block/lang/VarChannelsEditor.java
index 67d70d78501e4ea21cf160b4fac482848c739278..0342b5f0c12536b813498b37b5bc5f1ee24d0dda 100644
--- a/src/main/java/plugins/stef/micromanager/block/lang/VarChannelsEditor.java
+++ b/src/main/java/plugins/stef/micromanager/block/lang/VarChannelsEditor.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
@@ -86,8 +86,7 @@ public class VarChannelsEditor extends VarEditor<ChannelSpec[]> {
         });
 
         final JButton upButton = new JButton("Up");
-        upButton.setToolTipText(TooltipTextMaker
-                .addHTMLBreaksForTooltip("Move currently selected channel up (Channels higher on list are acquired first)"));
+        upButton.setToolTipText(TooltipTextMaker.addHTMLBreaksForTooltip("Move currently selected channel up (Channels higher on list are acquired first)"));
         upButton.addActionListener(e -> {
             final int sel = table.getSelectedRow();
 
diff --git a/src/main/java/plugins/stef/micromanager/block/lang/VarMMGroup.java b/src/main/java/plugins/stef/micromanager/block/lang/VarMMGroup.java
index ecf62f70255c452ec7944330378474461af54471..dbe80b299fbc6fd7ca36be74fd9102fb71aff6af 100644
--- a/src/main/java/plugins/stef/micromanager/block/lang/VarMMGroup.java
+++ b/src/main/java/plugins/stef/micromanager/block/lang/VarMMGroup.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
@@ -27,7 +27,7 @@ import java.util.List;
 /**
  * EzVar representing Micro-Manager config group.
  *
- * @author Stephane
+ * @author Stephane Dallongeville
  */
 public class VarMMGroup extends VarString {
     public VarMMGroup(final String name) {
@@ -36,7 +36,7 @@ public class VarMMGroup extends VarString {
         final List<String> groups = MicroManager.getConfigGroups();
 
         if (!groups.isEmpty())
-            setDefaultEditorModel(new ValueSelectionModel<>(groups.toArray(new String[0]), groups.get(0), false));
+            setDefaultEditorModel(new ValueSelectionModel<>(groups.toArray(new String[0]), groups.getFirst(), false));
     }
 
     public VarMMGroup() {
diff --git a/src/main/java/plugins/stef/micromanager/block/lang/VarMMPreset.java b/src/main/java/plugins/stef/micromanager/block/lang/VarMMPreset.java
index f6952b4d81c101788ddc6e0b0c5fcfc95af30e8a..af62c444b33373ca475b53f0eb6be6f78245c290 100644
--- a/src/main/java/plugins/stef/micromanager/block/lang/VarMMPreset.java
+++ b/src/main/java/plugins/stef/micromanager/block/lang/VarMMPreset.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,6 +18,7 @@
 
 package plugins.stef.micromanager.block.lang;
 
+import org.jetbrains.annotations.NotNull;
 import plugins.adufour.vars.gui.model.ValueSelectionModel;
 import plugins.adufour.vars.lang.Var;
 import plugins.adufour.vars.lang.VarString;
@@ -29,10 +30,10 @@ import java.util.List;
 /**
  * EzVar representing Micro-Manager config preset.
  *
- * @author Stephane
+ * @author Stephane Dallongeville
  */
 public class VarMMPreset extends VarString {
-    public VarMMPreset(final String name, final VarMMGroup groupVar) {
+    public VarMMPreset(final String name, final @NotNull VarMMGroup groupVar) {
         super(name, "");
 
         // set values
@@ -60,7 +61,7 @@ public class VarMMPreset extends VarString {
         final List<String> presets = MicroManager.getConfigs(group);
 
         if (!presets.isEmpty())
-            setDefaultEditorModel(new ValueSelectionModel<>(presets.toArray(new String[0]), presets.get(0), false));
+            setDefaultEditorModel(new ValueSelectionModel<>(presets.toArray(new String[0]), presets.getFirst(), false));
         else
             setDefaultEditorModel(new ValueSelectionModel<>(new String[]{""}, "", false));
     }
diff --git a/src/main/java/plugins/stef/micromanager/block/lang/VarMultiStagePosition.java b/src/main/java/plugins/stef/micromanager/block/lang/VarMultiStagePosition.java
index 656ff7d2633993be4d31e19e1c03ee490f7ab2aa..c40882dcc5e1d54198dd4f76ea9cece6ccde4ba9 100644
--- a/src/main/java/plugins/stef/micromanager/block/lang/VarMultiStagePosition.java
+++ b/src/main/java/plugins/stef/micromanager/block/lang/VarMultiStagePosition.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,6 +18,7 @@
 
 package plugins.stef.micromanager.block.lang;
 
+import org.jetbrains.annotations.Contract;
 import org.micromanager.api.MultiStagePosition;
 import plugins.adufour.vars.gui.VarEditor;
 import plugins.adufour.vars.lang.Var;
@@ -26,6 +27,7 @@ import plugins.tprovoost.Microscopy.MicroManager.MicroManager;
 
 import javax.swing.*;
 import java.awt.*;
+import java.util.Objects;
 
 public class VarMultiStagePosition extends VarArray<MultiStagePosition> {
     VarEditorMultiStagePositions pos;
@@ -56,19 +58,22 @@ public class VarMultiStagePosition extends VarArray<MultiStagePosition> {
         @Override
         protected JComponent createEditorComponent() {
             btnOpen = new JButton("Open");
-            btnOpen.addActionListener(e -> MicroManager.getMMStudio().showXYPositionList());
+            btnOpen.addActionListener(e -> Objects.requireNonNull(MicroManager.getMMStudio()).showXYPositionList());
 
             return btnOpen;
         }
 
+        @Contract(pure = true)
         @Override
         protected void activateListeners() {
         }
 
+        @Contract(pure = true)
         @Override
         protected void deactivateListeners() {
         }
 
+        @Contract(pure = true)
         @Override
         protected void updateInterfaceValue() {
         }
diff --git a/src/main/java/plugins/stef/micromanager/block/setting/MicroscopeChannels.java b/src/main/java/plugins/stef/micromanager/block/setting/MicroscopeChannels.java
index ece292cd08fb9aae1af85a574695e2ed7e0b45ca..1dbc6b8cca44ad9d6126dd1b2a9b8f31c66b6b7b 100644
--- a/src/main/java/plugins/stef/micromanager/block/setting/MicroscopeChannels.java
+++ b/src/main/java/plugins/stef/micromanager/block/setting/MicroscopeChannels.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,6 +18,8 @@
 
 package plugins.stef.micromanager.block.setting;
 
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginIcon;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginName;
 import plugins.adufour.blocks.tools.input.InputBlock;
 import plugins.adufour.blocks.util.VarList;
 import plugins.stef.micromanager.block.AbstractMicroscopeBlock;
@@ -30,6 +32,8 @@ import plugins.stef.micromanager.block.lang.VarMMGroup;
  *
  * @author Stephane Dallongeville
  */
+@IcyPluginName("(WIP) Microscope Channels")
+@IcyPluginIcon(path = "/mm_blocks.png")
 public class MicroscopeChannels extends AbstractMicroscopeBlock implements InputBlock {
     VarMMGroup group;
     VarChannels channels;
diff --git a/src/main/java/plugins/stef/micromanager/block/setting/MicroscopeGetBinning.java b/src/main/java/plugins/stef/micromanager/block/setting/MicroscopeGetBinning.java
index 59c90868601b970be45ec0107f3d806e74f301ab..5ad9ed021e8d3dcf646058e940c93dd582138a6c 100644
--- a/src/main/java/plugins/stef/micromanager/block/setting/MicroscopeGetBinning.java
+++ b/src/main/java/plugins/stef/micromanager/block/setting/MicroscopeGetBinning.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,6 +18,9 @@
 
 package plugins.stef.micromanager.block.setting;
 
+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.util.VarList;
 import plugins.adufour.vars.lang.VarInteger;
 import plugins.adufour.vars.lang.VarObject;
@@ -30,17 +33,19 @@ import plugins.tprovoost.Microscopy.MicroManager.MicroManager;
  *
  * @author Stephane Dallongeville
  */
+@IcyPluginName("Get Micro-Manager Binning")
+@IcyPluginIcon(path = "/mm_blocks.png")
 public class MicroscopeGetBinning extends AbstractMicroscopeBlock {
     VarObject trigger = new VarObject("Trigger", null);
     VarInteger binning = new VarInteger("Binning", 1);
 
     @Override
-    public void declareInput(final VarList inputMap) {
+    public void declareInput(final @NotNull VarList inputMap) {
         inputMap.add("trigger", trigger);
     }
 
     @Override
-    public void declareOutput(final VarList outputMap) {
+    public void declareOutput(final @NotNull VarList outputMap) {
         outputMap.add("binning", binning);
     }
 
diff --git a/src/main/java/plugins/stef/micromanager/block/setting/MicroscopeGetExposure.java b/src/main/java/plugins/stef/micromanager/block/setting/MicroscopeGetExposure.java
index 52157d65b52469910a3b1539e755d294c35e6ada..94baccb874973d7486745e865136bb3d02778db6 100644
--- a/src/main/java/plugins/stef/micromanager/block/setting/MicroscopeGetExposure.java
+++ b/src/main/java/plugins/stef/micromanager/block/setting/MicroscopeGetExposure.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,6 +18,9 @@
 
 package plugins.stef.micromanager.block.setting;
 
+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.util.VarList;
 import plugins.adufour.vars.lang.VarDouble;
 import plugins.adufour.vars.lang.VarObject;
@@ -30,17 +33,19 @@ import plugins.tprovoost.Microscopy.MicroManager.MicroManager;
  *
  * @author Stephane Dallongeville
  */
+@IcyPluginName("Get Micro-Manager Exposure")
+@IcyPluginIcon(path = "/mm_blocks.png")
 public class MicroscopeGetExposure extends AbstractMicroscopeBlock {
     VarObject trigger = new VarObject("Trigger", null);
     VarDouble exposure = new VarDouble("Exposure (ms)", 50d);
 
     @Override
-    public void declareInput(final VarList inputMap) {
+    public void declareInput(final @NotNull VarList inputMap) {
         inputMap.add("trigger", trigger);
     }
 
     @Override
-    public void declareOutput(final VarList outputMap) {
+    public void declareOutput(final @NotNull VarList outputMap) {
         outputMap.add("exposure", exposure);
     }
 
diff --git a/src/main/java/plugins/stef/micromanager/block/setting/MicroscopePositions.java b/src/main/java/plugins/stef/micromanager/block/setting/MicroscopePositions.java
index e4814215097777108cabea81c5b64b4c7366875c..feedefb8ab0b19ccace94e100566cac6d87cf977 100644
--- a/src/main/java/plugins/stef/micromanager/block/setting/MicroscopePositions.java
+++ b/src/main/java/plugins/stef/micromanager/block/setting/MicroscopePositions.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,6 +18,9 @@
 
 package plugins.stef.micromanager.block.setting;
 
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginIcon;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginName;
+import org.jetbrains.annotations.NotNull;
 import org.micromanager.MMStudio;
 import org.micromanager.api.MultiStagePosition;
 import org.micromanager.api.PositionList;
@@ -34,6 +37,8 @@ import plugins.tprovoost.Microscopy.MicroManager.MicroManager;
  *
  * @author Stephane Dallongeville
  */
+@IcyPluginName("Set Micro-Manager Stage Positions")
+@IcyPluginIcon(path = "/mm_blocks.png")
 public class MicroscopePositions extends AbstractMicroscopeBlock implements InputBlock {
     VarArray<MultiStagePosition> varPositions;
 
@@ -44,7 +49,7 @@ public class MicroscopePositions extends AbstractMicroscopeBlock implements Inpu
     }
 
     @Override
-    public void declareInput(final VarList inputMap) {
+    public void declareInput(final @NotNull VarList inputMap) {
         inputMap.add("positions", varPositions);
     }
 
diff --git a/src/main/java/plugins/stef/micromanager/block/setting/MicroscopeSetBinning.java b/src/main/java/plugins/stef/micromanager/block/setting/MicroscopeSetBinning.java
index 19ce2c474ced75fc9915381e183517302a8cdc70..095ef69a45474451ea59bb6ea5d82d225838b31c 100644
--- a/src/main/java/plugins/stef/micromanager/block/setting/MicroscopeSetBinning.java
+++ b/src/main/java/plugins/stef/micromanager/block/setting/MicroscopeSetBinning.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,6 +18,9 @@
 
 package plugins.stef.micromanager.block.setting;
 
+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.util.VarList;
 import plugins.adufour.vars.lang.VarBoolean;
 import plugins.adufour.vars.lang.VarInteger;
@@ -31,19 +34,21 @@ import plugins.tprovoost.Microscopy.MicroManager.MicroManager;
  *
  * @author Stephane Dallongeville
  */
+@IcyPluginName("Set Micro-Manager Binning")
+@IcyPluginIcon(path = "/mm_blocks.png")
 public class MicroscopeSetBinning extends AbstractMicroscopeBlock {
     VarObject trigger = new VarObject("Trigger", null);
     VarInteger binning = new VarInteger("Binning", 1);
     VarBoolean done = new VarBoolean("Done", false);
 
     @Override
-    public void declareInput(final VarList inputMap) {
+    public void declareInput(final @NotNull VarList inputMap) {
         inputMap.add("trigger", trigger);
         inputMap.add("binning", binning);
     }
 
     @Override
-    public void declareOutput(final VarList outputMap) {
+    public void declareOutput(final @NotNull VarList outputMap) {
         outputMap.add("done", done);
     }
 
diff --git a/src/main/java/plugins/stef/micromanager/block/setting/MicroscopeSetConfig.java b/src/main/java/plugins/stef/micromanager/block/setting/MicroscopeSetConfig.java
index fbb0c2bea2e7843248dd65ce710dc06dc9eb35fe..79f230d2a1b23a5c01ee03394a8852df5db9b8d0 100644
--- a/src/main/java/plugins/stef/micromanager/block/setting/MicroscopeSetConfig.java
+++ b/src/main/java/plugins/stef/micromanager/block/setting/MicroscopeSetConfig.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,6 +18,9 @@
 
 package plugins.stef.micromanager.block.setting;
 
+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.lang.BlockDescriptor;
 import plugins.adufour.blocks.lang.WorkFlow;
 import plugins.adufour.blocks.util.VarList;
@@ -45,6 +48,8 @@ import java.util.List;
  *
  * @author Stephane Dallongeville
  */
+@IcyPluginName("Set Micro-Manager Preset")
+@IcyPluginIcon(path = "/mm_blocks.png")
 public class MicroscopeSetConfig extends AbstractMicroscopeBlock {
     VarObject trigger;
     VarMMGroup group;
@@ -89,7 +94,7 @@ public class MicroscopeSetConfig extends AbstractMicroscopeBlock {
     }
 
     @Override
-    public void declareInput(final VarList inputMap) {
+    public void declareInput(final @NotNull VarList inputMap) {
         inputMap.add("trigger", trigger);
         inputMap.add("group", group);
         inputMap.add("preset", preset);
diff --git a/src/main/java/plugins/stef/micromanager/block/setting/MicroscopeSetExposure.java b/src/main/java/plugins/stef/micromanager/block/setting/MicroscopeSetExposure.java
index 803e6e75f4c81d07b566c88757b7cbc27b39a61a..90e9b45a815bf75f28bd0c6847f8f16736d818d7 100644
--- a/src/main/java/plugins/stef/micromanager/block/setting/MicroscopeSetExposure.java
+++ b/src/main/java/plugins/stef/micromanager/block/setting/MicroscopeSetExposure.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,6 +18,9 @@
 
 package plugins.stef.micromanager.block.setting;
 
+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.util.VarList;
 import plugins.adufour.vars.lang.VarBoolean;
 import plugins.adufour.vars.lang.VarDouble;
@@ -31,19 +34,21 @@ import plugins.tprovoost.Microscopy.MicroManager.MicroManager;
  *
  * @author Stephane Dallongeville
  */
+@IcyPluginName("Set Micro-Manager Exposure")
+@IcyPluginIcon(path = "/mm_blocks.png")
 public class MicroscopeSetExposure extends AbstractMicroscopeBlock {
     VarObject trigger = new VarObject("Trigger", null);
     VarDouble exposure = new VarDouble("Exposure", 10d);
     VarBoolean done = new VarBoolean("Done", false);
 
     @Override
-    public void declareInput(final VarList inputMap) {
+    public void declareInput(final @NotNull VarList inputMap) {
         inputMap.add("trigger", trigger);
         inputMap.add("exposure", exposure);
     }
 
     @Override
-    public void declareOutput(final VarList outputMap) {
+    public void declareOutput(final @NotNull VarList outputMap) {
         outputMap.add("done", done);
     }
 
diff --git a/src/main/java/plugins/stef/micromanager/block/setting/MicroscopeSetShutter.java b/src/main/java/plugins/stef/micromanager/block/setting/MicroscopeSetShutter.java
index 82b13e0a5a8cdc2cd9ffefb6ba1248dca58086f8..0588cd396b3ce9f54365e52242ea7cdc11fcc567 100644
--- a/src/main/java/plugins/stef/micromanager/block/setting/MicroscopeSetShutter.java
+++ b/src/main/java/plugins/stef/micromanager/block/setting/MicroscopeSetShutter.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,6 +18,9 @@
 
 package plugins.stef.micromanager.block.setting;
 
+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.util.VarList;
 import plugins.adufour.vars.lang.VarBoolean;
 import plugins.adufour.vars.lang.VarObject;
@@ -30,6 +33,8 @@ import plugins.tprovoost.Microscopy.MicroManager.MicroManager;
  *
  * @author Stephane Dallongeville
  */
+@IcyPluginName("Set Micro-Manager Shutter")
+@IcyPluginIcon(path = "/mm_blocks.png")
 public class MicroscopeSetShutter extends AbstractMicroscopeBlock {
     VarObject trigger = new VarObject("Trigger", null);
     VarBoolean open = new VarBoolean("Open", true);
@@ -49,13 +54,13 @@ public class MicroscopeSetShutter extends AbstractMicroscopeBlock {
     }
 
     @Override
-    public void declareInput(final VarList inputMap) {
+    public void declareInput(final @NotNull VarList inputMap) {
         inputMap.add("trigger", trigger);
         inputMap.add("open", open);
     }
 
     @Override
-    public void declareOutput(final VarList outputMap) {
+    public void declareOutput(final @NotNull VarList outputMap) {
         outputMap.add("done", done);
     }
 }
diff --git a/src/main/java/plugins/stef/micromanager/block/stage/MicroscopeGetStageXYZ.java b/src/main/java/plugins/stef/micromanager/block/stage/MicroscopeGetStageXYZ.java
index 9f91b3403ff42cf824516e62cacf5aeb87403fee..900b15a673bf44a9d60f1e30fd61dce2a6da4fe6 100644
--- a/src/main/java/plugins/stef/micromanager/block/stage/MicroscopeGetStageXYZ.java
+++ b/src/main/java/plugins/stef/micromanager/block/stage/MicroscopeGetStageXYZ.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,10 @@
 
 package plugins.stef.micromanager.block.stage;
 
-import icy.type.point.Point3D;
+import org.bioimageanalysis.icy.common.geom.point.Point3D;
+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.util.VarList;
 import plugins.adufour.vars.lang.VarBoolean;
 import plugins.adufour.vars.lang.VarDouble;
@@ -32,6 +35,8 @@ import plugins.tprovoost.Microscopy.MicroManager.tools.StageMover;
  *
  * @author Stephane Dallongeville
  */
+@IcyPluginName("Get Micro-Manager Stage XYZ")
+@IcyPluginIcon(path = "/mm_blocks.png")
 public class MicroscopeGetStageXYZ extends AbstractMicroscopeBlock {
     VarObject trigger = new VarObject("Trigger", null);
     VarBoolean wait = new VarBoolean("Wait stage", true);
@@ -40,13 +45,13 @@ public class MicroscopeGetStageXYZ extends AbstractMicroscopeBlock {
     VarDouble outZ = new VarDouble("Z", 0d);
 
     @Override
-    public void declareInput(final VarList inputMap) {
+    public void declareInput(final @NotNull VarList inputMap) {
         inputMap.add("trigger", trigger);
         inputMap.add("wait", wait);
     }
 
     @Override
-    public void declareOutput(final VarList outputMap) {
+    public void declareOutput(final @NotNull VarList outputMap) {
         outputMap.add("x", outX);
         outputMap.add("y", outY);
         outputMap.add("z", outZ);
diff --git a/src/main/java/plugins/stef/micromanager/block/stage/MicroscopeSetStagePosition.java b/src/main/java/plugins/stef/micromanager/block/stage/MicroscopeSetStagePosition.java
index 8b08e76c81cad640dfa237945fae51808e5925bd..aa52224d579ca33ab244848c5665e7ef761ccf97 100644
--- a/src/main/java/plugins/stef/micromanager/block/stage/MicroscopeSetStagePosition.java
+++ b/src/main/java/plugins/stef/micromanager/block/stage/MicroscopeSetStagePosition.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.stef.micromanager.block.stage;
 
-import icy.system.thread.ThreadUtil;
 import mmcorej.CMMCore;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginIcon;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginName;
+import org.bioimageanalysis.icy.system.thread.ThreadUtil;
 import org.micromanager.api.MultiStagePosition;
 import plugins.adufour.blocks.util.VarList;
 import plugins.adufour.vars.lang.Var;
@@ -35,6 +37,8 @@ import plugins.stef.micromanager.block.setting.MicroscopePositions;
  *
  * @author Stephane Dallongeville
  */
+@IcyPluginName("Set Micro-Manager Stage Position")
+@IcyPluginIcon(path = "/mm_blocks.png")
 public class MicroscopeSetStagePosition extends AbstractMicroscopeBlock {
     Var<MultiStagePosition> input;
     VarBoolean waitForStage;
diff --git a/src/main/java/plugins/stef/micromanager/block/stage/MicroscopeSetStageXY.java b/src/main/java/plugins/stef/micromanager/block/stage/MicroscopeSetStageXY.java
index 97db9cc131badf2003a9099b42457247045bc6ab..bbb32b228317079fd373772ab1d50af5cf45e877 100644
--- a/src/main/java/plugins/stef/micromanager/block/stage/MicroscopeSetStageXY.java
+++ b/src/main/java/plugins/stef/micromanager/block/stage/MicroscopeSetStageXY.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,6 +18,9 @@
 
 package plugins.stef.micromanager.block.stage;
 
+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.util.VarList;
 import plugins.adufour.vars.lang.VarBoolean;
 import plugins.adufour.vars.lang.VarDouble;
@@ -33,6 +36,8 @@ import java.awt.geom.Point2D;
  *
  * @author Stephane Dallongeville
  */
+@IcyPluginName("Set Micro-Manager Stage XY")
+@IcyPluginIcon(path = "/mm_blocks.png")
 public class MicroscopeSetStageXY extends AbstractMicroscopeBlock {
     VarDouble inX;
     VarDouble inY;
@@ -73,7 +78,7 @@ public class MicroscopeSetStageXY extends AbstractMicroscopeBlock {
     }
 
     @Override
-    public void declareInput(final VarList inputMap) {
+    public void declareInput(final @NotNull VarList inputMap) {
         inputMap.add("trigger", trigger);
         inputMap.add("x", inX);
         inputMap.add("y", inY);
@@ -82,7 +87,7 @@ public class MicroscopeSetStageXY extends AbstractMicroscopeBlock {
     }
 
     @Override
-    public void declareOutput(final VarList outputMap) {
+    public void declareOutput(final @NotNull VarList outputMap) {
         outputMap.add("done", done);
     }
 }
diff --git a/src/main/java/plugins/stef/micromanager/block/stage/MicroscopeSetStageZ.java b/src/main/java/plugins/stef/micromanager/block/stage/MicroscopeSetStageZ.java
index 71084a044c126b5906e54ebdfa7a51bf82eddf3f..23f46eaf08ef91a28c046bc504e83d94b9e79479 100644
--- a/src/main/java/plugins/stef/micromanager/block/stage/MicroscopeSetStageZ.java
+++ b/src/main/java/plugins/stef/micromanager/block/stage/MicroscopeSetStageZ.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,6 +18,9 @@
 
 package plugins.stef.micromanager.block.stage;
 
+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.util.VarList;
 import plugins.adufour.vars.lang.VarBoolean;
 import plugins.adufour.vars.lang.VarDouble;
@@ -31,6 +34,8 @@ import plugins.tprovoost.Microscopy.MicroManager.tools.StageMover;
  *
  * @author Stephane Dallongeville
  */
+@IcyPluginName("Set Micro-Manager Stage Z")
+@IcyPluginIcon(path = "/mm_blocks.png")
 public class MicroscopeSetStageZ extends AbstractMicroscopeBlock {
     VarDouble inZ;
     VarObject trigger = new VarObject("Trigger", null);
@@ -65,7 +70,7 @@ public class MicroscopeSetStageZ extends AbstractMicroscopeBlock {
     }
 
     @Override
-    public void declareInput(final VarList inputMap) {
+    public void declareInput(final @NotNull VarList inputMap) {
         inputMap.add("trigger", trigger);
         inputMap.add("z", inZ);
         inputMap.add("relative", varRelative);
@@ -73,7 +78,7 @@ public class MicroscopeSetStageZ extends AbstractMicroscopeBlock {
     }
 
     @Override
-    public void declareOutput(final VarList outputMap) {
+    public void declareOutput(final @NotNull VarList outputMap) {
         outputMap.add("done", varDone);
     }
 }
diff --git a/src/main/java/plugins/stef/micromanager/block/tool/TaggedImageToIcyImage.java b/src/main/java/plugins/stef/micromanager/block/tool/TaggedImageToIcyImage.java
index 7574f55a0c8a3c2b75c2fbddf5d685c9571c4b24..15efac45b693c76586ef8f2b5c6a40354b6d8a8d 100644
--- a/src/main/java/plugins/stef/micromanager/block/tool/TaggedImageToIcyImage.java
+++ b/src/main/java/plugins/stef/micromanager/block/tool/TaggedImageToIcyImage.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,12 @@
 
 package plugins.stef.micromanager.block.tool;
 
-import icy.image.IcyBufferedImage;
-import icy.type.collection.CollectionUtil;
 import mmcorej.TaggedImage;
+import org.bioimageanalysis.icy.common.collection.CollectionUtil;
+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.jetbrains.annotations.NotNull;
 import plugins.adufour.blocks.util.VarList;
 import plugins.adufour.vars.lang.Var;
 import plugins.adufour.vars.lang.VarArray;
@@ -31,8 +34,10 @@ import plugins.tprovoost.Microscopy.MicroManager.tools.MMUtils;
 /**
  * Block to convert a TaggedImage to an IcyBufferedImage (Micro-Manager)
  *
- * @author Stephane
+ * @author Stephane Dallongeville
  */
+@IcyPluginName("TaggedImage to IcyBufferedImage")
+@IcyPluginIcon(path = "/mm_blocks.png")
 public class TaggedImageToIcyImage extends AbstractMicroscopeBlock {
     VarArray<TaggedImage> in = new VarArray<>("Tagged Image", TaggedImage[].class, new TaggedImage[0]);
     Var<IcyBufferedImage> out = new Var<>("Icy Image", IcyBufferedImage.class);
@@ -48,17 +53,12 @@ public class TaggedImageToIcyImage extends AbstractMicroscopeBlock {
     }
 
     @Override
-    public void declareInput(final VarList inputMap) {
+    public void declareInput(final @NotNull VarList inputMap) {
         inputMap.add("taggedImage", in);
     }
 
     @Override
-    public void declareOutput(final VarList outputMap) {
+    public void declareOutput(final @NotNull VarList outputMap) {
         outputMap.add("icyImage", out);
     }
-
-    @Override
-    public String getName() {
-        return "TaggedImage to IcyBufferedImage";
-    }
 }
\ No newline at end of file
diff --git a/src/main/resources/mm_blocks.png b/src/main/resources/mm_blocks.png
new file mode 100644
index 0000000000000000000000000000000000000000..0d67c2a6236f3c07c84f5b24989f19b80308d412
Binary files /dev/null and b/src/main/resources/mm_blocks.png differ