nearly finish, contains lots of bugs