# HG changeset patch
# Node ID bf89fac25176
# Parent  648a1b5dd96a
diff --git a/libpurple/accounts.h b/libpurple/accounts.h
--- a/libpurple/accounts.h
+++ b/libpurple/accounts.h
@@ -46,7 +46,7 @@
  * account, buddy pounces that belong to this account, and will also
  * destroy @account.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void purple_accounts_delete(PurpleAccount *account);
@@ -62,7 +62,7 @@
  * You probably shouldn't call this unless you really know
  * what you're doing.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void purple_accounts_restore_current_statuses(void);
@@ -78,7 +78,7 @@
  *
  * Returns: The accounts subsystem handle.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void *purple_accounts_get_handle(void);
@@ -88,7 +88,7 @@
  *
  * Initializes the accounts subsystem.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void purple_accounts_init(void);
@@ -98,7 +98,7 @@
  *
  * Uninitializes the accounts subsystem.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void purple_accounts_uninit(void);
@@ -108,7 +108,7 @@
  *
  * Schedules saving of accounts
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 void purple_accounts_schedule_save(void);
diff --git a/libpurple/action.h b/libpurple/action.h
--- a/libpurple/action.h
+++ b/libpurple/action.h
@@ -88,7 +88,7 @@
  *
  * Returns: (transfer full): The PurpleActionMenu.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 PurpleActionMenu *purple_action_menu_new(const gchar *label, GCallback callback, gpointer data, GList *children);
@@ -99,7 +99,7 @@
  *
  * Frees a PurpleActionMenu
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 void purple_action_menu_free(PurpleActionMenu *act);
@@ -112,7 +112,7 @@
  *
  * Returns: The label string.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 const gchar *purple_action_menu_get_label(const PurpleActionMenu *act);
@@ -125,7 +125,7 @@
  *
  * Returns: (transfer none): The callback function.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 GCallback purple_action_menu_get_callback(const PurpleActionMenu *act);
@@ -138,7 +138,7 @@
  *
  * Returns: The data.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 gpointer purple_action_menu_get_data(const PurpleActionMenu *act);
@@ -151,7 +151,7 @@
  *
  * Returns: (element-type PurpleActionMenu) (transfer none): The menu children.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 GList* purple_action_menu_get_children(const PurpleActionMenu *act);
@@ -163,7 +163,7 @@
  *
  * Set the label to the PurpleActionMenu.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 void purple_action_menu_set_label(PurpleActionMenu *act, const gchar *label);
@@ -175,7 +175,7 @@
  *
  * Set the callback that will be used by the PurpleActionMenu.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 void purple_action_menu_set_callback(PurpleActionMenu *act, GCallback callback);
@@ -187,7 +187,7 @@
  *
  * Set the label to the PurpleActionMenu.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 void purple_action_menu_set_data(PurpleActionMenu *act, gpointer data);
@@ -199,7 +199,7 @@
  *
  * Set the children of the PurpleActionMenu.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 void purple_action_menu_set_children(PurpleActionMenu *act, GList *children);
@@ -213,7 +213,7 @@
  *
  * Returns: The #GType for the #PurpleProtocolAction boxed structure.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 GType purple_protocol_action_get_type(void);
@@ -229,7 +229,7 @@
  *
  * Returns: (transfer full): The new #PurpleProtocolAction.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 PurpleProtocolAction *purple_protocol_action_new(const gchar *label, PurpleProtocolActionCallback callback);
@@ -242,7 +242,7 @@
  *
  * Returns: (transfer full): A copy of @action.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 PurpleProtocolAction *purple_protocol_action_copy(PurpleProtocolAction *action);
