reimplementing methods
still in the middle