again, possible abstraction abuse.