several improvements, now user doesn't need to add property name