Rewritten the touch() function again.