Added lots of protocols. Compiles, but needs testing.