diff --git a/game_of_life_v2/game_of_life_v2.srcs/constrs_1/new/constraints.xdc b/game_of_life_v2/game_of_life_v2.srcs/constrs_1/new/constraints.xdc
index bdc8595b4106d6eaec691c8827a68b49c946bc3e..261a2df429283d0777b05a19ee3afc74c04ee2c0 100644
--- a/game_of_life_v2/game_of_life_v2.srcs/constrs_1/new/constraints.xdc
+++ b/game_of_life_v2/game_of_life_v2.srcs/constrs_1/new/constraints.xdc
@@ -15,11 +15,11 @@ set_property PACKAGE_PIN V19  [get_ports {frame[10]}];  # "VGA-R3"
 set_property PACKAGE_PIN V18  [get_ports {frame[11]}];  # "VGA-R4"
 set_property PACKAGE_PIN Y19  [get_ports {Vsync}];  # "VGA-VS"
 
-#set_property PACKAGE_PIN P16 [get_ports {BTNC}];  # "BTNC"
-#set_property PACKAGE_PIN R16 [get_ports {BTND}];  # "BTND"
-#set_property PACKAGE_PIN N15 [get_ports {BTNL}];  # "BTNL"
-#set_property PACKAGE_PIN R18 [get_ports {BTNR}];  # "BTNR"
-#set_property PACKAGE_PIN T18 [get_ports {BTNU}];  # "BTNU"
+set_property PACKAGE_PIN P16 [get_ports {set_cell}];  # "BTNC"
+set_property PACKAGE_PIN R16 [get_ports {move_down}];  # "BTND"
+set_property PACKAGE_PIN N15 [get_ports {move_left}];  # "BTNL"
+set_property PACKAGE_PIN R18 [get_ports {move_right}];  # "BTNR"
+set_property PACKAGE_PIN T18 [get_ports {move_up}];  # "BTNU"
 
 set_property PACKAGE_PIN F22 [get_ports {switch_mode}];  # "SW0"
 
diff --git a/game_of_life_v2/game_of_life_v2.srcs/sources_1/new/game_of_life.vhd b/game_of_life_v2/game_of_life_v2.srcs/sources_1/new/game_of_life.vhd
index c3739fbdbf501dd5083f0de20fe6777216fa06ff..86c528b4bbf843795f16a9f33788623339a2fbd7 100644
--- a/game_of_life_v2/game_of_life_v2.srcs/sources_1/new/game_of_life.vhd
+++ b/game_of_life_v2/game_of_life_v2.srcs/sources_1/new/game_of_life.vhd
@@ -82,8 +82,8 @@ signal Hsync_sig, Vsync_sig : std_logic;
 signal frame_sig : std_logic_vector(11 downto 0);
 
 -- simulation processers
-signal shift_register_top : std_logic_vector(0 to cell_number-1);
-signal shift_register_middle : std_logic_vector(0 to cell_number-1);
+signal shift_register_top : std_logic_vector(0 to cell_number+1);
+signal shift_register_middle : std_logic_vector(0 to cell_number+1);
 signal actual_register : std_logic_vector(0 to 0);
 
 --signal copy_shift_register_top : std_logic_vector(0 to cell_number-1);
@@ -131,6 +131,8 @@ begin
         neighbours_count <= (others => '0');
         frame_counter <= (others => '0');
         
+        --cursor_pos_x <= to_unsigned(8,10);
+        --cursor_pos_y <= to_unsigned(8,10);
         cursor_pos_x <= (others => '0');
         cursor_pos_y <= (others => '0');
         prev_move_left <= move_left;
@@ -163,50 +165,51 @@ begin
             end if;
 
             -- handle shift registers
