+ /** Obtain the channel "user counter"
+ * This returns the channel reference counter, which is initialized
+ * to 0 when the channel is created and incremented/decremented
+ * upon joins, parts quits and kicks.
+ *
+ * @return The number of users on this channel
+ */
+ long GetUserCounter();
+
+ /** Add a user pointer to the internal reference list
+ * @param user The user to add
+ *
+ * The data inserted into the reference list is a table as it is
+ * an arbitary pointer compared to other users by its memory address,
+ * as this is a very fast 32 or 64 bit integer comparison.
+ */
+ void AddUser(userrec* user);
+ void AddOppedUser(userrec* user);
+ void AddHalfoppedUser(userrec* user);
+ void AddVoicedUser(userrec* user);
+
+ /** Delete a user pointer to the internal reference list
+ * @param user The user to delete
+ * @return number of users left on the channel
+ */
+ unsigned long DelUser(userrec* user);
+ void DelOppedUser(userrec* user);
+ void DelHalfoppedUser(userrec* user);
+ void DelVoicedUser(userrec* user);
+
+ /** Obrain the internal reference list
+ * The internal reference list contains a list of userrec*.
+ * These are used for rapid comparison to determine
+ * channel membership for PRIVMSG, NOTICE, QUIT, PART etc.
+ * The resulting pointer to the vector should be considered
+ * readonly and only modified via AddUser and DelUser.
+ *
+ * @return This function returns pointer to a map of userrec pointers (CUList*).
+ */
+ CUList* GetUsers();
+ CUList* GetOppedUsers();
+ CUList* GetHalfoppedUsers();
+ CUList* GetVoicedUsers();
+
+ bool HasUser(userrec* user);
+