diff --git a/pom.xml b/pom.xml
index 577ab6f69d842a8ceb2717e110ece7fd14a9a0cd..251c30042c9a9b8e7c35a5bbbf78c994f9bd05e0 100644
--- a/pom.xml
+++ b/pom.xml
@@ -11,7 +11,7 @@
 
 	<groupId>sc.fiji</groupId>
 	<artifactId>bigdataviewer_fiji</artifactId>
-	<version>3.0.2-SNAPSHOT</version>
+	<version>4.0.0-SNAPSHOT</version>
 
 	<name>BigDataViewer Fiji</name>
 	<description>Fiji plugins for starting BigDataViewer and exporting data.</description>
diff --git a/src/main/java/bdv/ij/BigDataBrowserPlugIn.java b/src/main/java/bdv/ij/BigDataBrowserPlugIn.java
index 98ce4413d1d87d59534badee709c6217052d4eb8..f2607f25e4d3cde7b25fa17f910868b29b9a8838 100644
--- a/src/main/java/bdv/ij/BigDataBrowserPlugIn.java
+++ b/src/main/java/bdv/ij/BigDataBrowserPlugIn.java
@@ -27,19 +27,22 @@ import javax.swing.JOptionPane;
 import javax.swing.JScrollPane;
 
 import org.apache.commons.lang.StringUtils;
+import org.scijava.command.Command;
+import org.scijava.plugin.Plugin;
 
 import bdv.BigDataViewer;
 import bdv.ij.util.ProgressWriterIJ;
 import bdv.viewer.ViewerOptions;
 import ij.IJ;
 import ij.ImageJ;
-import ij.plugin.PlugIn;
 import mpicbg.spim.data.SpimDataException;
 
 /**
  * @author HongKee Moon &lt;moon@mpi-cbg.de&gt;
  */
