diff --git a/.gitignore b/.gitignore
index 8d47cace3a5bd898da9fb12bed716d60838191a4..57f16fb67c1b1589981416b323d7a9debc728665 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,7 +1,41 @@
-.idea/
+/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
-.project
+*.ipr
+
+### Eclipse ###
+.apt_generated
 .classpath
-**/.DS_Store
\ No newline at end of file
+.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 6cd130b80feb039eeb47a8438566ac32851630f7..40c0e0bf2152e9955b27b660b13a7a9e3f9f62f5 100644
--- a/pom.xml
+++ b/pom.xml
@@ -8,12 +8,12 @@
     <parent>
         <groupId>org.bioimageanalysis.icy</groupId>
         <artifactId>pom-icy</artifactId>
-        <version>2.2.0</version>
+        <version>3.0.0-a.1</version>
     </parent>
 
     <!-- Project Information -->
     <artifactId>image-to-workbook</artifactId>
-    <version>3.0.0</version>
+    <version>3.0.0-a.1</version>
 
     <name>Image to Workbook</name>
     <description>Convert a 2D Image to workbook</description>
@@ -53,6 +53,10 @@
 
     <!-- List of project's dependencies -->
     <dependencies>
+        <dependency>
+            <groupId>org.bioimageanalysis.icy</groupId>
+            <artifactId>ezplug</artifactId>
+        </dependency>
         <dependency>
             <groupId>org.bioimageanalysis.icy</groupId>
             <artifactId>workbooks</artifactId>
@@ -63,8 +67,7 @@
     <repositories>
         <repository>
             <id>icy</id>
-            <name>Icy's Nexus</name>
-            <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/worm/image2workbook/Image2Workbook.java b/src/main/java/plugins/worm/image2workbook/Image2Workbook.java
index eafdb28730547e534cfa2ca7af33b2d94d320039..2c111325cf316da147e8e62737922ac035929760 100644
--- a/src/main/java/plugins/worm/image2workbook/Image2Workbook.java
+++ b/src/main/java/plugins/worm/image2workbook/Image2Workbook.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.worm.image2workbook;
 
-import icy.canvas.IcyCanvas;
-import icy.file.FileUtil;
-import icy.gui.dialog.MessageDialog;
-import icy.gui.dialog.SaveDialog;
-import icy.gui.frame.IcyFrame;
-import icy.gui.frame.progress.ToolTipFrame;
-import icy.gui.viewer.Viewer;
-import icy.gui.viewer.ViewerEvent;
-import icy.gui.viewer.ViewerEvent.ViewerEventType;
-import icy.gui.viewer.ViewerListener;
-import icy.image.IcyBufferedImage;
-import icy.painter.Overlay;
-import icy.plugin.abstract_.PluginActionable;
-import icy.sequence.Sequence;
-import icy.sequence.SequenceEvent;
-import icy.sequence.SequenceListener;
-import icy.system.IcyHandledException;
-import icy.type.point.Point5D;
 import org.apache.poi.ss.usermodel.Cell;
 import org.apache.poi.ss.usermodel.Row;
 import org.apache.poi.ss.usermodel.Sheet;
+import org.bioimageanalysis.icy.common.geom.point.Point5D;
+import org.bioimageanalysis.icy.extension.plugin.abstract_.PluginActionable;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginIcon;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginName;
+import org.bioimageanalysis.icy.gui.canvas.IcyCanvas;
+import org.bioimageanalysis.icy.gui.dialog.MessageDialog;
+import org.bioimageanalysis.icy.gui.dialog.SaveDialog;
+import org.bioimageanalysis.icy.gui.frame.IcyFrame;
+import org.bioimageanalysis.icy.gui.frame.progress.ToolTipFrame;
+import org.bioimageanalysis.icy.gui.viewer.Viewer;
+import org.bioimageanalysis.icy.gui.viewer.ViewerEvent;
+import org.bioimageanalysis.icy.gui.viewer.ViewerListener;
+import org.bioimageanalysis.icy.io.FileUtil;
+import org.bioimageanalysis.icy.model.image.IcyBufferedImage;
+import org.bioimageanalysis.icy.model.overlay.Overlay;
+import org.bioimageanalysis.icy.model.sequence.Sequence;
+import org.bioimageanalysis.icy.model.sequence.SequenceEvent;
+import org.bioimageanalysis.icy.model.sequence.SequenceListener;
+import org.bioimageanalysis.icy.system.IcyHandledException;
 import org.jdesktop.swingx.JXButton;
