make Transform more abstract