diff --git a/.classpath b/.classpath
index 0b6e7bb7afe495f8ab51c08f36b2e624fd2088b4..01c7137717908226bde31b7cb239a0169a032579 100644
--- a/.classpath
+++ b/.classpath
@@ -5,11 +5,45 @@
 			<attribute name="module" value="true"/>
 		</attributes>
 	</classpathentry>
-	<classpathentry kind="src" path="src"/>
-	<classpathentry kind="var" path="ICY_JAR"/>
+	<classpathentry kind="src" path="src/main/java"/>
+	<classpathentry kind="src" path="src/main/resources"/>
+	<classpathentry kind="src" path="src/test/java"/>
 	<classpathentry kind="var" path="ICY_HOME/plugins/adufour/blocks/Blocks.jar"/>
-	<classpathentry kind="var" path="ICY_HOME/plugins/adufour/ezplug/EzPlug.jar"/>
-	<classpathentry kind="var" path="ICY_HOME/plugins/tprovoost/javadocparser/JavaDocParser.jar"/>
-	<classpathentry kind="var" path="ICY_PLUGINS/stef/library/JavaCLPlugin.jar"/>
-	<classpathentry kind="output" path="bin"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/Blocks"/>
+	<classpathentry kind="lib" path="F:/SDKs/Java/jdk1.8.0_241/lib/tools.jar"/>
+	<classpathentry kind="lib" path="F:/SDKs/Java/jdk1.8.0_241/lib/tools.jar"/>
+	<classpathentry kind="var" path="USER_HOME/SDKs/Java/jdk1.8.0_251/lib/tools.jar"/>
+	<classpathentry kind="var" path="USER_HOME/SDKs/Java/jdk1.8.0_251/lib/tools.jar"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/Maven: org.bioimageanalysis.icy:icy-kernel:2.1.0"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/Maven: net.sf.ehcache:ehcache:2.10.6"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/Maven: org.slf4j:slf4j-api:1.7.25"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/Maven: org.bioimageanalysis.icy:icy-bioformats:6.3.1"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/Maven: org.bioimageanalysis.icy:icy-insubstantial:7.3.7"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/Maven: org.bioimageanalysis.icy:icy-vtk:6.3.0.1"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/Maven: net.imagej:ij:1.52q"/>
+	<classpathentry kind="lib" path="D:/SDKs/Java/jdk1.8.0_241/lib/tools.jar"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/Maven: javax.media:jai-core:1.1.3"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/Maven: javax.media:jai-codec:1.1.3"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/Maven: org.jogamp.jogl:jogl-all:2.1.5-01"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/Maven: org.jogamp.jogl:jogl-all-natives-linux-amd64:2.1.5"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/Maven: org.jogamp.jogl:jogl-all-natives-linux-i586:2.1.5"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/Maven: org.jogamp.jogl:jogl-all-natives-macosx-universal:2.1.5"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/Maven: org.jogamp.jogl:jogl-all-natives-windows-amd64:2.1.5"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/Maven: org.jogamp.jogl:jogl-all-natives-windows-i586:2.1.5"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/Maven: org.jogamp.gluegen:gluegen-rt:2.1.5-01"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/Maven: org.jogamp.gluegen:gluegen-rt-natives-linux-amd64:2.1.5"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/Maven: org.jogamp.gluegen:gluegen-rt-natives-linux-i586:2.1.5"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/Maven: org.jogamp.gluegen:gluegen-rt-natives-macosx-universal:2.1.5"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/Maven: org.jogamp.gluegen:gluegen-rt-natives-windows-amd64:2.1.5"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/Maven: org.jogamp.gluegen:gluegen-rt-natives-windows-i586:2.1.5"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/Maven: org.javassist:javassist:3.22.0-GA"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/Maven: net.sourceforge.jexcelapi:jxl:2.6.12"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/Maven: log4j:log4j:1.2.14"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/Maven: org.swinglabs.swingx:swingx-all:1.6.5-1"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/Maven: org.bioimageanalysis.icy:icy-blocks:1.0.1"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/Maven: org.bioimageanalysis.icy:icy-protocols:1.0.0"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/Maven: org.bioimageanalysis.icy:icy-ezplug:3.15.13"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/Maven: org.bioimageanalysis.icy:icy-javadocparser:1.0.0"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/Maven: com.nativelibs4java:ochafik-util:0.12"/>
+	<classpathentry kind="output" path="target/classes"/>
 </classpath>
