diff --git a/CMakeLists.txt b/CMakeLists.txt
index 23169d464a4d68e45914775c38dc995ea8fe786e..7619d199902e7191366a9958fc7cd3ce487c3178 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -5,5 +5,5 @@ FetchContent_Declare(SFML GIT_REPOSITORY https://github.com/SFML/SFML.git GIT_TA
 FetchContent_MakeAvailable(SFML)
 
 project(pacman) 
-add_executable(proga application.cpp  "main.cpp")
+add_executable(proga application.cpp  "main.cpp" "drawable.h" "drawable.cpp")
 target_link_libraries(proga PUBLIC sfml-graphics sfml-window sfml-system)
diff --git a/application.cpp b/application.cpp
index d999ee8dea458fc5471c0fd0849d20f3571da33f..dc8bf9ccc39654b706a1912a89bf020fd58a4822 100644
--- a/application.cpp
+++ b/application.cpp
@@ -16,4 +16,9 @@ int Application::run() {
 		return 2;
 	}
 	return 0;
+}
+
+void Menu::draw_into(sf::RenderWindow& window) const {
+	for (const Button& ptr_button : m_buttons)
+		ptr_button.draw_into(window);
 }
\ No newline at end of file
diff --git a/application.h b/application.h
index fe1343192982bffbb72431148f334ca3d85c4df1..6ba6b62da44e3b393517f4867a44be7ef1bc9942 100644
--- a/application.h
+++ b/application.h
@@ -1,6 +1,7 @@
 #include <iostream>
 #include <memory>
 #include <string>
+#include <array>
 #include <SFML/Graphics.hpp>
 
 class IState;
@@ -8,7 +9,7 @@ class IState;
 class IStateManager {
 public:
 	IStateManager() = default;
-	virtual ~IStateManager() {};
+	virtual ~IStateManager() {}
 
 	virtual void set_next_state(std::unique_ptr<IState> state) = 0;
 };
@@ -45,14 +46,77 @@ protected:
 	sf::RenderWindow m_window;
 };
 
+struct ISelectCommand {
+	virtual void execute() = 0;
+};
+
+class ChangeStateCommand : public ISelectCommand {
+public:
+	ChangeStateCommand(IStateManager& state_manager): m_state_manager(state_manager) {}
+protected:
+	IStateManager& m_state_manager;
+};
+
+struct IDrawable {
+	virtual void draw_into(sf::RenderWindow& window) const = 0;
+	virtual ~IDrawable() = default;
+};
+
+class ExitCommand : public ChangeStateCommand {
+
+
+};
+
+class GameBuilderDirector {
+
+
+};
+
+class GameCommand: public ChangeStateCommand {
+public:
+	GameCommand(IStateManager& state_manager, std::unique_ptr< GameBuilderDirector> ptr_director): 
+		ChangeStateCommand(state_manager) {}
+
+};
+
+class Button : public IDrawable {
+public:
+	Button() {}
+	void set(sf::Vector2f pos, sf::Vector2f button_size, const std::string text, size_t font_size, 
+		std::unique_ptr<ISelectCommand>&& ptr_command){}
+	void select() {}
+	void unselect() {}
+	bool is_selected() {}
+	bool is_position_in(sf::Vector2f pos){}
+	void push() {}
+	void draw_into(sf::RenderWindow& window) const override {}
+private:
+	sf::Text m_text;
+	bool m_is_selected = false;
+	sf::RectangleShape m_rectangle;
+	std::unique_ptr<ISelectCommand> m_ptr_command;
+};
+
+class Menu : public IDrawable {
+public:
+	Menu(IStateManager& state_manager) {}
+	void draw_into(sf::RenderWindow& window) const;
+	void process_mouse(sf::Vector2f pos, bool is_pressed) {}
+private:
+	std::array<Button, 4> m_buttons;
+};
+
+
 class SelectState: public IState, public IWindowKeeper {
 public:
-	using IState::IState;
-	using IWindowKeeper::IWindowKeeper;
+	SelectState(IStateManager& state_manager, sf::VideoMode videomode, const std::string window_title):
+		m_menu(state_manager), IState(state_manager), IWindowKeeper(videomode, window_title) {}
 	virtual bool do_step() const override {}
 	virtual void event_handling() override {}
 	virtual void update() override {}
 	virtual void render() override {}
+private:
+	Menu m_menu;
 };
 
 class GameState: public IState, public IWindowKeeper {
@@ -69,4 +133,19 @@ class ExitState: public IState {
 public:
 	using IState::IState;
 	virtual bool do_step() const override { return false; }
-};
\ No newline at end of file
+};
+
+class MyFont {
+public: //singletone - we get the unique instance of the class
+	sf::Font& Instance() {
+		static sf::Font font;
+		return font;
+	}
+	MyFont(const MyFont& font) = delete;
+	MyFont& operator=(const MyFont&) = delete;
+private:
+	MyFont() { m_font.loadFromFile("LibreBaskerville-Regular.ttf"); }
+private:
+	sf::Font m_font;
+};
+