implements a lot