Currently, there are two steps which retrieve properties: PropertiesStep and PropertyMapStep. For any vendor implementation wishing to optimize property retrieval this means twice the (redundant) work because each of the steps needs to be extended individually.
However, the functionality is very similar. PropertyMapStep should be replaced by two steps: PropertiesStep which returns an iterator over properties and a MapAggregatorStep (not tied to the name) which consumes properties from the previous step and builds the map (either with property or values as the the map value) until the element of a property differs.
This reuse of PropertiesStep would have increase code reuse inside TinkerPop and should not have a significant performance impact. Most importantly, it makes life a lot easier for implementors.