implemented some more methods and altered some types as noted