implemented most things