diff --git a/src/de/brickedleveleditor/game/levels/LevelPackWriter.java b/src/de/brickedleveleditor/game/levels/LevelPackWriter.java
index c242fcb78108e52798568fc509c67d9bdbd73e16..f07befe5451bfdf6796bff5c3f6bc0a2a0e95c7a 100644
--- a/src/de/brickedleveleditor/game/levels/LevelPackWriter.java
+++ b/src/de/brickedleveleditor/game/levels/LevelPackWriter.java
@@ -49,4 +49,9 @@ public class LevelPackWriter
         Level level = new Level(levelname, author, position, difficulty, startLives, paddleSize, getBoard(bricks));
         levels.add(level);
     }
+
+    public ArrayList<Level> getLevels()
+    {
+        return levels;
+    }
 }
diff --git a/src/de/brickedleveleditor/main/Main.java b/src/de/brickedleveleditor/main/Main.java
index 9eb6bc50cb093993b38fdc548d6785edda84b0f6..a946ae6057bb2913258df1f796e5cd03f274cf0f 100644
--- a/src/de/brickedleveleditor/main/Main.java
+++ b/src/de/brickedleveleditor/main/Main.java
@@ -4,7 +4,7 @@ import java.util.Arrays;
 import java.util.Locale;
 import java.util.ResourceBundle;
 
-import de.brickedleveleditor.ui.Controller;
+import de.brickedleveleditor.ui.controller.MainController;
 import javafx.application.Application;
 import javafx.event.EventHandler;
 import javafx.fxml.FXMLLoader;
@@ -25,13 +25,10 @@ public class Main extends Application
 	{
 		try
 		{
-			FXMLLoader loader = new FXMLLoader(getClass().getClassLoader().getResource("de/brickedleveleditor/ui/GUI.fxml"));
+			FXMLLoader loader = new FXMLLoader(getClass().getClassLoader().getResource("de/brickedleveleditor/ui/fxml/main_controller.fxml"));
 			Parent root = (Parent)loader.load();
 
-			Scene scene = new Scene(root, 800, 600);		
-
-			((Controller)loader.getController()).init(stage);
-
+			Scene scene = new Scene(root, 800, 600);
 			stage.setTitle(bundle.getString("app.name"));
 			stage.setScene(scene);
 			stage.setResizable(true);
@@ -44,8 +41,8 @@ public class Main extends Application
 					System.exit(0);
 				}
 			});
-
 			stage.show();
