+/**
+ * \brief Initialise the cokebank
+ * \param Argument Cokebank argument specified in the dispense config file (typically the database path)
+ * \return Boolean Failure
+ */
+extern int Bank_Initialise(const char *Argument);
+
+/**
+ * \brief Transfer money from one account to another
+ * \param SourceAcct UID (from \a Bank_GetUserID) to take the money from
+ * \param DestAcct UID (from \a Bank_GetUserID) give money to
+ * \param Ammount Amount of money (in cents) to transfer
+ * \param Reason Reason for the transfer
+ */
+extern int Bank_Transfer(int SourceAcct, int DestAcct, int Ammount, const char *Reason);
+/**
+ * \brief Get flags on an account
+ * \param AcctID UID to get flags from
+ * \return Flag set as defined in eCokebank_Flags
+ */
+extern int Bank_GetFlags(int AcctID);
+/**
+ * \brief Set an account's flags
+ * \param AcctID UID to set flags on
+ * \param Mask Mask of flags changed
+ * \param Value Final value of changed flags
+ */
+extern int Bank_SetFlags(int AcctID, int Mask, int Value);
+/**
+ * \brief Get an account's balance
+ * \param AcctID Account to query
+ */
+extern int Bank_GetBalance(int AcctID);
+/**
+ * \brief Get the name associated with an account
+ * \return Heap string
+ */
+extern char *Bank_GetAcctName(int AcctID);
+/**
+ * \brief Get an account ID from a passed name
+ * \param Name Name to search for
+ * \return ID of the account, or -1 if not found
+ */
+extern int Bank_GetAcctByName(const char *Name);
+/**
+ * \brief Create a new account
+ * \param Name Name for the new account (if NULL, an anoymous account is created)
+ * \return ID of the new account
+ */
+extern int Bank_CreateAcct(const char *Name);
+
+/**
+ * \brief Create an account iterator
+ * \param FlagMask Mask of account flags to check
+ * \param FlagValues Wanted values for checked flags
+ * \param Flags Specifies the operation of \a MinMaxBalance and \a Timestamp (\see eBank_ItFlags)
+ * \param MinMaxBalance Mininum/Maximum balance
+ * \param LastSeen Latest/Earliest last seen time
+ * \return Pointer to an iterator across the selected data set
+ */
+extern tAcctIterator *Bank_Iterator(int FlagMask, int FlagValues,
+ int Flags, int MinMaxBalance, time_t LastSeen);
+
+/**
+ * \brief Get the current entry in the iterator and move to the next
+ * \param It Iterator returned by Bank_Iterator
+ * \return Accoun ID, or -1 for end of list
+ */
+extern int Bank_IteratorNext(tAcctIterator *It);
+
+/**
+ * \brief Free an allocated iterator
+ * \param It Iterator returned by Bank_Iterator
+ */
+extern void Bank_DelIterator(tAcctIterator *It);
+
+/**
+ * \brief Validates a user's authentication
+ * \param Salt Salt given to the client for hashing the password
+ * \param Username Username used
+ * \param Password Password sent by the client
+ * \return User ID
+ */
+extern int Bank_GetUserAuth(const char *Salt, const char *Username, const char *Password);
+
+/**
+ * \brief Get an account ID from a MIFARE card ID
+ * \param CardID MIFARE card ID
+ * \return Account ID
+ */
+extern int Bank_GetAcctByCard(const char *CardID);
+
+/**
+ * \brief Add a card to an account
+ * \param AcctID Account ID
+ * \param CardID MIFARE card ID
+ * \return Boolean failure
+ * \retval 0 Success
+ * \retval 1 Bad account ID
+ * \retval 2 Card in use
+ */
+extern int Bank_AddAcctCard(int AcctID, const char *CardID);
+
+// === Item Manipulation ===
+#if 0
+extern tItem *Items_GetItem(char *Handler, int ID);
+/**
+ * \brief Create an item iterator
+ * \return Pointer to an iterator across the selected data set
+ */
+extern tItemIterator *Items_Iterator(int Flags, char *Handler, int MaxPrice);
+
+/**
+ * \brief Get the current entry in the iterator and move to the next
+ * \param It Iterator returned by Items_Iterator
+ * \return Item ID, or -1 for end of list
+ */
+extern tItem *Items_IteratorNext(tItemIterator *It);
+
+/**
+ * \brief Free an allocated iterator
+ * \param It Iterator returned by Items_Iterator
+ */
+extern void Items_DelIterator(tItemIterator *It);
+#endif
+
+// ---
+// Server provided helper functions
+// ---
+/**
+ * \brief Create a formatted string on the heap
+ * \param Format Format string
+ * \return Heap string
+ */
+extern char *mkstr(const char *Format, ...);
+
+/**
+ * \brief Dispense log access
+ * \note Try not to over-use, only stuff that matters should go in here
+ */
+extern void Log_Info(const char *Format, ...);