+import org.jetbrains.annotations.NotNull;
 import plugins.adufour.vars.gui.swing.WorkbookEditor;
 import plugins.adufour.vars.lang.VarWorkbook;
 
@@ -55,6 +57,8 @@ import java.io.FileWriter;
 import java.io.IOException;
 import java.util.HashMap;
 
+@IcyPluginName("Image to Workbook")
+@IcyPluginIcon(path = "/image-to-workbook.png")
 public class Image2Workbook extends PluginActionable {
     public static final HashMap<Viewer, MagnifierOverlay> magnifiers = new HashMap<>();
     // squence chooser define
@@ -166,7 +170,7 @@ public class Image2Workbook extends PluginActionable {
         VarWorkbook wb;
         IcyFrame mainFrame;
 
-        public MagnifierOverlay(final Viewer viewer, final int initialChannel, final int magnifierScale, final VarWorkbook w, final IcyFrame frame) {
+        public MagnifierOverlay(final @NotNull Viewer viewer, final int initialChannel, final int magnifierScale, final VarWorkbook w, final IcyFrame frame) {
             super("Magnifier");
             wb = w;
             mainFrame = frame;
@@ -287,7 +291,7 @@ public class Image2Workbook extends PluginActionable {
         }
 
         @Override
-        public void keyPressed(final KeyEvent e, final Point5D.Double imagePoint, final IcyCanvas canvas) {
+        public void keyPressed(final KeyEvent e, final Point5D.Double imagePoint, final @NotNull IcyCanvas canvas) {
             if (canvas.getViewer() != viewer)
                 return;
 
@@ -326,7 +330,7 @@ public class Image2Workbook extends PluginActionable {
         }
 
         @Override
-        public void sequenceChanged(final SequenceEvent sequenceEvent) {
+        public void sequenceChanged(final @NotNull SequenceEvent sequenceEvent) {
             switch (sequenceEvent.getSourceType()) {
                 case SEQUENCE_DATA:
                 case SEQUENCE_COLORMAP:
@@ -344,8 +348,8 @@ public class Image2Workbook extends PluginActionable {
         }
 
         @Override
-        public void viewerChanged(final ViewerEvent event) {
-            if (event.getType() == ViewerEventType.CANVAS_CHANGED)
+        public void viewerChanged(final @NotNull ViewerEvent event) {
+            if (event.getType() == ViewerEvent.ViewerEventType.CANVAS_CHANGED)
                 remove();
         }
 
@@ -355,7 +359,7 @@ public class Image2Workbook extends PluginActionable {
         }
 
         public void saveWorkbook() {
-            final String path = SaveDialog.chooseFile("Save workbook as...", null, "Workbook", ".xls");
+            final String path = SaveDialog.chooseFile("Save workbook as...", null, "Workbook", ".xlsx");
             if (path == null)
                 return;
 
@@ -404,7 +408,7 @@ public class Image2Workbook extends PluginActionable {
 
         }
 
-        public void saveAllData(final Sequence sequence) {
+        public void saveAllData(final @NotNull Sequence sequence) {
             String pathchanged;
 
             String path = SaveDialog.chooseFile("Save current image as...", null,
diff --git a/src/main/resources/image-to-workbook.png b/src/main/resources/image-to-workbook.png
new file mode 100644
index 0000000000000000000000000000000000000000..275debf629d721e470b2759fdae3f67251b74dc4
Binary files /dev/null and b/src/main/resources/image-to-workbook.png differ