diff --git a/src/game/game.cpp b/src/game/game.cpp
index 6f9461a0eb6941c72882138245d3eb456d6f5c78..64799ae5bf3d641d2f0ff4690cd7194f7f3ebfb2 100644
--- a/src/game/game.cpp
+++ b/src/game/game.cpp
@@ -97,22 +97,22 @@ void game::process_events() {
 
 void game::process_event(const event& e) {
     do_event<quit_game>(e, [&](auto&) { is_running = false; });
-    do_event<change_player_angle>(e, [&](const auto& cpa){
-        player_angle_delta += cpa.delta;
-        player_angle_delta = min(change_player_angle::DEFAULT,
-                                 max(-change_player_angle::DEFAULT,
+    do_event<change<player_angle>>(e, [&](const auto& cpa){
+        player_angle_delta += cpa.data.value;
+        player_angle_delta = min(player_angle::DEFAULT,
+                                 max(-player_angle::DEFAULT,
                                      player_angle_delta));
     });
-    do_event<change_player_force>(e, [&](const auto& cpf){
-        player_force_delta += cpf.delta;
-        player_force_delta = min(change_player_force::DEFAULT,
-                                 max(-change_player_force::DEFAULT,
+    do_event<change<player_force>>(e, [&](const auto& cpf){
+        player_force_delta += cpf.data.value;
+        player_force_delta = min(player_force::DEFAULT,
+                                 max(-player_force::DEFAULT,
                                      player_force_delta));
     });
-    do_event<change_move_vector>(e, [&](const auto& cmv) {
-        player_position_delta += cmv.delta; // FIXME: Use ranged value here;
-        player_position_delta = min(change_move_vector::DEFAULT,
-                                    max(-change_move_vector::DEFAULT,
+    do_event<change<move_vector>>(e, [&](const auto& cmv) {
+        player_position_delta += cmv.data.value; // FIXME: Use ranged value here;
+        player_position_delta = min(move_vector::DEFAULT,
+                                    max(-move_vector::DEFAULT,
                                         player_position_delta));
     });
     do_event<push_state>(e, [&](auto&) {
@@ -124,10 +124,10 @@ void game::process_event(const event& e) {
             current_state = std::move(state::pop());
     });
     do_event<shoot_event>(e, [&](auto&) {shoot = true;});
-    do_event<switch_controller>(e, [&](const auto& sc) {
+    do_event<change<shooting_controller>>(e, [&](const auto& sc) {
         if (shoot_control->can_switch()) {
             delete shoot_control;
-            switch(sc.mode) {
+            switch(sc.data.mode) {
                 case shooting_mode::SINGLE:
                     shoot_control = new single_shot();
                 break;
diff --git a/src/game/input/events.hpp b/src/game/input/events.hpp
index 85946cdcfa1a89f32a8b39e3e5ec6c476fca2e41..3f53bf93f02df190825162c191eedfaf076fcdd3 100644
--- a/src/game/input/events.hpp
+++ b/src/game/input/events.hpp
@@ -4,45 +4,64 @@
 #include <variant>
 #include <cstdint>
 
+/// Event that represents data change
 template<typename T>
 struct change {
     T data;
 };
 
-struct change_move_vector {
+/// Move vector data that are applied during changing/setting values
+struct move_vector {
     constexpr static int32_t DEFAULT = 5;
-    int32_t delta;
+    int32_t value;
 };
 
-struct change_player_angle {
+/// Player angle data that are applied during changing/setting values
+struct player_angle {
     constexpr static double DEFAULT = 0.05;
-    double delta;
+    double value;
 };
 
-struct change_player_force {
+
+/// Player force data that are applied during changing/setting values
+struct player_force {
     constexpr static double DEFAULT = 0.1;
-    double delta;
+    double value;
 };
 
-struct push_state {};
-
-struct pop_state {};
-
-struct quit_game {};
-
-struct shoot_event {};
-
+/// All posible shooting modes
 enum class shooting_mode {
     SINGLE,
     MULTIPLE
 };
 
-struct switch_controller {
+/// Shooting controller data that are applied during changing/setting values
+struct shooting_controller {
     shooting_mode mode;
 };
 
+/// Event that pushes current state
+struct push_state {};
+
+/// Pops latest state and replaces it
+struct pop_state {};
+
+/// Quit game event - stops game loop
+struct quit_game {};
+
+/// Shoot event that represents user pushing shooting button
+struct shoot_event {};
+
+/// Changes debug status
 struct switch_debug {};
 
-typedef std::variant<switch_debug, switch_controller, change_player_force, change_move_vector, change_player_angle, push_state, pop_state, quit_game, shoot_event> event;
+/// Generic all event data storage - saves memory, autotype deduction
+typedef std::variant<change<player_force>,
+                     change<move_vector>,
+                     change<player_angle>,
+                     change<shooting_controller>,
+                     push_state, pop_state,
+                     quit_game, shoot_event,
+                     switch_debug> event;
 
 #endif//EVENTS_HPP
\ No newline at end of file
diff --git a/src/game/input/sdl_input.cpp b/src/game/input/sdl_input.cpp
index b5bcd34e76553d0c1331f6a9694708d9b7dd4fa1..baf0ffa975e9d7da1ef308dc0df35fbe02f51754 100644
--- a/src/game/input/sdl_input.cpp
+++ b/src/game/input/sdl_input.cpp
@@ -25,47 +25,47 @@ void sdl_input::process_key_event(const SDL_Event& e) {
     switch (e.key.keysym.sym) {
         case SDLK_w:
             if (pressed)
-                events.emplace_back(change_move_vector{-change_move_vector::DEFAULT});
+                events.emplace_back(change<move_vector>{-move_vector::DEFAULT});
             else
-                events.emplace_back(change_move_vector{change_move_vector::DEFAULT});
+                events.emplace_back(change<move_vector>{move_vector::DEFAULT});
         break;
         case SDLK_s:
             if (pressed)
-                events.emplace_back(change_move_vector{change_move_vector::DEFAULT});
+                events.emplace_back(change<move_vector>{move_vector::DEFAULT});
             else
-                events.emplace_back(change_move_vector{-change_move_vector::DEFAULT});
+                events.emplace_back(change<move_vector>{-move_vector::DEFAULT});
         break;
         case SDLK_a:
             if (pressed)
-                events.emplace_back(change_player_angle{change_player_angle::DEFAULT});
+                events.emplace_back(change<player_angle>{player_angle::DEFAULT});
             else
-                events.emplace_back(change_player_angle{-change_player_angle::DEFAULT});
+                events.emplace_back(change<player_angle>{-player_angle::DEFAULT});
         break;
         case SDLK_d:
             if (pressed)
-                events.emplace_back(change_player_angle{-change_player_angle::DEFAULT});
+                events.emplace_back(change<player_angle>{-player_angle::DEFAULT});
             else
-                events.emplace_back(change_player_angle{change_player_angle::DEFAULT});
+                events.emplace_back(change<player_angle>{player_angle::DEFAULT});
         break;
         case SDLK_e:
             if (pressed)
-                events.emplace_back(change_player_force{change_player_force::DEFAULT});
+                events.emplace_back(change<player_force>{player_force::DEFAULT});
             else
-                events.emplace_back(change_player_force{-change_player_force::DEFAULT});
+                events.emplace_back(change<player_force>{-player_force::DEFAULT});
         break;
         case SDLK_q:
             if (pressed)
-                events.emplace_back(change_player_force{-change_player_force::DEFAULT});
+                events.emplace_back(change<player_force>{-player_force::DEFAULT});
             else
-                events.emplace_back(change_player_force{change_player_force::DEFAULT});
+                events.emplace_back(change<player_force>{player_force::DEFAULT});
         break;
         case SDLK_1:
             if (pressed)
-                events.emplace_back(switch_controller{shooting_mode::SINGLE});
+                events.emplace_back(change<shooting_controller>{shooting_mode::SINGLE});
         break;
         case SDLK_2:
             if (pressed)
-                events.emplace_back(switch_controller{shooting_mode::MULTIPLE});
+                events.emplace_back(change<shooting_controller>{shooting_mode::MULTIPLE});
         break;
         case SDLK_SPACE:
             if (pressed)