major rewrite of touch class