# HG changeset patch
# Node ID 89e511a80cfd
# Parent  648a1b5dd96a
diff --git a/libpurple/savedstatuses.h b/libpurple/savedstatuses.h
--- a/libpurple/savedstatuses.h
+++ b/libpurple/savedstatuses.h
@@ -52,7 +52,7 @@
  * we'll cache it for them in case they want to use it again.  If
  * they don't use it again, we'll just delete it.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 /*
  * TODO: Hmm.  We should probably just be saving PurplePresences.  That's
@@ -98,7 +98,7 @@
  * Returns: The newly created saved status, or NULL if the title you
  *         used was already taken.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 PurpleSavedStatus *purple_savedstatus_new(const char *title, PurpleStatusPrimitive type);
@@ -110,7 +110,7 @@
  *
  * Set the title for the given saved status.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void purple_savedstatus_set_title(PurpleSavedStatus *status, const char *title);
@@ -122,7 +122,7 @@
  *
  * Set the type for the given saved status.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 void purple_savedstatus_set_primitive_type(PurpleSavedStatus *status, PurpleStatusPrimitive type);
@@ -135,7 +135,7 @@
  *
  * Set the message for the given saved status.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void purple_savedstatus_set_message(PurpleSavedStatus *status, const char *message);
@@ -150,7 +150,7 @@
  *
  * Set a substatus for an account in a saved status.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void purple_savedstatus_set_substatus(PurpleSavedStatus *status, const PurpleAccount *account, const PurpleStatusType *type, const char *message);
@@ -165,7 +165,7 @@
  * saved status is activated then this account will use the default
  * status type and message.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void purple_savedstatus_unset_substatus(PurpleSavedStatus *saved_status, const PurpleAccount *account);
@@ -181,7 +181,7 @@
  *          status could not be deleted because no saved status exists
  *          with the given title.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 gboolean purple_savedstatus_delete(const char *title);
@@ -194,7 +194,7 @@
  * Delete a saved status.  This removes the saved status from the list
  * of saved statuses, and writes the revised list to status.xml.
  *
- * Since: 2.1.0
+ * Since: 2.1
  */
 PURPLE_AVAILABLE_IN_2_1
 void purple_savedstatus_delete_by_status(PurpleSavedStatus *saved_status);
@@ -207,7 +207,7 @@
  * Returns: (element-type PurpleSavedStatus) (transfer none): A list of saved
  *          statuses.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 GList *purple_savedstatuses_get_all(void);
@@ -226,7 +226,7 @@
  * Returns: (element-type PurpleSavedStatus) (transfer container): A list containing
  *         at most how_many saved statuses.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 GList *purple_savedstatuses_get_popular(unsigned int how_many);
@@ -241,7 +241,7 @@
  * Returns: A pointer to the in-use PurpleSavedStatus.
  *         This function never returns NULL.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 PurpleSavedStatus *purple_savedstatus_get_current(void);
@@ -255,7 +255,7 @@
  * Returns: A pointer to the in-use PurpleSavedStatus.
  *         This function never returns NULL.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 PurpleSavedStatus *purple_savedstatus_get_default(void);
@@ -269,7 +269,7 @@
  * Returns: A pointer to the idle-away PurpleSavedStatus.
  *         This function never returns NULL.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 PurpleSavedStatus *purple_savedstatus_get_idleaway(void);
@@ -282,7 +282,7 @@
  *
  * Returns: TRUE if our accounts have been set to idle-away.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 gboolean purple_savedstatus_is_idleaway(void);
@@ -295,7 +295,7 @@
  *
  * Set whether accounts in Purple are idle-away or not.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void purple_savedstatus_set_idleaway(gboolean idleaway);
@@ -308,7 +308,7 @@
  * Returns: A pointer to the startup PurpleSavedStatus.
  *         This function never returns NULL.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 PurpleSavedStatus *purple_savedstatus_get_startup(void);
@@ -321,7 +321,7 @@
  *
  * Returns: The saved status if found, or NULL.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 PurpleSavedStatus *purple_savedstatus_find(const char *title);
@@ -335,7 +335,7 @@
  *
  * Returns: The saved status if found, or NULL.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 PurpleSavedStatus *purple_savedstatus_find_by_creation_time(time_t creation_time);
@@ -351,7 +351,7 @@
  *
  * Returns: The saved status if found, or NULL.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 PurpleSavedStatus *purple_savedstatus_find_transient_by_type_and_message(PurpleStatusPrimitive type, const char *message);
@@ -374,7 +374,7 @@
  *
  * Returns: TRUE if the saved status is transient.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 gboolean purple_savedstatus_is_transient(const PurpleSavedStatus *saved_status);
@@ -390,7 +390,7 @@
  *         you need a reference to the title for prolonged use then
  *         you should make a copy of it.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 const char *purple_savedstatus_get_title(const PurpleSavedStatus *saved_status);
@@ -403,7 +403,7 @@
  *
  * Returns: The primitive type.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 PurpleStatusPrimitive purple_savedstatus_get_primitive_type(const PurpleSavedStatus *saved_status);
@@ -419,7 +419,7 @@
  *         contain the normal markup that is created by
  *         Purple's IMHTML (basically HTML markup).
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 const char *purple_savedstatus_get_message(const PurpleSavedStatus *saved_status);
@@ -440,7 +440,7 @@
  *
  * Returns: The timestamp when this saved status was created.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 time_t purple_savedstatus_get_creation_time(const PurpleSavedStatus *saved_status);
@@ -456,7 +456,7 @@
  * Returns: TRUE if the saved_status has substatuses.
  *         FALSE otherwise.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 gboolean purple_savedstatus_has_substatuses(const PurpleSavedStatus *saved_status);
@@ -472,7 +472,7 @@
  *         the given account does not have a substatus that
  *         differs from the default status of this PurpleSavedStatus.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 PurpleSavedStatusSub *purple_savedstatus_get_substatus(const PurpleSavedStatus *saved_status, const PurpleAccount *account);
@@ -485,7 +485,7 @@
  *
  * Returns: The status type.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 const PurpleStatusType *purple_savedstatus_substatus_get_status_type(const PurpleSavedStatusSub *substatus);
@@ -499,7 +499,7 @@
  * Returns: The message of the substatus, or NULL if this substatus does
  *         not have a message.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 const char *purple_savedstatus_substatus_get_message(const PurpleSavedStatusSub *substatus);
@@ -512,7 +512,7 @@
  * by the given saved_status.  This function calls
  * purple_savedstatus_activate_for_account() for all your accounts.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void purple_savedstatus_activate(PurpleSavedStatus *saved_status);
@@ -525,7 +525,7 @@
  * Sets the statuses for a given account to those specified
  * by the given saved_status.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void purple_savedstatus_activate_for_account(const PurpleSavedStatus *saved_status, PurpleAccount *account);
@@ -537,7 +537,7 @@
  *
  * Returns: the handle to the status subsystem
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void *purple_savedstatuses_get_handle(void);
@@ -547,7 +547,7 @@
  *
  * Initializes the status subsystem.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void purple_savedstatuses_init(void);
@@ -557,7 +557,7 @@
  *
  * Uninitializes the status subsystem.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void purple_savedstatuses_uninit(void);
