This is my boring more functional second attemp