+            ((MainController)loader.getController()).init(stage, null);
 		}
 		catch(Exception e)
 		{
diff --git a/src/de/brickedleveleditor/main/_de.properties b/src/de/brickedleveleditor/main/_de.properties
index 5882f88395a5a5ffed32a3892767ab419021dc0b..824b21f68a9542a7ae02bb7b5efaf3b477de70bb 100644
--- a/src/de/brickedleveleditor/main/_de.properties
+++ b/src/de/brickedleveleditor/main/_de.properties
@@ -2,4 +2,6 @@ app.name=Bricked LevelEditor
 version.code=0
 version.name=0.0.0
 version.date=19.10.16
-author=Max Wittig, Robert Goldmann
\ No newline at end of file
+author=Max Wittig, Robert Goldmann
+
+level.saver=Save Level
diff --git a/src/de/brickedleveleditor/ui/controller/AbstractController.java b/src/de/brickedleveleditor/ui/controller/AbstractController.java
new file mode 100644
index 0000000000000000000000000000000000000000..2fa8ad793684d0dd86d6839de66aa35d8efc0f45
--- /dev/null
+++ b/src/de/brickedleveleditor/ui/controller/AbstractController.java
@@ -0,0 +1,20 @@
+package de.brickedleveleditor.ui.controller;
+
+import javafx.stage.Stage;
+
+
+public abstract class AbstractController
+{
+    protected AbstractController parentController;
+    protected Stage stage;
+
+    public void init(Stage stage, AbstractController parentController)
+    {
+        this.parentController = parentController;
+        this.stage = stage;
+        initController();
+    }
+
+    protected abstract void initController();
+
+}
diff --git a/src/de/brickedleveleditor/ui/controller/LevelPackDialogController.java b/src/de/brickedleveleditor/ui/controller/LevelPackDialogController.java
new file mode 100644
index 0000000000000000000000000000000000000000..1ced35cffb950eb9589fcf44daa66cc9e4a31783
--- /dev/null
+++ b/src/de/brickedleveleditor/ui/controller/LevelPackDialogController.java
@@ -0,0 +1,58 @@
+package de.brickedleveleditor.ui.controller;
+
+
+import de.bricked.game.paddle.PaddleSize;
+import de.brickedleveleditor.utils.AlertGenerator;
+import javafx.fxml.FXML;
+import javafx.scene.control.Alert;
+import javafx.scene.control.ComboBox;
+import javafx.scene.control.Spinner;
+import javafx.scene.control.TextField;
+
+public class LevelPackDialogController extends AbstractController
+{
+    @FXML private Spinner difficultySpinner;
+    @FXML private ComboBox paddleSizeComboBox;
+    @FXML private Spinner startLivesSpinner;
+    @FXML private TextField authorTextField;
+    @FXML private TextField levelNameTextField;
+
+    @Override
+    protected void initController()
+    {
+        initPaddleSizeComboBox();
+    }
+
+    private void initPaddleSizeComboBox()
+    {
+        paddleSizeComboBox.getItems().addAll(PaddleSize.values());
+        paddleSizeComboBox.getSelectionModel().selectFirst();
+    }
+
+    @FXML
+    private void onSaveButtonClicked()
+    {
+        String levelName = levelNameTextField.getText();
+        String author = authorTextField.getText();
+        if(levelName.equals("") || author.equals(""))
+        {
+            AlertGenerator.showAlert(Alert.AlertType.WARNING, "Levelname or Author missing!", null);
+        }
+        else
+        {
+            int position = ((MainController) parentController).getLevelPackWriter().getLevels().size();
+            int difficulty = (int) difficultySpinner.getValue();
+            int startLives = (int) startLivesSpinner.getValue();
+            PaddleSize initPadSize = (PaddleSize) paddleSizeComboBox.getSelectionModel().getSelectedItem();
+            ((MainController) parentController).getLevelPackWriter().addLevel(levelName, author, position, difficulty, startLives, initPadSize, ((MainController) parentController).getBrickArrayList());
+            stage.close();
+        }
+    }
+
+    @FXML
+    private void onBackButtonClicked()
+    {
+        stage.close();
+    }
+
+}
diff --git a/src/de/brickedleveleditor/ui/Controller.java b/src/de/brickedleveleditor/ui/controller/MainController.java
similarity index 83%
rename from src/de/brickedleveleditor/ui/Controller.java
rename to src/de/brickedleveleditor/ui/controller/MainController.java
index 0fd204c7412333e650a839331c5ae2c16e1b3a25..84ea30ceef0eff97235f3275c04b306d0116cff0 100644
--- a/src/de/brickedleveleditor/ui/Controller.java
+++ b/src/de/brickedleveleditor/ui/controller/MainController.java
@@ -1,38 +1,24 @@
-package de.brickedleveleditor.ui;
-
-import java.io.File;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Locale;
-import java.util.ResourceBundle;
+package de.brickedleveleditor.ui.controller;
 
 import de.bricked.game.bricks.Brick;
 import de.bricked.game.bricks.BrickType;
-import de.bricked.game.paddle.PaddleSize;
 import de.bricked.game.powerups.PowerUpType;
 import de.brickedleveleditor.game.levels.LevelPackWriter;
-import javafx.event.ActionEvent;
+import de.brickedleveleditor.ui.BrickLabel;
 import javafx.event.EventHandler;
 import javafx.fxml.FXML;
+import javafx.fxml.FXMLLoader;
 import javafx.geometry.Insets;
 import javafx.geometry.Pos;
+import javafx.scene.Parent;
+import javafx.scene.Scene;
 import javafx.scene.control.Alert;
 import javafx.scene.control.Alert.AlertType;
 import javafx.scene.control.Label;
 import javafx.scene.control.MenuItem;
 import javafx.scene.image.Image;
 import javafx.scene.input.MouseEvent;
-import javafx.scene.layout.AnchorPane;
-import javafx.scene.layout.Background;
-import javafx.scene.layout.BackgroundImage;
-import javafx.scene.layout.BackgroundPosition;
-import javafx.scene.layout.BackgroundRepeat;
-import javafx.scene.layout.BackgroundSize;
-import javafx.scene.layout.ColumnConstraints;
-import javafx.scene.layout.GridPane;
-import javafx.scene.layout.HBox;
-import javafx.scene.layout.RowConstraints;
-import javafx.scene.layout.VBox;
+import javafx.scene.layout.*;
 import javafx.scene.paint.Paint;
 import javafx.stage.Stage;
 import javafx.stage.WindowEvent;
@@ -40,7 +26,13 @@ import logger.LogLevel;
 import logger.Logger;
 import tools.Worker;
 
-public class Controller
+import java.io.File;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Locale;
+import java.util.ResourceBundle;
+
+public class MainController extends AbstractController
 {
     @FXML
     private AnchorPane anchorPane;
@@ -48,25 +40,24 @@ public class Controller
     private VBox sidebarVBox;
     @FXML
     private GridPane gridPane;
-    @FXML private MenuItem saveMenuItem;
+    @FXML
+    private MenuItem saveMenuItem;
     private BrickType[] brickTypes = BrickType.values();
     private Image currentlySelectedBrickImage;
     private Image currentlySelectedPowerupImage;
     private final int WIDTH = 18;
     private final int HEIGHT = 18;
-
-    public Stage stage;
     public final ResourceBundle bundle = ResourceBundle.getBundle("de/brickedleveleditor/main/", Locale.GERMANY);
     private HashMap<BrickType, Image> bricksTextures;
     private ArrayList<Image> powerupTextures;
     private LevelPackWriter levelPackWriter;
 
-    public void init(Stage stage)
+    @Override
+    protected void initController()
     {
         powerupTextures = new ArrayList<>();
         levelPackWriter = new LevelPackWriter();
         gridPane.setMaxSize(50, 50);
-        this.stage = stage;
         bricksTextures = new HashMap<>();
         loadPowerupTextures();
         addPowerupsToVBox();
@@ -83,21 +74,30 @@ public class Controller
                 System.exit(0);
             }
         });
