diff --git a/src/main/java/Application/App.java b/src/main/java/Application/App.java
new file mode 100644
index 0000000..751218f
--- /dev/null
+++ b/src/main/java/Application/App.java
@@ -0,0 +1,144 @@
+package Application;
+
+import Game.Game;
+import Game.Tictactoe;
+
+import java.util.ArrayList;
+import java.util.Scanner;
+
+public class App {
+
+ private boolean isRunning = false;
+ private Cli cli;
+
+ private boolean inMenu = true;
+ private MenuManager menuManager;
+
+ private Game currentGame;
+
+ public App(Cli cli) {
+ this.cli = cli;
+ init();
+ }
+
+ private void init() {
+ menuManager = initMenuManager();
+
+ goToMenu();
+ }
+
+ public void start() {
+ isRunning = true;
+ while (isRunning) {
+ String input = cli.getScanner().nextLine();
+ if (input.equals("exit")) {
+ stop();
+ return;
+ } else {
+ if (inMenu) {
+ cli.clearConsole();
+ selectMenuItem(input);
+ } else {
+ if (input.equals("q")) {
+ goToMenu();
+ continue;
+ }
+ cli.clearConsole();
+ currentGame.update(input);
+ currentGame.print(cli);
+ }
+ }
+ }
+ }
+
+ public void stop() {
+ isRunning = false;
+ cli.getPrintStream().println("Stopping application...");
+ }
+
+ public boolean isRunning() {
+ return isRunning;
+ }
+
+ public Game getCurrentGame() {
+ return this.currentGame;
+ }
+
+ private MenuManager initMenuManager() {
+ MenuManager mm = new MenuManager();
+ ArrayList