some interesting abstractions