+    }
 
-        saveMenuItem.setOnAction(new EventHandler<ActionEvent>()
+    @FXML
+    private void onSaveMenuItemClicked()
+    {
+        try
         {
-            @Override
-            public void handle(ActionEvent event)
-            {
-                String levelName = "";
-                String author = "";
-                int position = 0;
-                int difficulty = 1;
-                int startLives = 1;
-                PaddleSize initPadSize = PaddleSize.EXTRA_LARGE;
-                levelPackWriter.addLevel(levelName, author, position, difficulty, startLives, initPadSize, getBrickArrayList());
-            }
-        });
+            FXMLLoader loader = new FXMLLoader(getClass().getClassLoader().getResource("de/brickedleveleditor/ui/fxml/level_pack_dialog_controller.fxml"));
+            Parent root = (Parent) loader.load();
+
+            Scene scene = new Scene(root);
+
+            Stage dialogControllerStage = new Stage();
+
+            dialogControllerStage.setTitle(bundle.getString("level.saver"));
+            dialogControllerStage.setScene(scene);
+            dialogControllerStage.setResizable(true);
+            dialogControllerStage.show();
+            ((LevelPackDialogController) loader.getController()).init(dialogControllerStage,this);
+        }
+        catch (Exception e)
+        {
+            Logger.log(LogLevel.ERROR, Logger.exceptionToString(e));
+        }
     }
 
     private void loadPowerupTextures()
@@ -106,7 +106,7 @@ public class Controller
         String rootPath = "de/bricked/resources/textures/powerups/";
         //powerup[0] means no powerup --> set to null
         powerupTextures.add(null);
