diff --git a/project.bep b/project.bep
index d5c7fd8..1b38301 100644
--- a/project.bep
+++ b/project.bep
@@ -3,4 +3,6 @@
 $f845355e-b9ad-4884-a217-dd3a4c18a3fa(f845355e-b9ad-4884-a217-dd3a4c18a3fa.datForrest Temple"d
 $d314b030-f865-432e-a356-3845f8aac7bc(d314b030-f865-432e-a356-3845f8aac7bc.pngForrest Temple ](2Z
 $815a5c5c-4979-42f5-a42a-ccbbff9a97e5(815a5c5c-4979-42f5-a42a-ccbbff9a97e5.pngLuna (:`
-$2261c04f-b02e-4486-b388-8a0fa41622e9(2261c04f-b02e-4486-b388-8a0fa41622e9.ttfRoboto Regular
\ No newline at end of file
+$2261c04f-b02e-4486-b388-8a0fa41622e9(2261c04f-b02e-4486-b388-8a0fa41622e9.ttfRoboto RegularB\
+$ab9d40b4-eb28-45d7-bff2-9432a05eb41a(ab9d40b4-eb28-45d7-bff2-9432a05eb41a.xml
+Start Menu
\ No newline at end of file
diff --git a/src/main/java/com/bartlomiejpluta/demo/gui/Button.java b/src/main/java/com/bartlomiejpluta/demo/gui/Button.java
new file mode 100644
index 0000000..1d2bf31
--- /dev/null
+++ b/src/main/java/com/bartlomiejpluta/demo/gui/Button.java
@@ -0,0 +1,47 @@
+package com.bartlomiejpluta.demo.gui;
+
+import lombok.*;
+import com.bartlomiejpluta.base.api.context.Context;
+import com.bartlomiejpluta.base.api.screen.Screen;
+import com.bartlomiejpluta.base.api.input.*;
+import com.bartlomiejpluta.base.api.gui.*;
+import com.bartlomiejpluta.base.lib.gui.*;
+
+public class Button extends Label {
+	private Color color;
+
+	@Setter
+	private Runnable action;
+
+	public Button(Context context, GUI gui) {
+		super(context, gui);
+		this.color = gui.createColor();
+		this.color.setRGBA(1, 1, 1, 0);
+
+		setText("");
+		setFontSize(17f);
+		setAlignment(GUI.ALIGN_TOP | GUI.ALIGN_CENTER);
+		setColor(0.4f, 0.7f, 0.0f, 1f);
+		setPadding(10f);
+		addEventListener(KeyEvent.TYPE, this::handleKeyEvent);
+	}
+
+	private void handleKeyEvent(KeyEvent event) {
+		if(event.getKey() == Key.KEY_ENTER && event.getAction() == KeyAction.PRESS && action != null) {
+			event.consume();
+			action.run();
+		}
+	}
+
+	@Override
+	public void draw(Screen screen, GUI gui) {
+		color.setAlpha(focused ? 0.7f : 0f);
+
+		gui.beginPath();
+		gui.drawRectangle(x, y, getWidth(), getHeight());
+		gui.setFillColor(color);
+		gui.fill();
+
+		super.draw(screen, gui);
+	}
+}
\ No newline at end of file
diff --git a/src/main/java/com/bartlomiejpluta/demo/gui/DecoratedWindow.java b/src/main/java/com/bartlomiejpluta/demo/gui/DecoratedWindow.java
new file mode 100644
index 0000000..26680da
--- /dev/null
+++ b/src/main/java/com/bartlomiejpluta/demo/gui/DecoratedWindow.java
@@ -0,0 +1,35 @@
+package com.bartlomiejpluta.demo.gui;
+
+import com.bartlomiejpluta.base.api.context.Context;
+import com.bartlomiejpluta.base.api.screen.Screen;
+import com.bartlomiejpluta.base.api.gui.*;
+import com.bartlomiejpluta.base.lib.gui.*;
+
+public abstract class DecoratedWindow extends BaseWindow {
+	private Paint paint;
+	private Color inner;
+	private Color outer;
+
+	public DecoratedWindow(Context context, GUI gui) {
+		super(context, gui);
+
+		this.inner = gui.createColor();
+		this.outer = gui.createColor();
+		this.paint = gui.createPaint();
+
+		inner.setRGBA(0.1f, 0.1f, 0.1f, 1f);
+		outer.setRGBA(0.2f, 0.2f, 0.2f, 1f);
+	}
+
+	@Override
+	public void draw(Screen screen, GUI gui) {
+		gui.beginPath();
+		gui.drawRectangle(x, y, getWidth(), getHeight());
+		gui.setFillPaint(paint);
+		gui.boxGradient(x, y, getWidth(), getHeight(), 10f, 100f, inner, outer, paint);
+		gui.fill();
+		gui.stroke();
+
+		super.draw(screen, gui);
+	}
+}
\ No newline at end of file
diff --git a/src/main/java/com/bartlomiejpluta/demo/gui/StartMenuWindow.java b/src/main/java/com/bartlomiejpluta/demo/gui/StartMenuWindow.java
new file mode 100644
index 0000000..c3ab760
--- /dev/null
+++ b/src/main/java/com/bartlomiejpluta/demo/gui/StartMenuWindow.java
@@ -0,0 +1,27 @@
+package com.bartlomiejpluta.demo.gui;
+
+import lombok.*;
+import com.bartlomiejpluta.base.api.context.Context;
+import com.bartlomiejpluta.base.api.screen.Screen;
+import com.bartlomiejpluta.base.api.gui.*;
+import com.bartlomiejpluta.base.lib.gui.*;
+
+public class StartMenuWindow extends DecoratedWindow implements Inflatable {
+
+	@Ref("new_game")
+	@Getter
+	private Button newGameBtn;
+
+	@Ref("exit")
+	@Getter
+	private Button exitBtn;
+
+	public StartMenuWindow(Context context, GUI gui) {
+		super(context, gui);
+	}
+
+	@Override
+	public void onInflate() {
+		newGameBtn.focus();
+	}
+}
\ No newline at end of file
diff --git a/src/main/java/com/bartlomiejpluta/demo/menu/MenuManager.java b/src/main/java/com/bartlomiejpluta/demo/menu/MenuManager.java
new file mode 100644
index 0000000..54bffa2
--- /dev/null
+++ b/src/main/java/com/bartlomiejpluta/demo/menu/MenuManager.java
@@ -0,0 +1,42 @@
+package com.bartlomiejpluta.demo.menu;
+
+import lombok.*;
+
+import com.bartlomiejpluta.base.api.context.Context;
+import com.bartlomiejpluta.base.api.screen.Screen;
+import com.bartlomiejpluta.base.api.gui.*;
+import com.bartlomiejpluta.base.lib.gui.*;
+
+import com.bartlomiejpluta.demo.runner.DemoRunner;
+import com.bartlomiejpluta.demo.gui.*;
+
+public class MenuManager {
+	private final DemoRunner runner;
+	private final Context context;
+	private final GUI gui;
+	private final WindowManager manager;
+
+	private final StartMenuWindow startMenu;
+
+	public MenuManager(@NonNull DemoRunner runner, @NonNull Context context) {
+		this.runner = runner;
+		this.context = context;
+		this.gui = context.newGUI();
+		this.manager = new WindowManager(context, DisplayMode.DISPLAY_TOP, UpdateMode.UPDATE_TOP);
+
+		this.gui.setRoot(this.manager);
+
+		this.startMenu = (StartMenuWindow) gui.inflateWindow("ab9d40b4-eb28-45d7-bff2-9432a05eb41a");
+		this.startMenu.getNewGameBtn().setAction(runner::newGame);
+		this.startMenu.getExitBtn().setAction(runner::exit);
+	}
+
+	public void showStartMenu() {
+		manager.closeAll();
+		manager.open(startMenu);
+	}
+
+	public void closeAll() {
+		manager.closeAll();
+	}
+}
\ No newline at end of file
diff --git a/src/main/java/com/bartlomiejpluta/demo/runner/DemoRunner.java b/src/main/java/com/bartlomiejpluta/demo/runner/DemoRunner.java
index 90faf92..48a06a2 100644
--- a/src/main/java/com/bartlomiejpluta/demo/runner/DemoRunner.java
+++ b/src/main/java/com/bartlomiejpluta/demo/runner/DemoRunner.java
@@ -12,11 +12,13 @@ import com.bartlomiejpluta.base.api.runner.GameRunner;
 
 import com.bartlomiejpluta.demo.map.ForrestTempleHandler;
 import com.bartlomiejpluta.demo.entity.Player;
+import com.bartlomiejpluta.demo.menu.MenuManager;
 
 public class DemoRunner implements GameRunner {
    private static final Logger log = LoggerFactory.getLogger(DemoRunner.class);
    private Screen screen;
    private Context context;
+   private MenuManager menu;
 
    @Getter
    private Player player;
@@ -28,10 +30,11 @@ public class DemoRunner implements GameRunner {
 		
 		configureScreen();
 		configureCamera();
-   	initPlayer();
-   	resetPlayer();
-   	newGame();
-   	
+		initMenu();
+		initPlayer();
+
+		menu.showStartMenu();
+
 		screen.show();
    }
    
@@ -45,8 +48,12 @@ public class DemoRunner implements GameRunner {
    	context.getCamera().setScale(2f);
    }
    
+   private void initMenu() {
+		this.menu = new MenuManager(this, context);
+   }
+
    private void initPlayer() {
-   	this.player = new Player(context, context.createEntity("815a5c5c-4979-42f5-a42a-ccbbff9a97e5"));
+		this.player = new Player(context, context.createEntity("815a5c5c-4979-42f5-a42a-ccbbff9a97e5"));
    }
    
    private void resetPlayer() {
@@ -58,11 +65,16 @@ public class DemoRunner implements GameRunner {
 		this.player.setCoordinates(0, 11);
    }
    
-   private void newGame() {
-   	resetPlayer();
-   	context.openMap(ForrestTempleHandler.UID);
-   	context.getMap().getObjectLayer(ForrestTempleHandler.MAIN_LAYER).addEntity(this.player);
-   	context.resume();
+   public void newGame() {
+		menu.closeAll();
+		resetPlayer();
+		context.openMap(ForrestTempleHandler.UID);
+		context.getMap().getObjectLayer(ForrestTempleHandler.MAIN_LAYER).addEntity(this.player);
+		context.resume();
+   }
+
+   public void exit() {
+		context.close();
    }
 
    @Override
diff --git a/widgets/ab9d40b4-eb28-45d7-bff2-9432a05eb41a.xml b/widgets/ab9d40b4-eb28-45d7-bff2-9432a05eb41a.xml
new file mode 100644
index 0000000..ae2c9df
--- /dev/null
+++ b/widgets/ab9d40b4-eb28-45d7-bff2-9432a05eb41a.xml
@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<demo:StartMenuWindow
+	xmlns:base="com.bartlomiejpluta.base.lib.gui"
+	xmlns:demo="com.bartlomiejpluta.demo.gui"
+	windowPosition="WindowPosition.BOTTOM"
+	margin="10f"
+	padding="20f">
+
+	<base:VLayout
+		width="200f"
+		widthMode="SizeMode.ABSOLUTE">
+
+		<base:Label
+			font="&quot;2261c04f-b02e-4486-b388-8a0fa41622e9&quot;"
+			widthMode="SizeMode.RELATIVE"
+			width="1f"
+			alignment="GUI.ALIGN_TOP | GUI.ALIGN_CENTER"
+			red="1f"
+			green="1f"
+			blue="1f"
+			alpha="0.5f"
+			fontSize="30f">Menu</base:Label>
+
+		<base:VOptionChoice
+			widthMode="SizeMode.RELATIVE"
+			width="1f">
+
+				<demo:Button
+					ref="new_game"
+					font="&quot;2261c04f-b02e-4486-b388-8a0fa41622e9&quot;"
+					widthMode="SizeMode.RELATIVE"
+					width="1f"
+					red="1f"
+					green="1f"
+					blue="1f"
+					fontSize="17f">New Game</demo:Button>
+
+				<demo:Button
+					ref="exit"
+					font="&quot;2261c04f-b02e-4486-b388-8a0fa41622e9&quot;"
+					widthMode="SizeMode.RELATIVE"
+					width="1f"
+					red="1f"
+					green="1f"
+					blue="1f"
+					fontSize="17f">Exit</demo:Button>
+
+		</base:VOptionChoice>
+
+	</base:VLayout>
+
+</demo:StartMenuWindow>
\ No newline at end of file