-            --if switch_mode = '1' and frame_counter = 0 and horizontal_counter(2 downto 0) = 0 and horizontal_counter(9 downto 3) < cell_number+2 and vertical_counter(2 downto 0) = 0 and vertical_counter(9 downto 3) < cell_number+2 then
-            if switch_mode = '1' and frame_counter = 0 and horizontal_counter(2 downto 0) = 0 and horizontal_counter(9 downto 3) < cell_number and vertical_counter(2 downto 0) = 0 and vertical_counter(9 downto 3) < cell_number then
-                shift_register_top <= shift_register_top(1 to cell_number-1) & shift_register_middle(0);
+            if switch_mode = '1' and frame_counter = 0 and horizontal_counter(2 downto 0) = 0 and horizontal_counter(9 downto 3) < cell_number+2 and vertical_counter(2 downto 0) = 0 and vertical_counter(9 downto 3) < cell_number+2 then
+            --if switch_mode = '1' and frame_counter = 0 and horizontal_counter(2 downto 0) = 0 and horizontal_counter(9 downto 3) < cell_number and vertical_counter(2 downto 0) = 0 and vertical_counter(9 downto 3) < cell_number then
+                shift_register_top <= shift_register_top(1 to cell_number+1) & shift_register_middle(0);
                 
-                if horizontal_counter(9 downto 3) /= 0 and horizontal_counter(9 downto 3) < cell_number-1 and vertical_counter(9 downto 3) /= 0 and vertical_counter(9 downto 3) < cell_number-1 then
+                if horizontal_counter(9 downto 3) /= 0 and horizontal_counter(9 downto 3) < cell_number+1 and vertical_counter(9 downto 3) /= 0 and vertical_counter(9 downto 3) < cell_number+1 then
                 --if horizontal_counter(9 downto 3) < cell_number and vertical_counter(9 downto 3) < cell_number then
                     --copy_shift_register_top <= shift_register_top(1 to cell_number-1) & shift_register_middle(0);
-                    shift_register_middle <= shift_register_middle(1 to cell_number-1) & actual_register;
+                    shift_register_middle <= shift_register_middle(1 to cell_number+1) & actual_register;
                     --copy_shift_register_middle <= shift_register_middle(1 to cell_number-1) & actual_register;
                     neighbours <= neighbours(3 to 8) & shift_register_top(0) & shift_register_middle(0) & actual_register;
                     neighbours_count <= neighbours_count - unsigned(neighbours(0 to 0)) - unsigned(neighbours(1 to 1)) - unsigned(neighbours(2 to 2)) + unsigned(shift_register_top(0 to 0)) + unsigned(shift_register_middle(0 to 0)) + unsigned(actual_register);
-                    actual_register(0) <= cells(to_integer((vertical_counter(9 downto 3))* to_unsigned(cell_number,8) + horizontal_counter(9 downto 3)));
+                    actual_register(0) <= cells(to_integer((vertical_counter(9 downto 3)-1)* to_unsigned(cell_number,8) + horizontal_counter(9 downto 3)-1));
                     --copy_actual_register(0) <= cells(to_integer((vertical_counter(9 downto 3))* to_unsigned(cell_number,8) + horizontal_counter(9 downto 3)));
                 else
-                    shift_register_middle <= shift_register_middle(1 to cell_number-1) & actual_register;
+                    shift_register_middle <= shift_register_middle(1 to cell_number+1) & actual_register;
                     neighbours <= neighbours(3 to 8) & shift_register_top(0) & shift_register_middle(0) & actual_register;
                     
                     -- left top corner
-                    if horizontal_counter(9 downto 3) = 0 and vertical_counter(9 downto 3) = 0 then
-                        neighbours_count <= neighbours_count + unsigned(neighbours(8 to 8)) + unsigned(shift_register_middle(0 to 0)) + unsigned(actual_register);
+                    --if horizontal_counter(9 downto 3) = 0 and vertical_counter(9 downto 3) = 0 then
+                    --    neighbours_count <= neighbours_count + unsigned(neighbours(8 to 8)) + unsigned(shift_register_middle(0 to 0)) + unsigned(actual_register);
                     -- right top corner
