Everything implemented, needs to be tested