Large re-factoring to allow property types to be specified and infered from binding sources