diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..3d47f986c41db29ec6dc0d5036bf760b3a1cf366
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,6 @@
+.idea/
+target/
+.settings/
+*.iml
+.project
+.classpath
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
new file mode 100644
index 0000000000000000000000000000000000000000..242cbd97ba7c376598c40d1cc6c649b403a101bf
--- /dev/null
+++ b/pom.xml
@@ -0,0 +1,110 @@
+<?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>
+
+    <!-- Inherited Icy Parent POM -->
+    <parent>
+        <groupId>org.bioimageanalysis.icy</groupId>
+        <artifactId>parent-pom-plugin</artifactId>
+        <version>1.0.3</version>
+    </parent>
+
+    <!-- Project Information -->
+    <artifactId>jmf</artifactId>
+    <version>2.1.1</version>
+
+    <packaging>jar</packaging>
+
+    <name>JMF</name>
+    <description>JMF (JavaMedia Framework) Library for Icy.</description>
+    <url>http://icy.bioimageanalysis.org/plugin/jave-media-framework-library/</url>
+    <inceptionYear>2020</inceptionYear>
+
+    <organization>
+        <name>Institut Pasteur</name>
+        <url>https://pasteur.fr</url>
+    </organization>
+
+    <licenses>
+        <license>
+            <name>GNU GPLv3</name>
+            <url>https://www.gnu.org/licenses/gpl-3.0.en.html</url>
+            <distribution>repo</distribution>
+        </license>
+    </licenses>
+
+    <developers>
+        <developer>
+            <id>sdallongeville</id>
+            <name>Stéphane Dallongeville</name>
+            <url>https://research.pasteur.fr/fr/member/stephane-dallongeville/</url>
+            <roles>
+                <role>founder</role>
+                <role>lead</role>
+                <role>architect</role>
+                <role>developer</role>
+                <role>debugger</role>
+                <role>tester</role>
+                <role>maintainer</role>
+                <role>support</role>
+            </roles>
+        </developer>
+    </developers>
+
+    <!-- Project properties -->
+    <properties>
+
+    </properties>
+
+    <!-- Project build configuration -->
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-dependency-plugin</artifactId>
+                <version>3.1.1</version>
+                <executions>
+                    <execution>
+                        <id>${project.artifactId}-fetch</id>
+                        <phase>generate-sources</phase>
+                        <goals>
+                            <goal>unpack-dependencies</goal>
+                        </goals>
+                        <configuration>
+                            <includeArtifactIds>jmf</includeArtifactIds>
+                            <outputDirectory>${project.build.outputDirectory}</outputDirectory>
+                            <stripVersion>true</stripVersion>
+                            <excludeTransitive>true</excludeTransitive>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
+
+    <!-- List of project's dependencies -->
+    <dependencies>
+        <!-- The core of Icy -->
+        <dependency>
+            <groupId>org.bioimageanalysis.icy</groupId>
+            <artifactId>icy-kernel</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>javax.media</groupId>
+            <artifactId>jmf</artifactId>
+            <version>2.1.1e</version>
+        </dependency>
+    </dependencies>
+
+    <!-- Icy Maven repository (to find parent POM) -->
+    <repositories>
+        <repository>
+            <id>icy</id>
+            <name>Icy's Nexus</name>
+            <url>https://icy-nexus.pasteur.fr/repository/Icy/</url>
+        </repository>
+    </repositories>
+</project>
diff --git a/src/main/java/plugins/stef/library/JMFLibraryPlugin.java b/src/main/java/plugins/stef/library/JMFLibraryPlugin.java
new file mode 100644
index 0000000000000000000000000000000000000000..1e7cf5ed444dbc36ef37f8076e0fbc76afbaf20b
--- /dev/null
+++ b/src/main/java/plugins/stef/library/JMFLibraryPlugin.java
@@ -0,0 +1,14 @@
+package plugins.stef.library;
+
+import icy.plugin.abstract_.Plugin;
+import icy.plugin.interface_.PluginLibrary;
+
+/**
+ * Icy wrapper for the JMF (Java Media Framework) library.
+ * 
+ * @author Stephane Dallongeville
+ */
+public class JMFLibraryPlugin extends Plugin implements PluginLibrary
+{
+    //
+}
diff --git a/src/main/resources/CustomizerHelp.html b/src/main/resources/CustomizerHelp.html
new file mode 100644
index 0000000000000000000000000000000000000000..e99c9828035b5ac473a0afd13a79d96ee2d2a463
--- /dev/null
+++ b/src/main/resources/CustomizerHelp.html
@@ -0,0 +1,88 @@
+
+<a name="1">
+<h3> Main Functionalities </h3>
+</a>
+This page lists the main functionalities provided by JMF 2.X. With JMF2.X,
+one could playback the media coming from stored data, live captured data or
+real-time stream received from network. Besides, one could also broadcast
+the media over network or export the media to a local file.
+
+<table border=1>
+<tr><td rowspan=3> <b>Media Source</b></td><td>Media files</td><td> source media comes
+from stored files.</td></tr>
+<tr><td>RTP receive</td><td>source media is the real-time stream received from
+network via RTP/RTSP.</td></tr>
+<tr><td>Capture</td><td> source media comes from the capture device, e.g., 
+microphone or camera.</td></tr>
+<tr><td rowspan=3> <b>Media Sink</b> </td><td>Play</td><td> playback, rendering 
+the source media to speaker, monitor, etc. </td></tr>
+<tr><td> RTP Transmit</td><td> Broadcast the source media across network via
+RTP/RTSP </td></tr>
+<tr><td>Transcode</td><td> Export the source media into a file. </td></tr>
+<tr><td rowspan=2><b>Optional Component</b></td><td>Player Bean</td><td>JMF player as a java bean component </td></tr>
+</tr><td>Demo & Tool</td><td> <b>JMStudio</b> is an application demo bundled in JMF2.X. <b>Please note </b> that JMStudio touches a lot of areas of JMF, once it is selected, it will increase the size of target jar file. <br> <b>JMFRegistry</b> is a useful tool bundled in JMF2.X to manage JMF plugin registry.</td></tr>
+</table>
+<br><br>
+
+<b>Option to generate two target jar files </b> is useful if JMF is deployed via <b>JavaWebStart</b>. It will create two target jar files: core_custom.jar  contains all the core classes and plugin_custom.jar contains all the plugable classes. Then, you have to include both jar files into your classpath.
+<br><br>
+
+
+<a name="2">
+<h3> Protocol </h3>
+</a>
+
+This page lists the protocols supported by JMF2.X.
+<table border=1>
+<tr><td>javasound</td><td>Protocol for sound capture, which relies on JavaSound/JDK1.3 </td></tr>
+<tr><td>VFW</td><td>Video for Window. It is a protocol for video capture on Windows platform </td></tr>
+<tr><td>SunVideo</td><td> protocol for video capture on solaris, using SunVideo
+capture card. </td></tr>
+<tr><td>SunVideo+</td><td>protocol for video capture on solaris, using SunVideo Plus catpure card. </td></tr>
+<tr><td>Cloneable/Merging DataSource</td><td>Protocols used to clone data source, and merge multiple tracks</td></tr>
+</table>
+<br>
+<br>
+
+<a name="3">
+<h3> Stored Media Format </h3>
+</a>
+This page lists the media formats supported by JMF2.X.
+<br> MIDI and RMF rely on JavaSound/JDK1.3.
+<br> CDAudio is only supported on Windows platform.
+<br>
+
+<a name="4">
+<h3> Multiplexer  </h3>
+</a>
+This page lists available audio/video multiplexers needed when transcoding.
+<br>
+
+<a name="5">
+<h3> Codec </h3>
+</a>
+This page lists the Audio/Video codecs supported by JMF2.X.
+<table border=1>
+<tr><td>IMA4_MS is the Microsoft version of IMA4.</td></tr>
+<tr><td>GSM_MS is the Microsoft version of GSM.</td></tr>
+<tr><td>JD_xxx means java decoders </td></tr>
+<tr><td>ND_xxx means native decoders </td></tr>
+<tr><td>JE_xxx means java encoders </td></tr>
+<tr><td>NE_xxx means native encoders </td></tr>
+<tr><td>DRTP_xxx means depacketizers </td></tr>
+<tr><td>PRTP_xxx means packetizers </td></tr>
+<tr><td>The IV32 native decoder on windows platform uses VCM interface. </td></tr>
+</table>
+<br>
+
+
+<a name="6">
+<h3> Renderer </h3>
+</a>
+This page lists available audio/video renderers needed when playing back.
+<br><b>Javasound</b> renderer relies on JavaSound/JDK1.3.
+<br><b>XLib</b> and <b>XIL</b> are native renderers on solaris platform.
+<br><b>SunRay</b> is a renderer for SunRay device.
+<br><b>DirectDraw</b> and <b>GDI</b> are native renderers on Windows platform.
+<br>
+
diff --git a/src/main/resources/javax.sound.midi.spi.MidiDeviceProvider b/src/main/resources/javax.sound.midi.spi.MidiDeviceProvider
new file mode 100644
index 0000000000000000000000000000000000000000..dcbd1cc2bc581001d798d0e159c5df0a49a75565
--- /dev/null
+++ b/src/main/resources/javax.sound.midi.spi.MidiDeviceProvider
@@ -0,0 +1,4 @@
+# Providers for midi devices
+com.sun.media.sound.MixerSynthProvider
+com.sun.media.sound.MixerSequencerProvider
+com.sun.media.sound.MidiOutDeviceProvider
diff --git a/src/main/resources/javax.sound.midi.spi.MidiFileReader b/src/main/resources/javax.sound.midi.spi.MidiFileReader
new file mode 100644
index 0000000000000000000000000000000000000000..2daf82731a6dd7f0545b827562d256844afd8d72
--- /dev/null
+++ b/src/main/resources/javax.sound.midi.spi.MidiFileReader
@@ -0,0 +1,3 @@
+# Providers for midi sequences
+com.sun.media.sound.StandardMidiFileReader
+com.sun.media.sound.RmfFileReader
diff --git a/src/main/resources/javax.sound.midi.spi.MidiFileWriter b/src/main/resources/javax.sound.midi.spi.MidiFileWriter
new file mode 100644
index 0000000000000000000000000000000000000000..bb74df72e1ae26b8394d9b0d403499b75eb7b1f8
--- /dev/null
+++ b/src/main/resources/javax.sound.midi.spi.MidiFileWriter
@@ -0,0 +1,2 @@
+# Providers for Midi file writing
+com.sun.media.sound.StandardMidiFileWriter
diff --git a/src/main/resources/javax.sound.midi.spi.SoundbankReader b/src/main/resources/javax.sound.midi.spi.SoundbankReader
new file mode 100644
index 0000000000000000000000000000000000000000..85a8af274f326d2e1d2fb48193685e7b1a608e66
--- /dev/null
+++ b/src/main/resources/javax.sound.midi.spi.SoundbankReader
@@ -0,0 +1,2 @@
+# Providers for Soundbanks
+com.sun.media.sound.HsbParser
diff --git a/src/main/resources/javax.sound.sampled.spi.AudioFileReader b/src/main/resources/javax.sound.sampled.spi.AudioFileReader
new file mode 100644
index 0000000000000000000000000000000000000000..db1cd3044f69e092066c6ba68e7741f260167124
--- /dev/null
+++ b/src/main/resources/javax.sound.sampled.spi.AudioFileReader
@@ -0,0 +1,4 @@
+# Providers for audio file reading
+com.sun.media.sound.AuFileReader
+com.sun.media.sound.AiffFileReader
+com.sun.media.sound.WaveFileReader
diff --git a/src/main/resources/javax.sound.sampled.spi.AudioFileWriter b/src/main/resources/javax.sound.sampled.spi.AudioFileWriter
new file mode 100644
index 0000000000000000000000000000000000000000..bd84a769a3600924b5e515be65f3c0e3dd528f23
--- /dev/null
+++ b/src/main/resources/javax.sound.sampled.spi.AudioFileWriter
@@ -0,0 +1,4 @@
+# Providers for writing audio files
+com.sun.media.sound.AuFileWriter
+com.sun.media.sound.AiffFileWriter
+com.sun.media.sound.WaveFileWriter
diff --git a/src/main/resources/javax.sound.sampled.spi.FormatConversionProvider b/src/main/resources/javax.sound.sampled.spi.FormatConversionProvider
new file mode 100644
index 0000000000000000000000000000000000000000..7f452444c64b83700a30ad8d5e0978bb3d675d53
--- /dev/null
+++ b/src/main/resources/javax.sound.sampled.spi.FormatConversionProvider
@@ -0,0 +1,4 @@
+# Providers for FormatConversion
+com.sun.media.sound.UlawCodec
+com.sun.media.sound.AlawCodec
+com.sun.media.sound.PCMtoPCMCodec
diff --git a/src/main/resources/javax.sound.sampled.spi.MixerProvider b/src/main/resources/javax.sound.sampled.spi.MixerProvider
new file mode 100644
index 0000000000000000000000000000000000000000..68a0879bfa923936ef4def51f82dbc2d08e9646c
--- /dev/null
+++ b/src/main/resources/javax.sound.sampled.spi.MixerProvider
@@ -0,0 +1,4 @@
+# Provider for the Headspace Mixer
+com.sun.media.sound.HeadspaceMixerProvider
+com.sun.media.sound.SimpleInputDeviceProvider
+com.sun.media.sound.SimpleOutputDeviceProvider
diff --git a/src/main/resources/jmf.png b/src/main/resources/jmf.png
new file mode 100644
index 0000000000000000000000000000000000000000..f6be9379ecc42be14ca87daa8932f6e3a18b2afd
Binary files /dev/null and b/src/main/resources/jmf.png differ