type smashing and type compatible smashing, need testing