everything implemented

maybe some bug testing to do