diff --git a/.gitignore b/.gitignore
index ecafb5c7ecebdabeaef1f87a2d12614e8fb084c4..b1a4c0f0ad9f9028e66415222d37e3a984c58d8c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,8 @@
 bin
 pluginfile-protocols*.jar
+target/
+.idea/
+.settings/
+*.iml
+*.eml
 
diff --git a/pom.xml b/pom.xml
new file mode 100644
index 0000000000000000000000000000000000000000..df586d86fcdddfcb723b3850fcced211321b3d50
--- /dev/null
+++ b/pom.xml
@@ -0,0 +1,84 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+
+    <groupId>org.bioimageanalysis.icy</groupId>
+    <artifactId>icy-protocols</artifactId>
+    <version>3.0.9</version>
+
+    <name>protocols</name>
+
+    <properties>
+        <outputJar>${project.build.outputDirectory}/../plugin</outputJar>
+    </properties>
+
+    <build>
+        <finalName>${project.artifactId}</finalName>
+
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-jar-plugin</artifactId>
+                <version>3.1.2</version>
+                <configuration>
+                    <outputDirectory>${outputJar}</outputDirectory>
+                    <archive>
+                        <manifest>
+                            <addClasspath>true</addClasspath>
+                            <mainClass>plugins.adufour.protocols.Protocols</mainClass>
+                        </manifest>
+                    </archive>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.bioimageanalysis.icy</groupId>
+            <artifactId>icy-kernel</artifactId>
+            <version>2.1.0</version>
+        </dependency>
+        <dependency>
+            <groupId>org.bioimageanalysis.icy</groupId>
+            <artifactId>icy-blocks</artifactId>
+            <version>1.0.1</version>
+        </dependency>
+        <dependency>
+            <groupId>org.bioimageanalysis.icy</groupId>
+            <artifactId>icy-javadocparser</artifactId>
+            <version>1.0.0</version>
+        </dependency>
+        <dependency>
+            <groupId>com.nativelibs4java</groupId>
+            <artifactId>ochafik-util</artifactId>
+            <version>0.12</version>
+        </dependency>
+    </dependencies>
+
+    <repositories>
+        <repository>
+            <id>japa-repo</id>
+            <url>http://maven.geomajas.org/</url>
+        </repository>
+        <repository>
+            <id>icy</id>
+            <url>https://icy-nexus.pasteur.fr/repository/Icy/</url>
+        </repository>
+    </repositories>
+
+    <distributionManagement>
+        <repository>
+            <id>icy-prod</id>
+            <name>icy-prod</name>
+            <url>https://icy-nexus.pasteur.fr/repository/icy-core/</url>
+        </repository>
+        <snapshotRepository>
+            <id>icy-dev</id>
+            <name>icy-dev</name>
+            <url>https://icy-nexus-dev.pasteur.cloud/repository/icy-core/</url>
+        </snapshotRepository>
+    </distributionManagement>
+</project>
\ No newline at end of file
diff --git a/src/plugins/adufour/protocols/ProtocolImporter.java b/src/main/java/plugins/adufour/protocols/ProtocolImporter.java
similarity index 100%
rename from src/plugins/adufour/protocols/ProtocolImporter.java
rename to src/main/java/plugins/adufour/protocols/ProtocolImporter.java
diff --git a/src/plugins/adufour/protocols/Protocols.java b/src/main/java/plugins/adufour/protocols/Protocols.java
similarity index 100%
rename from src/plugins/adufour/protocols/Protocols.java
rename to src/main/java/plugins/adufour/protocols/Protocols.java
diff --git a/src/plugins/adufour/protocols/gui/BlockSearchPanel.java b/src/main/java/plugins/adufour/protocols/gui/BlockSearchPanel.java
similarity index 100%
rename from src/plugins/adufour/protocols/gui/BlockSearchPanel.java
rename to src/main/java/plugins/adufour/protocols/gui/BlockSearchPanel.java
diff --git a/src/plugins/adufour/protocols/gui/MainFrame.java b/src/main/java/plugins/adufour/protocols/gui/MainFrame.java
similarity index 100%
rename from src/plugins/adufour/protocols/gui/MainFrame.java
rename to src/main/java/plugins/adufour/protocols/gui/MainFrame.java
diff --git a/src/plugins/adufour/protocols/gui/ProtocolPanel.java b/src/main/java/plugins/adufour/protocols/gui/ProtocolPanel.java
similarity index 100%
rename from src/plugins/adufour/protocols/gui/ProtocolPanel.java
rename to src/main/java/plugins/adufour/protocols/gui/ProtocolPanel.java
diff --git a/src/plugins/adufour/protocols/gui/block/BlockPanel.java b/src/main/java/plugins/adufour/protocols/gui/block/BlockPanel.java
similarity index 100%
rename from src/plugins/adufour/protocols/gui/block/BlockPanel.java
rename to src/main/java/plugins/adufour/protocols/gui/block/BlockPanel.java
diff --git a/src/plugins/adufour/protocols/gui/block/LoopPanel.java b/src/main/java/plugins/adufour/protocols/gui/block/LoopPanel.java
similarity index 100%
rename from src/plugins/adufour/protocols/gui/block/LoopPanel.java
rename to src/main/java/plugins/adufour/protocols/gui/block/LoopPanel.java
diff --git a/src/plugins/adufour/protocols/gui/block/WorkFlowContainer.java b/src/main/java/plugins/adufour/protocols/gui/block/WorkFlowContainer.java
similarity index 100%
rename from src/plugins/adufour/protocols/gui/block/WorkFlowContainer.java
rename to src/main/java/plugins/adufour/protocols/gui/block/WorkFlowContainer.java
diff --git a/src/plugins/adufour/protocols/gui/block/WorkFlowPanel.java b/src/main/java/plugins/adufour/protocols/gui/block/WorkFlowPanel.java
similarity index 100%
rename from src/plugins/adufour/protocols/gui/block/WorkFlowPanel.java
rename to src/main/java/plugins/adufour/protocols/gui/block/WorkFlowPanel.java
diff --git a/src/plugins/adufour/protocols/gui/link/CurvedLine.java b/src/main/java/plugins/adufour/protocols/gui/link/CurvedLine.java
similarity index 100%
rename from src/plugins/adufour/protocols/gui/link/CurvedLine.java
rename to src/main/java/plugins/adufour/protocols/gui/link/CurvedLine.java
diff --git a/src/plugins/adufour/protocols/gui/link/DragDropZone.java b/src/main/java/plugins/adufour/protocols/gui/link/DragDropZone.java
similarity index 100%
rename from src/plugins/adufour/protocols/gui/link/DragDropZone.java
rename to src/main/java/plugins/adufour/protocols/gui/link/DragDropZone.java
diff --git a/src/plugins/adufour/protocols/gui/link/DragZone.java b/src/main/java/plugins/adufour/protocols/gui/link/DragZone.java
similarity index 100%
rename from src/plugins/adufour/protocols/gui/link/DragZone.java
rename to src/main/java/plugins/adufour/protocols/gui/link/DragZone.java
diff --git a/src/plugins/adufour/protocols/gui/link/DropZone.java b/src/main/java/plugins/adufour/protocols/gui/link/DropZone.java
similarity index 100%
rename from src/plugins/adufour/protocols/gui/link/DropZone.java
rename to src/main/java/plugins/adufour/protocols/gui/link/DropZone.java
diff --git a/src/plugins/adufour/protocols/gui/link/Line.java b/src/main/java/plugins/adufour/protocols/gui/link/Line.java
similarity index 100%
rename from src/plugins/adufour/protocols/gui/link/Line.java
rename to src/main/java/plugins/adufour/protocols/gui/link/Line.java
diff --git a/src/plugins/adufour/protocols/gui/link/ReLoopLine.java b/src/main/java/plugins/adufour/protocols/gui/link/ReLoopLine.java
similarity index 100%
rename from src/plugins/adufour/protocols/gui/link/ReLoopLine.java
rename to src/main/java/plugins/adufour/protocols/gui/link/ReLoopLine.java
diff --git a/src/plugins/adufour/protocols/gui/link/RoundedSquareLine.java b/src/main/java/plugins/adufour/protocols/gui/link/RoundedSquareLine.java
similarity index 100%
rename from src/plugins/adufour/protocols/gui/link/RoundedSquareLine.java
rename to src/main/java/plugins/adufour/protocols/gui/link/RoundedSquareLine.java
diff --git a/src/plugins/adufour/protocols/gui/link/TransferableVar.java b/src/main/java/plugins/adufour/protocols/gui/link/TransferableVar.java
similarity index 100%
rename from src/plugins/adufour/protocols/gui/link/TransferableVar.java
rename to src/main/java/plugins/adufour/protocols/gui/link/TransferableVar.java
diff --git a/src/plugins/adufour/protocols/livebar/OnlineProtocolProducer.java b/src/main/java/plugins/adufour/protocols/livebar/OnlineProtocolProducer.java
similarity index 100%
rename from src/plugins/adufour/protocols/livebar/OnlineProtocolProducer.java
rename to src/main/java/plugins/adufour/protocols/livebar/OnlineProtocolProducer.java
diff --git a/src/plugins/adufour/protocols/livebar/OnlineProtocolProvider.java b/src/main/java/plugins/adufour/protocols/livebar/OnlineProtocolProvider.java
similarity index 100%
rename from src/plugins/adufour/protocols/livebar/OnlineProtocolProvider.java
rename to src/main/java/plugins/adufour/protocols/livebar/OnlineProtocolProvider.java
diff --git a/src/plugins/adufour/protocols/livebar/ProtocolDescriptor.java b/src/main/java/plugins/adufour/protocols/livebar/ProtocolDescriptor.java
similarity index 99%
rename from src/plugins/adufour/protocols/livebar/ProtocolDescriptor.java
rename to src/main/java/plugins/adufour/protocols/livebar/ProtocolDescriptor.java
index 9f3aeadb9cb1f62127f7f8de03d433ceb2b1e300..b46c4f6c3e7cc69edd147bd951971f47d50fcff9 100644
--- a/src/plugins/adufour/protocols/livebar/ProtocolDescriptor.java
+++ b/src/main/java/plugins/adufour/protocols/livebar/ProtocolDescriptor.java
@@ -14,7 +14,6 @@ import java.io.IOException;
 import javax.swing.ImageIcon;
 
 import org.w3c.dom.Node;
-
 import plugins.adufour.protocols.Protocols;
 
 public class ProtocolDescriptor implements XMLPersistent
diff --git a/src/plugins/adufour/protocols/livebar/ProtocolRichToolTip.java b/src/main/java/plugins/adufour/protocols/livebar/ProtocolRichToolTip.java
similarity index 100%
rename from src/plugins/adufour/protocols/livebar/ProtocolRichToolTip.java
rename to src/main/java/plugins/adufour/protocols/livebar/ProtocolRichToolTip.java