many additional protocol functions added