i less hate this ugly constructor now