Can use a custom protocol