-                    elsif horizontal_counter(9 downto 3) = cell_number-1 and vertical_counter(9 downto 3) = 0 then
-                        neighbours_count <= neighbours_count - unsigned(neighbours(1 to 1)) - unsigned(neighbours(2 to 2));
+                    --elsif horizontal_counter(9 downto 3) = cell_number-1 and vertical_counter(9 downto 3) = 0 then
+                    --    neighbours_count <= neighbours_count - unsigned(neighbours(1 to 1)) - unsigned(neighbours(2 to 2));
                     -- left bottom corner
-                    elsif horizontal_counter(9 downto 3) = 0 and vertical_counter(9 downto 3) = cell_number-1 then
-                        neighbours_count <= neighbours_count - unsigned(neighbours(0 to 0)) - unsigned(neighbours(1 to 1)) - unsigned(neighbours(2 to 2)) - unsigned(neighbours(3 to 3)) - unsigned(neighbours(4 to 4)) - unsigned(neighbours(5 to 5)) + unsigned(neighbours(6 to 6)) + unsigned(neighbours(7 to 7)) + unsigned(neighbours(8 to 8)) + unsigned(shift_register_top(0 to 0)) + unsigned(shift_register_middle(0 to 0));
+                    --elsif horizontal_counter(9 downto 3) = 0 and vertical_counter(9 downto 3) = cell_number-1 then
+                    --    neighbours_count <= neighbours_count - unsigned(neighbours(0 to 0)) - unsigned(neighbours(1 to 1)) - unsigned(neighbours(2 to 2)) - unsigned(neighbours(3 to 3)) - unsigned(neighbours(4 to 4)) - unsigned(neighbours(5 to 5)) + unsigned(neighbours(6 to 6)) + unsigned(neighbours(7 to 7)) + unsigned(neighbours(8 to 8)) + unsigned(shift_register_top(0 to 0)) + unsigned(shift_register_middle(0 to 0));
                     -- right bottom corner
-                    elsif horizontal_counter(9 downto 3) = cell_number-1 and vertical_counter(9 downto 3) = cell_number-1 then
-                        neighbours_count <= neighbours_count - unsigned(neighbours(0 to 0)) - unsigned(neighbours(1 to 1));
+                    --elsif horizontal_counter(9 downto 3) = cell_number-1 and vertical_counter(9 downto 3) = cell_number-1 then
+                    --    neighbours_count <= neighbours_count - unsigned(neighbours(0 to 0)) - unsigned(neighbours(1 to 1));
                     -- top edge
-                    elsif vertical_counter(9 downto 3) = 0 then
-                        neighbours_count <= neighbours_count - unsigned(neighbours(1 to 1)) - unsigned(neighbours(2 to 2)) + unsigned(shift_register_middle(0 to 0)) + unsigned(actual_register);
+                    --elsif vertical_counter(9 downto 3) = 0 then
+                    --    neighbours_count <= neighbours_count - unsigned(neighbours(1 to 1)) - unsigned(neighbours(2 to 2)) + unsigned(shift_register_middle(0 to 0)) + unsigned(actual_register);
                     -- left edge
-                    elsif horizontal_counter(9 downto 3) = 0 then
-                        neighbours_count <= neighbours_count - unsigned(neighbours(0 to 0)) - unsigned(neighbours(1 to 1)) - unsigned(neighbours(2 to 2)) - unsigned(neighbours(3 to 3)) - unsigned(neighbours(4 to 4)) - unsigned(neighbours(5 to 5)) + unsigned(neighbours(6 to 6)) + unsigned(neighbours(7 to 7)) + unsigned(neighbours(8 to 8)) + unsigned(shift_register_top(0 to 0)) + unsigned(shift_register_middle(0 to 0)) + unsigned(actual_register);
+                    --elsif horizontal_counter(9 downto 3) = 0 then
+                    --    neighbours_count <= neighbours_count - unsigned(neighbours(0 to 0)) - unsigned(neighbours(1 to 1)) - unsigned(neighbours(2 to 2)) - unsigned(neighbours(3 to 3)) - unsigned(neighbours(4 to 4)) - unsigned(neighbours(5 to 5)) + unsigned(neighbours(6 to 6)) + unsigned(neighbours(7 to 7)) + unsigned(neighbours(8 to 8)) + unsigned(shift_register_top(0 to 0)) + unsigned(shift_register_middle(0 to 0)) + unsigned(actual_register);
                     -- right edge
