Generalize YExpansion
Update from James and TargetExpansion
before merge
target expansion class
target expansion class