Abstracted Transform

Abstracted Transform since the prior code was too implementation
dependent and did not provide enough flexibility to end users.