You're doing too much. Sit back, relax, see how people want to use the code. THEN build the abstraction.