By dropping support for block initialization, the constructor can be significantly simplified, which would likely lead to noticeable performance improvements. Block initialization should there for be an optional feature. In other words, SmartProperties should support two different kinds of initializers.