Abstract impls

Please add some comments if you want some more refactoring, otherwise I'm going to continue with the delegate calls.