added generic protocols