diff --git a/src/main/java/bdv/server/ManagerHandler.java b/src/main/java/bdv/server/ManagerHandler.java
new file mode 100644
index 0000000000000000000000000000000000000000..0039019bf48ba6edf263f80e4e61690affa37582
--- /dev/null
+++ b/src/main/java/bdv/server/ManagerHandler.java
@@ -0,0 +1,145 @@
+package bdv.server;
+
+import mpicbg.spim.data.SpimDataException;
+import org.eclipse.jetty.server.Handler;
+import org.eclipse.jetty.server.Request;
+import org.eclipse.jetty.server.Server;
+import org.eclipse.jetty.server.handler.ContextHandler;
+import org.eclipse.jetty.server.handler.HandlerCollection;
+import org.eclipse.jetty.util.log.Log;
+
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.io.PrintWriter;
+
+public class ManagerHandler extends ContextHandler
+{
+	private static final org.eclipse.jetty.util.log.Logger LOG = Log.getLogger( ManagerHandler.class );
+	private final String baseURL;
+	private final Server server;
+	private final HandlerCollection handlers;
+
+	public ManagerHandler( String baseURL, Server server, HandlerCollection handlers )
+	{
+		this.baseURL = baseURL;
+		this.server = server;
+		this.handlers = handlers;
+		setContextPath( "/manager" );
+	}
+
+	@Override
+	public void doHandle( final String target, final Request baseRequest, final HttpServletRequest request, final HttpServletResponse response ) throws IOException, ServletException
+	{
+		final String op = request.getParameter( "op" );
+
+		if ( op == null )
+		{
+			list( baseRequest, response );
+		}
+		else if ( op.equals( "deploy" ) )
+		{
+			String ds = request.getParameter( "ds" );
+			String file = request.getParameter( "file" );
+			deploy( ds, file, baseRequest, response );
+		}
+		else if ( op.equals( "undeploy" ) )
+		{
+			String ds = request.getParameter( "ds" );
+			undeploy( ds, baseRequest, response );
+		}
+		else
+		{
+			return;
+		}
+
+	}
+
+	private void list( final Request baseRequest, final HttpServletResponse response ) throws IOException
+	{
+		response.setContentType( "text/html" );
+		response.setStatus( HttpServletResponse.SC_OK );
+		baseRequest.setHandled( true );
+
+		final PrintWriter ow = response.getWriter();
+
+		for ( Handler handler : server.getChildHandlersByClass( CellHandler.class ) )
+		{
+			CellHandler contextHandler = null;
+			if ( handler instanceof CellHandler )
+			{
+				contextHandler = ( CellHandler ) handler;
+				ow.write( contextHandler.getContextPath() );
+			}
+		}
+
+		ow.close();
+	}
+
+	private void deploy( final String datasetName, final String fileLocation, final Request baseRequest, final HttpServletResponse response ) throws IOException
+	{
+		LOG.info( "Add new context: " + datasetName );
+		CellHandler ctx = null;
+		try
+		{
+			ctx = new CellHandler( baseURL + datasetName + "/", fileLocation );
+		}
+		catch ( SpimDataException e )
+		{
+			LOG.warn( "Failed to create a CellHandler", e );
+			e.printStackTrace();
+		}
+		ctx.setContextPath( "/" + datasetName );
+		handlers.addHandler( ctx );
+
+		response.setContentType( "text/html" );
+		response.setStatus( HttpServletResponse.SC_OK );
+		baseRequest.setHandled( true );
+
+		final PrintWriter ow = response.getWriter();
+		ow.write( datasetName + " registered." );
+		ow.close();
+	}
+
+	private void undeploy( final String datasetName, final Request baseRequest, final HttpServletResponse response ) throws IOException
+	{
+		LOG.info( "Remove the context: " + datasetName );
+		boolean ret = false;
+
+		for ( Handler handler : server.getChildHandlersByClass( CellHandler.class ) )
+		{
+			CellHandler contextHandler = null;
+			if ( handler instanceof CellHandler )
+			{
+				contextHandler = ( CellHandler ) handler;
+				if ( datasetName.equals( contextHandler.getContextPath() ) )
+				{
+					try
+					{
+						contextHandler.stop();
+					}
+					catch ( Exception e )
+					{
+						e.printStackTrace();
+					}
+					contextHandler.destroy();
+					handlers.removeHandler( contextHandler );
+					ret = true;
+					break;
+				}
+			}
+		}
+
+		if ( ret )
+		{
+			response.setContentType( "text/html" );
+			response.setStatus( HttpServletResponse.SC_OK );
+			baseRequest.setHandled( true );
+
+			final PrintWriter ow = response.getWriter();
+			ow.write( datasetName + " removed." );
+			ow.close();
+		}
+	}
+}
\ No newline at end of file