refactor specialization helpers; make property extensions possible via sfinae