redesign PropertyUtil to be non-static