-        for (int i=1; i < PowerUpType.types.length; i++)
+        for (int i = 1; i < PowerUpType.types.length; i++)
         {
             File powerupPath = new File(rootPath + PowerUpType.types[i].getID() + fileExt);
             try
@@ -155,11 +155,11 @@ public class Controller
     {
         ArrayList<Brick> bricks = new ArrayList<>();
         Object[] gridPaneChildren = gridPane.getChildren().toArray();
-        for(int i = 0; i < gridPaneChildren.length; i++)
+        for (int i = 0; i < gridPaneChildren.length; i++)
         {
-            if(gridPaneChildren[i] instanceof BrickLabel)
+            if (gridPaneChildren[i] instanceof BrickLabel)
             {
-                BrickLabel currentLabel = (BrickLabel)gridPaneChildren[i];
+                BrickLabel currentLabel = (BrickLabel) gridPaneChildren[i];
                 Brick brick = new Brick(currentLabel.getBrickType(),
                         PowerUpType.getInstance(currentLabel.getPowerUpType()));
                 bricks.add(brick);
@@ -190,7 +190,7 @@ public class Controller
 
     private void addPowerupsToVBox()
     {
-        for(int i=1; i < powerupTextures.size(); i++)
+        for (int i = 1; i < powerupTextures.size(); i++)
         {
             Image powerupImage = powerupTextures.get(i);
             Label powerupLabel = new Label(PowerUpType.types[i].toString());
@@ -212,8 +212,8 @@ public class Controller
     private Background getBackGroundFromImage(Image image)
     {
         BackgroundImage backgroundImage = new BackgroundImage(image,
-                BackgroundRepeat.NO_REPEAT,BackgroundRepeat.NO_REPEAT,
-                BackgroundPosition.CENTER,BackgroundSize.DEFAULT);
+                BackgroundRepeat.NO_REPEAT, BackgroundRepeat.NO_REPEAT,
+                BackgroundPosition.CENTER, BackgroundSize.DEFAULT);
         Background background = new Background(backgroundImage);
         return background;
     }
@@ -271,6 +271,11 @@ public class Controller
         }
     }
 
+    public LevelPackWriter getLevelPackWriter()
+    {
+        return levelPackWriter;
+    }
+
     public void about()
     {
         Alert alert = new Alert(AlertType.INFORMATION);
diff --git a/src/de/brickedleveleditor/ui/fxml/level_pack_dialog_controller.fxml b/src/de/brickedleveleditor/ui/fxml/level_pack_dialog_controller.fxml
new file mode 100644
index 0000000000000000000000000000000000000000..785f7da21fc60e704b900acb7b67a652829d7374
--- /dev/null
+++ b/src/de/brickedleveleditor/ui/fxml/level_pack_dialog_controller.fxml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?import javafx.scene.control.Button?>
+<?import javafx.scene.control.ComboBox?>
+<?import javafx.scene.control.Label?>
+<?import javafx.scene.control.Spinner?>
+<?import javafx.scene.control.TextField?>
+<?import javafx.scene.layout.AnchorPane?>
+<?import javafx.scene.control.SpinnerValueFactory.IntegerSpinnerValueFactory?>
+
+<AnchorPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="317.0" prefWidth="397.0" xmlns="http://javafx.com/javafx/8.0.65" xmlns:fx="http://javafx.com/fxml/1" fx:controller="de.brickedleveleditor.ui.controller.LevelPackDialogController">
+   <children>
+      <Label layoutX="14.0" layoutY="22.0" prefHeight="16.0" prefWidth="112.0" text="Levelname:" AnchorPane.leftAnchor="14.0" />
+      <Label layoutX="14.0" layoutY="61.0" prefHeight="16.0" prefWidth="112.0" text="Author:" AnchorPane.leftAnchor="14.0" />
+      <TextField fx:id="authorTextField" layoutX="212.0" layoutY="56.0" AnchorPane.rightAnchor="14.0" />
+      <TextField fx:id="levelNameTextField" layoutX="212.0" layoutY="17.0" AnchorPane.rightAnchor="14.0" />
+      <Label layoutX="14.0" layoutY="99.0" prefHeight="16.0" prefWidth="112.0" text="Difficulty:" AnchorPane.leftAnchor="14.0" />
+      <Spinner fx:id="difficultySpinner" layoutX="212.0" layoutY="94.0" prefHeight="26.0" prefWidth="171.0" AnchorPane.rightAnchor="14.0">
+          <valueFactory>
+              <SpinnerValueFactory.IntegerSpinnerValueFactory min="1" max="10"/>
+          </valueFactory>
+      </Spinner>
+      <Label layoutX="14.0" layoutY="138.0" prefHeight="16.0" prefWidth="112.0" text="Start-Lives:" AnchorPane.leftAnchor="14.0" />
+      <Label layoutX="14.0" layoutY="174.0" prefHeight="16.0" prefWidth="112.0" text="Paddle-Size" AnchorPane.leftAnchor="14.0" />
+      <ComboBox fx:id="paddleSizeComboBox" layoutX="212.0" layoutY="169.0" prefHeight="26.0" prefWidth="171.0" AnchorPane.rightAnchor="14.0" />
+      <Button layoutX="126.0" layoutY="277.0" mnemonicParsing="false" onAction="#onSaveButtonClicked" text="Save" AnchorPane.bottomAnchor="14.0" />
+      <Button layoutX="212.0" layoutY="277.0" mnemonicParsing="false" onAction="#onBackButtonClicked" text="Back" AnchorPane.bottomAnchor="14.0" />
+      <Spinner fx:id="startLivesSpinner" layoutX="212.0" layoutY="133.0">
+          <valueFactory>
+              <SpinnerValueFactory.IntegerSpinnerValueFactory min="1" max="5"/>
+          </valueFactory>
+      </Spinner>
+   </children>
+</AnchorPane>
diff --git a/src/de/brickedleveleditor/ui/GUI.fxml b/src/de/brickedleveleditor/ui/fxml/main_controller.fxml
similarity index 91%
rename from src/de/brickedleveleditor/ui/GUI.fxml
rename to src/de/brickedleveleditor/ui/fxml/main_controller.fxml
index 23f129a13b8fad3dbf6a562d6aee370145a4e33a..7cb5639cd153f7b315a81d67be59f00f9d9e17c2 100644
--- a/src/de/brickedleveleditor/ui/GUI.fxml
+++ b/src/de/brickedleveleditor/ui/fxml/main_controller.fxml
@@ -9,17 +9,17 @@
 <?import javafx.scene.layout.RowConstraints?>
 <?import javafx.scene.layout.VBox?>
 
-<AnchorPane fx:id="anchorPane" prefHeight="600.0" prefWidth="800.0" xmlns="http://javafx.com/javafx/8.0.65" xmlns:fx="http://javafx.com/fxml/1" fx:controller="de.brickedleveleditor.ui.Controller">
+<AnchorPane fx:id="anchorPane" prefHeight="600.0" prefWidth="800.0" xmlns="http://javafx.com/javafx/8.0.65" xmlns:fx="http://javafx.com/fxml/1" fx:controller="de.brickedleveleditor.ui.controller.MainController">
    <children>
       <MenuBar layoutX="40.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
         <menus>
             <Menu mnemonicParsing="false" text="File">
               <items>
-                <MenuItem fx:id="saveMenuItem" mnemonicParsing="false" text="Save" />
+                <MenuItem fx:id="saveMenuItem" mnemonicParsing="false" onAction="#onSaveMenuItemClicked" text="Save" />
                   <MenuItem mnemonicParsing="false" text="Unspecified Action" />
               </items>
             </Menu>
-          <Menu mnemonicParsing="false" text="Hilfe">
+          <Menu mnemonicParsing="false" text="Help">
             <items>
               <MenuItem mnemonicParsing="false" onAction="#about" text="Über" />
             </items>
diff --git a/src/de/brickedleveleditor/utils/AlertGenerator.java b/src/de/brickedleveleditor/utils/AlertGenerator.java
new file mode 100644
index 0000000000000000000000000000000000000000..fa58b2a85386c8b292cec0e8e56bedb25fbdfaf0
--- /dev/null
+++ b/src/de/brickedleveleditor/utils/AlertGenerator.java
@@ -0,0 +1,37 @@
+package de.brickedleveleditor.utils;
+
+import javafx.scene.control.Alert;
+import javafx.scene.control.Alert.AlertType;
+import javafx.scene.image.Image;
+import javafx.stage.Stage;
+
+public class AlertGenerator
+{
+    public static void showAlert(AlertType type, String contentText, Image icon)
+    {
+        show(type, type.name(), "", contentText, icon, true);
+    }
+
+    public static void showAlert(AlertType type, String title, String headerText, String contentText, Image icon, boolean centerOnScreen)
+    {
+        show(type, title, headerText, contentText, icon, centerOnScreen);
+    }
+
+    private static void show(AlertType type, String title, String headerText, String contentText, Image icon, boolean centerOnScreen)
+    {
+        Alert alert = new Alert(type);
+        alert.setTitle(title);
+        alert.setHeaderText(headerText);
+        alert.setContentText(contentText);
+        Stage dialogStage = (Stage) alert.getDialogPane().getScene().getWindow();
+        if(icon != null)
+        {
+            dialogStage.getIcons().add(icon);
+        }
+        if (centerOnScreen)
+        {
+            dialogStage.centerOnScreen();
+        }
+        alert.showAndWait();
+    }
+}
\ No newline at end of file