refactor TouchEvents