@@ -253,7 +253,7 @@
  *
  * Frees a PurpleProtocolAction
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 void purple_protocol_action_free(PurpleProtocolAction *action);
diff --git a/libpurple/blistnode.h b/libpurple/blistnode.h
--- a/libpurple/blistnode.h
+++ b/libpurple/blistnode.h
@@ -53,7 +53,7 @@
  * This is a base class for PurpleBuddy, PurpleContact, PurpleGroup, and for
  * anything else that wants to put itself in the buddy list.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 struct _PurpleBlistNode {
 	GObject gparent;
@@ -82,7 +82,7 @@
  *
  * Returns: The #GType for the #PurpleBlistNode object.
  *
- * Since: 2.1.0
+ * Since: 2.1
  */
 PURPLE_AVAILABLE_IN_2_1
 GType purple_blist_node_get_type(void);
@@ -100,7 +100,7 @@
  *
  * Returns: (transfer none): The next node
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 PurpleBlistNode *purple_blist_node_next(PurpleBlistNode *node, gboolean offline);
@@ -116,7 +116,7 @@
  *
  * Returns: (transfer none): The parent node.
  *
- * Since: 2.4.0
+ * Since: 2.4
  */
 PURPLE_AVAILABLE_IN_2_4
 PurpleBlistNode *purple_blist_node_get_parent(PurpleBlistNode *node);
@@ -132,7 +132,7 @@
  *
  * Returns: (transfer none): The child node.
  *
- * Since: 2.4.0
+ * Since: 2.4
  */
 PURPLE_AVAILABLE_IN_2_4
 PurpleBlistNode *purple_blist_node_get_first_child(PurpleBlistNode *node);
@@ -148,7 +148,7 @@
  *
  * Returns: (transfer none): The sibling node.
  *
- * Since: 2.4.0
+ * Since: 2.4
  */
 PURPLE_AVAILABLE_IN_2_4
 PurpleBlistNode *purple_blist_node_get_sibling_next(PurpleBlistNode *node);
@@ -164,7 +164,7 @@
  *
  * Returns: (transfer none): The sibling node.
  *
- * Since: 2.4.0
+ * Since: 2.4
  */
 PURPLE_AVAILABLE_IN_2_4
 PurpleBlistNode *purple_blist_node_get_sibling_prev(PurpleBlistNode *node);
@@ -177,7 +177,7 @@
  *
  * Returns: (transfer none): The hash table with the node's settings.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 GHashTable *purple_blist_node_get_settings(PurpleBlistNode *node);
@@ -191,7 +191,7 @@
  *
  * Returns: TRUE if a value exists, or FALSE if there is no setting
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 gboolean purple_blist_node_has_setting(PurpleBlistNode *node, const char *key);
@@ -204,7 +204,7 @@
  *
  * Associates a boolean with a node in the buddy list
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void purple_blist_node_set_bool(PurpleBlistNode *node, const char *key, gboolean value);
@@ -218,7 +218,7 @@
  *
  * Returns: The value, or FALSE if there is no setting
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 gboolean purple_blist_node_get_bool(PurpleBlistNode *node, const char *key);
@@ -231,7 +231,7 @@
  *
  * Associates an integer with a node in the buddy list
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void purple_blist_node_set_int(PurpleBlistNode *node, const char *key, int value);
@@ -245,7 +245,7 @@
  *
  * Returns: The value, or 0 if there is no setting
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 int purple_blist_node_get_int(PurpleBlistNode *node, const char *key);
@@ -258,7 +258,7 @@
  *
  * Associates a string with a node in the buddy list
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void purple_blist_node_set_string(PurpleBlistNode *node, const char *key, const char *value);
@@ -272,7 +272,7 @@
  *
  * Returns: The value, or NULL if there is no setting
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 const char *purple_blist_node_get_string(PurpleBlistNode *node, const char *key);
@@ -284,7 +284,7 @@
  *
  * Removes a named setting from a blist node
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void purple_blist_node_remove_setting(PurpleBlistNode *node, const char *key);
@@ -297,7 +297,7 @@
  *
  * Sets whether the node should be saved with the buddy list or not
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 void purple_blist_node_set_transient(PurpleBlistNode *node, gboolean transient);
@@ -310,7 +310,7 @@
  *
  * Returns: TRUE if the node should NOT be saved, FALSE if node should be saved
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 gboolean purple_blist_node_is_transient(PurpleBlistNode *node);
@@ -323,7 +323,7 @@
  *          items for a buddy list node, as harvested by the
  *          blist-node-extended-menu signal.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 GList *purple_blist_node_get_extended_menu(PurpleBlistNode *n);
diff --git a/libpurple/buddy.h b/libpurple/buddy.h
--- a/libpurple/buddy.h
+++ b/libpurple/buddy.h
@@ -77,7 +77,7 @@
  *
  * A buddy on the buddy list.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 struct _PurpleBuddy {
 	PurpleBlistNode node;
@@ -104,7 +104,7 @@
  *
  * Returns: The #GType for the #PurpleBuddy object.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 GType purple_buddy_get_type(void);
@@ -125,7 +125,7 @@
  *
  * Returns: A newly allocated buddy
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 PurpleBuddy *purple_buddy_new(PurpleAccount *account, const char *name, const char *alias);
@@ -138,7 +138,7 @@
  *
  * Returns: The id of @buddy.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 const gchar *purple_buddy_get_id(PurpleBuddy *buddy);
@@ -155,7 +155,7 @@
  *
  * See purple_buddy_icon_set_data().
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void purple_buddy_set_icon(PurpleBuddy *buddy, PurpleBuddyIcon *icon);
@@ -168,7 +168,7 @@
  *
  * Returns: The buddy icon.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 PurpleBuddyIcon *purple_buddy_get_icon(PurpleBuddy *buddy);
@@ -181,7 +181,7 @@
  *
  * Returns: (transfer none): The account.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 PurpleAccount *purple_buddy_get_account(PurpleBuddy *buddy);
@@ -193,7 +193,7 @@
  *
  * Sets a buddy's name
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 void purple_buddy_set_name(PurpleBuddy *buddy, const char *name);
@@ -206,7 +206,7 @@
  *
  * Returns: The name.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 const char *purple_buddy_get_name(PurpleBuddy *buddy);
@@ -223,7 +223,7 @@
  *
  * Returns:      The protocol data.
  *
- * Since: 2.6.0
+ * Since: 2.6
  */
 PURPLE_AVAILABLE_IN_2_6
 gpointer purple_buddy_get_protocol_data(PurpleBuddy *buddy);
@@ -239,7 +239,7 @@
  *
  * See purple_buddy_get_protocol_data().
  *
- * Since: 2.6.0
+ * Since: 2.6
  */
 PURPLE_AVAILABLE_IN_2_6
 void purple_buddy_set_protocol_data(PurpleBuddy *buddy, gpointer data);
@@ -252,7 +252,7 @@
  *
  * Returns: (transfer none): The buddy's contact.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 PurpleMetaContact *purple_buddy_get_contact(PurpleBuddy *buddy);
@@ -265,7 +265,7 @@
  *
  * Returns: (transfer none): The buddy's presence.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 PurplePresence *purple_buddy_get_presence(PurpleBuddy *buddy);
@@ -279,7 +279,7 @@
  *
  * This should only be called from within Purple.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 void purple_buddy_update_status(PurpleBuddy *buddy, PurpleStatus *old_status);
@@ -292,7 +292,7 @@
  *
  * Returns:      The media caps.
  *
- * Since: 2.7.0
+ * Since: 2.7
  */
 PURPLE_AVAILABLE_IN_2_7
 PurpleMediaCaps purple_buddy_get_media_caps(PurpleBuddy *buddy);
@@ -304,7 +304,7 @@
  *
  * Sets the media caps for a buddy.
  *
- * Since: 2.7.0
+ * Since: 2.7
  */
 PURPLE_AVAILABLE_IN_2_7
 void purple_buddy_set_media_caps(PurpleBuddy *buddy, PurpleMediaCaps media_caps);
@@ -318,7 +318,7 @@
  * Returns:        The alias (if set), server alias (if set),
  *                or NULL.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 const char *purple_buddy_get_alias_only(PurpleBuddy *buddy);
@@ -330,7 +330,7 @@
  *
  * Sets the server alias for a buddy.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 void purple_buddy_set_server_alias(PurpleBuddy *buddy, const char *alias);
@@ -343,7 +343,7 @@
  *
  * Returns:  The server alias, or NULL if it is not set.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 const char *purple_buddy_get_server_alias(PurpleBuddy *buddy);
@@ -358,7 +358,7 @@
  *
  * Returns:       The appropriate name or alias, or NULL.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 const char *purple_buddy_get_contact_alias(PurpleBuddy *buddy);
@@ -373,7 +373,7 @@
  *
  * Returns:        The appropriate name or alias, or NULL
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 const char *purple_buddy_get_alias(PurpleBuddy *buddy);
@@ -385,7 +385,7 @@
  *
  * Sets the local alias for the buddy.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 void purple_buddy_set_local_alias(PurpleBuddy *buddy, const char *alias);
@@ -398,7 +398,7 @@
  *
  * Returns:       The local alias for the buddy
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 const char *purple_buddy_get_local_alias(PurpleBuddy *buddy);
@@ -411,7 +411,7 @@
  *
  * Returns: (transfer none): The group or %NULL if the buddy is not in a group.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 PurpleGroup *purple_buddy_get_group(PurpleBuddy *buddy);
diff --git a/libpurple/buddy.c b/libpurple/buddy.c
--- a/libpurple/buddy.c
+++ b/libpurple/buddy.c
@@ -249,7 +249,7 @@
 	 * If an id is not passed during instantiation a uuid4 string is set as the
 	 * id.
 	 *
-	 * Since: 3.0.0
+	 * Since: 3.0
 	 */
 	properties[PROP_ID] = g_param_spec_string(
 		"id", "id",
diff --git a/libpurple/buddyicon.h b/libpurple/buddyicon.h
--- a/libpurple/buddyicon.h
+++ b/libpurple/buddyicon.h
@@ -40,7 +40,7 @@
  * purple_buddy_icon_ref() and purple_buddy_icon_unref() to take and release
  * references.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 typedef struct _PurpleBuddyIcon PurpleBuddyIcon;
 
@@ -59,7 +59,7 @@
  * @PURPLE_ICON_SCALE_DISPLAY: We scale the icon when we display it
  * @PURPLE_ICON_SCALE_SEND:    We scale the icon before we send it to the server
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 typedef enum  /*< flags >*/
 {
@@ -86,7 +86,7 @@
  * expect back. Dimensions less than 1 should be ignored and the image not
  * scaled.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 struct _PurpleBuddyIconSpec {
 	char *format;
@@ -109,7 +109,7 @@
  *
  * Returns: The #GType for the #PurpleBuddyIcon boxed structure.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 GType purple_buddy_icon_get_type(void);
@@ -129,7 +129,7 @@
  *
  * Returns: The buddy icon structure, with a reference for the caller.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 PurpleBuddyIcon *purple_buddy_icon_new(PurpleAccount *account, const char *username,
@@ -144,7 +144,7 @@
  *
  * Returns: @icon.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 PurpleBuddyIcon *purple_buddy_icon_ref(PurpleBuddyIcon *icon);
@@ -157,7 +157,7 @@
  *
  * If the reference count reaches 0, the icon will be destroyed.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void purple_buddy_icon_unref(PurpleBuddyIcon *icon);
@@ -168,7 +168,7 @@
  *
  * Updates every instance of this icon.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void purple_buddy_icon_update(PurpleBuddyIcon *icon);
@@ -182,7 +182,7 @@
  *
  * Sets the buddy icon's data.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void
@@ -199,7 +199,7 @@
  *
  * Returns: %TRUE on success, or %FALSE on error possibly with @error set.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 gboolean purple_buddy_icon_save_to_filename(PurpleBuddyIcon *icon, const gchar *filename, GError **error);
@@ -212,7 +212,7 @@
  *
  * Returns: (transfer none): The account.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 PurpleAccount *purple_buddy_icon_get_account(const PurpleBuddyIcon *icon);
@@ -225,7 +225,7 @@
  *
  * Returns: The username.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 const char *purple_buddy_icon_get_username(const PurpleBuddyIcon *icon);
@@ -240,7 +240,7 @@
  *
  * Returns: The checksum.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 const char *purple_buddy_icon_get_checksum(const PurpleBuddyIcon *icon);
@@ -255,7 +255,7 @@
  *
  * Returns: A pointer to the icon data.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 gconstpointer purple_buddy_icon_get_data(const PurpleBuddyIcon *icon, size_t *len);
@@ -268,7 +268,7 @@
  *
  * Returns: (transfer full): A new #GInputStream.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 GInputStream *purple_buddy_icon_get_stream(PurpleBuddyIcon *icon);
@@ -282,7 +282,7 @@
  * Returns: The icon's extension, "icon" if unknown, or %NULL if
  *         the image data has disappeared.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 const char *purple_buddy_icon_get_extension(const PurpleBuddyIcon *icon);
@@ -302,7 +302,7 @@
  *
  * Returns: (transfer none): A full path to the file, or %NULL under various conditions.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 const gchar *purple_buddy_icon_get_full_path(PurpleBuddyIcon *icon);
@@ -321,7 +321,7 @@
  *
  * Sets a buddy icon for a user.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void purple_buddy_icons_set_for_user(PurpleAccount *account, const char *username, void *icon_data, size_t icon_len, const char *checksum);
@@ -337,7 +337,7 @@
  *
  * Returns: The checksum.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 const char *purple_buddy_icons_get_checksum_for_user(PurpleBuddy *buddy);
@@ -352,7 +352,7 @@
  * Returns: The icon (with a reference for the caller) if found, or %NULL if
  *         not found.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 PurpleBuddyIcon *purple_buddy_icons_find(PurpleAccount *account, const char *username);
@@ -369,7 +369,7 @@
  *
  * Returns: (transfer full): The account's buddy icon image.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 PurpleImage *purple_buddy_icons_find_account_icon(PurpleAccount *account);
@@ -388,7 +388,7 @@
  *
  * Returns: (transfer none): The icon that was set.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 PurpleImage *purple_buddy_icons_set_account_icon(PurpleAccount *account, guchar *icon_data, size_t icon_len);
@@ -404,7 +404,7 @@
  *
  * Returns: The time the icon was set, or 0 if an error occurred.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 time_t purple_buddy_icons_get_account_icon_timestamp(PurpleAccount *account);
@@ -417,7 +417,7 @@
  *
  * Returns: A boolean indicating if @node has a custom buddy icon.
  *
- * Since: 2.5.0
+ * Since: 2.5
  */
 PURPLE_AVAILABLE_IN_2_5
 gboolean purple_buddy_icons_node_has_custom_icon(PurpleBlistNode *node);
@@ -434,7 +434,7 @@
  *
  * Returns: (transfer full): The custom buddy icon.
  *
- * Since: 2.5.0
+ * Since: 2.5
  */
 PURPLE_AVAILABLE_IN_2_5
 PurpleImage *purple_buddy_icons_node_find_custom_icon(PurpleBlistNode *node);
@@ -453,7 +453,7 @@
  *
  * Returns: (transfer none): The icon that was set.
  *
- * Since: 2.5.0
+ * Since: 2.5
  */
 PURPLE_AVAILABLE_IN_2_5
 PurpleImage *purple_buddy_icons_node_set_custom_icon(PurpleBlistNode *node, guchar *icon_data, size_t icon_len);
@@ -471,7 +471,7 @@
  *
  * Returns: (transfer none): The icon that was set.
  *
- * Since: 2.5.0
+ * Since: 2.5
  */
 PURPLE_AVAILABLE_IN_2_5
 PurpleImage *purple_buddy_icons_node_set_custom_icon_from_file(PurpleBlistNode *node, const gchar *filename);
@@ -482,7 +482,7 @@
  *
  * Sets whether or not buddy icon caching is enabled.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void purple_buddy_icons_set_caching(gboolean caching);
@@ -497,7 +497,7 @@
  *
  * Returns: TRUE if buddy icon caching is enabled, or FALSE otherwise.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 gboolean purple_buddy_icons_is_caching(void);
@@ -520,7 +520,7 @@
  *
  * Returns: The directory to store buddy icon cache files to.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 const char *purple_buddy_icons_get_cache_dir(void);
@@ -532,7 +532,7 @@
  *
  * Returns: The subsystem handle.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void *purple_buddy_icons_get_handle(void);
@@ -542,7 +542,7 @@
  *
  * Initializes the buddy icon subsystem.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void purple_buddy_icons_init(void);
@@ -552,7 +552,7 @@
  *
  * Uninitializes the buddy icon subsystem.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void purple_buddy_icons_uninit(void);
@@ -566,7 +566,7 @@
  *
  * Returns: The #GType for the #PurpleBuddyIconSpec boxed structure.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 GType purple_buddy_icon_spec_get_type(void);
@@ -586,7 +586,7 @@
  *
  * Returns:  A new buddy icon spec.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 PurpleBuddyIconSpec *purple_buddy_icon_spec_new(char *format, int min_width, int min_height, int max_width, int max_height, size_t max_filesize, PurpleBuddyIconScaleFlags scale_rules);
@@ -597,7 +597,7 @@
  *
  * Frees @spec.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 void purple_buddy_icon_spec_free(PurpleBuddyIconSpec *spec);
@@ -612,7 +612,7 @@
  *
  * Gets display size for a buddy icon
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 void purple_buddy_icon_spec_get_scaled_size(PurpleBuddyIconSpec *spec, int *width, int *height);
diff --git a/libpurple/buddylist.h b/libpurple/buddylist.h
--- a/libpurple/buddylist.h
+++ b/libpurple/buddylist.h
@@ -57,7 +57,7 @@
  * locale. So, this function is mostly for libpurple2 compatibility. And for
  * improperly written prpls.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 const gchar *
@@ -70,7 +70,7 @@
  *
  * A callback function for purple_blist_walk.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_TYPE_IN_3_0
 typedef void (*PurpleBlistWalkFunc)(PurpleBlistNode *node, gpointer data);
@@ -83,7 +83,7 @@
  *
  * The Buddy List
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 /**
  * PurpleBuddyListClass:
@@ -176,7 +176,7 @@
  *
  * Returns: The #GType for the #PurpleBuddyList object.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 G_DECLARE_DERIVABLE_TYPE(PurpleBuddyList, purple_buddy_list, PURPLE, BUDDY_LIST,
@@ -189,7 +189,7 @@
  *
  * Returns: (transfer none): The default buddy list.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 PurpleBuddyList *purple_blist_get_default(void);
@@ -201,7 +201,7 @@
  *
  * Returns: (transfer none): The root node.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 PurpleBlistNode *purple_blist_get_default_root(void);
@@ -214,7 +214,7 @@
  *
  * Returns: (transfer none): The root node.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 PurpleBlistNode *purple_blist_get_root(PurpleBuddyList *list);
@@ -231,7 +231,7 @@
  * Returns: (element-type PurpleBlistNode) (transfer container): A list of every
  *          buddy in the list.
  *
- * Since: 2.6.0
+ * Since: 2.6
  */
 PURPLE_AVAILABLE_IN_2_6
 GSList *purple_blist_get_buddies(void);
@@ -241,7 +241,7 @@
  *
  * Shows the buddy list, creating a new one if necessary.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void purple_blist_show(void);
@@ -252,7 +252,7 @@
  *
  * Hides or unhides the buddy list.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void purple_blist_set_visible(gboolean show);
@@ -266,7 +266,7 @@
  * updates the cache, the caller is responsible for the actual renaming of
  * the buddy after updating the cache.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 void purple_blist_update_buddies_cache(PurpleBuddy *buddy, const char *new_name);
@@ -280,7 +280,7 @@
  * updates the cache, the caller is responsible for the actual renaming of
  * the group after updating the cache.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 void purple_blist_update_groups_cache(PurpleGroup *group, const char *new_name);
@@ -297,7 +297,7 @@
  * of group if node is NULL.  If both are NULL, the buddy will be added to
  * the "Chats" group.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void purple_blist_add_chat(PurpleChat *chat, PurpleGroup *group, PurpleBlistNode *node);
@@ -316,7 +316,7 @@
  * group if node is NULL.  If both are NULL, the buddy will be added to
  * the default group.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void purple_blist_add_buddy(PurpleBuddy *buddy, PurpleMetaContact *contact, PurpleGroup *group, PurpleBlistNode *node);
@@ -331,7 +331,7 @@
  * The new group will be inserted after insert or prepended to the list if
  * node is NULL.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void purple_blist_add_group(PurpleGroup *group, PurpleBlistNode *node);
@@ -347,7 +347,7 @@
  * The new contact will be inserted after insert or prepended to the list if
  * node is NULL.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void purple_blist_add_contact(PurpleMetaContact *contact, PurpleGroup *group, PurpleBlistNode *node);
@@ -361,7 +361,7 @@
  *
  * See purple_account_remove_buddy().
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void purple_blist_remove_buddy(PurpleBuddy *buddy);
@@ -376,7 +376,7 @@
  *
  * See purple_blist_remove_buddy().
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void purple_blist_remove_contact(PurpleMetaContact *contact);
@@ -387,7 +387,7 @@
  *
  * Removes a chat from the buddy list and frees the memory allocated to it.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void purple_blist_remove_chat(PurpleChat *chat);
@@ -399,7 +399,7 @@
  * Removes a group from the buddy list and frees the memory allocated to it and to
  * its children
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void purple_blist_remove_group(PurpleGroup *group);
@@ -413,7 +413,7 @@
  *
  * Returns: (transfer none): The buddy or %NULL if the buddy does not exist.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 PurpleBuddy *purple_blist_find_buddy(PurpleAccount *account, const char *name);
@@ -429,7 +429,7 @@
  * Returns: (transfer none): The buddy or %NULL if the buddy does not exist in
  *          the group.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 PurpleBuddy *purple_blist_find_buddy_in_group(PurpleAccount *account, const char *name,
@@ -445,7 +445,7 @@
  * Returns: (element-type PurpleBuddy) (transfer container): %NULL if the buddy
  *          doesn't exist, or a GSList of PurpleBuddy structs.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 GSList *purple_blist_find_buddies(PurpleAccount *account, const char *name);
@@ -458,7 +458,7 @@
  *
  * Returns: (transfer none): The group or %NULL if the group does not exist.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 PurpleGroup *purple_blist_find_group(const char *name);
@@ -470,7 +470,7 @@
  *
  * Returns: (transfer none): The default group.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 PurpleGroup *purple_blist_get_default_group(void);
@@ -484,7 +484,7 @@
  *
  * Returns: (transfer none): The chat, or %NULL if the chat does not exist.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 PurpleChat *purple_blist_find_chat(PurpleAccount *account, const char *name);
@@ -496,7 +496,7 @@
  * Called when an account connects.  Tells the UI to update all the
  * buddies.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void purple_blist_add_account(PurpleAccount *account);
@@ -508,7 +508,7 @@
  * Called when an account disconnects.  Sets the presence of all the buddies to 0
  * and tells the UI to update them.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void purple_blist_remove_account(PurpleAccount *account);
@@ -524,7 +524,7 @@
  * Walks the buddy list and calls the appropriate function for each node.  If
  * a callback function is omitted iteration will continue without it.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 void purple_blist_walk(PurpleBlistWalkFunc group_func, PurpleBlistWalkFunc chat_func, PurpleBlistWalkFunc meta_contact_func, PurpleBlistWalkFunc contact_func, gpointer data);
@@ -536,7 +536,7 @@
  *
  * Returns: The name of the default group.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 const gchar *purple_blist_get_default_group_name(void);
@@ -554,7 +554,7 @@
  * buddy list API, then the buddy list is saved automatically, so you should not
  * need to call this.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void purple_blist_schedule_save(void);
@@ -569,7 +569,7 @@
  * Requests from the user information needed to add a buddy to the
  * buddy list.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void purple_blist_request_add_buddy(PurpleAccount *account, const char *username,
@@ -585,7 +585,7 @@
  * Requests from the user information needed to add a chat to the
  * buddy list.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void purple_blist_request_add_chat(PurpleAccount *account, PurpleGroup *group,
@@ -597,7 +597,7 @@
  * Requests from the user information needed to add a group to the
  * buddy list.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void purple_blist_request_add_group(void);
@@ -612,7 +612,7 @@
  * This should usually only be run when initializing a @PurpleBlistNode
  * instance.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 void purple_blist_new_node(PurpleBuddyList *list, PurpleBlistNode *node);
@@ -624,7 +624,7 @@
  *
  * Update a node in the buddy list in the UI.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 void purple_blist_update_node(PurpleBuddyList *list, PurpleBlistNode *node);
@@ -639,7 +639,7 @@
  * If the UI does not implement a more specific method, it will be set to save
  * data to <filename>blist.xml</filename> like in previous libpurple versions.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 void purple_blist_save_node(PurpleBuddyList *list, PurpleBlistNode *node);
@@ -655,7 +655,7 @@
  * If the UI does not set a more specific method, it will be set to save data
  * to <filename>blist.xml</filename> like in previous libpurple versions.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 void purple_blist_save_account(PurpleBuddyList *list, PurpleAccount *account);
@@ -673,7 +673,7 @@
  * This must be called before the buddy list is created or you will get the
  * default libpurple implementation.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 void purple_blist_set_ui(GType type);
@@ -685,7 +685,7 @@
  *
  * Returns: The buddy list subsystem handle.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void *purple_blist_get_handle(void);
@@ -695,7 +695,7 @@
  *
  * Initializes the buddy list subsystem.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void purple_blist_init(void);
@@ -707,7 +707,7 @@
  *
  * You shouldn't call this. purple_core_init() will do it for you.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 void purple_blist_boot(void);
@@ -717,7 +717,7 @@
  *
  * Uninitializes the buddy list subsystem.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void purple_blist_uninit(void);
diff --git a/libpurple/chat.h b/libpurple/chat.h
--- a/libpurple/chat.h
+++ b/libpurple/chat.h
@@ -47,7 +47,7 @@
  *
  * A chat on the buddy list.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 struct _PurpleChat {
 	PurpleBlistNode node;
@@ -70,7 +70,7 @@
  *
  * Returns: The #GType for the #PurpleChat object.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 GType purple_chat_get_type(void);
@@ -87,7 +87,7 @@
  *
  * Returns:           A newly allocated chat
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 PurpleChat *purple_chat_new(PurpleAccount *account, const char *alias, GHashTable *components);
@@ -100,7 +100,7 @@
  *
  * Returns:       The alias (if set), or first component value.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 const char *purple_chat_get_name(PurpleChat *chat);
@@ -113,7 +113,7 @@
  *
  * Returns:       The first component value.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 const char *purple_chat_get_name_only(PurpleChat *chat);
@@ -125,7 +125,7 @@
  *
  * Sets the alias for a blist chat.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 void purple_chat_set_alias(PurpleChat *chat, const char *alias);
@@ -139,7 +139,7 @@
  * Returns: (transfer none): The parent group, or %NULL if the chat is not in a
  *          group.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 PurpleGroup *purple_chat_get_group(PurpleChat *chat);
@@ -152,7 +152,7 @@
  *
  * Returns: (transfer none): The account the chat belongs to.
  *
- * Since: 2.4.0
+ * Since: 2.4
  */
 PURPLE_AVAILABLE_IN_2_4
 PurpleAccount *purple_chat_get_account(PurpleChat *chat);
@@ -165,7 +165,7 @@
  *
  * Returns: (transfer none):  The hashtable.
  *
- * Since: 2.4.0
+ * Since: 2.4
  */
 PURPLE_AVAILABLE_IN_2_4
 GHashTable *purple_chat_get_components(PurpleChat *chat);
diff --git a/libpurple/circularbuffer.h b/libpurple/circularbuffer.h
--- a/libpurple/circularbuffer.h
+++ b/libpurple/circularbuffer.h
@@ -66,7 +66,7 @@
  *
  * Returns: The new PurpleCircularBuffer.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 PurpleCircularBuffer *purple_circular_buffer_new(gsize growsize);
@@ -80,7 +80,7 @@
  * Append data to the PurpleCircularBuffer.  This will grow the internal
  * buffer to fit the added data, if needed.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 void purple_circular_buffer_append(PurpleCircularBuffer *buffer, gconstpointer src, gsize len);
@@ -98,7 +98,7 @@
  *
  * Returns: the number of bytes that can be read from the PurpleCircularBuffer
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 gsize purple_circular_buffer_get_max_read(PurpleCircularBuffer *buffer);
@@ -113,7 +113,7 @@
  * Returns: TRUE if we successfully marked the bytes as having been read, FALSE
  *         otherwise.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 gboolean purple_circular_buffer_mark_read(PurpleCircularBuffer *buffer, gsize len);
@@ -126,7 +126,7 @@
  * Increases the buffer size by a multiple of grow size, so that it can hold at
  * least 'len' bytes.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 void purple_circular_buffer_grow(PurpleCircularBuffer *buffer, gsize len);
@@ -140,7 +140,7 @@
  *
  * Returns: The grow size of the buffer.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 gsize purple_circular_buffer_get_grow_size(PurpleCircularBuffer *buffer);
@@ -153,7 +153,7 @@
  *
  * Returns: The number of bytes that contain unread data.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 gsize purple_circular_buffer_get_used(PurpleCircularBuffer *buffer);
@@ -169,7 +169,7 @@
  *
  * Returns: The output pointer for the buffer.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 const gchar *purple_circular_buffer_get_output(PurpleCircularBuffer *buffer);
@@ -180,7 +180,7 @@
  *
  * Resets the buffer input and output pointers to the start of the buffer.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 void purple_circular_buffer_reset(PurpleCircularBuffer *buffer);
diff --git a/libpurple/cmds.h b/libpurple/cmds.h
--- a/libpurple/cmds.h
+++ b/libpurple/cmds.h
@@ -47,7 +47,7 @@
  *
  * The possible results of running a command with purple_cmd_do_command().
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 typedef enum {
 	PURPLE_CMD_STATUS_OK,
@@ -73,7 +73,7 @@
  * #PURPLE_CMD_RET_CONTINUE to cause the core to fall through to other
  * commands with the same name.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 typedef enum {
 	PURPLE_CMD_RET_OK,
@@ -91,7 +91,7 @@
  *
  * A function implementing a command, as passed to purple_cmd_register().
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 typedef PurpleCmdRet (*PurpleCmdFunc)(PurpleConversation *conversation, const gchar *cmd,
                                   gchar **args, gchar **error, void *data);
@@ -119,7 +119,7 @@
  * collisions.  PurpleCmdPriority is used to determine which command will be
  * run.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 typedef enum {
 	PURPLE_CMD_P_VERY_LOW  = -1000,
@@ -147,7 +147,7 @@
  *
  * See purple_cmd_register().
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 typedef enum {
 	PURPLE_CMD_FLAG_IM               = 0x01,
@@ -218,7 +218,7 @@
  * Returns: A #PurpleCmdId, which is only used for calling
  *         #purple_cmd_unregister, or 0 on failure.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 PurpleCmdId purple_cmd_register(const gchar *cmd, const gchar *args, PurpleCmdPriority p, PurpleCmdFlag f, const gchar *protocol_id, PurpleCmdFunc func, const gchar *helpstr, void *data);
@@ -233,7 +233,7 @@
  * or something else that might go away. Normally this is called when the plugin
  * unloads itself.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void purple_cmd_unregister(PurpleCmdId id);
@@ -258,7 +258,7 @@
  *
  * Returns: A #PurpleCmdStatus indicating if the command succeeded or failed.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 PurpleCmdStatus purple_cmd_do_command(PurpleConversation *conv, const gchar *cmdline, const gchar *markup, gchar **errormsg);
@@ -279,7 +279,7 @@
  *
  * Returns: %TRUE if the command handled the @cmdline, %FALSE otherwise.
  *
- * Since: 2.11.0
+ * Since: 2.11
  */
 PURPLE_AVAILABLE_IN_2_11
 gboolean purple_cmd_execute(PurpleCmdId id, PurpleConversation *conv,
@@ -297,7 +297,7 @@
  * might unregister a command, as the <type>const char *</type>'s used get freed
  * then.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 GList *purple_cmd_list(PurpleConversation *conv);
@@ -313,7 +313,7 @@
  * Returns: (element-type utf8) (transfer container): the help strings for a
  *          given command, one node for each matching command.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 GList *purple_cmd_help(PurpleConversation *conv, const gchar *cmd);
@@ -325,7 +325,7 @@
  *
  * Returns: The handle
  *
- * Since: 2.5.0
+ * Since: 2.5
  */
 PURPLE_AVAILABLE_IN_2_5
 gpointer purple_cmds_get_handle(void);
@@ -335,7 +335,7 @@
  *
  * Initialize the commands subsystem.
  *
- * Since: 2.5.0
+ * Since: 2.5
  */
 PURPLE_AVAILABLE_IN_2_5
 void purple_cmds_init(void);
@@ -345,7 +345,7 @@
  *
  * Uninitialize the commands subsystem.
  *
- * Since: 2.5.0
+ * Since: 2.5
  */
 PURPLE_AVAILABLE_IN_2_5
 void purple_cmds_uninit(void);
diff --git a/libpurple/connection.h b/libpurple/connection.h
--- a/libpurple/connection.h
+++ b/libpurple/connection.h
@@ -68,7 +68,7 @@
  *
  * Flags to change behavior of the client for a given connection.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 typedef enum /*< flags >*/
 {
@@ -91,7 +91,7 @@
  *
  * A representation of the state of a [class@Purple.Connection].
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 typedef enum {
 	PURPLE_CONNECTION_STATE_DISCONNECTED PURPLE_AVAILABLE_ENUMERATOR_IN_3_0 = 0,
@@ -106,7 +106,7 @@
  * Error domain for Purple connection errors. Errors in this domain will be
  * from the #PurpleConnectionError enum.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 #define PURPLE_CONNECTION_ERROR \
 	g_quark_from_static_string("purple-connection-error") \
@@ -158,7 +158,7 @@
  *
  * See <link linkend="chapter-ui-ops">List of <literal>UiOps</literal> Structures</link>
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 struct _PurpleConnectionUiOps
 {
@@ -205,7 +205,7 @@
  * Returns: %TRUE if the initial connection for @account was successful,
  *          otherwise %FALSE with @error possibly set.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 gboolean purple_connection_connect(PurpleConnection *connection, GError **error);
@@ -225,7 +225,7 @@
  * Returns: %TRUE if the account was disconnected gracefully, otherwise %FALSE
  *          with @error possibly set.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 gboolean purple_connection_disconnect(PurpleConnection *connection, GError **error);
@@ -241,7 +241,7 @@
  * the core can call protocol's set_status, and it successfully changes
  * your status, then the account is online.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void purple_connection_set_state(PurpleConnection *gc, PurpleConnectionState state);
@@ -253,7 +253,7 @@
  *
  * Sets the connection flags.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 void purple_connection_set_flags(PurpleConnection *gc, PurpleConnectionFlags flags);
@@ -265,7 +265,7 @@
  *
  * Sets the connection's displayed name.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void purple_connection_set_display_name(PurpleConnection *gc, const char *name);
@@ -277,7 +277,7 @@
  *
  * Sets the protocol data for a connection.
  *
- * Since: 2.6.0
+ * Since: 2.6
  */
 PURPLE_AVAILABLE_IN_2_6
 void purple_connection_set_protocol_data(PurpleConnection *connection, void *proto_data);
@@ -290,7 +290,7 @@
  *
  * Returns: The connection state.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 PurpleConnectionState purple_connection_get_state(PurpleConnection *gc);
@@ -303,7 +303,7 @@
  *
  * Returns: The connection flags.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 PurpleConnectionFlags purple_connection_get_flags(PurpleConnection *gc);
@@ -315,7 +315,7 @@
  *
  * Returns: TRUE if the account is connected, otherwise returns FALSE.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 #define PURPLE_CONNECTION_IS_CONNECTED(gc) \
 	(purple_connection_get_state(gc) == PURPLE_CONNECTION_STATE_CONNECTED)
@@ -328,7 +328,7 @@
  *
  * Returns: The identifier of the connection.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 const gchar *purple_connection_get_id(PurpleConnection *connection);
@@ -341,7 +341,7 @@
  *
  * Returns: (transfer none): The connection's account.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 PurpleAccount *purple_connection_get_account(PurpleConnection *gc);
@@ -354,7 +354,7 @@
  *
  * Returns: (transfer none): The protocol.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 PurpleProtocol *purple_connection_get_protocol(PurpleConnection *gc);
@@ -367,7 +367,7 @@
  *
  * Returns: The connection's password.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 const char *purple_connection_get_password(PurpleConnection *gc);
@@ -385,7 +385,7 @@
  * This is generally used by protocol plugins that support multiple
  * authentication methods and need to prompt the user for a password.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 void purple_connection_set_password(PurpleConnection *connection, const char *password);
@@ -398,7 +398,7 @@
  *
  * Returns: (transfer none): The cancellable.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 GCancellable *purple_connection_get_cancellable(PurpleConnection *connection);
@@ -412,7 +412,7 @@
  * Returns: (element-type PurpleChatConversation) (transfer none): The active
  *          chats on the connection.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 GSList *purple_connection_get_active_chats(PurpleConnection *gc);
@@ -425,7 +425,7 @@
  *
  * Returns: The connection's displayed name.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 const char *purple_connection_get_display_name(PurpleConnection *gc);
@@ -438,7 +438,7 @@
  *
  * Returns: The protocol data for the connection.
  *
- * Since: 2.6.0
+ * Since: 2.6
  */
 PURPLE_AVAILABLE_IN_2_6
 void *purple_connection_get_protocol_data(PurpleConnection *gc);
@@ -452,7 +452,7 @@
  * Closes a connection with an error and a human-readable description of the
  * error.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void purple_connection_error(PurpleConnection *gc, PurpleConnectionError reason, const char *description);
@@ -467,7 +467,7 @@
  * Returns: The #PurpleConnectionErrorInfo instance of the connection if an
  *          error exists, %NULL otherwise.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 PurpleConnectionErrorInfo *purple_connection_get_error_info(PurpleConnection *gc);
@@ -486,7 +486,7 @@
  * down a connection. If G_IO_ERROR_CANCELLED needs to be caught,
  * do so with [method@GLib.Error.matches] prior to calling this function.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 void purple_connection_g_error(PurpleConnection *pc, const GError *error);
@@ -502,7 +502,7 @@
  * This function is equivalent to [method@Purple.Connection.g_error], expect
  * that it takes ownership of the GError.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 void purple_connection_take_error(PurpleConnection *pc, GError *error);
@@ -529,7 +529,7 @@
  * Returns: %TRUE if the account should not be automatically reconnected, and
  *         %FALSE otherwise.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 gboolean purple_connection_error_is_fatal(PurpleConnectionError reason);
@@ -541,7 +541,7 @@
  * Indicate that a packet was received on the connection.
  * Set by the protocol to avoid sending unneeded keepalives.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 void purple_connection_update_last_received(PurpleConnection *gc);
@@ -555,7 +555,7 @@
  *
  * Disconnects from all connections.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void purple_connections_disconnect_all(void);
@@ -569,7 +569,7 @@
  * Returns: (element-type PurpleConnection) (transfer none): A list of all
  *          active connections.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 GList *purple_connections_get_all(void);
@@ -581,7 +581,7 @@
  *
  * Returns: %TRUE if at least one account is online.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 gboolean purple_connections_is_online(void);
@@ -595,7 +595,7 @@
  *
  * Returns: The #GType for the #PurpleConnectionUiOps boxed structure.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 GType purple_connection_ui_ops_get_type(void);
@@ -606,7 +606,7 @@
  *
  * Sets the UI operations structure to be used for connections.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void purple_connections_set_ui_ops(PurpleConnectionUiOps *ops);
@@ -618,7 +618,7 @@
  *
  * Returns: The UI operations structure in use.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 PurpleConnectionUiOps *purple_connections_get_ui_ops(void);
@@ -632,7 +632,7 @@
  *
  * Initializes the connections subsystem.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void purple_connections_init(void);
@@ -642,7 +642,7 @@
  *
  * Uninitializes the connections subsystem.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void purple_connections_uninit(void);
@@ -654,7 +654,7 @@
  *
  * Returns: The connections subsystem handle.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void *purple_connections_get_handle(void);
diff --git a/libpurple/connection.c b/libpurple/connection.c
--- a/libpurple/connection.c
+++ b/libpurple/connection.c
@@ -907,7 +907,7 @@
 	 * This can be passed function that require a cancellable for the
 	 * connection.
 	 *
-	 * Since: 3.0.0
+	 * Since: 3.0
 	 */
 	properties[PROP_CANCELLABLE] = g_param_spec_object(
 		"cancellable", "cancellable",
diff --git a/libpurple/contact.h b/libpurple/contact.h
--- a/libpurple/contact.h
+++ b/libpurple/contact.h
@@ -75,7 +75,7 @@
  *
  * Returns: The #GType for the #PurpleMetaContact object.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 GType purple_meta_contact_get_type(void);
@@ -87,7 +87,7 @@
  *
  * Returns:       A new contact struct
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 PurpleMetaContact *purple_meta_contact_new(void);
@@ -100,7 +100,7 @@
  *
  * Returns: (transfer none): The group.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 PurpleGroup *purple_meta_contact_get_group(const PurpleMetaContact *contact);
@@ -113,7 +113,7 @@
  *
  * Returns: (transfer none): The highest priority buddy.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 PurpleBuddy *purple_meta_contact_get_priority_buddy(PurpleMetaContact *contact);
@@ -125,7 +125,7 @@
  *
  * Sets the alias for a contact.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 void purple_meta_contact_set_alias(PurpleMetaContact *contact, const char *alias);
@@ -138,7 +138,7 @@
  *
  * Returns:  The alias, or NULL if it is not set.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 const char *purple_meta_contact_get_alias(PurpleMetaContact *contact);
@@ -152,7 +152,7 @@
  *
  * Returns: TRUE if there are any buddies from account in the contact, or FALSE otherwise.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 gboolean purple_meta_contact_on_account(PurpleMetaContact *contact, PurpleAccount *account);
@@ -164,7 +164,7 @@
  * Invalidates the priority buddy so that the next call to
  * purple_meta_contact_get_priority_buddy recomputes it.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 void purple_meta_contact_invalidate_priority_buddy(PurpleMetaContact *contact);
@@ -178,7 +178,7 @@
  *
  * All of the buddies from source will be moved to target
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 void purple_meta_contact_merge(PurpleMetaContact *source, PurpleBlistNode *node);
diff --git a/libpurple/conversations.h b/libpurple/conversations.h
--- a/libpurple/conversations.h
+++ b/libpurple/conversations.h
@@ -42,7 +42,7 @@
  *
  * Sets the default conversation UI operations structure.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void purple_conversations_set_ui_ops(PurpleConversationUiOps *ops);
@@ -54,7 +54,7 @@
  *
  * Returns:  The UI conversation operations structure.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 PurpleConversationUiOps *purple_conversations_get_ui_ops(void);
@@ -66,7 +66,7 @@
  *
  * Returns: The conversation subsystem handle.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void *purple_conversations_get_handle(void);
@@ -76,7 +76,7 @@
  *
  * Initializes the conversation subsystem.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void purple_conversations_init(void);
@@ -86,7 +86,7 @@
  *
  * Uninitializes the conversation subsystem.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void purple_conversations_uninit(void);
diff --git a/libpurple/core.h b/libpurple/core.h
--- a/libpurple/core.h
+++ b/libpurple/core.h
@@ -46,7 +46,7 @@
  *
  * Returns: %TRUE if successful, otherwise %FALSE with @error potentially set.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 gboolean purple_core_init(PurpleUi *ui, GError **error);
@@ -57,7 +57,7 @@
  * Quits the core of purple, which, depending on the UI, may quit the
  * application using the purple core.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void purple_core_quit(void);
@@ -69,7 +69,7 @@
  *
  * Returns: The version of the core library.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 const char *purple_core_get_version(void);
@@ -82,7 +82,7 @@
  *
  * Returns: (transfer none): A handle to the purple core.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 PurpleCore *purple_get_core(void);
@@ -99,7 +99,7 @@
  *
  * Returns: (transfer none): The [class@Gio.SettingsBackend] to use.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 gpointer purple_core_get_settings_backend(void);
@@ -111,7 +111,7 @@
  *
  * Returns: (transfer none): The ui.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 PurpleUi *purple_core_get_ui(void);
@@ -125,7 +125,7 @@
  *
  * Returns: The directory where translations should be searched for.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_ALL
 const char *purple_get_locale_dir(void);
diff --git a/libpurple/countingnode.h b/libpurple/countingnode.h
--- a/libpurple/countingnode.h
+++ b/libpurple/countingnode.h
@@ -60,7 +60,7 @@
  *
  * See #PurpleContact, #PurpleGroup
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 struct _PurpleCountingNode {
 	PurpleBlistNode node;
@@ -83,7 +83,7 @@
  *
  * Returns: The #GType for the #PurpleCountingNode object.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 GType purple_counting_node_get_type(void);
@@ -96,7 +96,7 @@
  *
  * Returns:  The total number of children of the node
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 int purple_counting_node_get_total_size(PurpleCountingNode *counter);
@@ -110,7 +110,7 @@
  *
  * Returns:  The number of children with online accounts
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 int purple_counting_node_get_current_size(PurpleCountingNode *counter);
@@ -123,7 +123,7 @@
  *
  * Returns:  The total number of online children
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 int purple_counting_node_get_online_count(PurpleCountingNode *counter);
@@ -137,7 +137,7 @@
  * delta value is added to the count, or if it's negative, the count is
  * decreased.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 void purple_counting_node_change_total_size(PurpleCountingNode *counter, int delta);
@@ -151,7 +151,7 @@
  * accounts. The provided delta value is added to the count, or if it's
  * negative, the count is decreased.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 void purple_counting_node_change_current_size(PurpleCountingNode *counter, int delta);
@@ -165,7 +165,7 @@
  * provided delta value is added to the count, or if it's negative, the count is
  * decreased.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 void purple_counting_node_change_online_count(PurpleCountingNode *counter, int delta);
@@ -177,7 +177,7 @@
  *
  * Sets the total number of children of the counting node.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 void purple_counting_node_set_total_size(PurpleCountingNode *counter, int totalsize);
@@ -190,7 +190,7 @@
  * Sets the number of children of the counting node corresponding to online
  * accounts.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 void purple_counting_node_set_current_size(PurpleCountingNode *counter, int currentsize);
@@ -202,7 +202,7 @@
  *
  * Sets the number of children of the counting node that are online.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 void purple_counting_node_set_online_count(PurpleCountingNode *counter, int onlinecount);
diff --git a/libpurple/debug.h b/libpurple/debug.h
--- a/libpurple/debug.h
+++ b/libpurple/debug.h
@@ -47,7 +47,7 @@
  *
  * Available debug levels.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 typedef enum {
 	PURPLE_DEBUG_ALL = 0,
@@ -70,7 +70,7 @@
  *
  * Outputs debug information.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void purple_debug(PurpleDebugLevel level, const gchar *category, const gchar *format, ...) G_GNUC_PRINTF(3, 4);
@@ -88,7 +88,7 @@
  *
  * See purple_debug().
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void purple_debug_misc(const gchar *category, const gchar *format, ...) G_GNUC_PRINTF(2, 3);
@@ -106,7 +106,7 @@
  *
  * See purple_debug().
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void purple_debug_info(const gchar *category, const gchar *format, ...) G_GNUC_PRINTF(2, 3);
@@ -124,7 +124,7 @@
  *
  * See purple_debug().
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void purple_debug_warning(const gchar *category, const gchar *format, ...) G_GNUC_PRINTF(2, 3);
@@ -142,7 +142,7 @@
  *
  * See purple_debug().
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void purple_debug_error(const gchar *category, const gchar *format, ...) G_GNUC_PRINTF(2, 3);
@@ -160,7 +160,7 @@
  *
  * See purple_debug().
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void purple_debug_fatal(const gchar *category, const gchar *format, ...) G_GNUC_PRINTF(2, 3);
@@ -173,7 +173,7 @@
  * by purple_debug_init(), but there are cases where this can be useful for
  * plugins.
  *
- * Since: 2.6.0
+ * Since: 2.6
  */
 PURPLE_AVAILABLE_IN_2_6
 void purple_debug_set_verbose(gboolean verbose);
@@ -185,7 +185,7 @@
  *
  * Returns: %TRUE if verbose debugging is enabled, %FALSE if it is not.
  *
- * Since: 2.6.0
+ * Since: 2.6
  */
 PURPLE_AVAILABLE_IN_2_6
 gboolean purple_debug_is_verbose(void);
@@ -200,7 +200,7 @@
  * purple_debug_init(), but there are cases where this can be useful for
  * plugins.
  *
- * Since: 2.6.0
+ * Since: 2.6
  */
 PURPLE_AVAILABLE_IN_2_6
 void purple_debug_set_unsafe(gboolean unsafe);
@@ -214,7 +214,7 @@
  *          messages that could potentially contain passwords and other
  *          sensitive information are not logged.
  *
- * Since: 2.6.0
+ * Since: 2.6
  */
 PURPLE_AVAILABLE_IN_2_6
 gboolean purple_debug_is_unsafe(void);
@@ -228,7 +228,7 @@
  *
  * Initializes the debug subsystem.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void purple_debug_init(void);
diff --git a/libpurple/eventloop.h b/libpurple/eventloop.h
--- a/libpurple/eventloop.h
+++ b/libpurple/eventloop.h
@@ -39,7 +39,7 @@
  *
  * An input condition.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 typedef enum
 {
@@ -59,7 +59,7 @@
  * purple_input_add(), the file descriptor on which the event occurred, and the
  * condition that was satisfied to cause the callback to be invoked.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 typedef void (*PurpleInputFunction)(gpointer data, gint fd, PurpleInputCondition cond);
 
@@ -82,7 +82,7 @@
  *
  * Returns: The resulting handle (will be greater than 0).
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 guint purple_input_add(int fd, PurpleInputCondition cond, PurpleInputFunction func, gpointer user_data);
@@ -103,7 +103,7 @@
  *
  * Returns: 0 on success, -1 on error.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 int
diff --git a/libpurple/group.h b/libpurple/group.h
--- a/libpurple/group.h
+++ b/libpurple/group.h
@@ -54,7 +54,7 @@
  * A group is a counting node, which means it keeps track of the counts of the
  * chats and contacts under this group.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 struct _PurpleGroup {
 	PurpleCountingNode counting;
@@ -81,7 +81,7 @@
  *
  * Returns: The #GType for the #PurpleGroup object.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 GType purple_group_get_type(void);
@@ -97,7 +97,7 @@
  *
  * Returns: A new group struct
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 PurpleGroup *purple_group_new(const char *name);
@@ -111,7 +111,7 @@
  * Returns: (element-type PurpleAccount) (transfer container): A list of
  *          accounts, or %NULL if the group has no accounts.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 GSList *purple_group_get_accounts(PurpleGroup *g);
@@ -125,7 +125,7 @@
  *
  * Returns: TRUE if there are any buddies in the group, or FALSE otherwise.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 gboolean purple_group_on_account(PurpleGroup *g, PurpleAccount *account);
@@ -137,7 +137,7 @@
  *
  * Sets the name of a group.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 void purple_group_set_name(PurpleGroup *group, const char *name);
@@ -150,7 +150,7 @@
  *
  * Returns: The name of the group.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 const char *purple_group_get_name(PurpleGroup *group);
diff --git a/libpurple/idle.h b/libpurple/idle.h
--- a/libpurple/idle.h
+++ b/libpurple/idle.h
@@ -46,7 +46,7 @@
  * 'active'.  The conversation code calls this when the
  * user sends an IM, for example.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void purple_idle_touch(void);
@@ -58,7 +58,7 @@
  * accounts purportedly became idle.  This is used by
  * the I'dle Mak'er plugin.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void purple_idle_set(time_t time);
@@ -73,7 +73,7 @@
  *
  * Sets the user interface idle reporter.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 void purple_idle_set_ui(PurpleIdleUi *ui);
@@ -86,7 +86,7 @@
  * Returns: (transfer none): The [iface@IdleUi] that is currently in use or
  *          %NULL if no idle reporter is available.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 PurpleIdleUi *purple_idle_get_ui(void);
@@ -96,7 +96,7 @@
  *
  * Initializes the idle system.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void purple_idle_init(void);
@@ -106,7 +106,7 @@
  *
  * Uninitializes the idle system.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void purple_idle_uninit(void);
diff --git a/libpurple/image-store.h b/libpurple/image-store.h
--- a/libpurple/image-store.h
+++ b/libpurple/image-store.h
@@ -65,7 +65,7 @@
  *
  * Returns: the unique identifier for the @image.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 guint
@@ -82,7 +82,7 @@
  *
  * Returns: the unique identifier for the @image.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 guint
@@ -102,7 +102,7 @@
  *
  * Returns: the unique identifier for the @image.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 guint
@@ -117,7 +117,7 @@
  * Returns: (transfer none): the image referenced by @id, or %NULL if it
  *          doesn't exists.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 PurpleImage *
@@ -136,7 +136,7 @@
  * Returns: (transfer none): the image referenced by @uri, or %NULL if it
  *          doesn't point to any valid image.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 PurpleImage *
@@ -152,7 +152,7 @@
  * Returns: (transfer full): the URI for the @image. Should be #g_free'd when
  * you done using it.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 gchar *
@@ -163,7 +163,7 @@
  *
  * Initializes the image store subsystem.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 G_GNUC_INTERNAL
 void
@@ -174,7 +174,7 @@
  *
  * Uninitializes the image store subsystem.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 G_GNUC_INTERNAL
 void
diff --git a/libpurple/image.h b/libpurple/image.h
--- a/libpurple/image.h
+++ b/libpurple/image.h
@@ -56,7 +56,7 @@
  * filenames (not necessarily real filename for displaying); remote images
  * (which data is not yet loaded) or guessing file format from its header.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 G_DECLARE_DERIVABLE_TYPE(PurpleImage, purple_image, PURPLE, IMAGE, GObject)
@@ -69,7 +69,7 @@
  *
  * Returns: the new #PurpleImage.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 PurpleImage *purple_image_new_from_bytes(GBytes *bytes);
@@ -86,7 +86,7 @@
  *
  * Returns: the new #PurpleImage.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 PurpleImage *purple_image_new_from_file(const gchar *path, GError **error);
@@ -103,7 +103,7 @@
  *
  * Returns: the new #PurpleImage.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 PurpleImage *purple_image_new_from_data(const guint8 *data, gsize length);
@@ -120,7 +120,7 @@
  *
  * Returns: the new #PurpleImage.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 PurpleImage *purple_image_new_take_data(guint8 *data, gsize length);
@@ -134,7 +134,7 @@
  *
  * Returns: %TRUE if succeeded, %FALSE otherwise.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 gboolean purple_image_save(PurpleImage *image, const gchar *path);
@@ -147,7 +147,7 @@
  *
  * Returns: (transfer full): A #GBytes containing the image data.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 GBytes *purple_image_get_contents(PurpleImage *image);
@@ -162,7 +162,7 @@
  *
  * Returns: the physical path of the @image, or %NULL.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 const gchar *purple_image_get_path(PurpleImage *image);
@@ -175,7 +175,7 @@
  *
  * Returns: the size of data, or 0 in case of failure.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 gsize purple_image_get_data_size(PurpleImage *image);
@@ -188,7 +188,7 @@
  *
  * Returns: (transfer none): the @image data.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 gconstpointer purple_image_get_data(PurpleImage *image);
@@ -201,7 +201,7 @@
  *
  * Returns: (transfer none): the file extension suitable for @image format.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 const gchar *purple_image_get_extension(PurpleImage *image);
@@ -214,7 +214,7 @@
  *
  * Returns: (transfer none): the mime-type suitable for @image format.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 const gchar *purple_image_get_mimetype(PurpleImage *image);
@@ -229,7 +229,7 @@
  *
  * Returns: (transfer none): the generated file name.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 const gchar *purple_image_generate_filename(PurpleImage *image);
@@ -246,7 +246,7 @@
  * The provided @filename may either be a full path, or contain
  * filesystem-unfriendly characters, because it will be reformatted.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 void purple_image_set_friendly_filename(PurpleImage *image, const gchar *filename);
@@ -264,7 +264,7 @@
  *
  * Returns: (transfer none): the friendly filename.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 const gchar *purple_image_get_friendly_filename(PurpleImage *image);
diff --git a/libpurple/media-gst.h b/libpurple/media-gst.h
--- a/libpurple/media-gst.h
+++ b/libpurple/media-gst.h
@@ -42,7 +42,7 @@
  *
  * An opaque structure representing an audio/video source/sink.
  *
- * Since: 2.6.0
+ * Since: 2.6
  */
 PURPLE_AVAILABLE_TYPE_IN_2_6
 typedef struct _PurpleMediaElementInfo PurpleMediaElementInfo;
@@ -73,7 +73,7 @@
  * @PURPLE_MEDIA_ELEMENT_SINK:         can be set as an active sink
  * @PURPLE_MEDIA_ELEMENT_APPLICATION:  supports application data
  *
- * Since: 2.6.0
+ * Since: 2.6
  */
 PURPLE_AVAILABLE_TYPE_IN_2_6
 typedef enum {
@@ -114,7 +114,7 @@
  *
  * Returns: (transfer none): The source retrieved.
  *
- * Since: 2.6.0
+ * Since: 2.6
  */
 PURPLE_AVAILABLE_IN_2_6
 GstElement *purple_media_get_src(PurpleMedia *media, const gchar *sess_id);
@@ -129,7 +129,7 @@
  *
  * Returns: (transfer none): The GstTee element from the chosen session/stream.
  *
- * Since: 2.6.0
+ * Since: 2.6
  */
 PURPLE_AVAILABLE_IN_2_6
 GstElement *purple_media_get_tee(PurpleMedia *media,
@@ -144,7 +144,7 @@
  *
  * Returns: (transfer none): The pipeline.
  *
- * Since: 2.6.0
+ * Since: 2.6
  */
 PURPLE_AVAILABLE_IN_2_6
 GstElement *purple_media_manager_get_pipeline(PurpleMediaManager *manager);
@@ -159,7 +159,7 @@
  *
  * Returns: (transfer full): A GStreamer source or sink for audio or video.
  *
- * Since: 2.6.0
+ * Since: 2.6
  */
 PURPLE_AVAILABLE_IN_2_6
 GstElement *purple_media_manager_get_element(PurpleMediaManager *manager,
@@ -174,7 +174,7 @@
  * Returns: (transfer container) (element-type PurpleMediaElementInfo): A #GList of registered #PurpleMediaElementInfo instances that match
  * @type.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 GList *purple_media_manager_enumerate_elements(PurpleMediaManager *manager, PurpleMediaElementType type);
@@ -186,7 +186,7 @@
  *
  * Returns: (transfer full): The #PurpleMediaElementInfo for @name or NULL.
  *
- * Since: 2.6.0
+ * Since: 2.6
  */
 PURPLE_AVAILABLE_IN_2_6
 PurpleMediaElementInfo *purple_media_manager_get_element_info(
@@ -211,7 +211,7 @@
  *
  * Returns: (transfer none): The #PurpleMediaElementInfo for @type.
  *
- * Since: 2.6.0
+ * Since: 2.6
  */
 PURPLE_AVAILABLE_IN_2_6
 PurpleMediaElementInfo *purple_media_manager_get_active_element(
@@ -227,7 +227,7 @@
  * Useful to force negotiation of smaller picture resolution more suitable for
  * use with particular codec and communication protocol without rescaling.
  *
- * Since: 2.8.0
+ * Since: 2.8
  */
 PURPLE_AVAILABLE_IN_2_8
 void purple_media_manager_set_video_caps(PurpleMediaManager *manager,
@@ -241,7 +241,7 @@
  *
  * Returns: GstCaps limiting the video source's formats.
  *
- * Since: 2.8.0
+ * Since: 2.8
  */
 PURPLE_AVAILABLE_IN_2_8
 GstCaps *purple_media_manager_get_video_caps(PurpleMediaManager *manager);
@@ -265,7 +265,7 @@
  *
  * Returns: (transfer full): The new GstElement.
  *
- * Since: 2.6.0
+ * Since: 2.6
  */
 PURPLE_AVAILABLE_IN_2_6
 GstElement *purple_media_element_info_call_create(
diff --git a/libpurple/media.h b/libpurple/media.h
--- a/libpurple/media.h
+++ b/libpurple/media.h
@@ -89,7 +89,7 @@
  *
  * Returns: The media class's GType.
  *
- * Since: 2.6.0
+ * Since: 2.6
  */
 PURPLE_AVAILABLE_IN_2_6
 GType purple_media_get_type(void);
@@ -102,7 +102,7 @@
  *
  * Returns: (element-type utf8) (transfer container): List of session IDs.
  *
- * Since: 2.6.0
+ * Since: 2.6
  */
 PURPLE_AVAILABLE_IN_2_6
 GList *purple_media_get_session_ids(PurpleMedia *media);
@@ -115,7 +115,7 @@
  *
  * Returns: (transfer full): The account retrieved.
  *
- * Since: 2.6.0
+ * Since: 2.6
  */
 PURPLE_AVAILABLE_IN_2_6
 PurpleAccount *purple_media_get_account(PurpleMedia *media);
@@ -128,7 +128,7 @@
  *
  * Returns: The protocol data retrieved.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 gpointer purple_media_get_protocol_data(PurpleMedia *media);
@@ -140,7 +140,7 @@
  *
  * Sets the protocol data on the media session.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 void purple_media_set_protocol_data(PurpleMedia *media, gpointer protocol_data);
@@ -153,7 +153,7 @@
  *
  * Signals an error in the media session.
  *
- * Since: 2.6.0
+ * Since: 2.6
  */
 PURPLE_AVAILABLE_IN_2_6
 void purple_media_error(PurpleMedia *media, const gchar *error, ...) G_GNUC_PRINTF(2, 3);
@@ -166,7 +166,7 @@
  *
  * Ends all streams that match the given parameters
  *
- * Since: 2.6.0
+ * Since: 2.6
  */
 PURPLE_AVAILABLE_IN_2_6
 void purple_media_end(PurpleMedia *media, const gchar *session_id,
@@ -182,7 +182,7 @@
  *
  * Signals different information about the given stream.
  *
- * Since: 2.6.0
+ * Since: 2.6
  */
 PURPLE_AVAILABLE_IN_2_6
 void purple_media_stream_info(PurpleMedia *media, PurpleMediaInfoType type,
@@ -206,7 +206,7 @@
  *   - "sdes-note"     : The NOTE to put in SDES messages
  *   - "sdes-phone"    : The PHONE to put in SDES messages
  *
- * Since: 2.8.0
+ * Since: 2.8
  */
 PURPLE_AVAILABLE_IN_2_8
 void purple_media_set_params(PurpleMedia *media, GHashTable *params);
@@ -222,7 +222,7 @@
  * Returns: (array zero-terminated=1) (transfer none): Names of supported
  *          parameters.
  *
- * Since: 2.8.0
+ * Since: 2.8
  */
 PURPLE_AVAILABLE_IN_2_8
 const gchar **purple_media_get_available_params(PurpleMedia *media);
@@ -236,7 +236,7 @@
  *
  * Returns: %TRUE if backend recognizes the parameter, %FALSE otherwise.
  *
- * Since: 2.8.0
+ * Since: 2.8
  */
 PURPLE_AVAILABLE_IN_2_8
 gboolean purple_media_param_is_supported(PurpleMedia *media, const gchar *param);
@@ -259,7 +259,7 @@
  *
  * Returns: %TRUE The stream was added successfully, %FALSE otherwise.
  *
- * Since: 2.6.0
+ * Since: 2.6
  */
 PURPLE_AVAILABLE_IN_2_6
 gboolean purple_media_add_stream(PurpleMedia *media, const gchar *sess_id,
@@ -275,7 +275,7 @@
  *
  * Returns: The retrieved session type.
  *
- * Since: 2.6.0
+ * Since: 2.6
  */
 PURPLE_AVAILABLE_IN_2_6
 PurpleMediaSessionType purple_media_get_session_type(PurpleMedia *media, const gchar *sess_id);
@@ -288,7 +288,7 @@
  *
  * Returns: The PurpleMediaManager instance retrieved.
  *
- * Since: 2.6.0
+ * Since: 2.6
  */
 PURPLE_AVAILABLE_IN_2_6
 struct _PurpleMediaManager *purple_media_get_manager(PurpleMedia *media);
@@ -303,7 +303,7 @@
  * Returns: (element-type PurpleMediaCodec) (transfer full): The retrieved
  *          codecs.
  *
- * Since: 2.6.0
+ * Since: 2.6
  */
 PURPLE_AVAILABLE_IN_2_6
 GList *purple_media_get_codecs(PurpleMedia *media, const gchar *sess_id);
@@ -318,7 +318,7 @@
  *
  * Adds remote candidates to the stream.
  *
- * Since: 2.6.0
+ * Since: 2.6
  */
 PURPLE_AVAILABLE_IN_2_6
 void purple_media_add_remote_candidates(PurpleMedia *media,
@@ -337,7 +337,7 @@
  * Returns: (element-type PurpleMediaCandidate) (transfer full): The local
  *          candidates.
  *
- * Since: 2.6.0
+ * Since: 2.6
  */
 PURPLE_AVAILABLE_IN_2_6
 GList *purple_media_get_local_candidates(PurpleMedia *media,
@@ -356,7 +356,7 @@
  * Returns: (element-type PurpleMediaCandidate) (transfer full): The active
  *          candidates retrieved.
  *
- * Since: 2.8.0
+ * Since: 2.8
  */
 PURPLE_AVAILABLE_IN_2_8
 GList *purple_media_get_active_local_candidates(PurpleMedia *media,
@@ -374,7 +374,7 @@
  * Returns: (element-type PurpleMediaCandidate) (transfer full): The remote
  *          candidates retrieved.
  *
- * Since: 2.8.0
+ * Since: 2.8
  */
 PURPLE_AVAILABLE_IN_2_8
 GList *purple_media_get_active_remote_candidates(PurpleMedia *media,
@@ -392,7 +392,7 @@
  *
  * Returns: %TRUE The codecs were set successfully, or %FALSE otherwise.
  *
- * Since: 2.6.0
+ * Since: 2.6
  */
 PURPLE_AVAILABLE_IN_2_6
 gboolean purple_media_set_remote_codecs(PurpleMedia *media, const gchar *sess_id,
@@ -408,7 +408,7 @@
  *
  * Returns: %TRUE All streams for the given session_id/participant combination have candidates prepared, %FALSE otherwise.
  *
- * Since: 2.6.0
+ * Since: 2.6
  */
 PURPLE_AVAILABLE_IN_2_6
 gboolean purple_media_candidates_prepared(PurpleMedia *media,
@@ -424,7 +424,7 @@
  *
  * Returns: %TRUE The codec was successfully changed, or %FALSE otherwise.
  *
- * Since: 2.6.0
+ * Since: 2.6
  */
 PURPLE_AVAILABLE_IN_2_6
 gboolean purple_media_set_send_codec(PurpleMedia *media, const gchar *sess_id, PurpleMediaCodec *codec);
@@ -441,7 +441,7 @@
  *
  * Sets the encryption parameters of our media in the session.
  *
- * Since: 2.11.0
+ * Since: 2.11
  */
 PURPLE_AVAILABLE_IN_2_11
 gboolean purple_media_set_encryption_parameters(PurpleMedia *media,
@@ -462,7 +462,7 @@
  *
  * Sets the decryption parameters for a session participant's media.
  *
- * Since: 2.11.0
+ * Since: 2.11
  */
 PURPLE_AVAILABLE_IN_2_11
 gboolean purple_media_set_decryption_parameters(PurpleMedia *media,
@@ -479,7 +479,7 @@
  *
  * Sets whether a session participant's media requires encryption.
  *
- * Since: 2.14.0
+ * Since: 2.14
  */
 PURPLE_AVAILABLE_IN_2_14
 gboolean purple_media_set_require_encryption(PurpleMedia *media,
@@ -495,7 +495,7 @@
  *
  * Returns: %TRUE The codecs are ready, or %FALSE otherwise.
  *
- * Since: 2.6.0
+ * Since: 2.6
  */
 PURPLE_AVAILABLE_IN_2_6
 gboolean purple_media_codecs_ready(PurpleMedia *media, const gchar *sess_id);
@@ -511,7 +511,7 @@
  *
  * Returns: %TRUE RTCP-Mux was set successfully, or %FALSE otherwise.
  *
- * Since: 2.11.0
+ * Since: 2.11
  */
 PURPLE_AVAILABLE_IN_2_11
 gboolean purple_media_set_send_rtcp_mux(PurpleMedia *media,
@@ -526,7 +526,7 @@
  *
  * Returns: TRUE if the local user is the stream's initiator, else FALSE.
  *
- * Since: 2.6.0
+ * Since: 2.6
  */
 PURPLE_AVAILABLE_IN_2_6
 gboolean purple_media_is_initiator(PurpleMedia *media,
@@ -542,7 +542,7 @@
  *
  * Returns: %TRUE The selected streams have been accepted, or %FALSE otherwise.
  *
- * Since: 2.6.0
+ * Since: 2.6
  */
 PURPLE_AVAILABLE_IN_2_6
 gboolean purple_media_accepted(PurpleMedia *media, const gchar *sess_id,
@@ -556,7 +556,7 @@
  *
  * Sets the input volume of all the selected sessions.
  *
- * Since: 2.6.0
+ * Since: 2.6
  */
 PURPLE_AVAILABLE_IN_2_6
 void purple_media_set_input_volume(PurpleMedia *media, const gchar *session_id, double level);
@@ -570,7 +570,7 @@
  *
  * Sets the output volume of all the selected streams.
  *
- * Since: 2.6.0
+ * Since: 2.6
  */
 PURPLE_AVAILABLE_IN_2_6
 void purple_media_set_output_volume(PurpleMedia *media, const gchar *session_id,
@@ -586,7 +586,7 @@
  *
  * Returns: An id to reference the output window.
  *
- * Since: 2.6.0
+ * Since: 2.6
  */
 PURPLE_AVAILABLE_IN_2_6
 gulong purple_media_set_output_window(PurpleMedia *media,
@@ -598,7 +598,7 @@
  *
  * Removes all output windows from a given media session.
  *
- * Since: 2.6.0
+ * Since: 2.6
  */
 PURPLE_AVAILABLE_IN_2_6
 void purple_media_remove_output_windows(PurpleMedia *media);
@@ -616,7 +616,7 @@
  *
  * Returns: %TRUE DTMF sent successfully, or %FALSE otherwise.
  *
- * Since: 2.11.0
+ * Since: 2.11
  */
 PURPLE_AVAILABLE_IN_2_11
 gboolean purple_media_send_dtmf(PurpleMedia *media, const gchar *session_id,
diff --git a/libpurple/media/backend-iface.h b/libpurple/media/backend-iface.h
--- a/libpurple/media/backend-iface.h
+++ b/libpurple/media/backend-iface.h
@@ -46,7 +46,7 @@
  *
  * A placeholder to represent any media backend
  *
- * Since: 2.6.0
+ * Since: 2.6
  */
 typedef struct _PurpleMediaBackend PurpleMediaBackend;
 
@@ -55,7 +55,7 @@
  *
  * A structure to derive media backends from.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 typedef struct _PurpleMediaBackendInterface PurpleMediaBackendInterface;
 
@@ -111,7 +111,7 @@
  *
  * Returns: The media backend's GType.
  *
- * Since: 2.7.0
+ * Since: 2.7
  */
 PURPLE_AVAILABLE_IN_2_7
 GType purple_media_backend_get_type(void);
@@ -131,7 +131,7 @@
  *
  * Returns: True if the stream was successfully created, otherwise False.
  *
- * Since: 2.7.0
+ * Since: 2.7
  */
 PURPLE_AVAILABLE_IN_2_7
 gboolean purple_media_backend_add_stream(PurpleMediaBackend *self,
@@ -147,7 +147,7 @@
  *
  * Add remote candidates to a stream.
  *
- * Since: 2.7.0
+ * Since: 2.7
  */
 PURPLE_AVAILABLE_IN_2_7
 void purple_media_backend_add_remote_candidates(PurpleMediaBackend *self,
@@ -166,7 +166,7 @@
  *
  * Returns: True if the codecs are ready, otherwise False.
  *
- * Since: 2.7.0
+ * Since: 2.7
  */
 PURPLE_AVAILABLE_IN_2_7
 gboolean purple_media_backend_codecs_ready(PurpleMediaBackend *self,
@@ -184,7 +184,7 @@
  *
  * Returns: (transfer full) (element-type PurpleMediaCodec): The codec intersection list.
  *
- * Since: 2.7.0
+ * Since: 2.7
  */
 PURPLE_AVAILABLE_IN_2_7
 GList *purple_media_backend_get_codecs(PurpleMediaBackend *self,
@@ -201,7 +201,7 @@
  * Returns: (transfer full) (element-type PurpleMediaCandidate): The list of
  *          local candidates.
  *
- * Since: 2.7.0
+ * Since: 2.7
  */
 PURPLE_AVAILABLE_IN_2_7
 GList *purple_media_backend_get_local_candidates(PurpleMediaBackend *self,
@@ -218,7 +218,7 @@
  *
  * Returns: True if the remote codecs were set successfully, otherwise False.
  *
- * Since: 2.7.0
+ * Since: 2.7
  */
 PURPLE_AVAILABLE_IN_2_7
 gboolean purple_media_backend_set_remote_codecs(PurpleMediaBackend *self,
@@ -235,7 +235,7 @@
  *
  * Returns: True if set successfully, otherwise False.
  *
- * Since: 2.7.0
+ * Since: 2.7
  */
 PURPLE_AVAILABLE_IN_2_7
 gboolean purple_media_backend_set_send_codec(PurpleMediaBackend *self,
@@ -253,7 +253,7 @@
  *
  * Sets the encryption parameters of our media in the session.
  *
- * Since: 2.11.0
+ * Since: 2.11
  */
 PURPLE_AVAILABLE_IN_2_11
 gboolean purple_media_backend_set_encryption_parameters(PurpleMediaBackend *self,
@@ -274,7 +274,7 @@
  *
  * Sets the decryption parameters for a session participant's media.
  *
- * Since: 2.11.0
+ * Since: 2.11
  */
 PURPLE_AVAILABLE_IN_2_11
 gboolean purple_media_backend_set_decryption_parameters(PurpleMediaBackend *self,
@@ -291,7 +291,7 @@
  *
  * Sets whether a session participant's media requires encryption.
  *
- * Since: 2.14.0
+ * Since: 2.14
  */
 PURPLE_AVAILABLE_IN_2_14
 gboolean purple_media_backend_set_require_encryption(PurpleMediaBackend *self,
@@ -306,7 +306,7 @@
  *
  * Sets various optional parameters of the media backend.
  *
- * Since: 2.8.0
+ * Since: 2.8
  */
 PURPLE_AVAILABLE_IN_2_8
 void purple_media_backend_set_params(PurpleMediaBackend *self,
@@ -322,7 +322,7 @@
  * Returns: (transfer none): NULL-terminated array of names of supported
  *          parameters.
  *
- * Since: 2.8.0
+ * Since: 2.8
  */
 PURPLE_AVAILABLE_IN_2_8
 const gchar **purple_media_backend_get_available_params(PurpleMediaBackend *self);
@@ -338,7 +338,7 @@
  *
  * Returns: True if set successfully, otherwise False.
  *
- * Since: 2.11.0
+ * Since: 2.11
  */
 PURPLE_AVAILABLE_IN_2_11
 gboolean purple_media_backend_set_send_rtcp_mux(PurpleMediaBackend *self,
diff --git a/libpurple/media/candidate.h b/libpurple/media/candidate.h
--- a/libpurple/media/candidate.h
+++ b/libpurple/media/candidate.h
@@ -40,7 +40,7 @@
  *
  * The standard _get_type macro for #PurpleMediaCandidate.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 #define PURPLE_MEDIA_TYPE_CANDIDATE  purple_media_candidate_get_type()
 
@@ -51,7 +51,7 @@
  *
  * Returns: The media canditate's GType
  *
- * Since: 2.6.0
+ * Since: 2.6
  */
 PURPLE_AVAILABLE_IN_2_6
 G_DECLARE_FINAL_TYPE(PurpleMediaCandidate, purple_media_candidate,
@@ -70,7 +70,7 @@
  *
  * Returns: The newly created PurpleMediaCandidate instance.
  *
- * Since: 2.6.0
+ * Since: 2.6
  */
 PURPLE_AVAILABLE_IN_2_6
 PurpleMediaCandidate *purple_media_candidate_new(
@@ -87,7 +87,7 @@
  *
  * Returns: (transfer full): The copy of the PurpleMediaCandidate.
  *
- * Since: 2.7.0
+ * Since: 2.7
  */
 PURPLE_AVAILABLE_IN_2_7
 PurpleMediaCandidate *purple_media_candidate_copy(
@@ -103,7 +103,7 @@
  * Returns: (element-type PurpleMediaCandidate) (transfer full): The copy of
  *          the candidate list.
  *
- * Since: 2.6.0
+ * Since: 2.6
  */
 PURPLE_AVAILABLE_IN_2_6
 GList *purple_media_candidate_list_copy(GList *candidates);
@@ -115,7 +115,7 @@
  *
  * Frees a GList of PurpleMediaCandidate and its contents.
  *
- * Since: 2.6.0
+ * Since: 2.6
  */
 PURPLE_AVAILABLE_IN_2_6
 void purple_media_candidate_list_free(GList *candidates);
@@ -128,7 +128,7 @@
  *
  * Returns: The foundation.
  *
- * Since: 2.6.0
+ * Since: 2.6
  */
 PURPLE_AVAILABLE_IN_2_6
 gchar *purple_media_candidate_get_foundation(PurpleMediaCandidate *candidate);
@@ -141,7 +141,7 @@
  *
  * Returns: The component id.
  *
- * Since: 2.6.0
+ * Since: 2.6
  */
 PURPLE_AVAILABLE_IN_2_6
 guint purple_media_candidate_get_component_id(PurpleMediaCandidate *candidate);
@@ -154,7 +154,7 @@
  *
  * Returns: The IP address.
  *
- * Since: 2.6.0
+ * Since: 2.6
  */
 PURPLE_AVAILABLE_IN_2_6
 gchar *purple_media_candidate_get_ip(PurpleMediaCandidate *candidate);
@@ -167,7 +167,7 @@
  *
  * Returns: The port.
  *
- * Since: 2.6.0
+ * Since: 2.6
  */
 PURPLE_AVAILABLE_IN_2_6
 guint16 purple_media_candidate_get_port(PurpleMediaCandidate *candidate);
@@ -181,7 +181,7 @@
  *
  * Returns: The base IP address.
  *
- * Since: 2.6.0
+ * Since: 2.6
  */
 PURPLE_AVAILABLE_IN_2_6
 gchar *purple_media_candidate_get_base_ip(PurpleMediaCandidate *candidate);
@@ -195,7 +195,7 @@
  *
  * Returns: The base port.
  *
- * Since: 2.6.0
+ * Since: 2.6
  */
 PURPLE_AVAILABLE_IN_2_6
 guint16 purple_media_candidate_get_base_port(PurpleMediaCandidate *candidate);
@@ -208,7 +208,7 @@
  *
  * Returns: The protocol.
  *
- * Since: 2.6.0
+ * Since: 2.6
  */
 PURPLE_AVAILABLE_IN_2_6
 PurpleMediaNetworkProtocol purple_media_candidate_get_protocol(
@@ -222,7 +222,7 @@
  *
  * Returns: The priority.
  *
- * Since: 2.6.0
+ * Since: 2.6
  */
 PURPLE_AVAILABLE_IN_2_6
 guint32 purple_media_candidate_get_priority(PurpleMediaCandidate *candidate);
@@ -235,7 +235,7 @@
  *
  * Returns: The candidate type.
  *
- * Since: 2.6.0
+ * Since: 2.6
  */
 PURPLE_AVAILABLE_IN_2_6
 PurpleMediaCandidateType purple_media_candidate_get_candidate_type(
@@ -250,7 +250,7 @@
  *
  * Returns: The username.
  *
- * Since: 2.6.0
+ * Since: 2.6
  */
 PURPLE_AVAILABLE_IN_2_6
 gchar *purple_media_candidate_get_username(PurpleMediaCandidate *candidate);
@@ -265,7 +265,7 @@
  *
  * Returns: The password.
  *
- * Since: 2.6.0
+ * Since: 2.6
  */
 PURPLE_AVAILABLE_IN_2_6
 gchar *purple_media_candidate_get_password(PurpleMediaCandidate *candidate);
@@ -278,7 +278,7 @@
  *
  * Returns: The TTL.
  *
- * Since: 2.6.0
+ * Since: 2.6
  */
 PURPLE_AVAILABLE_IN_2_6
 guint purple_media_candidate_get_ttl(PurpleMediaCandidate *candidate);
diff --git a/libpurple/media/codec.h b/libpurple/media/codec.h
--- a/libpurple/media/codec.h
+++ b/libpurple/media/codec.h
@@ -48,7 +48,7 @@
  *
  * The standard _get_type macro for #PurpleMediaCodec.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 #define PURPLE_MEDIA_TYPE_CODEC purple_media_codec_get_type()
 
@@ -59,7 +59,7 @@
  *
  * Returns: The media codec's GType
  *
- * Since: 2.6.0
+ * Since: 2.6
  */
 PURPLE_AVAILABLE_IN_2_6
 G_DECLARE_FINAL_TYPE(PurpleMediaCodec, purple_media_codec, PURPLE_MEDIA,
@@ -76,7 +76,7 @@
  *
  * Returns: The newly created PurpleMediaCodec.
  *
- * Since: 2.6.0
+ * Since: 2.6
  */
 PURPLE_AVAILABLE_IN_2_6
 PurpleMediaCodec *purple_media_codec_new(int id, const char *encoding_name,
@@ -90,7 +90,7 @@
  *
  * Returns: The codec id.
  *
- * Since: 2.6.0
+ * Since: 2.6
  */
 PURPLE_AVAILABLE_IN_2_6
 guint purple_media_codec_get_id(PurpleMediaCodec *codec);
@@ -103,7 +103,7 @@
  *
  * Returns: The encoding name.
  *
- * Since: 2.6.0
+ * Since: 2.6
  */
 PURPLE_AVAILABLE_IN_2_6
 gchar *purple_media_codec_get_encoding_name(PurpleMediaCodec *codec);
@@ -116,7 +116,7 @@
  *
  * Returns: The clock rate.
  *
- * Since: 2.6.0
+ * Since: 2.6
  */
 PURPLE_AVAILABLE_IN_2_6
 guint purple_media_codec_get_clock_rate(PurpleMediaCodec *codec);
@@ -129,7 +129,7 @@
  *
  * Returns: The number of channels.
  *
- * Since: 2.6.0
+ * Since: 2.6
  */
 PURPLE_AVAILABLE_IN_2_6
 guint purple_media_codec_get_channels(PurpleMediaCodec *codec);
@@ -143,7 +143,7 @@
  * Returns: (element-type PurpleKeyValuePair) (transfer none): The list of
  *          optional parameters.
  *
- * Since: 2.6.0
+ * Since: 2.6
  */
 PURPLE_AVAILABLE_IN_2_6
 GList *purple_media_codec_get_optional_parameters(PurpleMediaCodec *codec);
@@ -156,7 +156,7 @@
  *
  * Adds an optional parameter to the codec.
  *
- * Since: 2.6.0
+ * Since: 2.6
  */
 PURPLE_AVAILABLE_IN_2_6
 void purple_media_codec_add_optional_parameter(PurpleMediaCodec *codec,
@@ -169,7 +169,7 @@
  *
  * Removes an optional parameter from the codec.
  *
- * Since: 2.6.0
+ * Since: 2.6
  */
 PURPLE_AVAILABLE_IN_2_6
 void purple_media_codec_remove_optional_parameter(PurpleMediaCodec *codec,
@@ -185,7 +185,7 @@
  *
  * Returns: (transfer none): The value found or NULL.
  *
- * Since: 2.6.0
+ * Since: 2.6
  */
 PURPLE_AVAILABLE_IN_2_6
 PurpleKeyValuePair *purple_media_codec_get_optional_parameter(
@@ -200,7 +200,7 @@
  *
  * Returns: (transfer full): The copy of the codec.
  *
- * Since: 2.7.0
+ * Since: 2.7
  */
 PURPLE_AVAILABLE_IN_2_7
 PurpleMediaCodec *purple_media_codec_copy(PurpleMediaCodec *codec);
@@ -215,7 +215,7 @@
  * Returns: (element-type PurpleMediaCodec) (transfer full): The copy of the
  *          codec list.
  *
- * Since: 2.6.0
+ * Since: 2.6
  */
 PURPLE_AVAILABLE_IN_2_6
 GList *purple_media_codec_list_copy(GList *codecs);
@@ -227,7 +227,7 @@
  *
  * Frees a GList of PurpleMediaCodec and its contents.
  *
- * Since: 2.6.0
+ * Since: 2.6
  */
 PURPLE_AVAILABLE_IN_2_6
 void purple_media_codec_list_free(GList *codecs);
@@ -240,7 +240,7 @@
  *
  * Returns: The new string representation.
  *
- * Since: 2.6.0
+ * Since: 2.6
  */
 PURPLE_AVAILABLE_IN_2_6
 gchar *purple_media_codec_to_string(PurpleMediaCodec *codec);
diff --git a/libpurple/media/enum-types.h b/libpurple/media/enum-types.h
--- a/libpurple/media/enum-types.h
+++ b/libpurple/media/enum-types.h
@@ -38,7 +38,7 @@
  *
  * The standard _get_type macro for #PurpleMediaCandidateType.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 #define PURPLE_MEDIA_TYPE_CANDIDATE_TYPE (purple_media_candidate_type_get_type())
 
@@ -47,7 +47,7 @@
  *
  * The standard _get_type macro for #PurpleMediaCaps.
  *
- * Since: 2.7.0
+ * Since: 2.7
  */
 #define PURPLE_MEDIA_TYPE_CAPS (purple_media_caps_get_type())
 
@@ -56,7 +56,7 @@
  *
  * The standard _get_type macro for #PurpleMediaInfoType.
  *
- * Since: 2.6.0
+ * Since: 2.6
  */
 #define PURPLE_MEDIA_TYPE_INFO_TYPE (purple_media_info_type_get_type())
 
@@ -65,7 +65,7 @@
  *
  * The standard _get_type macro for #PurpleMediaNetworkProtocol.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 #define PURPLE_MEDIA_TYPE_NETWORK_PROTOCOL (purple_media_network_protocol_get_type())
 
@@ -74,7 +74,7 @@
  *
  * The standard _get_type macro for #PurpleMediaSessionType.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 #define PURPLE_MEDIA_TYPE_SESSION_TYPE (purple_media_session_type_get_type())
 
@@ -83,7 +83,7 @@
  *
  * The standard _get_type macro for #PurpleMediaState.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 #define PURPLE_MEDIA_TYPE_STATE (purple_media_state_get_type())
 
@@ -97,7 +97,7 @@
  *
  * Media candidate types
  *
- * Since: 2.6.0
+ * Since: 2.6
  */
 PURPLE_AVAILABLE_TYPE_IN_2_6
 typedef enum {
@@ -122,7 +122,7 @@
  *
  * Media caps
  *
- * Since: 2.6.0
+ * Since: 2.6
  */
 PURPLE_AVAILABLE_TYPE_IN_2_6
 typedef enum {
@@ -145,7 +145,7 @@
  *
  * Media component types
  *
- * Since: 2.6.0
+ * Since: 2.6
  */
 PURPLE_AVAILABLE_TYPE_IN_2_6
 typedef enum {
@@ -169,7 +169,7 @@
  *
  * Media info types
  *
- * Since: 2.6.0
+ * Since: 2.6
  */
 PURPLE_AVAILABLE_TYPE_IN_2_6
 typedef enum {
@@ -199,7 +199,7 @@
  *
  * Media network protocols
  *
- * Since: 2.6.0
+ * Since: 2.6
  */
 PURPLE_AVAILABLE_TYPE_IN_2_6
 typedef enum {
@@ -229,7 +229,7 @@
  *
  * Media session types
  *
- * Since: 2.6.0
+ * Since: 2.6
  */
 PURPLE_AVAILABLE_TYPE_IN_2_6
 typedef enum {
@@ -255,7 +255,7 @@
  *
  * Media state-changed types
  *
- * Since: 2.6.0
+ * Since: 2.6
  */
 PURPLE_AVAILABLE_TYPE_IN_2_6
 typedef enum {
@@ -271,7 +271,7 @@
  *
  * Returns: The media candidate type's GType.
  *
- * Since: 2.6.0
+ * Since: 2.6
  */
 PURPLE_AVAILABLE_IN_2_6
 GType purple_media_candidate_type_get_type(void);
@@ -283,7 +283,7 @@
  *
  * Returns: The media caps flags' GType
  *
- * Since: 2.7.0
+ * Since: 2.7
  */
 PURPLE_AVAILABLE_IN_2_7
 GType purple_media_caps_get_type(void);
@@ -295,7 +295,7 @@
  *
  * Returns: The info type enum's GType
  *
- * Since: 2.6.0
+ * Since: 2.6
  */
 PURPLE_AVAILABLE_IN_2_6
 GType purple_media_info_type_get_type(void);
@@ -307,7 +307,7 @@
  *
  * Returns: The media network protocol's GType.
  *
- * Since: 2.6.0
+ * Since: 2.6
  */
 PURPLE_AVAILABLE_IN_2_6
 GType purple_media_network_protocol_get_type(void);
@@ -319,7 +319,7 @@
  *
  * Returns: The media session type's GType.
  *
- * Since: 2.6.0
+ * Since: 2.6
  */
 PURPLE_AVAILABLE_IN_2_6
 GType purple_media_session_type_get_type(void);
@@ -331,7 +331,7 @@
  *
  * Returns: The state enum's GType
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 GType purple_media_state_get_type(void);
diff --git a/libpurple/mediamanager.h b/libpurple/mediamanager.h
--- a/libpurple/mediamanager.h
+++ b/libpurple/mediamanager.h
@@ -43,7 +43,7 @@
  *
  * The media manager class.
  *
- * Since: 2.6.0
+ * Since: 2.6
  */
 struct _PurpleMediaManagerClass
 {
@@ -71,7 +71,7 @@
  * stream changes. The @writable argument defines whether the stream has
  * become writable or stopped being writable.
  *
- * Since: 2.6.0
+ * Since: 2.6
  */
 PURPLE_AVAILABLE_TYPE_IN_2_6
 typedef struct {
@@ -99,7 +99,7 @@
  *
  * Returns: (transfer none): The "global" instance of the media manager object.
  *
- * Since: 2.6.0
+ * Since: 2.6
  */
 PURPLE_AVAILABLE_IN_2_6
 PurpleMediaManager *purple_media_manager_get(void);
@@ -116,7 +116,7 @@
  *
  * Returns: (transfer full): A newly created media session.
  *
- * Since: 2.6.0
+ * Since: 2.6
  */
 PURPLE_AVAILABLE_IN_2_6
 PurpleMedia *purple_media_manager_create_media(PurpleMediaManager *manager,
@@ -133,7 +133,7 @@
  *
  * Returns: (transfer none) (element-type PurpleMedia): A list of all the media sessions.
  *
- * Since: 2.6.0
+ * Since: 2.6
  */
 PURPLE_AVAILABLE_IN_2_6
 GList *purple_media_manager_get_media(PurpleMediaManager *manager);
@@ -147,7 +147,7 @@
  *
  * Returns: (transfer container) (element-type PurpleMedia): A list of the media sessions on the given account.
  *
- * Since: 2.6.0
+ * Since: 2.6
  */
 PURPLE_AVAILABLE_IN_2_6
 GList *purple_media_manager_get_media_by_account(
@@ -160,7 +160,7 @@
  *
  * Removes a media session from the media manager.
  *
- * Since: 2.6.0
+ * Since: 2.6
  */
 PURPLE_AVAILABLE_IN_2_6
 void
@@ -183,7 +183,7 @@
  *
  * Returns: (transfer full): A newly created media session.
  *
- * Since: 2.6.0
+ * Since: 2.6
  */
 PURPLE_AVAILABLE_IN_2_6
 PurpleMedia *purple_media_manager_create_private_media(
@@ -201,7 +201,7 @@
  *
  * Returns: (transfer none) (element-type PurpleMedia): A list of all the private media sessions.
  *
- * Since: 2.11.0
+ * Since: 2.11
  */
 PURPLE_AVAILABLE_IN_2_11
 GList *purple_media_manager_get_private_media(PurpleMediaManager *manager);
@@ -215,7 +215,7 @@
  *
  * Returns: (transfer container) (element-type PurpleMedia): A list of the private media sessions on the given account.
  *
- * Since: 2.11.0
+ * Since: 2.11
  */
 PURPLE_AVAILABLE_IN_2_11
 GList *purple_media_manager_get_private_media_by_account(
@@ -234,7 +234,7 @@
  *
  * Returns: TRUE if it succeeded, FALSE if it failed.
  *
- * Since: 2.6.0
+ * Since: 2.6
  */
 PURPLE_AVAILABLE_IN_2_6
 gboolean purple_media_manager_create_output_window(
@@ -252,7 +252,7 @@
  *
  * Returns: A unique ID to the registered output window, 0 if it failed.
  *
- * Since: 2.6.0
+ * Since: 2.6
  */
 PURPLE_AVAILABLE_IN_2_6
 gulong purple_media_manager_set_output_window(PurpleMediaManager *manager,
@@ -268,7 +268,7 @@
  *
  * Returns: TRUE if it found the output window and was successful, else FALSE.
  *
- * Since: 2.6.0
+ * Since: 2.6
  */
 PURPLE_AVAILABLE_IN_2_6
 gboolean purple_media_manager_remove_output_window(
@@ -283,7 +283,7 @@
  *
  * Remove all output windows for a given conference/session/participant/stream.
  *
- * Since: 2.6.0
+ * Since: 2.6
  */
 PURPLE_AVAILABLE_IN_2_6
 void purple_media_manager_remove_output_windows(
@@ -297,7 +297,7 @@
  *
  * Sets which media caps the UI supports.
  *
- * Since: 2.6.0
+ * Since: 2.6
  */
 PURPLE_AVAILABLE_IN_2_6
 void purple_media_manager_set_ui_caps(PurpleMediaManager *manager,
@@ -311,7 +311,7 @@
  *
  * Returns: caps The caps retrieved.
  *
- * Since: 2.6.0
+ * Since: 2.6
  */
 PURPLE_AVAILABLE_IN_2_6
 PurpleMediaCaps purple_media_manager_get_ui_caps(PurpleMediaManager *manager);
@@ -323,7 +323,7 @@
  *
  * Sets which media backend type media objects will use.
  *
- * Since: 2.7.0
+ * Since: 2.7
  */
 PURPLE_AVAILABLE_IN_2_7
 void purple_media_manager_set_backend_type(PurpleMediaManager *manager,
@@ -337,7 +337,7 @@
  *
  * Returns: The type of media backend type media objects will use.
  *
- * Since: 2.7.0
+ * Since: 2.7
  */
 PURPLE_AVAILABLE_IN_2_7
 GType purple_media_manager_get_backend_type(PurpleMediaManager *manager);
@@ -355,7 +355,7 @@
  * Set callbacks on a session to be called when the stream becomes writable
  * or readable for media sessions of type #PURPLE_MEDIA_APPLICATION
  *
- * Since: 2.6.0
+ * Since: 2.6
  */
 PURPLE_AVAILABLE_IN_2_6
 void purple_media_manager_set_application_data_callbacks(
@@ -384,7 +384,7 @@
  *
  * Returns: Number of bytes sent or -1 in case of error.
  *
- * Since: 2.6.0
+ * Since: 2.6
  */
 PURPLE_AVAILABLE_IN_2_6
 gint purple_media_manager_send_application_data (
@@ -408,7 +408,7 @@
  *
  * Returns: Number of bytes received or -1 in case of error.
  *
- * Since: 2.6.0
+ * Since: 2.6
  */
 PURPLE_AVAILABLE_IN_2_6
 gint purple_media_manager_receive_application_data (
diff --git a/libpurple/network.h b/libpurple/network.h
--- a/libpurple/network.h
+++ b/libpurple/network.h
@@ -47,7 +47,7 @@
  * (file transfer, direct IM, etc.) and should therefore be
  * publicly accessible.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void purple_network_set_public_ip(const char *ip);
@@ -61,7 +61,7 @@
  *
  * Returns: The local IP address set in preferences.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 const char *purple_network_get_public_ip(void);
@@ -76,7 +76,7 @@
  * is used.  Otherwise STUN, UPnP, and NAT-PMP will be attempted to discover
  * the local IP address depending on what's available.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 void purple_network_discover_my_ip(void);
@@ -94,7 +94,7 @@
  *
  * Returns: The local IP address to be used.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 gchar *purple_network_get_my_ip_from_gio(GSocketConnection *sockconn);
@@ -106,7 +106,7 @@
  *
  * Returns: TRUE if the network is available
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 gboolean purple_network_is_available(void);
@@ -120,7 +120,7 @@
  * for example.  This is useful for offline testing, especially when
  * combined with nullprotocol.
  *
- * Since: 2.6.0
+ * Since: 2.6
  */
 PURPLE_AVAILABLE_IN_2_6
 void purple_network_force_online(void);
@@ -132,7 +132,7 @@
  * Update the STUN server IP given the host name
  * Will result in a DNS query being executed asynchronous
  *
- * Since: 2.6.0
+ * Since: 2.6
  */
 PURPLE_AVAILABLE_IN_2_6
 void purple_network_set_stun_server(const gchar *stun_server);
@@ -144,7 +144,7 @@
  *
  * Returns: the IP address
  *
- * Since: 2.6.0
+ * Since: 2.6
  */
 PURPLE_AVAILABLE_IN_2_6
 const gchar *purple_network_get_stun_ip(void);
@@ -157,7 +157,7 @@
  *
  * Returns: %TRUE if succeeded, %FALSE otherwise.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 gboolean _purple_network_set_common_socket_flags(int fd);
@@ -167,7 +167,7 @@
  *
  * Initializes the network subsystem.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void purple_network_init(void);
@@ -177,7 +177,7 @@
  *
  * Shuts down the network subsystem.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void purple_network_uninit(void);
diff --git a/libpurple/notify.h b/libpurple/notify.h
--- a/libpurple/notify.h
+++ b/libpurple/notify.h
@@ -262,7 +262,7 @@
  *
  * Returns: A UI-specific handle.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void *purple_notify_searchresults(PurpleConnection *gc, const char *title, const char *primary, const char *secondary, PurpleNotifySearchResults *results, PurpleNotifyCloseCallback cb, gpointer user_data);
@@ -273,7 +273,7 @@
  *
  * Frees a PurpleNotifySearchResults object.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void purple_notify_searchresults_free(PurpleNotifySearchResults *results);
@@ -286,7 +286,7 @@
  *
  * Replace old rows with the new. Reuse an existing window.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void purple_notify_searchresults_new_rows(PurpleConnection *gc, PurpleNotifySearchResults *results, void *data);
@@ -301,7 +301,7 @@
  *
  * Adds a stock button that will be displayed in the search results dialog.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void purple_notify_searchresults_button_add(PurpleNotifySearchResults *results, PurpleNotifySearchButtonType type, PurpleNotifySearchResultsCallback cb);
@@ -316,7 +316,7 @@
  * Adds a plain labelled button that will be displayed in the search results
  * dialog.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void purple_notify_searchresults_button_add_labeled(PurpleNotifySearchResults *results, const char *label, PurpleNotifySearchResultsCallback cb);
@@ -329,7 +329,7 @@
  *
  * Returns: (transfer full): The new search results object.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 PurpleNotifySearchResults *purple_notify_searchresults_new(void);
@@ -343,7 +343,7 @@
  *
  * Returns: (transfer full): The new search column object.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 PurpleNotifySearchColumn *purple_notify_searchresults_column_new(const char *title);
@@ -356,7 +356,7 @@
  *
  * Returns: The title of the column
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 const char *purple_notify_searchresult_column_get_title(const PurpleNotifySearchColumn *column);
@@ -368,7 +368,7 @@
  *
  * Sets whether or not a search result column is visible.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 void purple_notify_searchresult_column_set_visible(PurpleNotifySearchColumn *column, gboolean visible);
@@ -381,7 +381,7 @@
  *
  * Returns: TRUE if the search result column is visible. FALSE otherwise.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 gboolean purple_notify_searchresult_column_is_visible(const PurpleNotifySearchColumn *column);
@@ -393,7 +393,7 @@
  *
  * Adds a new column to the search result object.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void purple_notify_searchresults_column_add(PurpleNotifySearchResults *results, PurpleNotifySearchColumn *column);
@@ -405,7 +405,7 @@
  *
  * Adds a new row of the results to the search results object.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void purple_notify_searchresults_row_add(PurpleNotifySearchResults *results, GList *row);
@@ -431,7 +431,7 @@
  *
  * Returns: A UI-specific handle.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void *purple_notify_message(void *handle, PurpleNotifyMessageType type, const char *title, const char *primary, const char *secondary, PurpleRequestCommonParameters *cpar, PurpleNotifyCloseCallback cb, gpointer user_data);
@@ -454,7 +454,7 @@
  *
  * Returns: A UI-specific handle.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void *purple_notify_formatted(void *handle, const char *title, const char *primary, const char *secondary, const char *text, PurpleNotifyCloseCallback cb, gpointer user_data);
@@ -476,7 +476,7 @@
  *
  * Returns:  A UI-specific handle.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void *purple_notify_userinfo(PurpleConnection *gc, const char *who, PurpleNotifyUserInfo *user_info, PurpleNotifyCloseCallback cb, gpointer user_data);
@@ -486,7 +486,7 @@
  *
  * Returns: The #GType for #PurpleNotifiySearchButton boxed structure.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 GType purple_notify_search_button_get_type(void);
@@ -496,7 +496,7 @@
  *
  * Returns: The #GType for the #PurpleNotifyUserInfo boxed structure.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 GType purple_notify_user_info_get_type(void);
@@ -509,7 +509,7 @@
  *
  * Returns:  A new PurpleNotifyUserInfo, which the caller must destroy when done
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 PurpleNotifyUserInfo *purple_notify_user_info_new(void);
@@ -520,7 +520,7 @@
  *
  * Destroy a PurpleNotifyUserInfo
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void purple_notify_user_info_destroy(PurpleNotifyUserInfo *user_info);
@@ -543,7 +543,7 @@
  *
  * Returns: (transfer none): A GQueue of PurpleNotifyUserInfoEntry objects.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 GQueue *purple_notify_user_info_get_entries(PurpleNotifyUserInfo *user_info);
@@ -556,7 +556,7 @@
  * Create a textual representation of a PurpleNotifyUserInfo, separating
  * entries with newline
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 char *purple_notify_user_info_get_text_with_newline(PurpleNotifyUserInfo *user_info, const char *newline);
@@ -576,7 +576,7 @@
  * Add a label/value pair to a #PurpleNotifyUserInfo object.
  * #PurpleNotifyUserInfo keeps track of the order in which pairs are added.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 void purple_notify_user_info_add_pair_html(PurpleNotifyUserInfo *user_info, const char *label, const char *value);
@@ -599,7 +599,7 @@
  * Like purple_notify_user_info_add_pair_html(), but value should be plaintext
  * and will be escaped using g_markup_escape_text().
  *
- * Since: 2.8.0
+ * Since: 2.8
  */
 PURPLE_AVAILABLE_IN_2_8
 void purple_notify_user_info_add_pair_plaintext(PurpleNotifyUserInfo *user_info, const char *label, const char *value);
@@ -619,7 +619,7 @@
  * Like purple_notify_user_info_add_pair_html(), but the pair is inserted
  * at the beginning of the list.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 void purple_notify_user_info_prepend_pair_html(PurpleNotifyUserInfo *user_info, const char *label, const char *value);
@@ -639,7 +639,7 @@
  * Like purple_notify_user_info_prepend_pair_html(), but value should be
  * plaintext and will be escaped using g_markup_escape_text().
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 void purple_notify_user_info_prepend_pair_plaintext(PurpleNotifyUserInfo *user_info, const char *label, const char *value);
@@ -652,7 +652,7 @@
  * Remove a PurpleNotifyUserInfoEntry from a PurpleNotifyUserInfo object
  * without freeing the entry.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void purple_notify_user_info_remove_entry(PurpleNotifyUserInfo *user_info, PurpleNotifyUserInfoEntry *user_info_entry);
@@ -679,7 +679,7 @@
  *
  * Returns: (transfer full): A new PurpleNotifyUserInfoEntry
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 PurpleNotifyUserInfoEntry *purple_notify_user_info_entry_new(const char *label, const char *value);
@@ -690,7 +690,7 @@
  *
  * Destroy a PurpleNotifyUserInfoEntry
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 void purple_notify_user_info_entry_destroy(PurpleNotifyUserInfoEntry *user_info_entry);
@@ -701,7 +701,7 @@
  *
  * Add a section break.  A UI might display this as a horizontal line.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void purple_notify_user_info_add_section_break(PurpleNotifyUserInfo *user_info);
@@ -712,7 +712,7 @@
  *
  * Prepend a section break.  A UI might display this as a horizontal line.
  *
- * Since: 2.5.0
+ * Since: 2.5
  */
 PURPLE_AVAILABLE_IN_2_5
 void purple_notify_user_info_prepend_section_break(PurpleNotifyUserInfo *user_info);
@@ -725,7 +725,7 @@
  * Add a section header.  A UI might display this in a different font
  * from other text.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void purple_notify_user_info_add_section_header(PurpleNotifyUserInfo *user_info, const char *label);
@@ -738,7 +738,7 @@
  * Prepend a section header.  A UI might display this in a different font
  * from other text.
  *
- * Since: 2.5.0
+ * Since: 2.5
  */
 PURPLE_AVAILABLE_IN_2_5
 void purple_notify_user_info_prepend_section_header(PurpleNotifyUserInfo *user_info, const char *label);
@@ -750,7 +750,7 @@
  * Remove the last item which was added to a PurpleNotifyUserInfo. This
  * could be used to remove a section header which is not needed.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void purple_notify_user_info_remove_last_item(PurpleNotifyUserInfo *user_info);
@@ -763,7 +763,7 @@
  *
  * Returns:  The label
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 const gchar *purple_notify_user_info_entry_get_label(PurpleNotifyUserInfoEntry *user_info_entry);
@@ -775,7 +775,7 @@
  *
  * Set the label for a PurpleNotifyUserInfoEntry
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void purple_notify_user_info_entry_set_label(PurpleNotifyUserInfoEntry *user_info_entry, const char *label);
@@ -788,7 +788,7 @@
  *
  * Returns:  The value
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 const gchar *purple_notify_user_info_entry_get_value(PurpleNotifyUserInfoEntry *user_info_entry);
@@ -800,7 +800,7 @@
  *
  * Set the value for a PurpleNotifyUserInfoEntry
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void purple_notify_user_info_entry_set_value(PurpleNotifyUserInfoEntry *user_info_entry, const char *value);
@@ -813,7 +813,7 @@
  *
  * Returns:  The PurpleNotifyUserInfoEntryType
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 PurpleNotifyUserInfoEntryType purple_notify_user_info_entry_get_entry_type(
@@ -826,7 +826,7 @@
  *
  * Set the type of a PurpleNotifyUserInfoEntry
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 void purple_notify_user_info_entry_set_entry_type(
@@ -843,7 +843,7 @@
  *         the UI code displays a dialog instead of a webpage, or something
  *         similar.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void *purple_notify_uri(void *handle, const char *uri);
@@ -858,7 +858,7 @@
  *
  * Returns: TRUE, if handle is valid, FALSE otherwise.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 gboolean
@@ -874,7 +874,7 @@
  * This should be used only by the UI operation functions and part of the
  * core.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void purple_notify_close(PurpleNotifyType type, void *ui_handle);
@@ -885,7 +885,7 @@
  *
  * Closes all notifications registered with the specified handle.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void purple_notify_close_with_handle(void *handle);
@@ -944,7 +944,7 @@
  *
  * Returns: The #GType for the #PurpleNotifyUiOps boxed structure.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 GType purple_notify_ui_ops_get_type(void);
@@ -956,7 +956,7 @@
  * Sets the UI operations structure to be used when displaying a
  * notification.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void purple_notify_set_ui_ops(PurpleNotifyUiOps *ops);
@@ -969,7 +969,7 @@
  *
  * Returns: The UI operations structure.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 PurpleNotifyUiOps *purple_notify_get_ui_ops(void);
@@ -983,7 +983,7 @@
  *
  * Initializes the notify subsystem.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void purple_notify_init(void);
@@ -993,7 +993,7 @@
  *
  * Uninitializes the notify subsystem.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void purple_notify_uninit(void);
diff --git a/libpurple/plugins.h b/libpurple/plugins.h
--- a/libpurple/plugins.h
+++ b/libpurple/plugins.h
@@ -43,7 +43,7 @@
  * Represents a plugin handle.
  * This type is an alias for GPluginPlugin.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 typedef GPluginPlugin PurplePlugin;
 
@@ -70,7 +70,7 @@
  *
  * Returns: %TRUE if successful or already loaded, %FALSE otherwise.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 gboolean purple_plugin_load(PurplePlugin *plugin, GError **error);
@@ -87,7 +87,7 @@
  *
  * Returns: %TRUE if successful or not loaded, %FALSE otherwise.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 gboolean purple_plugin_unload(PurplePlugin *plugin, GError **error);
@@ -100,7 +100,7 @@
  *
  * Returns: %TRUE if loaded, or %FALSE otherwise.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 gboolean purple_plugin_is_loaded(PurplePlugin *plugin);
@@ -117,7 +117,7 @@
  * where we use the plugin info. The plugin info instance is guaranteed to
  * exist as long as the plugin exists.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 PurplePluginInfo *purple_plugin_get_info(PurplePlugin *plugin);
@@ -132,7 +132,7 @@
  * UI needs to call purple_plugins_save_loaded() after calling this for it
  * to have any effect.
  *
- * Since: 2.3.0
+ * Since: 2.3
  */
 PURPLE_AVAILABLE_IN_2_3
 void purple_plugin_disable(PurplePlugin *plugin);
@@ -148,7 +148,7 @@
  *
  * Returns: %TRUE if the plugin is an internal plugin, %FALSE otherwise.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 gboolean purple_plugin_is_internal(PurplePlugin *plugin);
@@ -162,7 +162,7 @@
  * Returns: (element-type PurplePlugin) (transfer none): The list of a plugins that depend on the specified
  *                           plugin.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 GSList *purple_plugin_get_dependent_plugins(PurplePlugin *plugin);
@@ -180,7 +180,7 @@
  * 	       The list is owned by the caller, and must be
  *         g_list_free()d to avoid leaking the nodes.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 GList *purple_plugins_find_all(void);
@@ -192,7 +192,7 @@
  *
  * Returns: (element-type PurplePlugin) (transfer none): A list of all loaded plugins.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 GList *purple_plugins_get_loaded(void);
@@ -203,7 +203,7 @@
  *
  * Add a new directory to search for plugins
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void purple_plugins_add_search_path(const gchar *path);
@@ -216,7 +216,7 @@
  *
  * See purple_plugins_add_search_path().
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 void purple_plugins_refresh(void);
@@ -229,7 +229,7 @@
  *
  * Returns: (transfer none): The plugin if found, or %NULL if not found.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 PurplePlugin *purple_plugins_find_plugin(const gchar *id);
@@ -242,7 +242,7 @@
  *
  * Returns: (transfer none): The plugin if found, or %NULL if not found.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 PurplePlugin *purple_plugins_find_by_filename(const char *filename);
@@ -254,7 +254,7 @@
  * Saves the list of loaded plugins to the specified preference key.
  * Plugins that are set to auto-load are not saved.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void purple_plugins_save_loaded(const char *key);
@@ -266,7 +266,7 @@
  * Attempts to load all the plugins in the specified preference key
  * that were loaded when purple last quit.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void purple_plugins_load_saved(const char *key);
@@ -280,7 +280,7 @@
  *
  * Initializes the plugin subsystem
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void purple_plugins_init(void);
@@ -290,7 +290,7 @@
  *
  * Uninitializes the plugin subsystem
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void purple_plugins_uninit(void);
diff --git a/libpurple/prefs.h b/libpurple/prefs.h
--- a/libpurple/prefs.h
+++ b/libpurple/prefs.h
@@ -43,7 +43,7 @@
  *
  * Preference data types.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 typedef enum
 {
@@ -81,7 +81,7 @@
  *
  * Opaque type to carry callback information
  *
- * Since: 2.11.0
+ * Since: 2.11
  */
 typedef struct _PurplePrefCallbackData PurplePrefCallbackData;
 
@@ -100,7 +100,7 @@
  *
  * Returns: The prefs subsystem handle.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void *purple_prefs_get_handle(void);
@@ -110,7 +110,7 @@
  *
  * Initialize core prefs
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void purple_prefs_init(void);
@@ -120,7 +120,7 @@
  *
  * Uninitializes the prefs subsystem.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void purple_prefs_uninit(void);
@@ -131,7 +131,7 @@
  *
  * Add a new typeless pref.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void purple_prefs_add_none(const char *name);
@@ -143,7 +143,7 @@
  *
  * Add a new boolean pref.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void purple_prefs_add_bool(const char *name, gboolean value);
@@ -155,7 +155,7 @@
  *
  * Add a new integer pref.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void purple_prefs_add_int(const char *name, int value);
@@ -167,7 +167,7 @@
  *
  * Add a new string pref.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void purple_prefs_add_string(const char *name, const char *value);
@@ -183,7 +183,7 @@
  *       itself and original copies of the strings are up to the caller to
  *       free.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void purple_prefs_add_string_list(const char *name, GList *value);
@@ -195,7 +195,7 @@
  *
  * Add a new path pref.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void purple_prefs_add_path(const char *name, const char *value);
@@ -211,7 +211,7 @@
  *       itself and original copies of the strings are up to the caller to
  *       free.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void purple_prefs_add_path_list(const char *name, GList *value);
@@ -223,7 +223,7 @@
  *
  * Remove a pref.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void purple_prefs_remove(const char *name);
@@ -235,7 +235,7 @@
  *
  * Rename a pref
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void purple_prefs_rename(const char *oldname, const char *newname);
@@ -247,7 +247,7 @@
  *
  * Rename a boolean pref, toggling it's value
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void purple_prefs_rename_boolean_toggle(const char *oldname, const char *newname);
@@ -257,7 +257,7 @@
  *
  * Remove all prefs.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void purple_prefs_destroy(void);
@@ -269,7 +269,7 @@
  *
  * Set boolean pref value
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void purple_prefs_set_bool(const char *name, gboolean value);
@@ -281,7 +281,7 @@
  *
  * Set integer pref value
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void purple_prefs_set_int(const char *name, int value);
@@ -293,7 +293,7 @@
  *
  * Set string pref value
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void purple_prefs_set_string(const char *name, const char *value);
@@ -305,7 +305,7 @@
  *
  * Set string list pref value
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void purple_prefs_set_string_list(const char *name, GList *value);
@@ -317,7 +317,7 @@
  *
  * Set path pref value
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void purple_prefs_set_path(const char *name, const char *value);
@@ -329,7 +329,7 @@
  *
  * Set path list pref value
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void purple_prefs_set_path_list(const char *name, GList *value);
@@ -343,7 +343,7 @@
  *
  * Returns: TRUE if the pref exists.  Otherwise FALSE.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 gboolean purple_prefs_exists(const char *name);
@@ -356,7 +356,7 @@
  *
  * Returns: The type of the pref
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 PurplePrefType purple_prefs_get_pref_type(const char *name);
@@ -369,7 +369,7 @@
  *
  * Returns: The value of the pref
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 gboolean purple_prefs_get_bool(const char *name);
@@ -382,7 +382,7 @@
  *
  * Returns: The value of the pref
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 int purple_prefs_get_int(const char *name);
@@ -395,7 +395,7 @@
  *
  * Returns: The value of the pref
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 const char *purple_prefs_get_string(const char *name);
@@ -408,7 +408,7 @@
  *
  * Returns: (transfer full) (element-type utf8): The value of the pref.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 GList *purple_prefs_get_string_list(const char *name);
@@ -421,7 +421,7 @@
  *
  * Returns: The value of the pref
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 const char *purple_prefs_get_path(const char *name);
@@ -434,7 +434,7 @@
  *
  * Returns: (transfer full) (element-type utf8): The value of the pref.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 GList *purple_prefs_get_path_list(const char *name);
@@ -450,7 +450,7 @@
  *          are no children or if pref doesn't exist. The caller must free all
  *          the strings and the list.
  *
- * Since: 2.1.0
+ * Since: 2.1
  */
 PURPLE_AVAILABLE_IN_2_1
 GList *purple_prefs_get_children_names(const char *name);
@@ -468,7 +468,7 @@
  *
  * Returns: An id to disconnect the callback
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 guint purple_prefs_connect_callback(void *handle, const char *name, PurplePrefCallback cb,
@@ -480,7 +480,7 @@
  *
  * Remove a callback to a pref
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void purple_prefs_disconnect_callback(guint callback_id);
@@ -491,7 +491,7 @@
  *
  * Remove all pref callbacks by handle
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void purple_prefs_disconnect_by_handle(void *handle);
@@ -502,7 +502,7 @@
  *
  * Trigger callbacks as if the pref changed
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void purple_prefs_trigger_callback(const char *name);
@@ -514,7 +514,7 @@
  * Trigger callbacks as if the pref changed, taking a #PurplePrefCallbackData
  * instead of a name
  *
- * Since: 2.11.0
+ * Since: 2.11
  */
 PURPLE_AVAILABLE_IN_2_11
 void purple_prefs_trigger_callback_object(PurplePrefCallbackData *data);
@@ -524,7 +524,7 @@
  *
  * Read preferences
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 gboolean purple_prefs_load(void);
diff --git a/libpurple/protocols.h b/libpurple/protocols.h
--- a/libpurple/protocols.h
+++ b/libpurple/protocols.h
@@ -56,7 +56,7 @@
  *
  * This is meant to be called from protocols.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 void purple_protocol_got_user_idle(PurpleAccount *account, const char *name,
@@ -73,7 +73,7 @@
  *
  * This is meant to be called from protocols.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 void purple_protocol_got_user_status(PurpleAccount *account, const char *name,
@@ -92,7 +92,7 @@
  *
  * This is meant to be called from protocols.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 void purple_protocol_got_user_status_with_attributes(PurpleAccount *account, const gchar *name, const gchar *status_id, GHashTable *attributes);
@@ -107,7 +107,7 @@
  *
  * This is meant to be called from protocols.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 void purple_protocol_got_user_status_deactive(PurpleAccount *account,
@@ -123,7 +123,7 @@
  *
  * Informs the server that our account's status changed.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 void purple_protocol_change_account_status(PurpleAccount *account,
@@ -139,7 +139,7 @@
  *
  * Returns: (transfer full) (element-type PurpleStatus): List of statuses
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 GList *purple_protocol_get_statuses(PurpleAccount *account,
@@ -154,7 +154,7 @@
  *
  * Returns: The media caps the contact supports.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 PurpleMediaCaps purple_protocol_get_media_caps(PurpleAccount *account,
@@ -171,7 +171,7 @@
  * Returns: TRUE if the call succeeded else FALSE. (Doesn't imply the media
  *          session or stream will be successfully created)
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 gboolean purple_protocol_initiate_media(PurpleAccount *account,
@@ -187,7 +187,7 @@
  *
  * This function is intended to be used only by protocols.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 void purple_protocol_got_media_caps(PurpleAccount *account, const char *who);
diff --git a/libpurple/proxy.h b/libpurple/proxy.h
--- a/libpurple/proxy.h
+++ b/libpurple/proxy.h
@@ -47,7 +47,7 @@
  *
  * Returns: (transfer none): The global proxy information.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 PurpleProxyInfo *purple_global_proxy_get_info(void);
@@ -58,7 +58,7 @@
  *
  * Set purple's global proxy information.
  *
- * Since: 2.6.0
+ * Since: 2.6
  */
 PURPLE_AVAILABLE_IN_2_6
 void purple_global_proxy_set_info(PurpleProxyInfo *info);
@@ -72,7 +72,7 @@
  *
  * Initializes the proxy subsystem.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void purple_proxy_init(void);
@@ -82,7 +82,7 @@
  *
  * Uninitializes the proxy subsystem.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void purple_proxy_uninit(void);
@@ -95,7 +95,7 @@
  *
  * Returns: (transfer none): The configuration of a proxy.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 PurpleProxyInfo *purple_proxy_get_setup(PurpleAccount *account);
@@ -114,7 +114,7 @@
  *         account's (or system) proxy settings, or a reference to
  *         a #GProxyResolver on success.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 GProxyResolver *purple_proxy_get_proxy_resolver(PurpleAccount *account,
