Refactor property creation into logic layer. 

This may have fewer bugs than the existing implementation.