diff --git a/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/ui/FXFrame.java b/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/ui/FXFrame.java
index c0a723854fa2ecf1401ad2af2616849a8e5d5716..f3601be3950eeea7c3e7bd1d741b731bb988bd75 100644
--- a/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/ui/FXFrame.java
+++ b/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/ui/FXFrame.java
@@ -2,6 +2,7 @@ package cz.it4i.fiji.haas.ui;
 
 import java.awt.Dimension;
 import java.awt.Frame;
+import java.awt.Window;
 import java.io.IOException;
 import java.net.URL;
 import java.util.function.Consumer;
@@ -14,17 +15,23 @@ import javafx.fxml.FXMLLoader;
 import javafx.scene.Parent;
 import javafx.scene.Scene;
 
-public class FXFrame<C> extends JDialog {
+
+public class FXFrame<C extends FXFrame.Controller> extends JDialog {
+
+	public interface Controller {
+		void init(Window frame);
+	}
 
 	private static final long serialVersionUID = 1L;
 	private JFXPanel fxPanel;
 	private String fxmlFile;
 	private Consumer<C> controlerInit;
+	private C controller;
 
 	public FXFrame(String fxmlFile) {
 		this(null, fxmlFile);
 	}
-	
+
 	public FXFrame(Frame applicationFrame, String string) {
 		super(applicationFrame);
 		fxmlFile = string;
@@ -33,12 +40,12 @@ public class FXFrame<C> extends JDialog {
 	/**
 	 * Create the JFXPanel that make the link between Swing (IJ) and JavaFX plugin.
 	 */
-	protected void init( Consumer<C> controlerInit) {
+	protected void init(Consumer<C> controlerInit) {
 		this.controlerInit = controlerInit;
 		this.fxPanel = new JFXPanel();
 		Platform.setImplicitExit(false);
 		this.add(this.fxPanel);
-		
+
 		// The call to runLater() avoid a mix between JavaFX thread and Swing thread.
 		Platform.runLater(new Runnable() {
 			@Override
@@ -50,34 +57,38 @@ public class FXFrame<C> extends JDialog {
 
 	}
 
+	protected C getController() {
+		return controller;
+	}
+
 	private void initFX(JFXPanel fxPanel) {
 		// Init the root layout
-        try {
-            FXMLLoader loader = new FXMLLoader();
-            URL res = FXFrame.class.getResource(fxmlFile);
-            loader.setLocation(res);
-            Parent rootLayout = (Parent) loader.load();
-
-            // Get the controller and add an ImageJ context to it.
-            C controller = loader.<C>getController();
-            controlerInit.accept(controller);
-
-            // Show the scene containing the root layout.
-            Scene scene = new Scene(rootLayout);
-            this.fxPanel.setScene(scene);
-            this.fxPanel.setVisible(true);
-
-            // Resize the JFrame to the JavaFX scene
-            Dimension dim = new Dimension((int) scene.getWidth(), (int) scene.getHeight());
-            this.fxPanel.setMinimumSize(dim);
-            this.fxPanel.setMaximumSize(dim);
-            this.fxPanel.setPreferredSize(dim);
-            //this.setSize((int) scene.getWidth(), (int) scene.getHeight());
-            this.pack();
-
-        } catch (IOException e) {
-            e.printStackTrace();
-}
+		try {
+			FXMLLoader loader = new FXMLLoader();
+			URL res = FXFrame.class.getResource(fxmlFile);
+			loader.setLocation(res);
+			Parent rootLayout = (Parent) loader.load();
+
+			// Get the controller and add an ImageJ context to it.
+			controller = loader.<C>getController();
+			controlerInit.accept(controller);
+			controller.init(this);
+			// Show the scene containing the root layout.
+			Scene scene = new Scene(rootLayout);
+			this.fxPanel.setScene(scene);
+			this.fxPanel.setVisible(true);
+
+			// Resize the JFrame to the JavaFX scene
+			Dimension dim = new Dimension((int) scene.getWidth(), (int) scene.getHeight());
+			this.fxPanel.setMinimumSize(dim);
+			this.fxPanel.setMaximumSize(dim);
+			this.fxPanel.setPreferredSize(dim);
+			// this.setSize((int) scene.getWidth(), (int) scene.getHeight());
+			this.pack();
+
+		} catch (IOException e) {
+			e.printStackTrace();
+		}
 
 	}
 
diff --git a/haas-snakemake-spim/src/main/java/cz/it4i/fiji/haas_snakemake_spim/ui/CheckStatusOfHaaSController.java b/haas-snakemake-spim/src/main/java/cz/it4i/fiji/haas_snakemake_spim/ui/CheckStatusOfHaaSController.java
index 5c4b41ae491172b582b17208fbeb341349c833ed..4763b20336d312ac689c0b3bb8405f72dc1ed6b5 100644
--- a/haas-snakemake-spim/src/main/java/cz/it4i/fiji/haas_snakemake_spim/ui/CheckStatusOfHaaSController.java
+++ b/haas-snakemake-spim/src/main/java/cz/it4i/fiji/haas_snakemake_spim/ui/CheckStatusOfHaaSController.java
@@ -9,6 +9,7 @@ import org.scijava.log.LogService;
 import org.scijava.plugin.Parameter;
 
 import cz.it4i.fiji.haas.JobManager.JobInfo;
+import cz.it4i.fiji.haas.ui.FXFrame;
 import cz.it4i.fiji.haas.ui.ModalDialogs;
 import cz.it4i.fiji.haas.ui.ObservableValueAdapter;
 import cz.it4i.fiji.haas.ui.ProgressDialog;
@@ -22,7 +23,7 @@ import javafx.scene.control.TableColumn;
 import javafx.scene.control.TableView;
 import javafx.scene.input.ContextMenuEvent;
 
-public class CheckStatusOfHaaSController {
+public class CheckStatusOfHaaSController implements FXFrame.Controller{
 
 	@Parameter
 	private LogService logService;
diff --git a/haas-snakemake-spim/src/main/java/cz/it4i/fiji/haas_snakemake_spim/ui/CheckStatusOfHaaSWindow.java b/haas-snakemake-spim/src/main/java/cz/it4i/fiji/haas_snakemake_spim/ui/CheckStatusOfHaaSWindow.java
index 5c7b724732ddf8ffa12f7a8874f7c7938588dc0e..1e089cd54521f1b0f51aad666b8a5215164674ae 100644
--- a/haas-snakemake-spim/src/main/java/cz/it4i/fiji/haas_snakemake_spim/ui/CheckStatusOfHaaSWindow.java
+++ b/haas-snakemake-spim/src/main/java/cz/it4i/fiji/haas_snakemake_spim/ui/CheckStatusOfHaaSWindow.java
@@ -15,9 +15,7 @@ public class CheckStatusOfHaaSWindow extends FXFrame<CheckStatusOfHaaSController
 
 	@Parameter
 	private Context context;
-
-	private CheckStatusOfHaaSController controller;
-
+	
 	public CheckStatusOfHaaSWindow(Frame applicationFrame, Context context) {
 		super(applicationFrame, "/cz/it4i/fiji/haas_snakemake_spim/ui/CheckStatusOfHaaS.fxml");
 		this.context = context;
@@ -30,15 +28,13 @@ public class CheckStatusOfHaaSWindow extends FXFrame<CheckStatusOfHaaSController
 		Platform.runLater(new Runnable() {
 			@Override
 			public void run() {
-				controller.addJob(job);
+				getController().addJob(job);
 			}
 		});
 	}
 
 	private void initController(CheckStatusOfHaaSController controller) {
-		this.controller = controller;
 		context.inject(controller);
-		controller.init(this);
 	}
 
 }
diff --git a/haas-spim-benchmark/src/main/java/cz/it4i/fiji/haas_spim_benchmark/ui/BenchmarkSPIMController.java b/haas-spim-benchmark/src/main/java/cz/it4i/fiji/haas_spim_benchmark/ui/BenchmarkSPIMController.java
new file mode 100644
index 0000000000000000000000000000000000000000..8e8feade02c1274450e3cb2ac47e5d06d852db25
--- /dev/null
+++ b/haas-spim-benchmark/src/main/java/cz/it4i/fiji/haas_spim_benchmark/ui/BenchmarkSPIMController.java
@@ -0,0 +1,15 @@
+package cz.it4i.fiji.haas_spim_benchmark.ui;
+
+import java.awt.Window;
+
+import cz.it4i.fiji.haas.ui.FXFrame;
+
+public class BenchmarkSPIMController implements FXFrame.Controller{
+
+	@Override
+	public void init(Window frame) {
+		// TODO Auto-generated method stub
+		
+	}
+
+}
diff --git a/haas-spim-benchmark/src/main/java/cz/it4i/fiji/haas_spim_benchmark/ui/BenchmarkSPIMWindow.java b/haas-spim-benchmark/src/main/java/cz/it4i/fiji/haas_spim_benchmark/ui/BenchmarkSPIMWindow.java
new file mode 100644
index 0000000000000000000000000000000000000000..206e707499937f08a6cfba9bfa30f77c6657d0be
--- /dev/null
+++ b/haas-spim-benchmark/src/main/java/cz/it4i/fiji/haas_spim_benchmark/ui/BenchmarkSPIMWindow.java
@@ -0,0 +1,16 @@
+package cz.it4i.fiji.haas_spim_benchmark.ui;
+
+import java.awt.Frame;
+
+import cz.it4i.fiji.haas.ui.FXFrame;
+
+public class BenchmarkSPIMWindow extends FXFrame<BenchmarkSPIMController> {
+
+	private static final long serialVersionUID = 1L;
+
+	public BenchmarkSPIMWindow(Frame applicationFrame) {
+		super(applicationFrame, "/cz/it4i/fiji/haas_spim_benchmark/ui/BenchmarkSPIM.fxml");
+		init(x->{});
+	}
+
+}