add an optional timeout handler