diff --git a/libpurple/server.h b/libpurple/server.h
--- a/libpurple/server.h
+++ b/libpurple/server.h
@@ -51,7 +51,7 @@
  *         user is still typing then Purple will send another PURPLE_IM_TYPING
  *         message.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 /* TODO Could probably move this into the conversation API. */
 PURPLE_AVAILABLE_IN_3_0
@@ -65,7 +65,7 @@
  *
  * Move a buddy from one group to another on server.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 void purple_serv_move_buddy(PurpleBuddy *buddy, PurpleGroup *orig, PurpleGroup *dest);
@@ -79,7 +79,7 @@
  *
  * Returns: The error value returned from the protocol interface function.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 int  purple_serv_send_im(PurpleConnection *gc, PurpleMessage *msg);
@@ -97,7 +97,7 @@
  *
  * Invite a user to join a chat.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 void purple_serv_chat_invite(PurpleConnection *gc, int id, const char *message, const char *name);
@@ -109,7 +109,7 @@
  *
  * Called when the user requests leaving a chat.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 void purple_serv_chat_leave(PurpleConnection *gc, int id);
@@ -133,7 +133,7 @@
  * Returns:  A positive number or 0 in case of success, a
  *           negative error number in case of failure.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 int  purple_serv_chat_send(PurpleConnection *gc, int id, PurpleMessage *msg);
@@ -148,7 +148,7 @@
  *
  * Save/store buddy's alias on server list/roster
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 void purple_serv_alias_buddy(PurpleBuddy *buddy);
@@ -161,7 +161,7 @@
  *
  * Protocol should call this function when it retrieves an alias form the server.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 void purple_serv_got_alias(PurpleConnection *gc, const char *who, const char *alias);
@@ -176,7 +176,7 @@
  * the server.  Private aliases are the aliases the user sets, while public
  * aliases are the aliases or display names that buddies set for themselves.
  *
- * Since: 2.4.0
+ * Since: 2.4
  */
 PURPLE_AVAILABLE_IN_2_4
 void purple_serv_got_private_alias(PurpleConnection *gc, const char *who, const char *alias);