-                    elsif horizontal_counter(9 downto 3) = cell_number-1 then
-                        neighbours_count <= neighbours_count - unsigned(neighbours(0 to 0)) - unsigned(neighbours(1 to 1)) - unsigned(neighbours(2 to 2));
+                    --elsif horizontal_counter(9 downto 3) = cell_number-1 then
+                    --    neighbours_count <= neighbours_count - unsigned(neighbours(0 to 0)) - unsigned(neighbours(1 to 1)) - unsigned(neighbours(2 to 2));
                     -- bottom edge
-                    elsif vertical_counter(9 downto 3) = cell_number-1 then
-                        neighbours_count <= neighbours_count - unsigned(neighbours(0 to 0)) - unsigned(neighbours(1 to 1)) + unsigned(shift_register_top(0 to 0)) + unsigned(shift_register_middle(0 to 0));
-                    end if;
+                    --elsif vertical_counter(9 downto 3) = cell_number-1 then
+                    --    neighbours_count <= neighbours_count - unsigned(neighbours(0 to 0)) - unsigned(neighbours(1 to 1)) + unsigned(shift_register_top(0 to 0)) + unsigned(shift_register_middle(0 to 0));
+                    --end if;
                     
-                    actual_register(0) <= cells(to_integer((vertical_counter(9 downto 3))* to_unsigned(cell_number,8) + horizontal_counter(9 downto 3)));
+                    neighbours_count <= neighbours_count - unsigned(neighbours(0 to 0)) - unsigned(neighbours(1 to 1)) - unsigned(neighbours(2 to 2)) + unsigned(shift_register_top(0 to 0)) + unsigned(shift_register_middle(0 to 0)) + unsigned(actual_register);
+                    actual_register(0) <= '0';--cells(to_integer((vertical_counter(9 downto 3))* to_unsigned(cell_number,8) + horizontal_counter(9 downto 3)));
                 end if;
                 
                 if vertical_counter(9 downto 3) >= 2 and horizontal_counter(9 downto 3) >= 2 then
@@ -217,21 +220,26 @@ begin
                     --    end if;
                     --end loop;
                     
-                    if neighbours(4)='1' then
-                        if neighbours_count = 3 or neighbours_count = 4 then
-                            cells(to_integer((vertical_counter(9 downto 3)-1) * to_unsigned(cell_number,8) + horizontal_counter(9 downto 3)-3)) <= '1';
-                            cells_to_draw(to_integer((vertical_counter(9 downto 3)-1) * to_unsigned(cell_number,8) + horizontal_counter(9 downto 3)-3)) <= '1';
-                        else
-                            cells(to_integer((vertical_counter(9 downto 3)-1) * to_unsigned(cell_number,8) + horizontal_counter(9 downto 3)-3)) <= '0';
-                            cells_to_draw(to_integer((vertical_counter(9 downto 3)-1) * to_unsigned(cell_number,8) + horizontal_counter(9 downto 3)-3)) <= '0';
-                        end if;
+                    if horizontal_counter(9 downto 3) = 0 or horizontal_counter(9 downto 3) = cell_number+1 or vertical_counter(9 downto 3) = 0 or vertical_counter(9 downto 3) = cell_number+1 then
+                        cells(to_integer((vertical_counter(9 downto 3)-2) * to_unsigned(cell_number,8) + horizontal_counter(9 downto 3)-4)) <= '0';
+                        cells_to_draw(to_integer((vertical_counter(9 downto 3)-2) * to_unsigned(cell_number,8) + horizontal_counter(9 downto 3)-4)) <= '0';
                     else
