Revisiting after a good night's sleep, I think that maybe the last option wasn't so bad after all. Commit 324ea71 clarifies the semantics a bit and I get rid of the unneeded extra constructor parameters that you mentioned originally.