@@ -199,7 +199,7 @@
  *
  * @todo Could probably move this into the conversation API.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 void purple_serv_got_typing(PurpleConnection *gc, const char *name, int timeout,
@@ -214,7 +214,7 @@
  *
  * @todo Could probably move this into the conversation API.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 void purple_serv_got_typing_stopped(PurpleConnection *gc, const char *name);
@@ -229,7 +229,7 @@
  *
  * This function is called by the protocol when it receives an IM message.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 void purple_serv_got_im(PurpleConnection *gc, const char *who, const char *msg,
@@ -241,7 +241,7 @@
  * @data: The hash function should be g_str_hash() and the equal
  *             function should be g_str_equal().
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 void purple_serv_join_chat(PurpleConnection *gc, GHashTable *data);
@@ -252,7 +252,7 @@
  * @data: The hash function should be g_str_hash() and the equal
  *             function should be g_str_equal().
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 void purple_serv_reject_chat(PurpleConnection *gc, GHashTable *data);
@@ -269,7 +269,7 @@
  *
  * Called by a protocol when an account is invited into a chat.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 void purple_serv_got_chat_invite(PurpleConnection *gc, const char *name,
@@ -286,7 +286,7 @@
  *
  * Returns: (transfer none): The resulting conversation.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 PurpleConversation *purple_serv_got_joined_chat(PurpleConnection *gc,
@@ -302,7 +302,7 @@
  * Called by a protocol when an attempt to join a chat via purple_serv_join_chat()
  * fails.
  *
- * Since: 2.5.0
+ * Since: 2.5
  */
 PURPLE_AVAILABLE_IN_2_5
 void purple_serv_got_join_chat_failed(PurpleConnection *gc, GHashTable *data);
@@ -314,7 +314,7 @@
  *
  * Called by a protocol when an account has left a chat.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 void purple_serv_got_chat_left(PurpleConnection *g, int id);
@@ -330,7 +330,7 @@
  *
  * Called by a protocol when a message has been received in a chat.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 void purple_serv_got_chat_in(PurpleConnection *g, int id, const char *who,
@@ -344,7 +344,7 @@
  *
  * Send a filename to a given contact.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 void purple_serv_send_file(PurpleConnection *gc, const char *who, const char *file);
diff --git a/libpurple/signals.h b/libpurple/signals.h
--- a/libpurple/signals.h
+++ b/libpurple/signals.h
@@ -41,7 +41,7 @@
  *
  * A generic function pointer type used to register signals.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 typedef void (*PurpleSignalMarshalFunc)(GCallback cb, va_list args,
 									  void *data, void **return_val);
@@ -97,7 +97,7 @@
  * Returns: The signal ID local to that instance, or 0 if the signal
  *          couldn't be registered.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 gulong purple_signal_register(void *instance, const char *signal, PurpleSignalMarshalFunc marshal, GType ret_type, int num_values, ...);
@@ -109,7 +109,7 @@
  *
  * Unregisters a signal in an instance.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void purple_signal_unregister(void *instance, const char *signal);
@@ -120,7 +120,7 @@
  *
  * Unregisters all signals in an instance.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void purple_signals_unregister_by_instance(void *instance);
@@ -146,7 +146,7 @@
  *
  * Returns: The signal handler ID.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 gulong purple_signal_connect_priority(void *instance, const char *signal, void *handle, GCallback func, void *data, int priority);
@@ -169,7 +169,7 @@
  *
  * Returns: The signal handler ID.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 gulong purple_signal_connect(void *instance, const char *signal, void *handle, GCallback func, void *data);
@@ -185,7 +185,7 @@
  *
  * See purple_signal_connect()
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void purple_signal_disconnect(void *instance, const char *signal, void *handle, GCallback func);
@@ -196,7 +196,7 @@
  *
  * Removes all callbacks associated with a receiver handle.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void purple_signals_disconnect_by_handle(void *handle);
@@ -211,7 +211,7 @@
  *
  * See purple_signal_connect(), purple_signal_disconnect()
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void purple_signal_emit(void *instance, const char *signal, ...);
@@ -229,7 +229,7 @@
  *
  * Returns: The first non-NULL return value
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void *purple_signal_emit_return_1(void *instance, const char *signal, ...);
@@ -239,7 +239,7 @@
  *
  * Initializes the signals subsystem.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void purple_signals_init(void);
@@ -249,7 +249,7 @@
  *
  * Uninitializes the signals subsystem.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void purple_signals_uninit(void);
@@ -267,7 +267,7 @@
  *
  * A purple marshaller function for use with signals with no arguments.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void purple_marshal_VOID(GCallback cb, va_list args, void *data, void **return_val);
@@ -282,7 +282,7 @@
  * A purple marshaller function for use with signals with a single pointer
  * argument.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void purple_marshal_VOID__POINTER(GCallback cb, va_list args, void *data, void **return_val);
@@ -297,7 +297,7 @@
  * A purple marshaller function for use with signals with a pointer and
  * an unsigned integer argument.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void purple_marshal_VOID__POINTER_UINT(GCallback cb, va_list args, void *data, void **return_val);
@@ -312,7 +312,7 @@
  * A purple marshaller function for use with signals with a pointer and
  * two integer arguments.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void purple_marshal_VOID__POINTER_INT_INT(GCallback cb, va_list args, void *data, void **return_val);
@@ -327,7 +327,7 @@
  * A purple marshaller function for use with signals with a pointer, an
  * integer, and then another pointer argument.
  *
- * Since: 2.3.0
+ * Since: 2.3
  */
 PURPLE_AVAILABLE_IN_2_3
 void purple_marshal_VOID__POINTER_INT_POINTER(GCallback cb, va_list args, void *data, void **return_val);
@@ -342,7 +342,7 @@
  * A purple marshaller function for use with signals with two pointer
  * arguments.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void purple_marshal_VOID__POINTER_POINTER(
@@ -358,7 +358,7 @@
  * A purple marshaller function for use with signals with two pointers
  * and an unsigned integer argument.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void purple_marshal_VOID__POINTER_POINTER_UINT(
@@ -374,7 +374,7 @@
  * A purple marshaller function for use with signals with two pointers
  * and two unsigned integer arguments.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void purple_marshal_VOID__POINTER_POINTER_UINT_UINT(
@@ -390,7 +390,7 @@
  * A purple marshaller function for use with signals with a pointer and
  * two unsigned integer arguments.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 void purple_marshal_VOID__POINTER_UINT_UINT(
@@ -406,7 +406,7 @@
  * A purple marshaller function for use with signals with three pointer
  * arguments.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void purple_marshal_VOID__POINTER_POINTER_POINTER(GCallback cb, va_list args, void *data, void **return_val);
@@ -421,7 +421,7 @@
  * A purple marshaller function for use with signals with four pointer
  * arguments.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void purple_marshal_VOID__POINTER_POINTER_POINTER_POINTER(GCallback cb, va_list args, void *data, void **return_val);
@@ -436,7 +436,7 @@
  * A purple marshaller function for use with signals with five pointer
  * arguments.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void purple_marshal_VOID__POINTER_POINTER_POINTER_POINTER_POINTER(GCallback cb, va_list args, void *data, void **return_val);
@@ -451,7 +451,7 @@
  * A purple marshaller function for use with signals with three pointer
  * and one unsigned integer arguments.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void purple_marshal_VOID__POINTER_POINTER_POINTER_UINT(GCallback cb, va_list args, void *data, void **return_val);
@@ -466,7 +466,7 @@
  * A purple marshaller function for use with signals with four pointer and
  * one unsigned integer arguments.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void purple_marshal_VOID__POINTER_POINTER_POINTER_POINTER_UINT(GCallback cb, va_list args, void *data, void **return_val);
@@ -481,7 +481,7 @@
  * A purple marshaller function for use with signals with three pointer
  * and two unsigned integer arguments.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void purple_marshal_VOID__POINTER_POINTER_POINTER_UINT_UINT(GCallback cb, va_list args, void *data, void **return_val);
@@ -496,7 +496,7 @@
  * A purple marshaller function for use with signals with three pointer
  * arguments and returns an integer.
  *
- * Since: 2.8.0
+ * Since: 2.8
  */
 PURPLE_AVAILABLE_IN_2_8
 void purple_marshal_INT__POINTER_POINTER_POINTER(
@@ -512,7 +512,7 @@
  * A purple marshaller function for use with signals with five pointer
  * arguments and returns an integer.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void purple_marshal_INT__POINTER_POINTER_POINTER_POINTER_POINTER(GCallback cb, va_list args, void *data, void **return_val);
@@ -527,7 +527,7 @@
  * A purple marshaller function for use with signals with a single pointer
  * argument and returns a boolean.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void purple_marshal_BOOLEAN__POINTER(GCallback cb, va_list args, void *data, void **return_val);
@@ -542,7 +542,7 @@
  * A purple marshaller function for use with signals with two pointer
  * arguments and returns a boolean.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void purple_marshal_BOOLEAN__POINTER_POINTER(GCallback cb, va_list args, void *data, void **return_val);
@@ -557,7 +557,7 @@
  * A purple marshaller function for use with signals with a pointer and
  * boolean argument and returns a boolean.
  *
- * Since: 2.8.0
+ * Since: 2.8
  */
 PURPLE_AVAILABLE_IN_2_8
 void purple_marshal_BOOLEAN__POINTER_BOOLEAN(GCallback cb, va_list args, void *data, void **return_val);
@@ -572,7 +572,7 @@
  * A purple marshaller function for use with signals with three pointer
  * arguments and returns a boolean.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void purple_marshal_BOOLEAN__POINTER_POINTER_POINTER(GCallback cb, va_list args, void *data, void **return_val);
@@ -587,7 +587,7 @@
  * A purple marshaller function for use with signals with two pointer and
  * one unsigned integer arguments and returns a boolean.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void purple_marshal_BOOLEAN__POINTER_POINTER_UINT(GCallback cb, va_list args, void *data, void **return_val);
@@ -602,7 +602,7 @@
  * A purple marshaller function for use with signals with four pointer
  * arguments and returns a boolean.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void purple_marshal_BOOLEAN__POINTER_POINTER_POINTER_POINTER(GCallback cb, va_list args, void *data, void **return_val);
@@ -617,7 +617,7 @@
  * A purple marshaller function for use with signals with five pointer
  * arguments and returns a boolean.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void purple_marshal_BOOLEAN__POINTER_POINTER_POINTER_POINTER_POINTER(GCallback cb, va_list args, void *data, void **return_val);
@@ -632,7 +632,7 @@
  * A purple marshaller function for use with signals with six pointer
  * arguments and returns a boolean.
  *
- * Since: 2.6.0
+ * Since: 2.6
  */
 PURPLE_AVAILABLE_IN_2_6
 void purple_marshal_BOOLEAN__POINTER_POINTER_POINTER_POINTER_POINTER_POINTER(
diff --git a/libpurple/status.h b/libpurple/status.h
--- a/libpurple/status.h
+++ b/libpurple/status.h
@@ -46,7 +46,7 @@
  * hardcoded in each protocol and will not change often.  And because
  * they are hardcoded, they do not need to be saved to any XML file.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 typedef struct _PurpleStatusType PurpleStatusType;
 
@@ -83,7 +83,7 @@
  *
  * See <link linkend="libpurple-purplepresence">Presence API</link>
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 typedef struct _PurpleStatusAttribute PurpleStatusAttribute;
 
@@ -101,7 +101,7 @@
  *
  * A primitive defining the basic structure of a status type.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 /*
  * If you add a value to this enum, make sure you update
@@ -138,7 +138,7 @@
  *
  * Returns: The unique ID for this type.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 const char *purple_primitive_get_id_from_type(PurpleStatusPrimitive type);
@@ -153,7 +153,7 @@
  *
  * Returns: The name of this type, suitable for users to see.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 const char *purple_primitive_get_name_from_type(PurpleStatusPrimitive type);
@@ -167,7 +167,7 @@
  *
  * Returns: The PurpleStatusPrimitive value.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 PurpleStatusPrimitive purple_primitive_get_type_from_id(const char *id);
@@ -183,7 +183,7 @@
  *
  * Returns: The #GType for #PurpleStatusType.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 GType purple_status_type_get_type(void);
@@ -204,7 +204,7 @@
  *
  * Returns: (transfer full): A new status type.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 PurpleStatusType *purple_status_type_new_full(PurpleStatusPrimitive primitive,
@@ -227,7 +227,7 @@
  *
  * Returns: (transfer full): A new status type.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 PurpleStatusType *purple_status_type_new(PurpleStatusPrimitive primitive,
@@ -254,7 +254,7 @@
  *
  * Returns: (transfer full): A new status type.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 PurpleStatusType *purple_status_type_new_with_attrs(PurpleStatusPrimitive primitive,
@@ -287,7 +287,7 @@
  *
  * Returns: (transfer full): A new status type.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 PurpleStatusType *purple_status_type_new_with_attrsv(PurpleStatusPrimitive primitive,
@@ -307,7 +307,7 @@
  *
  * Destroys a status type.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void purple_status_type_destroy(PurpleStatusType *status_type);
@@ -320,7 +320,7 @@
  *
  * Returns: The primitive type of the status type.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 PurpleStatusPrimitive purple_status_type_get_primitive(
@@ -334,7 +334,7 @@
  *
  * Returns: The ID of the status type.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 const char *purple_status_type_get_id(const PurpleStatusType *status_type);
@@ -347,7 +347,7 @@
  *
  * Returns: The name of the status type.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 const char *purple_status_type_get_name(const PurpleStatusType *status_type);
@@ -361,7 +361,7 @@
  * Returns: TRUE if user-defined statuses based off this type are saveable.
  *         FALSE otherwise.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 gboolean purple_status_type_is_saveable(const PurpleStatusType *status_type);
@@ -376,7 +376,7 @@
  * Returns: TRUE if the status type can be set or modified by the user.
  *         FALSE if it's a protocol-set setting.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 gboolean purple_status_type_is_user_settable(const PurpleStatusType *status_type);
@@ -392,7 +392,7 @@
  *
  * Returns: TRUE if the status type is independent, or FALSE otherwise.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 gboolean purple_status_type_is_independent(const PurpleStatusType *status_type);
@@ -405,7 +405,7 @@
  *
  * Returns: TRUE if the status type is exclusive, FALSE otherwise.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 gboolean purple_status_type_is_exclusive(const PurpleStatusType *status_type);
@@ -420,7 +420,7 @@
  *
  * Returns: TRUE if the status is available, or FALSE otherwise.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 gboolean purple_status_type_is_available(const PurpleStatusType *status_type);
@@ -434,7 +434,7 @@
  *
  * Returns: The attribute, if found. NULL otherwise.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 PurpleStatusAttribute *purple_status_type_get_attr(const PurpleStatusType *status_type,
@@ -448,7 +448,7 @@
  *
  * Returns: (element-type PurpleStatusAttribute) (transfer none): The list of attributes.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 GList *purple_status_type_get_attrs(const PurpleStatusType *status_type);
@@ -464,7 +464,7 @@
  * Returns: The status type with the given ID, or NULL if one could
  *         not be found.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 const PurpleStatusType *purple_status_type_find_with_id(GList *status_types,
@@ -481,7 +481,7 @@
  *
  * Returns: The #GType for the #PurpleStatusAttribute boxed structure.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 GType purple_status_attribute_get_type(void);
@@ -496,7 +496,7 @@
  *
  * Returns: A new status attribute.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 PurpleStatusAttribute *purple_status_attribute_new(const char *id, const char *name,
@@ -508,7 +508,7 @@
  *
  * Destroys a status attribute.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 void purple_status_attribute_destroy(PurpleStatusAttribute *attr);
@@ -521,7 +521,7 @@
  *
  * Returns: The status attribute's ID.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 const char *purple_status_attribute_get_id(const PurpleStatusAttribute *attr);
@@ -534,7 +534,7 @@
  *
  * Returns: The status attribute's name.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 const char *purple_status_attribute_get_name(const PurpleStatusAttribute *attr);
@@ -547,7 +547,7 @@
  *
  * Returns: The status attribute's value.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 GValue *purple_status_attribute_get_value(const PurpleStatusAttribute *attr);
@@ -563,7 +563,7 @@
  *
  * Returns: The #GType for #PurpleStatus.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 G_DECLARE_FINAL_TYPE(PurpleStatus, purple_status, PURPLE, STATUS, GObject)
@@ -577,7 +577,7 @@
  *
  * Returns: The new status.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 PurpleStatus *purple_status_new(PurpleStatusType *status_type,
@@ -592,7 +592,7 @@
  *
  * This should only be called by the account, conversation, and buddy APIs.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void purple_status_set_active(PurpleStatus *status, gboolean active);
@@ -610,7 +610,7 @@
  *
  * This should only be called by the account, conversation, and buddy APIs.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 void purple_status_set_active_with_attributes(PurpleStatus *status, gboolean active, GHashTable *attrs);
@@ -623,7 +623,7 @@
  *
  * Returns: The status's type.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 PurpleStatusType *purple_status_get_status_type(PurpleStatus *status);
@@ -636,7 +636,7 @@
  *
  * Returns: (transfer none): The status's presence.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 PurplePresence *purple_status_get_presence(PurpleStatus *status);
@@ -652,7 +652,7 @@
  *
  * Returns: The status's ID.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 const char *purple_status_get_id(PurpleStatus *status);
@@ -668,7 +668,7 @@
  *
  * Returns: The status's name.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 const char *purple_status_get_name(PurpleStatus *status);
@@ -684,7 +684,7 @@
  *
  * Returns: TRUE if the status is independent, or FALSE otherwise.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 gboolean purple_status_is_independent(PurpleStatus *status);
@@ -700,7 +700,7 @@
  *
  * Returns: TRUE if the status is exclusive, FALSE otherwise.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 gboolean purple_status_is_exclusive(PurpleStatus *status);
@@ -718,7 +718,7 @@
  *
  * Returns: TRUE if the status is available, or FALSE otherwise.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 gboolean purple_status_is_available(PurpleStatus *status);
@@ -731,7 +731,7 @@
  *
  * Returns: The active state of the status.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 gboolean purple_status_is_active(PurpleStatus *status);
@@ -744,7 +744,7 @@
  *
  * Returns: TRUE if the status is considered online, FALSE otherwise
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 gboolean purple_status_is_online(PurpleStatus *status);
@@ -758,7 +758,7 @@
  *
  * Returns: The value of the attribute.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 GValue *purple_status_get_attr_value(PurpleStatus *status,
@@ -773,7 +773,7 @@
  *
  * Returns: The boolean value of the attribute.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 gboolean purple_status_get_attr_boolean(PurpleStatus *status,
@@ -788,7 +788,7 @@
  *
  * Returns: The integer value of the attribute.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 int purple_status_get_attr_int(PurpleStatus *status, const char *id);
@@ -802,7 +802,7 @@
  *
  * Returns: The string value of the attribute.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 const char *purple_status_get_attr_string(PurpleStatus *status, const char *id);
@@ -818,7 +818,7 @@
  *           0 if @status1 is equal to @status2.
  *           1 if @status2 is more available than @status1.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 gint purple_status_compare(PurpleStatus *status1, PurpleStatus *status2);
@@ -834,7 +834,7 @@
  *
  * Returns: the handle to the status subsystem
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 void *purple_statuses_get_handle(void);
@@ -844,7 +844,7 @@
  *
  * Initializes the status subsystem.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 void purple_statuses_init(void);
@@ -854,7 +854,7 @@
  *
  * Uninitializes the status subsystem.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 void purple_statuses_uninit(void);
@@ -874,7 +874,7 @@
  *
  * Returns: (element-type utf8 gpointer) (transfer container): The hash table of attributes.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 GHashTable *purple_attrs_from_vargs(va_list args);
diff --git a/libpurple/util.h b/libpurple/util.h
--- a/libpurple/util.h
+++ b/libpurple/util.h
@@ -45,7 +45,7 @@
  *
  * Initializes the utility subsystem.
  *
- * Since: 2.3.0
+ * Since: 2.3
  */
 PURPLE_AVAILABLE_IN_2_3
 void purple_util_init(void);
@@ -55,7 +55,7 @@
  *
  * Uninitializes the util subsystem.
  *
- * Since: 2.3.0
+ * Since: 2.3
  */
 PURPLE_AVAILABLE_IN_2_3
 void purple_util_uninit(void);
@@ -78,7 +78,7 @@
  *
  * Returns: TRUE if the file was written successfully.  FALSE otherwise.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 gboolean
@@ -98,7 +98,7 @@
  *
  * Returns: TRUE if the file was written successfully.  FALSE otherwise.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 gboolean
@@ -118,7 +118,7 @@
  *
  * Returns: TRUE if the file was written successfully.  FALSE otherwise.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 gboolean
@@ -139,7 +139,7 @@
  * Returns: An PurpleXmlNode tree of the contents of the given file.  Or NULL, if
  *         the file does not exist or there was an error reading the file.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 PurpleXmlNode *
@@ -160,7 +160,7 @@
  * Returns: An PurpleXmlNode tree of the contents of the given file.  Or NULL, if
  *         the file does not exist or there was an error reading the file.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 PurpleXmlNode *
@@ -181,7 +181,7 @@
  * Returns: An PurpleXmlNode tree of the contents of the given file.  Or NULL, if
  *         the file does not exist or there was an error reading the file.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 PurpleXmlNode *
@@ -198,7 +198,7 @@
  *
  * Returns: TRUE if running GNOME, FALSE otherwise.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 gboolean purple_running_gnome(void);
@@ -210,7 +210,7 @@
  *
  * Returns: TRUE if running KDE, FALSE otherwise.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 gboolean purple_running_kde(void);
@@ -231,7 +231,7 @@
  *
  * Returns: %TRUE if the strings are the same, else %FALSE.
  *
- * Since: 2.6.0
+ * Since: 2.6
  */
 PURPLE_AVAILABLE_STATIC_INLINE_IN_2_6
 static inline gboolean
@@ -248,7 +248,7 @@
  *
  * Returns: %TRUE if the @str is %NULL or an empty string.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_STATIC_INLINE_IN_3_0
 static inline gboolean
@@ -274,7 +274,7 @@
  *
  * Returns: A pointer to the normalized version stored in a static buffer.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 const char *purple_normalize(PurpleAccount *account, const char *str);
@@ -288,7 +288,7 @@
  *
  * Returns: TRUE, if string is valid, otherwise FALSE.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 gboolean purple_validate(PurpleProtocol *protocol, const char *str);
@@ -302,7 +302,7 @@
  *
  * Returns: The new string.  Must be g_free'd by the caller.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 gchar *purple_strdup_withhtml(const gchar *src);
@@ -319,7 +319,7 @@
  * Example usage:
  * purple_str_strip_char(my_dumb_string, '\n');
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void purple_str_strip_char(char *str, char thechar);
@@ -335,7 +335,7 @@
  * with another.  This happens inline (the original string IS
  * modified).
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void purple_util_chrreplace(char *string, char delimiter,
@@ -354,7 +354,7 @@
  * Returns: A new string, after performing the substitution.
  *         free this with g_free().
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 gchar *purple_strreplace(const char *string, const char *delimiter,
@@ -369,7 +369,7 @@
  * Returns: A human-readable form, containing days, hours, minutes, and
  *         seconds.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 char *purple_str_seconds_to_string(guint sec);
@@ -382,7 +382,7 @@
  *
  * It should be used to free sensitive data, like passwords.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 void purple_str_wipe(gchar *str);
@@ -401,7 +401,7 @@
  * Returns: %TRUE if @pattern occurs in sequential order in @str, %FALSE
  *          otherwise.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 gboolean purple_strmatches(const char *pattern, const char *str);
@@ -423,7 +423,7 @@
  *
  * Returns: The resulting string.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 const char *purple_url_encode(const char *str);
@@ -436,7 +436,7 @@
  *
  * Returns: True if the email address is syntactically correct.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 gboolean purple_email_is_valid(const char *address);
@@ -455,7 +455,7 @@
  *
  * Returns: The UTF-8 string, or %NULL if it could not be converted.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 gchar *purple_utf8_try_convert(const char *str);
@@ -472,7 +472,7 @@
  *
  * Returns: A newly allocated UTF-8 string without the unprintable characters.
  *
- * Since: 2.6.0
+ * Since: 2.6
  */
 PURPLE_AVAILABLE_IN_2_6
 gchar *purple_utf8_strip_unprintables(const gchar *str);
@@ -491,7 +491,7 @@
  *           0 if @a is equal to @b.
  *           1 if @a is greater than @b.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 int purple_utf8_strcasecmp(const char *a, const char *b);
@@ -507,7 +507,7 @@
  *
  * Returns: TRUE if haystack has the word, otherwise FALSE
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 gboolean purple_utf8_has_word(const char *haystack, const char *needle);
@@ -521,7 +521,7 @@
  *
  * Returns: The stripped string
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 char *purple_text_strip_mnemonic(const char *in);
@@ -534,7 +534,7 @@
  *
  * Returns: The resulting string.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 const char *purple_escape_filename(const char *str);
@@ -547,7 +547,7 @@
  *
  * Returns:  The created GValue
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 GValue *purple_value_new(GType type);
@@ -560,7 +560,7 @@
  *
  * Returns:  The duplicated GValue
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 GValue *purple_value_dup(GValue *value);
@@ -571,7 +571,7 @@
  *
  * Frees a GValue.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 void purple_value_free(GValue *value);
diff --git a/libpurple/xfer.h b/libpurple/xfer.h
--- a/libpurple/xfer.h
+++ b/libpurple/xfer.h
@@ -50,7 +50,7 @@
  *
  * Types of file transfers.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 typedef enum
 {
@@ -73,7 +73,7 @@
  *
  * The different states of the xfer.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 typedef enum
 {
@@ -95,7 +95,7 @@
  *
  * A representation of a file transfer.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 
 PURPLE_AVAILABLE_IN_ALL
@@ -110,7 +110,7 @@
  * Any UI representing a file transfer must assign a filled-out
  * PurpleXferUiOps structure to the purple_xfer.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 struct _PurpleXferUiOps
 {
@@ -129,15 +129,15 @@
  * @read: Called when reading data from the file transfer.
  * @write: Called when writing data to the file transfer.
  * @ack: Called when a file transfer is acknowledged.
- * @open_local: The vfunc for PurpleXfer::open-local. Since: 3.0.0
- * @query_local: The vfunc for PurpleXfer::query-local. Since: 3.0.0
- * @read_local: The vfunc for PurpleXfer::read-local. Since: 3.0.0
- * @write_local: The vfunc for PurpleXfer::write-local. Since: 3.0.0
- * @data_not_sent: The vfunc for PurpleXfer::data-not-sent. Since: 3.0.0
+ * @open_local: The vfunc for PurpleXfer::open-local. Since: 3.0
+ * @query_local: The vfunc for PurpleXfer::query-local. Since: 3.0
+ * @read_local: The vfunc for PurpleXfer::read-local. Since: 3.0
+ * @write_local: The vfunc for PurpleXfer::write-local. Since: 3.0
+ * @data_not_sent: The vfunc for PurpleXfer::data-not-sent. Since: 3.0
  *
  * Base class for all #PurpleXfer's
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 struct _PurpleXferClass
 {
@@ -179,7 +179,7 @@
  *
  * Returns: A file transfer handle.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 PurpleXfer *purple_xfer_new(PurpleAccount *account, PurpleXferType type, const char *who);
@@ -194,7 +194,7 @@
  * to accept the file transfer. In this case protocol must call this function
  * again once the filename is available.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void purple_xfer_request(PurpleXfer *xfer);
@@ -206,7 +206,7 @@
  *
  * Called if the user accepts the file transfer request.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void purple_xfer_request_accepted(PurpleXfer *xfer, const gchar *filename);
@@ -217,7 +217,7 @@
  *
  * Called if the user rejects the file transfer request.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void purple_xfer_request_denied(PurpleXfer *xfer);
@@ -230,7 +230,7 @@
  *
  * Returns: The socket file descriptor.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 int purple_xfer_get_fd(PurpleXfer *xfer);
@@ -243,7 +243,7 @@
  *
  * Returns: The watcher.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 int purple_xfer_get_watcher(PurpleXfer *xfer);
@@ -256,7 +256,7 @@
  *
  * Returns: The type of the file transfer.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 PurpleXferType purple_xfer_get_xfer_type(PurpleXfer *xfer);
@@ -269,7 +269,7 @@
  *
  * Returns: (transfer none): The account.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 PurpleAccount *purple_xfer_get_account(PurpleXfer *xfer);
@@ -281,7 +281,7 @@
  *
  * Sets the name of the remote user.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 void purple_xfer_set_remote_user(PurpleXfer *xfer, const char *who);
@@ -294,7 +294,7 @@
  *
  * Returns: The name of the remote user.
  *
- * Since: 2.1.0
+ * Since: 2.1
  */
 PURPLE_AVAILABLE_IN_2_1
 const char *purple_xfer_get_remote_user(PurpleXfer *xfer);
@@ -307,7 +307,7 @@
  *
  * Returns: The status.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 PurpleXferStatus purple_xfer_get_status(PurpleXfer *xfer);
@@ -322,7 +322,7 @@
  *
  * Returns: The visibility.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 gboolean purple_xfer_get_visible(PurpleXfer *xfer);
@@ -335,7 +335,7 @@
  *
  * Returns: Whether or not the transfer was cancelled.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 gboolean purple_xfer_is_cancelled(PurpleXfer *xfer);
@@ -348,7 +348,7 @@
  *
  * Returns: The completed state.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 gboolean purple_xfer_is_completed(PurpleXfer *xfer);
@@ -361,7 +361,7 @@
  *
  * Returns: The filename.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 const char *purple_xfer_get_filename(PurpleXfer *xfer);
@@ -374,7 +374,7 @@
  *
  * Returns: The destination filename.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 const char *purple_xfer_get_local_filename(PurpleXfer *xfer);
@@ -387,7 +387,7 @@
  *
  * Returns: The number of bytes sent.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 goffset purple_xfer_get_bytes_sent(PurpleXfer *xfer);
@@ -400,7 +400,7 @@
  *
  * Returns: The number of bytes remaining.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 goffset purple_xfer_get_bytes_remaining(PurpleXfer *xfer);
@@ -413,7 +413,7 @@
  *
  * Returns: The total size of the file.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 goffset purple_xfer_get_size(PurpleXfer *xfer);
@@ -428,7 +428,7 @@
  *
  * Returns: The percentage complete.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 double purple_xfer_get_progress(PurpleXfer *xfer);
@@ -441,7 +441,7 @@
  *
  * Returns: The port number on this end.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 guint16 purple_xfer_get_local_port(PurpleXfer *xfer);
@@ -454,7 +454,7 @@
  *
  * Returns: The IP address on the other end.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 const char *purple_xfer_get_remote_ip(PurpleXfer *xfer);
@@ -467,7 +467,7 @@
  *
  * Returns: The port number on the other end.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 guint16 purple_xfer_get_remote_port(PurpleXfer *xfer);
@@ -480,7 +480,7 @@
  *
  * Returns: The monotonic time when the transfer started.
  *
- * Since: 2.4.0
+ * Since: 2.4
  */
 PURPLE_AVAILABLE_IN_2_4
 gint64 purple_xfer_get_start_time(PurpleXfer *xfer);
@@ -493,7 +493,7 @@
  *
  * Returns: The monotonic time when the transfer ended.
  *
- * Since: 2.4.0
+ * Since: 2.4
  */
 PURPLE_AVAILABLE_IN_2_4
 gint64 purple_xfer_get_end_time(PurpleXfer *xfer);
@@ -505,7 +505,7 @@
  *
  * Sets the socket file descriptor.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 void purple_xfer_set_fd(PurpleXfer *xfer, int fd);
@@ -517,7 +517,7 @@
  *
  * Sets the watcher for the file transfer.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 void purple_xfer_set_watcher(PurpleXfer *xfer, int watcher);
@@ -529,7 +529,7 @@
  *
  * Sets the completed state for the file transfer.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void purple_xfer_set_completed(PurpleXfer *xfer, gboolean completed);
@@ -541,7 +541,7 @@
  *
  * Sets the current status for the file transfer.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 void purple_xfer_set_status(PurpleXfer *xfer, PurpleXferStatus status);
@@ -555,7 +555,7 @@
  *
  * Note, this is just a hint for UIs and has no effect internally.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 void purple_xfer_set_visible(PurpleXfer *xfer, gboolean visible);
@@ -567,7 +567,7 @@
  *
  * Sets the message for the file transfer.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void purple_xfer_set_message(PurpleXfer *xfer, const char *message);
@@ -580,7 +580,7 @@
  *
  * Returns: The message.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 const char *purple_xfer_get_message(PurpleXfer *xfer);
@@ -592,7 +592,7 @@
  *
  * Sets the filename for the file transfer.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void purple_xfer_set_filename(PurpleXfer *xfer, const char *filename);
@@ -604,7 +604,7 @@
  *
  * Sets the local filename for the file transfer.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void purple_xfer_set_local_filename(PurpleXfer *xfer, const char *filename);
@@ -616,7 +616,7 @@
  *
  * Sets the size of the file in a file transfer.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void purple_xfer_set_size(PurpleXfer *xfer, goffset size);
@@ -628,7 +628,7 @@
  *
  * Sets the local port of the file transfer.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 void purple_xfer_set_local_port(PurpleXfer *xfer, guint16 local_port);
@@ -647,7 +647,7 @@
  *
  * It's used for pausing and resuming an oscar file transfer.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void purple_xfer_set_bytes_sent(PurpleXfer *xfer, goffset bytes_sent);
@@ -660,7 +660,7 @@
  *
  * Returns: The UI operations structure.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 PurpleXferUiOps *purple_xfer_get_ui_ops(PurpleXfer *xfer);
@@ -674,7 +674,7 @@
  *
  * Returns: The number of bytes read, or -1.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 gssize purple_xfer_read(PurpleXfer *xfer, guchar **buffer);
@@ -689,7 +689,7 @@
  *
  * Returns: The number of bytes written, or -1.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 gssize purple_xfer_write(PurpleXfer *xfer, const guchar *buffer, gsize size);
@@ -704,7 +704,7 @@
  *
  * Returns: TRUE on success, FALSE otherwise.
  *
- * Since: 2.11.0
+ * Since: 2.11
  */
 PURPLE_AVAILABLE_IN_2_11
 gboolean purple_xfer_write_file(PurpleXfer *xfer, const guchar *buffer, gsize size);
@@ -720,7 +720,7 @@
  * Returns: Number of bytes written (0 means, the device is busy), or -1 on
  *         failure.
  *
- * Since: 2.11.0
+ * Since: 2.11
  */
 PURPLE_AVAILABLE_IN_2_11
 gssize purple_xfer_read_file(PurpleXfer *xfer, guchar *buffer, gsize size);
@@ -741,7 +741,7 @@
  * Passing @fd as '-1' is a special-case and indicates to the
  * protocol to facilitate the file transfer itself.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void purple_xfer_start(PurpleXfer *xfer, int fd, const char *ip, guint16 port);
@@ -752,7 +752,7 @@
  *
  * Ends a file transfer.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void purple_xfer_end(PurpleXfer *xfer);
@@ -763,7 +763,7 @@
  *
  * Cancels a file transfer on the local end.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void purple_xfer_cancel_local(PurpleXfer *xfer);
@@ -774,7 +774,7 @@
  *
  * Cancels a file transfer from the remote end.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void purple_xfer_cancel_remote(PurpleXfer *xfer);
@@ -792,7 +792,7 @@
  * specifies a title ("File transfer to <literal>user</literal> failed" or
  * "File Transfer from <literal>user</literal> failed").
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void purple_xfer_error(PurpleXferType type, PurpleAccount *account, const char *who, const char *msg);
@@ -807,7 +807,7 @@
  *
  * This is a wrapper around purple_conversation_write_system_message.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void purple_xfer_conversation_write(PurpleXfer *xfer, const gchar *message, gboolean is_error);
@@ -820,7 +820,7 @@
  * the direction of the file transfer. Used when the UI is providing
  * read/write/data_not_sent UI ops.
  *
- * Since: 2.6.0
+ * Since: 2.6
  */
 PURPLE_AVAILABLE_IN_2_6
 void purple_xfer_ui_ready(PurpleXfer *xfer);
@@ -833,7 +833,7 @@
  * the direction of the file transfer. Used when the protocol provides read/write
  * ops and cannot/does not provide a raw fd to the core.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 void purple_xfer_protocol_ready(PurpleXfer *xfer);
@@ -848,7 +848,7 @@
  *
  * Returns: The thumbnail data, or NULL if there is no thumbnail
  *
- * Since: 2.7.0
+ * Since: 2.7
  */
 PURPLE_AVAILABLE_IN_2_7
 gconstpointer purple_xfer_get_thumbnail(PurpleXfer *xfer, gsize *len);
@@ -861,7 +861,7 @@
  *
  * Returns: The mimetype of the thumbnail, or %NULL if not thumbnail is set
  *
- * Since: 2.7.0
+ * Since: 2.7
  */
 PURPLE_AVAILABLE_IN_2_7
 const gchar *purple_xfer_get_thumbnail_mimetype(PurpleXfer *xfer);
@@ -876,7 +876,7 @@
  *
  * Sets the thumbnail data for a transfer
  *
- * Since: 2.7.0
+ * Since: 2.7
  */
 PURPLE_AVAILABLE_IN_2_7
 void purple_xfer_set_thumbnail(PurpleXfer *xfer, gconstpointer thumbnail,
@@ -891,7 +891,7 @@
  * Prepare a thumbnail for a transfer (if the UI supports it)
  * will be no-op in case the UI doesn't implement thumbnail creation
  *
- * Since: 2.7.0
+ * Since: 2.7
  */
 PURPLE_AVAILABLE_IN_2_7
 void purple_xfer_prepare_thumbnail(PurpleXfer *xfer, const gchar *formats);
@@ -907,7 +907,7 @@
  *
  * Returns: The #GType for the #PurpleXferUiOps boxed structure.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 GType purple_xfer_ui_ops_get_type(void);
@@ -920,7 +920,7 @@
  * Returns: (element-type Purple.Xfer) (transfer none): all current xfers
  *          with refs
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 GList *purple_xfers_get_all(void);
@@ -932,7 +932,7 @@
  *
  * Returns: The handle.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void *purple_xfers_get_handle(void);
@@ -942,7 +942,7 @@
  *
  * Initializes the file transfer subsystem.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void purple_xfers_init(void);
@@ -952,7 +952,7 @@
  *
  * Uninitializes the file transfer subsystem.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void purple_xfers_uninit(void);
@@ -963,7 +963,7 @@
  *
  * Sets the UI operations structure to be used in all purple file transfers.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void purple_xfers_set_ui_ops(PurpleXferUiOps *ops);
@@ -975,7 +975,7 @@
  *
  * Returns: The UI operations structure.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 PurpleXferUiOps *purple_xfers_get_ui_ops(void);
@@ -1000,7 +1000,7 @@
  *
  * This interface provides file transfer callbacks for the protocol.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 struct _PurpleProtocolXferInterface {
 	/*< private >*/
@@ -1028,7 +1028,7 @@
  *
  * Returns: TRUE on success, FALSE otherwise.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 gboolean purple_protocol_xfer_can_receive(PurpleProtocolXfer *prplxfer, PurpleConnection *connection, const gchar *who);
@@ -1042,7 +1042,7 @@
  *
  * Sends @filename to @who.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 void purple_protocol_xfer_send_file(PurpleProtocolXfer *prplxfer, PurpleConnection *connection, const gchar *who, const gchar *filename);
@@ -1057,7 +1057,7 @@
  *
  * Returns: (transfer full): A new #PurpleXfer instance.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 PurpleXfer *purple_protocol_xfer_new_xfer(PurpleProtocolXfer *prplxfer, PurpleConnection *connection, const gchar *who);
diff --git a/libpurple/xfer.c b/libpurple/xfer.c
--- a/libpurple/xfer.c
+++ b/libpurple/xfer.c
@@ -2298,7 +2298,7 @@
 	 * Returns: %TRUE if the file was opened successfully, or %FALSE otherwise,
 	 *          and the transfer should be cancelled (libpurple will cancel).
 	 *
-	 * Since: 3.0.0
+	 * Since: 3.0
 	 */
 	signals[SIG_OPEN_LOCAL] = g_signal_new(
 	        "open-local", G_TYPE_FROM_CLASS(klass), G_SIGNAL_RUN_LAST,
@@ -2324,7 +2324,7 @@
 	 *          otherwise, and the transfer should be cancelled (libpurple will
 	 *          cancel).
 	 *
-	 * Since: 3.0.0
+	 * Since: 3.0
 	 */
 	signals[SIG_QUERY_LOCAL] = g_signal_new(
 	        "query-local", G_TYPE_FROM_CLASS(klass), G_SIGNAL_RUN_LAST,
@@ -2350,7 +2350,7 @@
 	 *          and a negative value if an error occurred and the transfer
 	 *          should be cancelled (libpurple will cancel).
 	 *
-	 * Since: 3.0.0
+	 * Since: 3.0
 	 */
 	signals[SIG_READ_LOCAL] = g_signal_new(
 	        "read-local", G_TYPE_FROM_CLASS(klass), G_SIGNAL_RUN_LAST,
@@ -2377,7 +2377,7 @@
 	 * Returns: @size if the write was successful, or a value between 0 and
 	 *          @size on error.
 	 *
-	 * Since: 3.0.0
+	 * Since: 3.0
 	 */
 	signals[SIG_WRITE_LOCAL] = g_signal_new(
 	        "write-local", G_TYPE_FROM_CLASS(klass), G_SIGNAL_RUN_LAST,
@@ -2403,7 +2403,7 @@
 	 *          otherwise, and the transfer should be cancelled (libpurple
 	 *          will cancel).
 	 *
-	 * Since: 3.0.0
+	 * Since: 3.0
 	 */
 	signals[SIG_DATA_NOT_SENT] = g_signal_new(
 	        "data-not-sent", G_TYPE_FROM_CLASS(klass), G_SIGNAL_RUN_LAST,
@@ -2418,7 +2418,7 @@
 	 *
 	 * Request that a thumbnail be added to a file transfer.
 	 *
-	 * Since: 3.0.0
+	 * Since: 3.0
 	 */
 	signals[SIG_ADD_THUMBNAIL] = g_signal_new(
 	        "add-thumbnail", G_TYPE_FROM_CLASS(klass), G_SIGNAL_ACTION, 0, NULL,
diff --git a/libpurple/xmlnode.h b/libpurple/xmlnode.h
--- a/libpurple/xmlnode.h
+++ b/libpurple/xmlnode.h
@@ -92,7 +92,7 @@
  *
  * Returns: The #GType for the #PurpleXmlNode boxed structure.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 GType purple_xmlnode_get_type(void);
@@ -105,7 +105,7 @@
  *
  * Returns: The new node.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 PurpleXmlNode *purple_xmlnode_new(const char *name);
@@ -119,7 +119,7 @@
  *
  * Returns: The new child node.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 PurpleXmlNode *purple_xmlnode_new_child(PurpleXmlNode *parent, const char *name);
@@ -131,7 +131,7 @@
  *
  * Inserts a node into a node as a child.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 void purple_xmlnode_insert_child(PurpleXmlNode *parent, PurpleXmlNode *child);
@@ -145,7 +145,7 @@
  *
  * Returns: The child or NULL.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 PurpleXmlNode *purple_xmlnode_get_child(const PurpleXmlNode *parent, const char *name);
@@ -160,7 +160,7 @@
  *
  * Returns: The child or NULL.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 PurpleXmlNode *purple_xmlnode_get_child_with_namespace(const PurpleXmlNode *parent, const char *name, const char *xmlns);
@@ -173,7 +173,7 @@
  *
  * Returns: The twin of node or NULL.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 PurpleXmlNode *purple_xmlnode_get_next_twin(PurpleXmlNode *node);
@@ -187,7 +187,7 @@
  *
  * Inserts data into a node.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 void purple_xmlnode_insert_data(PurpleXmlNode *node, const char *data, gssize size);
@@ -201,7 +201,7 @@
  * Returns: The data from the node or NULL. This data is in raw escaped format.
  *         You must g_free this string when finished using it.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 char *purple_xmlnode_get_data(const PurpleXmlNode *node);
@@ -215,7 +215,7 @@
  * Returns: The data from the node, in unescaped form.   You must g_free
  *         this string when finished using it.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 char *purple_xmlnode_get_data_unescaped(const PurpleXmlNode *node);
@@ -228,7 +228,7 @@
  *
  * Sets an attribute for a node.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 void purple_xmlnode_set_attrib(PurpleXmlNode *node, const char *attr, const char *value);
@@ -243,7 +243,7 @@
  *
  * Sets a namespaced attribute for a node
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 void purple_xmlnode_set_attrib_full(PurpleXmlNode *node, const char *attr, const char *xmlns,
@@ -258,7 +258,7 @@
  *
  * Returns: The value of the attribute.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 const char *purple_xmlnode_get_attrib(const PurpleXmlNode *node, const char *attr);
@@ -273,7 +273,7 @@
  *
  * Returns: The value of the attribute/
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 const char *purple_xmlnode_get_attrib_with_namespace(const PurpleXmlNode *node, const char *attr, const char *xmlns);
@@ -285,7 +285,7 @@
  *
  * Removes an attribute from a node.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 void purple_xmlnode_remove_attrib(PurpleXmlNode *node, const char *attr);
@@ -298,7 +298,7 @@
  *
  * Removes a namespaced attribute from a node
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 void purple_xmlnode_remove_attrib_with_namespace(PurpleXmlNode *node, const char *attr, const char *xmlns);
@@ -310,7 +310,7 @@
  *
  * Sets the namespace of a node
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 void purple_xmlnode_set_namespace(PurpleXmlNode *node, const char *xmlns);
@@ -323,7 +323,7 @@
  *
  * Returns: The namespace of this node
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 const char *purple_xmlnode_get_namespace(const PurpleXmlNode *node);
@@ -349,7 +349,7 @@
  *
  * Returns: The default namespace of this node
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 const char *purple_xmlnode_get_default_namespace(const PurpleXmlNode *node);
@@ -363,7 +363,7 @@
  *
  * Returns: The namespace for this prefix.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 const char *purple_xmlnode_get_prefix_namespace(const PurpleXmlNode *node, const char *prefix);
@@ -375,7 +375,7 @@
  *
  * Sets the prefix of a node
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 void purple_xmlnode_set_prefix(PurpleXmlNode *node, const char *prefix);
@@ -388,7 +388,7 @@
  *
  * Returns: The prefix of this node
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 const char *purple_xmlnode_get_prefix(const PurpleXmlNode *node);
@@ -405,7 +405,7 @@
  * break some applications (SOAP / XPath apparently often rely on
  * the prefixes having the same name.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 void purple_xmlnode_strip_prefixes(PurpleXmlNode *node);
@@ -418,7 +418,7 @@
  *
  * Returns: The parent or NULL.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 PurpleXmlNode *purple_xmlnode_get_parent(const PurpleXmlNode *child);
@@ -433,7 +433,7 @@
  * Returns: The node represented as a string.  You must
  *         g_free this string when finished using it.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 char *purple_xmlnode_to_str(const PurpleXmlNode *node, int *len);
@@ -449,7 +449,7 @@
  *         tab and new line characters.  You must
  *         g_free this string when finished using it.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 char *purple_xmlnode_to_formatted_str(const PurpleXmlNode *node, int *len);
@@ -466,7 +466,7 @@
  *
  * Returns: The new node.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 PurpleXmlNode *purple_xmlnode_from_str(const char *str, gssize size);
@@ -479,7 +479,7 @@
  *
  * Returns: A new copy of the src node.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 PurpleXmlNode *purple_xmlnode_copy(const PurpleXmlNode *src);
@@ -490,7 +490,7 @@
  *
  * Frees a node and all of its children.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 void purple_xmlnode_free(PurpleXmlNode *node);
@@ -510,7 +510,7 @@
  *
  * Returns: The new node or NULL if an error occurred.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 PurpleXmlNode *purple_xmlnode_from_file(const char *dir, const char *filename,
