everything implemented, testing still needs to be done