-                        if neighbours_count = 3 then
-                            cells(to_integer((vertical_counter(9 downto 3)-1) * to_unsigned(cell_number,8) + horizontal_counter(9 downto 3)-3)) <= '1';
-                            cells_to_draw(to_integer((vertical_counter(9 downto 3)-1) * to_unsigned(cell_number,8) + horizontal_counter(9 downto 3)-3)) <= '1';
+                        if neighbours(4)='1' then
+                            if neighbours_count = 3 or neighbours_count = 4 then
+                                cells(to_integer((vertical_counter(9 downto 3)-2) * to_unsigned(cell_number,8) + horizontal_counter(9 downto 3)-4)) <= '1';
+                                cells_to_draw(to_integer((vertical_counter(9 downto 3)-2) * to_unsigned(cell_number,8) + horizontal_counter(9 downto 3)-4)) <= '1';
+                            else
+                                cells(to_integer((vertical_counter(9 downto 3)-2) * to_unsigned(cell_number,8) + horizontal_counter(9 downto 3)-4)) <= '0';
+                                cells_to_draw(to_integer((vertical_counter(9 downto 3)-2) * to_unsigned(cell_number,8) + horizontal_counter(9 downto 3)-4)) <= '0';
+                            end if;
                         else
-                            cells(to_integer((vertical_counter(9 downto 3)-1) * to_unsigned(cell_number,8) + horizontal_counter(9 downto 3)-3)) <= '0';
-                            cells_to_draw(to_integer((vertical_counter(9 downto 3)-1) * to_unsigned(cell_number,8) + horizontal_counter(9 downto 3)-3)) <= '0';
+                            if neighbours_count = 3 then
+                                cells(to_integer((vertical_counter(9 downto 3)-2) * to_unsigned(cell_number,8) + horizontal_counter(9 downto 3)-4)) <= '1';
+                                cells_to_draw(to_integer((vertical_counter(9 downto 3)-2) * to_unsigned(cell_number,8) + horizontal_counter(9 downto 3)-4)) <= '1';
+                            else
+                                cells(to_integer((vertical_counter(9 downto 3)-2) * to_unsigned(cell_number,8) + horizontal_counter(9 downto 3)-4)) <= '0';
+                                cells_to_draw(to_integer((vertical_counter(9 downto 3)-2) * to_unsigned(cell_number,8) + horizontal_counter(9 downto 3)-4)) <= '0';
+                            end if;
                         end if;
                     end if;
                     
@@ -242,15 +250,19 @@ begin
             -- moving with cursor
             if switch_mode = '0' then
                 if prev_move_left = '0' and move_left = '1' and cursor_pos_x /= 0 then
+                --if prev_move_left = '0' and move_left = '1' and cursor_pos_x /= 8 then
                     cursor_pos_x <= cursor_pos_x - 8;
                 end if;
                 if prev_move_right = '0' and move_right = '1' and cursor_pos_x /= (cell_number-1)*8 then
+                --if prev_move_right = '0' and move_right = '1' and cursor_pos_x /= (cell_number-2)*8 then
                     cursor_pos_x <= cursor_pos_x + 8;
                 end if;
                 if prev_move_up = '0' and move_up = '1' and cursor_pos_y /= 0 then
+                --if prev_move_up = '0' and move_up = '1' and cursor_pos_y /= 8 then
                     cursor_pos_y <= cursor_pos_y - 8;
                 end if;
                 if prev_move_down = '0' and move_down = '1' and cursor_pos_y /= (cell_number-1)*8 then
+                --if prev_move_down = '0' and move_down = '1' and cursor_pos_y /= (cell_number-2)*8 then
                     cursor_pos_y <= cursor_pos_y + 8;
                 end if;