mostly done with addition and deletion, small bug i think