alot of changes (couldn't commit earlier)