debbugging all of this abstraction