implemented a bunch of callbacks, reordered the functions by groups (todo/usable/notimplement)