improved touch handling