refactored to use individual properties of steps and data defs