-public class BigDataBrowserPlugIn implements PlugIn
+@Plugin(type = Command.class,
+	menuPath = "Plugins>BigDataViewer>Browse BigDataServer")
+public class BigDataBrowserPlugIn implements Command
 {
 	private final Map< String, ImageIcon > imageMap = new HashMap<>();
 
@@ -48,7 +51,7 @@ public class BigDataBrowserPlugIn implements PlugIn
 	public static String serverUrl = "http://";
 
 	@Override
-	public void run( final String arg )
+	public void run()
 	{
 		BufferedImage image = null;
 		try
@@ -198,6 +201,6 @@ public class BigDataBrowserPlugIn implements PlugIn
 	public static void main( final String[] args )
 	{
 		ImageJ.main( args );
-		new BigDataBrowserPlugIn().run( null );
+		new BigDataBrowserPlugIn().run();
 	}
 }
diff --git a/src/main/java/bdv/ij/BigDataViewerPlugIn.java b/src/main/java/bdv/ij/BigDataViewerPlugIn.java
index 0267908e864b632a171afa12ac990946095e5917..f37c3de3516fca75724bb04f639cfc3ac7b20f59 100644
--- a/src/main/java/bdv/ij/BigDataViewerPlugIn.java
+++ b/src/main/java/bdv/ij/BigDataViewerPlugIn.java
@@ -10,18 +10,21 @@ import java.util.concurrent.atomic.AtomicBoolean;
 import javax.swing.JFileChooser;
 import javax.swing.filechooser.FileFilter;
 
+import org.scijava.command.Command;
+import org.scijava.plugin.Plugin;
+
 import bdv.BigDataViewer;
 import bdv.ij.util.ProgressWriterIJ;
 import bdv.viewer.ViewerOptions;
 import ij.Prefs;
-import ij.plugin.PlugIn;
 
-public class BigDataViewerPlugIn implements PlugIn
+@Plugin(type = Command.class, menuPath = "Plugins>BigDataViewer>Open XML/HDF5")
+public class BigDataViewerPlugIn implements Command
 {
 	static String lastDatasetPath = "./export.xml";
 
 	@Override
-	public void run( final String arg )
+	public void run()
 	{
 		File file = null;
 
diff --git a/src/main/java/bdv/ij/ExportCellVoyagerPlugIn.java b/src/main/java/bdv/ij/ExportCellVoyagerPlugIn.java
index eaf88e1b961ea87f150779a8f8c094fd0ec231e8..0ff922bc39c9c79626e3d1ba570de21cbd9e3fbb 100644
--- a/src/main/java/bdv/ij/ExportCellVoyagerPlugIn.java
+++ b/src/main/java/bdv/ij/ExportCellVoyagerPlugIn.java
@@ -14,6 +14,9 @@ import java.io.FilenameFilter;
 import javax.swing.JFileChooser;
 import javax.swing.filechooser.FileFilter;
 
+import org.scijava.command.Command;
+import org.scijava.plugin.Plugin;
+
 import bdv.export.ProgressWriter;
 import bdv.ij.export.tiles.CellVoyagerDataExporter;
 import bdv.ij.util.PluginHelper;
@@ -21,9 +24,10 @@ import bdv.ij.util.ProgressWriterIJ;
 import fiji.util.gui.GenericDialogPlus;
 import ij.IJ;
 import ij.ImageJ;
-import ij.plugin.PlugIn;
 
-public class ExportCellVoyagerPlugIn implements PlugIn
+@Plugin(type = Command.class,
+	menuPath = "Plugins>BigDataViewer>Export CellVoyager dataset as XML/HDF5")
+public class ExportCellVoyagerPlugIn implements Command
 {
 
 	protected static class Parameters
@@ -56,11 +60,18 @@ public class ExportCellVoyagerPlugIn implements PlugIn
 
 	static String sourceFolderStr;
 
+	private String sourcePath;
+
+	public void setSourcePath( final String sourcePath )
+	{
+		this.sourcePath = sourcePath;
+	}
+
 	@Override
-	public void run( final String arg )
+	public void run()
 	{
 
-		final Parameters params = getParameters( arg );
+		final Parameters params = getParameters( sourcePath );
 		if ( params == null )
 			return;
 
@@ -248,6 +259,7 @@ public class ExportCellVoyagerPlugIn implements PlugIn
 
 		final ExportCellVoyagerPlugIn plugin = new ExportCellVoyagerPlugIn();
 		final File file = new File( "/Users/tinevez/Desktop/Data/1_7_6_1_2/20130703T145244/" );
-		plugin.run( file.getAbsolutePath() );
+		plugin.setSourcePath( file.getAbsolutePath() );
+		plugin.run();
 	}
 }
diff --git a/src/main/java/bdv/ij/ExportImagePlusPlugIn.java b/src/main/java/bdv/ij/ExportImagePlusPlugIn.java
index 124579b4c5cc2d67d8886e93f4631564c05d62f5..3297fbced20d150e38a3fddf7382e4c931dde114 100644
--- a/src/main/java/bdv/ij/ExportImagePlusPlugIn.java
+++ b/src/main/java/bdv/ij/ExportImagePlusPlugIn.java
@@ -14,6 +14,9 @@ import net.imglib2.FinalDimensions;
 import net.imglib2.RandomAccessibleInterval;
 import net.imglib2.realtransform.AffineTransform3D;
 
+import org.scijava.command.Command;
+import org.scijava.plugin.Plugin;
+
 import bdv.export.ExportMipmapInfo;
 import bdv.export.ProgressWriter;
 import bdv.export.ProposeMipmaps;
@@ -37,7 +40,6 @@ import ij.ImagePlus;
 import ij.WindowManager;
 import ij.gui.DialogListener;
 import ij.gui.GenericDialog;
-import ij.plugin.PlugIn;
 import mpicbg.spim.data.generic.sequence.BasicViewSetup;
 import mpicbg.spim.data.registration.ViewRegistration;
 import mpicbg.spim.data.registration.ViewRegistrations;
@@ -51,17 +53,19 @@ import mpicbg.spim.data.sequence.TimePoints;
  *
  * @author Tobias Pietzsch &lt;tobias.pietzsch@gmail.com&gt;
  */
-public class ExportImagePlusPlugIn implements PlugIn
+@Plugin(type = Command.class,
+	menuPath = "Plugins>BigDataViewer>Export Current Image as XML/HDF5")
+public class ExportImagePlusPlugIn implements Command
 {
 	public static void main( final String[] args )
 	{
 		new ImageJ();
 		IJ.run("Confocal Series (2.2MB)");
-		new ExportImagePlusPlugIn().run( null );
+		new ExportImagePlusPlugIn().run();
 	}
 
 	@Override
-	public void run( final String arg )
+	public void run()
 	{
 		// get the current image
 		final ImagePlus imp = WindowManager.getCurrentImage();
diff --git a/src/main/java/bdv/ij/ExportSpimFusionPlugIn.java b/src/main/java/bdv/ij/ExportSpimFusionPlugIn.java
index e313cde1a4dd2c31530ccb29214aba8e235f28ad..6f37e879e2eea2446b80b1729e0063dba35d5246 100644
--- a/src/main/java/bdv/ij/ExportSpimFusionPlugIn.java
+++ b/src/main/java/bdv/ij/ExportSpimFusionPlugIn.java
@@ -23,6 +23,9 @@ import net.imglib2.realtransform.AffineTransform3D;
 import net.imglib2.util.Pair;
 import net.imglib2.util.ValuePair;
 
+import org.scijava.command.Command;
+import org.scijava.plugin.Plugin;
+
 import bdv.export.ExportMipmapInfo;
 import bdv.export.ProgressWriter;
 import bdv.export.ProposeMipmaps;
@@ -47,7 +50,6 @@ import ij.IJ;
 import ij.ImagePlus;
 import ij.gui.DialogListener;
 import ij.gui.GenericDialog;
-import ij.plugin.PlugIn;
 import mpicbg.spim.data.SpimDataException;
 import mpicbg.spim.data.generic.sequence.BasicImgLoader;
 import mpicbg.spim.data.generic.sequence.BasicSetupImgLoader;
@@ -66,7 +68,9 @@ import mpicbg.spim.io.SPIMConfiguration;
 import mpicbg.spim.io.TextFileAccess;
 import spimopener.SPIMExperiment;
 
-public class ExportSpimFusionPlugIn implements PlugIn
+@Plugin(type = Command.class,
+	menuPath = "Plugins>BigDataViewer>Export Fused Sequence as XML/HDF5")
+public class ExportSpimFusionPlugIn implements Command
 {
 	static double minValueStatic = 0;
 
@@ -91,7 +95,7 @@ public class ExportSpimFusionPlugIn implements PlugIn
 	static String autoChunkSizes = "{16,16,16}";
 
 	@Override
-	public void run( final String arg0 )
+	public void run()
 	{
 		final Parameters params = getParameters();
 
@@ -1057,6 +1061,6 @@ public class ExportSpimFusionPlugIn implements PlugIn
 
 	public static void main(final String[] args)
 	{
-		new ExportSpimFusionPlugIn().run( null );
+		new ExportSpimFusionPlugIn().run();
 	}
 }
diff --git a/src/main/java/bdv/ij/ExportSpimSequencePlugIn.java b/src/main/java/bdv/ij/ExportSpimSequencePlugIn.java
index 39b70b0bbcee418e1a144f448f142c7dce507ffb..b3808eaf2bdd816ff9f65d2e142aab419260323c 100644
--- a/src/main/java/bdv/ij/ExportSpimSequencePlugIn.java
+++ b/src/main/java/bdv/ij/ExportSpimSequencePlugIn.java
@@ -15,6 +15,9 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
+import org.scijava.command.Command;
+import org.scijava.plugin.Plugin;
+
 import bdv.export.ExportMipmapInfo;
 import bdv.export.ProgressWriter;
 import bdv.export.ProposeMipmaps;
@@ -34,7 +37,6 @@ import fiji.util.gui.GenericDialogPlus;
 import ij.IJ;
 import ij.gui.DialogListener;
 import ij.gui.GenericDialog;
-import ij.plugin.PlugIn;
 import mpicbg.spim.data.generic.sequence.BasicViewSetup;
 import mpicbg.spim.data.sequence.TimePoint;
 import mpicbg.spim.io.ConfigurationParserException;
@@ -43,10 +45,12 @@ import mpicbg.spim.io.SPIMConfiguration;
 import mpicbg.spim.io.TextFileAccess;
 import spimopener.SPIMExperiment;
 
-public class ExportSpimSequencePlugIn implements PlugIn
+@Plugin(type = Command.class,
+	menuPath = "Plugins>BigDataViewer>Export Spim Sequence as XML/HDF5")
+public class ExportSpimSequencePlugIn implements Command
 {
 	@Override
-	public void run( final String arg0 )
+	public void run()
 	{
 		final Parameters params = getParameters();
 
@@ -713,6 +717,6 @@ public class ExportSpimSequencePlugIn implements PlugIn
 		Bead_Registration.fileNamePattern = "spim_TL{tt}_Angle{a}.tif";
 		Bead_Registration.timepoints = "0";
 		Bead_Registration.angles = "0";
-		new ExportSpimSequencePlugIn().run( null );
+		new ExportSpimSequencePlugIn().run();
 	}
 }
diff --git a/src/main/java/bdv/ij/ImportPlugIn.java b/src/main/java/bdv/ij/ImportPlugIn.java
index d3338964760ae8c27c5860438a85466e593d7d5f..2dbe3e32da728f65389782b4191bb1beeea636e2 100644
--- a/src/main/java/bdv/ij/ImportPlugIn.java
+++ b/src/main/java/bdv/ij/ImportPlugIn.java
@@ -13,6 +13,9 @@ import java.util.List;
 import net.imglib2.RandomAccessibleInterval;
 import net.imglib2.type.numeric.NumericType;
 
+import org.scijava.command.Command;
+import org.scijava.plugin.Plugin;
+
 import bdv.ViewerImgLoader;
 import bdv.spimdata.SequenceDescriptionMinimal;
 import bdv.spimdata.SpimDataMinimal;
@@ -24,7 +27,6 @@ import ij.ImagePlus;
 import ij.gui.DialogListener;
 import ij.gui.GenericDialog;
 import ij.measure.Calibration;
-import ij.plugin.PlugIn;
 import mpicbg.spim.data.SpimDataException;
 import mpicbg.spim.data.generic.sequence.BasicImgLoader;
 import mpicbg.spim.data.generic.sequence.BasicMultiResolutionImgLoader;
@@ -38,7 +40,8 @@ import mpicbg.spim.data.sequence.VoxelDimensions;
  *
  * @author Tobias Pietzsch &lt;tobias.pietzsch@gmail.com&gt;
  */
-public class ImportPlugIn implements PlugIn
+@Plugin(type = Command.class, menuPath = "File>Import>BigDataViewer...")
+public class ImportPlugIn implements Command
 {
 	public static String xmlFile = "";
 	public static int timepoint = 0;
@@ -59,7 +62,7 @@ public class ImportPlugIn implements PlugIn
 	}
 
 	@Override
-	public void run( final String arg0 )
+	public void run()
 	{
 		final GenericDialogPlus gd = new GenericDialogPlus( "Import from BigDataViewer file" );
 		gd.addFileField( "xml file", xmlFile );
@@ -219,6 +222,6 @@ public class ImportPlugIn implements PlugIn
 	public static void main( final String[] args )
 	{
 		new ImageJ();
-		new ImportPlugIn().run( null );
+		new ImportPlugIn().run();
 	}
 }
diff --git a/src/main/java/bdv/ij/OpenImagePlusPlugIn.java b/src/main/java/bdv/ij/OpenImagePlusPlugIn.java
index 402b6dc152dedc039620e007e8e987ed5724666e..ba265551a302ee4c2032c71bd64fecba4abdacb0 100644
--- a/src/main/java/bdv/ij/OpenImagePlusPlugIn.java
+++ b/src/main/java/bdv/ij/OpenImagePlusPlugIn.java
@@ -8,6 +8,9 @@ import net.imglib2.FinalDimensions;
 import net.imglib2.realtransform.AffineTransform3D;
 import net.imglib2.type.numeric.ARGBType;
 
+import org.scijava.command.Command;
+import org.scijava.plugin.Plugin;
+
 import bdv.BigDataViewer;
 import bdv.ij.util.ProgressWriterIJ;
 import bdv.img.imagestack.ImageStackImageLoader;
@@ -25,7 +28,6 @@ import ij.IJ;
 import ij.ImageJ;
 import ij.ImagePlus;
 import ij.WindowManager;
-import ij.plugin.PlugIn;
 import ij.process.LUT;
 import mpicbg.spim.data.generic.sequence.BasicImgLoader;
 import mpicbg.spim.data.generic.sequence.BasicViewSetup;
@@ -41,7 +43,9 @@ import mpicbg.spim.data.sequence.TimePoints;
  *
  * @author Tobias Pietzsch &lt;tobias.pietzsch@gmail.com&gt;
  */
-public class OpenImagePlusPlugIn implements PlugIn
+@Plugin(type = Command.class,
+	menuPath = "Plugins>BigDataViewer>Open Current Image")
+public class OpenImagePlusPlugIn implements Command
 {
 	public static void main( final String[] args )
 	{
@@ -49,11 +53,11 @@ public class OpenImagePlusPlugIn implements PlugIn
 		new ImageJ();
 		IJ.run("Confocal Series (2.2MB)");
 //		IJ.run("Fly Brain (1MB)");
-		new OpenImagePlusPlugIn().run( null );
+		new OpenImagePlusPlugIn().run();
 	}
 
 	@Override
-	public void run( final String arg )
+	public void run()
 	{
 		// get the current image
 		final ImagePlus imp = WindowManager.getCurrentImage();
diff --git a/src/main/java/bdv/ij/OpenImarisPlugIn.java b/src/main/java/bdv/ij/OpenImarisPlugIn.java
index 0e1d4507df30030e16f499cf170d02c27866eb2e..9db0ce1137e3a04061e11efdfe988c6a6080cde3 100644
--- a/src/main/java/bdv/ij/OpenImarisPlugIn.java
+++ b/src/main/java/bdv/ij/OpenImarisPlugIn.java
@@ -10,6 +10,9 @@ import java.util.concurrent.atomic.AtomicBoolean;
 import javax.swing.JFileChooser;
 import javax.swing.filechooser.FileFilter;
 
+import org.scijava.command.Command;
+import org.scijava.plugin.Plugin;
+
 import bdv.BigDataViewer;
 import bdv.ij.util.ProgressWriterIJ;
 import bdv.img.imaris.Imaris;
@@ -17,19 +20,20 @@ import bdv.spimdata.SpimDataMinimal;
 import bdv.viewer.ViewerOptions;
 import ij.ImageJ;
 import ij.Prefs;
-import ij.plugin.PlugIn;
 
-public class OpenImarisPlugIn implements PlugIn
+@Plugin(type = Command.class,
+	menuPath = "Plugins>BigDataViewer>Open Imaris (experimental)")
+public class OpenImarisPlugIn implements Command
 {
 	static String lastDatasetPath = "";
 
 	public static void main( final String[] args )
 	{
 		ImageJ.main( args );
-		new OpenImarisPlugIn().run( null );
+		new OpenImarisPlugIn().run();
 	}
 	@Override
-	public void run( final String arg )
+	public void run()
 	{
 		File file = null;
 
diff --git a/src/main/resources/plugins.config b/src/main/resources/plugins.config
deleted file mode 100644
index 2807a76d99315e407e329b6bcbe85023e5a61044..0000000000000000000000000000000000000000
--- a/src/main/resources/plugins.config
+++ /dev/null
@@ -1,20 +0,0 @@
-# Name: BigDataViewer
-# Author: Tobias Pietzsch
-# Version: 1.0.0
-
-# A single .jar file can contain multiple plugins, specified in separate lines.
-#
-# The format is: <menu>, "<menu label>", <class name>
-#
-# If something like ("<arg>") is appended to the class name, the setup() method
-# will get that as arg parameter; otherwise arg is simply the empty string.
-
-Plugins>BigDataViewer, "Open XML/HDF5", bdv.ij.BigDataViewerPlugIn
-Plugins>BigDataViewer, "Open Current Image", bdv.ij.OpenImagePlusPlugIn
-Plugins>BigDataViewer, "Browse BigDataServer", bdv.ij.BigDataBrowserPlugIn
-Plugins>BigDataViewer, "Export Current Image as XML/HDF5", bdv.ij.ExportImagePlusPlugIn
-Plugins>BigDataViewer, "Export Spim Sequence as XML/HDF5", bdv.ij.ExportSpimSequencePlugIn
-Plugins>BigDataViewer, "Export Fused Sequence as XML/HDF5", bdv.ij.ExportSpimFusionPlugIn
-Plugins>BigDataViewer, "Export CellVoyager dataset as XML/HDF5", bdv.ij.ExportCellVoyagerPlugIn
-Plugins>BigDataViewer, "Open Imaris (experimental)", bdv.ij.OpenImarisPlugIn
-File>Import, "BigDataViewer...", bdv.ij.ImportPlugIn
\ No newline at end of file