add a bunch of logic for handling different types of properties