# HG changeset patch
# Node ID 5464e2de0409
# Parent  648a1b5dd96a
diff --git a/libpurple/purpledebugui.h b/libpurple/purpledebugui.h
--- a/libpurple/purpledebugui.h
+++ b/libpurple/purpledebugui.h
@@ -42,7 +42,7 @@
  * #PurpleDebugUiInterface defines the behavior that libpurple uses to
  * interface the debug API with the user interface.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 G_DECLARE_INTERFACE(PurpleDebugUi, purple_debug_ui, PURPLE, DEBUG_UI, GObject)
@@ -83,7 +83,7 @@
  * Returns: %TRUE if the given level and category will be output by @ui, %FALSE
  *          otherwise.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 gboolean purple_debug_ui_is_enabled(PurpleDebugUi *ui, PurpleDebugLevel level, const gchar *category);
@@ -97,7 +97,7 @@
  *
  * Outputs @arg_s via @ui with the given @level and optional @category.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 void purple_debug_ui_print(PurpleDebugUi *ui, PurpleDebugLevel level, const gchar *category, const gchar *arg_s);
diff --git a/libpurple/purplefiletransfer.h b/libpurple/purplefiletransfer.h
--- a/libpurple/purplefiletransfer.h
+++ b/libpurple/purplefiletransfer.h
@@ -61,7 +61,7 @@
  *
  * A peer to peer file transfer object.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 
 #define PURPLE_TYPE_FILE_TRANSFER (purple_file_transfer_get_type())
@@ -85,7 +85,7 @@
  *
  * Returns: (transfer full): The new file transfer.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 PurpleFileTransfer *purple_file_transfer_new_send(PurpleAccount *account, PurpleContactInfo *remote, GFile *local_file);
@@ -105,7 +105,7 @@
  *
  * Returns: (transfer full): The new file transfer.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 PurpleFileTransfer *purple_file_transfer_new_receive(PurpleAccount *account, PurpleContactInfo *remote, const char *filename, guint64 file_size);
@@ -118,7 +118,7 @@
  *
  * Returns: (transfer none): The account.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 PurpleAccount *purple_file_transfer_get_account(PurpleFileTransfer *transfer);
@@ -132,7 +132,7 @@
  *
  * Returns: (transfer none): The remote contact info.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 PurpleContactInfo *purple_file_transfer_get_remote(PurpleFileTransfer *transfer);
@@ -145,7 +145,7 @@
  *
  * Returns: (transfer none): The contact info who initiated the file transfer.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 PurpleContactInfo *purple_file_transfer_get_initiator(PurpleFileTransfer *transfer);
@@ -159,7 +159,7 @@
  *
  * Returns: (transfer none): The cancellable.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 GCancellable *purple_file_transfer_get_cancellable(PurpleFileTransfer *transfer);
@@ -172,7 +172,7 @@
  *
  * Returns: The state of @transfer.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 PurpleFileTransferState purple_file_transfer_get_state(PurpleFileTransfer *transfer);
@@ -187,7 +187,7 @@
  * This method should only be called by protocol plugins to match what it is
  * doing.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 void purple_file_transfer_set_state(PurpleFileTransfer *transfer, PurpleFileTransferState state);
@@ -200,7 +200,7 @@
  *
  * Returns: (transfer none) (nullable): The error for the transfer.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 GError *purple_file_transfer_get_error(PurpleFileTransfer *transfer);
@@ -212,7 +212,7 @@
  *
  * Sets the error of @transfer to @error.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 void purple_file_transfer_set_error(PurpleFileTransfer *transfer, GError *error);
@@ -225,7 +225,7 @@
  *
  * Returns: (transfer none): The local file.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 GFile *purple_file_transfer_get_local_file(PurpleFileTransfer *transfer);
@@ -237,7 +237,7 @@
  *
  * Sets the local file of @transfer to @local_file.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 void purple_file_transfer_set_local_file(PurpleFileTransfer *transfer, GFile *local_file);
@@ -250,7 +250,7 @@
  *
  * Returns: (transfer none): The base filename.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 const char *purple_file_transfer_get_filename(PurpleFileTransfer *transfer);
@@ -263,7 +263,7 @@
  *
  * Returns: The size of the file in bytes or %0 if the size is unknown.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 guint64 purple_file_transfer_get_file_size(PurpleFileTransfer *transfer);
@@ -276,7 +276,7 @@
  *
  * Returns: (nullable): The content type.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 const char *purple_file_transfer_get_content_type(PurpleFileTransfer *transfer);
@@ -288,7 +288,7 @@
  *
  * Sets the content type of @transfer to @content_type.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 void purple_file_transfer_set_content_type(PurpleFileTransfer *transfer, const char *content_type);
@@ -302,7 +302,7 @@
  *
  * Returns: The message sent with the transfer.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 const char *purple_file_transfer_get_message(PurpleFileTransfer *transfer);
@@ -314,7 +314,7 @@
  *
  * Sets the message to send with @transfer to @message.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 void purple_file_transfer_set_message(PurpleFileTransfer *transfer, const char *message);
diff --git a/libpurple/purplefiletransfer.c b/libpurple/purplefiletransfer.c
--- a/libpurple/purplefiletransfer.c
+++ b/libpurple/purplefiletransfer.c
@@ -321,7 +321,7 @@
 	 *
 	 * The account that this file transfer is for.
 	 *
-	 * Since: 3.0.0
+	 * Since: 3.0
 	 */
 	properties[PROP_ACCOUNT] = g_param_spec_object(
 		"account", "account",
@@ -334,7 +334,7 @@
 	 *
 	 * The [class@ContactInfo] for the remote user of this file transfer.
 	 *
-	 * Since: 3.0.0
+	 * Since: 3.0
 	 */
 	properties[PROP_REMOTE] = g_param_spec_object(
 		"remote", "remote",
@@ -347,7 +347,7 @@
 	 *
 	 * The [class@ContactInfo] that initiated this file transfer.
 	 *
-	 * Since: 3.0.0
+	 * Since: 3.0
 	 */
 	properties[PROP_INITIATOR] = g_param_spec_object(
 		"initiator", "initiator",
@@ -361,7 +361,7 @@
 	 * The [class@Gio.Cancellable] for this transfer. It may be used to cancel
 	 * the file transfer at any time.
 	 *
-	 * Since: 3.0.0
+	 * Since: 3.0
 	 */
 	properties[PROP_CANCELLABLE] = g_param_spec_object(
 		"cancellable", "cancellable",
@@ -380,7 +380,7 @@
 	 * If the state is set to error then [property@FileTransfer:error]
 	 * should be set.
 	 *
-	 * Since: 3.0.0
+	 * Since: 3.0
 	 */
 	properties[PROP_STATE] = g_param_spec_enum(
 		"state", "state",
@@ -398,7 +398,7 @@
 	 * This should be used to tell the user about network issues or if the
 	 * transfer was cancelled and so on.
 	 *
-	 * Since: 3.0.0
+	 * Since: 3.0
 	 */
 	properties[PROP_ERROR] = g_param_spec_boxed(
 		"error", "error",
@@ -414,7 +414,7 @@
 	 * When sending a file, this is the file that's being sent. When receiving
 	 * a file, this is the file where the transfer is being written.
 	 *
-	 * Since: 3.0.0
+	 * Since: 3.0
 	 */
 	properties[PROP_LOCAL_FILE] = g_param_spec_object(
 		"local-file", "local-file",
@@ -428,7 +428,7 @@
 	 * The base filename for the transfer. This is used as the default filename
 	 * for the receiving side.
 	 *
-	 * Since: 3.0.0
+	 * Since: 3.0
 	 */
 	properties[PROP_FILENAME] = g_param_spec_string(
 		"filename", "filename",
@@ -442,7 +442,7 @@
 	 * The size of the file in bytes. A value of %0 typically means the size is
 	 * unknown, but it is possible to transfer empty files as well.
 	 *
-	 * Since: 3.0.0
+	 * Since: 3.0
 	 */
 	properties[PROP_FILE_SIZE] = g_param_spec_uint64(
 		"file-size", "file-size",
@@ -460,7 +460,7 @@
 	 * See the [Media Types page](https://www.iana.org/assignments/media-types/media-types.xhtml)
 	 * for more information.
 	 *
-	 * Since: 3.0.0
+	 * Since: 3.0
 	 */
 	properties[PROP_CONTENT_TYPE] = g_param_spec_string(
 		"content-type", "content-type",
@@ -474,7 +474,7 @@
 	 * Some protocols support sending a message with the file transfer. This
 	 * field is to hold that message.
 	 *
-	 * Since: 3.0.0
+	 * Since: 3.0
 	 */
 	properties[PROP_MESSAGE] = g_param_spec_string(
 		"message", "message",
diff --git a/libpurple/purplefiletransfermanager.h b/libpurple/purplefiletransfermanager.h
--- a/libpurple/purplefiletransfermanager.h
+++ b/libpurple/purplefiletransfermanager.h
@@ -42,7 +42,7 @@
  * Keeps track of the [class@FileTransfer]'s that have been added to it and
  * propagates all of their signals.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 
 PURPLE_AVAILABLE_IN_3_0
@@ -56,7 +56,7 @@
  *
  * Returns: (transfer none): The default file transfer manager for libpurple.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 PurpleFileTransferManager *purple_file_transfer_manager_get_default(void);
@@ -68,7 +68,7 @@
  *
  * Returns: (transfer none): The default file transfer manager for libpurple.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 GListModel *purple_file_transfer_manager_get_default_as_model(void);
@@ -83,7 +83,7 @@
  * When a transfer is added to [class@FileTransferManager] the manager will
  * keep track of the transfer and propagate all of its signals.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 void purple_file_transfer_manager_add(PurpleFileTransferManager *manager, PurpleFileTransfer *transfer);
@@ -97,7 +97,7 @@
  *
  * Returns: %TRUE if the item was removed, otherwise %FALSE.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 gboolean purple_file_transfer_manager_remove(PurpleFileTransferManager *manager, PurpleFileTransfer *transfer);
diff --git a/libpurple/purplefiletransfermanager.c b/libpurple/purplefiletransfermanager.c
--- a/libpurple/purplefiletransfermanager.c
+++ b/libpurple/purplefiletransfermanager.c
@@ -125,7 +125,7 @@
 	 *
 	 * Emitted when a file transfer is added to @manager.
 	 *
-	 * Since: 3.0.0
+	 * Since: 3.0
 	 */
 	signals[SIG_ADDED] = g_signal_new_class_handler(
 		"added",
@@ -147,7 +147,7 @@
 	 *
 	 * Emitted when a file transfer is removed from @manager.
 	 *
-	 * Since: 3.0.0
+	 * Since: 3.0
 	 */
 	signals[SIG_REMOVED] = g_signal_new_class_handler(
 		"removed",
@@ -175,7 +175,7 @@
 	 * something like `transfer-changed::state` and your callback will only
 	 * be called when the state property of @transfer has been changed.
 	 *
-	 * Since: 3.0.0
+	 * Since: 3.0
 	 */
 	signals[SIG_TRANSFER_CHANGED] = g_signal_new_class_handler(
 		"transfer-changed",
diff --git a/libpurple/purplefiletransfermanagerprivate.h b/libpurple/purplefiletransfermanagerprivate.h
--- a/libpurple/purplefiletransfermanagerprivate.h
+++ b/libpurple/purplefiletransfermanagerprivate.h
@@ -36,7 +36,7 @@
  *
  * Creates the default [class@FileTransferManager].
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 G_GNUC_INTERNAL void purple_file_transfer_manager_startup(void);
 
@@ -45,7 +45,7 @@
  *
  * Cleans up the default [class@FileTransferManager].
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 G_GNUC_INTERNAL void purple_file_transfer_manager_shutdown(void);
 
diff --git a/libpurple/purplegdkpixbuf.h b/libpurple/purplegdkpixbuf.h
--- a/libpurple/purplegdkpixbuf.h
+++ b/libpurple/purplegdkpixbuf.h
@@ -42,7 +42,7 @@
  *
  * Rounds the corners of a GdkPixbuf in place.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 void purple_gdk_pixbuf_make_round(GdkPixbuf *pixbuf);
@@ -56,7 +56,7 @@
  *
  * Returns: TRUE if the pixbuf is opaque around the edges, FALSE otherwise
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 gboolean purple_gdk_pixbuf_is_opaque(GdkPixbuf *pixbuf);
@@ -71,7 +71,7 @@
  * Returns: (transfer full): A GdkPixbuf created from the image data, or NULL if
  *         there was an error parsing the data.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 GdkPixbuf *purple_gdk_pixbuf_from_data(const guchar *buf, gsize count);
@@ -84,7 +84,7 @@
  *
  * Returns: (transfer full): a GdkPixbuf created from the @image.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 GdkPixbuf *
@@ -112,7 +112,7 @@
  * Returns: (transfer full): The GdkPixbuf if successful.  Otherwise NULL is returned and
  *         a warning is logged.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 GdkPixbuf *purple_gdk_pixbuf_new_from_file(const char *filename);
@@ -141,7 +141,7 @@
  * Returns: (transfer full): The GdkPixbuf if successful.  Otherwise NULL is returned and
  *         a warning is logged.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 GdkPixbuf *purple_gdk_pixbuf_new_from_file_at_size(const char *filename, int width, int height);
diff --git a/libpurple/purplegio.h b/libpurple/purplegio.h
--- a/libpurple/purplegio.h
+++ b/libpurple/purplegio.h
@@ -45,7 +45,7 @@
  * arguments. Ensure the Gio callbacks can safely handle this being done
  * asynchronously.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 void purple_gio_graceful_close(GIOStream *stream, GInputStream *input, GOutputStream *output);
@@ -62,7 +62,7 @@
  * GProxyResolver, based on the #PurpleAccount settings and
  * TLS Certificate handling, or NULL if an error occurred.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 GSocketClient *purple_gio_socket_client_new(PurpleAccount *account, GError **error);
@@ -80,7 +80,7 @@
  *
  * Returns: The port number, or 0 in case of failure.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 guint16 purple_socket_listener_add_any_inet_port(GSocketListener *listener, GObject *source_object, GError **error);
diff --git a/libpurple/purplehistoryadapter.h b/libpurple/purplehistoryadapter.h
--- a/libpurple/purplehistoryadapter.h
+++ b/libpurple/purplehistoryadapter.h
@@ -41,7 +41,7 @@
  *
  * A #GError domain for errors.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 #define PURPLE_HISTORY_ADAPTER_DOMAIN \
 	g_quark_from_static_string("purple-history-adapter") \
@@ -54,7 +54,7 @@
  * history adapters. It defines the behavior of all history adapters
  * and implements some shared properties.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 
 #define PURPLE_TYPE_HISTORY_ADAPTER (purple_history_adapter_get_type())
@@ -69,7 +69,7 @@
  * #PurpleHistoryAdapterClass defines the interface for interacting with
  * history adapters like sqlite, and so on.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 struct _PurpleHistoryAdapterClass {
 	/*< private >*/
@@ -96,7 +96,7 @@
  *
  * Returns: The identifier of @adapter.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 const gchar *purple_history_adapter_get_id(PurpleHistoryAdapter *adapter);
@@ -109,7 +109,7 @@
  *
  * Returns: The name of @adapter.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 const gchar *purple_history_adapter_get_name(PurpleHistoryAdapter *adapter);
@@ -125,7 +125,7 @@
  *
  * Returns: If the write was successful to the @adapter.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 gboolean purple_history_adapter_write(PurpleHistoryAdapter *adapter,
@@ -143,7 +143,7 @@
  *
  * Returns: (element-type PurpleMessage) (transfer container): A list of messages that match @query.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 GList *purple_history_adapter_query(PurpleHistoryAdapter *adapter,
@@ -160,7 +160,7 @@
  *
  * Returns: If removing the messages was successful.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 gboolean purple_history_adapter_remove(PurpleHistoryAdapter *adapter,
diff --git a/libpurple/purplehistoryadapter.c b/libpurple/purplehistoryadapter.c
--- a/libpurple/purplehistoryadapter.c
+++ b/libpurple/purplehistoryadapter.c
@@ -146,7 +146,7 @@
 	 * The ID of the adapter.  Used for preferences and other things that need
 	 * to address it.
 	 *
-	 * Since: 3.0.0
+	 * Since: 3.0
 	 */
 	properties[PROP_ID] = g_param_spec_string(
 		"id", "id", "The identifier of the adapter",
@@ -159,7 +159,7 @@
 	 *
 	 * The name of the adapter.
 	 *
-	 * Since: 3.0.0
+	 * Since: 3.0
 	 */
 	properties[PROP_NAME] = g_param_spec_string(
 		"name", "name", "The name of the adapter",
diff --git a/libpurple/purplehistorymanager.h b/libpurple/purplehistorymanager.h
--- a/libpurple/purplehistorymanager.h
+++ b/libpurple/purplehistorymanager.h
@@ -40,7 +40,7 @@
  *
  * A #GError domain for errors from #PurpleHistoryManager.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 #define PURPLE_HISTORY_MANAGER_DOMAIN \
 	g_quark_from_static_string("purple-history-manager") \
@@ -58,7 +58,7 @@
  * #PurpleHistoryManager keeps track of all adapters and emits signals when
  * adapters are registered and unregistered.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 
 /**
@@ -69,7 +69,7 @@
  * A function to be used as a callback with
  * purple_history_manager_foreach().
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_TYPE_IN_3_0
 typedef void (*PurpleHistoryManagerForeachFunc)(PurpleHistoryAdapter *adapter, gpointer data);
@@ -85,7 +85,7 @@
  * Returns: %TRUE if startup was successful, otherwise %FALSE with @error
  *          potentially set.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 gboolean purple_history_manager_startup(PurpleHistoryAdapter *adapter, GError **error);
@@ -95,7 +95,7 @@
  *
  * Shuts down the history manager by destroying the default instance.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 void purple_history_manager_shutdown(void);
@@ -107,7 +107,7 @@
  *
  * Returns: (transfer none): The default #PurpleHistoryManager instance.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 PurpleHistoryManager *purple_history_manager_get_default(void);
@@ -120,7 +120,7 @@
  *
  * Returns: (transfer none): The active @adapter
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 PurpleHistoryAdapter *purple_history_manager_get_active(PurpleHistoryManager *manager);
@@ -136,7 +136,7 @@
  * Returns: %TRUE if setting the @adapter was successful with @manager
  *          %FALSE otherwise.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 gboolean purple_history_manager_set_active(PurpleHistoryManager *manager, const gchar *id, GError **error);
@@ -152,7 +152,7 @@
  * Returns: %TRUE if @adapter was successfully registered with @manager,
  *          %FALSE otherwise.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 gboolean purple_history_manager_register(PurpleHistoryManager *manager, PurpleHistoryAdapter *adapter, GError **error);
@@ -168,7 +168,7 @@
  * Returns: %TRUE if @adapter was successfully unregistered from @manager,
  *          %FALSE otherwise.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 gboolean purple_history_manager_unregister(PurpleHistoryManager *manager, PurpleHistoryAdapter *adapter, GError **error);
@@ -182,7 +182,7 @@
  *
  * Returns: (transfer none): The #PurpleHistoryAdapter identified by @id or %NULL.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 PurpleHistoryAdapter *purple_history_manager_find(PurpleHistoryManager *manager, const gchar *id);
@@ -197,7 +197,7 @@
  * Returns: (transfer container) (element-type PurpleHistoryAdapter): The list
  *          containing all of the #PurpleHistoryAdapter's registered with @manager.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 GList *purple_history_manager_get_all(PurpleHistoryManager *manager);
@@ -214,7 +214,7 @@
  *          containing all of the #PurpleMessage's that matched the query
  *          with @manager.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 GList *purple_history_manager_query(PurpleHistoryManager *manager, const gchar *query, GError **error);
@@ -230,7 +230,7 @@
  * Returns: %TRUE if messages matching @query were successfully removed from
  *          the active adapter of @manager, %FALSE otherwise.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 gboolean purple_history_manager_remove(PurpleHistoryManager *manager, const gchar *query, GError **error);
@@ -246,7 +246,7 @@
  *
  * Returns: %TRUE if @message was successfully written, %FALSE otherwise.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 gboolean purple_history_manager_write(PurpleHistoryManager *manager, PurpleConversation *conversation, PurpleMessage *message, GError **error);
@@ -259,7 +259,7 @@
  *
  * Calls @func for each #PurpleHistoryAdapter that @manager knows about.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 void purple_history_manager_foreach(PurpleHistoryManager *manager, PurpleHistoryManagerForeachFunc func, gpointer data);
diff --git a/libpurple/purplehistorymanager.c b/libpurple/purplehistorymanager.c
--- a/libpurple/purplehistorymanager.c
+++ b/libpurple/purplehistorymanager.c
@@ -84,7 +84,7 @@
 	*
 	* Emitted after @adapter has been changed for @manager.
 	*
-	* Since: 3.0.0
+	* Since: 3.0
 	*/
 	signals[SIG_ACTIVE_CHANGED] = g_signal_new_class_handler(
 		"active-changed",
@@ -106,7 +106,7 @@
 	 *
 	 * Emitted after @adapter has been registered in @manager.
 	 *
-	 * Since: 3.0.0
+	 * Since: 3.0
 	 */
 	signals[SIG_REGISTERED] = g_signal_new_class_handler(
 		"registered",
@@ -127,7 +127,7 @@
 	 *
 	 * Emitted after @adapter has been unregistered for @manager.
 	 *
-	 * Since: 3.0.0
+	 * Since: 3.0
 	 */
 	signals[SIG_UNREGISTERED] = g_signal_new_class_handler(
 		"unregistered",
diff --git a/libpurple/purpleidlemanager.h b/libpurple/purpleidlemanager.h
--- a/libpurple/purpleidlemanager.h
+++ b/libpurple/purpleidlemanager.h
@@ -76,7 +76,7 @@
  * the application. This is precisely why the oldest idle time is used as the
  * aggregate.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 
 G_BEGIN_DECLS
@@ -88,7 +88,7 @@
  *
  * Returns: (transfer none): The default idle manager.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 PurpleIdleManager *purple_idle_manager_get_default(void);
@@ -105,7 +105,7 @@
  * Returns: %TRUE if [property@IdleManager:timestamp] has changed due to this
  *          call.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 gboolean purple_idle_manager_set_source(PurpleIdleManager *manager, const char *source, GDateTime *timestamp);
@@ -119,7 +119,7 @@
  * Returns: (transfer none) (nullable): The oldest timestamp or %NULL if no
  *          sources are idle.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 GDateTime *purple_idle_manager_get_timestamp(PurpleIdleManager *manager);
diff --git a/libpurple/purpleidlemanager.c b/libpurple/purpleidlemanager.c
--- a/libpurple/purpleidlemanager.c
+++ b/libpurple/purpleidlemanager.c
@@ -89,7 +89,7 @@
 	 * The aggregate of the oldest idle timestamp of all of the sources that
 	 * are known.
 	 *
-	 * Since: 3.0.0
+	 * Since: 3.0
 	 */
 	properties[PROP_TIMESTAMP] = g_param_spec_boxed(
 		"timestamp", "timestamp",
diff --git a/libpurple/purpleidlemanagerprivate.h b/libpurple/purpleidlemanagerprivate.h
--- a/libpurple/purpleidlemanagerprivate.h
+++ b/libpurple/purpleidlemanagerprivate.h
@@ -34,7 +34,7 @@
  *
  * Starts up the idle manager by creating the default instance.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 void purple_idle_manager_startup(void);
 
@@ -43,7 +43,7 @@
  *
  * Shuts down the idle manager by destroying the default instance.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 void purple_idle_manager_shutdown(void);
 
diff --git a/libpurple/purpleidleui.h b/libpurple/purpleidleui.h
--- a/libpurple/purpleidleui.h
+++ b/libpurple/purpleidleui.h
@@ -48,7 +48,7 @@
  * An interface that a user interface can implement to let the core determine
  * idle times.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 struct _PurpleIdleUiInterface {
     /*< private >*/
@@ -69,7 +69,7 @@
  *
  * Returns: The time that the user interface went idle.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 time_t purple_idle_ui_get_idle_time(PurpleIdleUi *ui);
diff --git a/libpurple/purpleimconversation.h b/libpurple/purpleimconversation.h
--- a/libpurple/purpleimconversation.h
+++ b/libpurple/purpleimconversation.h
@@ -85,7 +85,7 @@
  *
  * Returns: The #GType for the IMConversation object.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 GType purple_im_conversation_get_type(void);
@@ -100,7 +100,7 @@
  *
  * Returns: The new conversation.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 PurpleConversation *purple_im_conversation_new(PurpleAccount *account, const gchar *name);
@@ -112,7 +112,7 @@
  *
  * Sets the IM's typing state.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 void purple_im_conversation_set_typing_state(PurpleIMConversation *im, PurpleIMTypingState state);
@@ -125,7 +125,7 @@
  *
  * Returns: The IM's typing state.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 PurpleIMTypingState purple_im_conversation_get_typing_state(PurpleIMConversation *im);
@@ -138,7 +138,7 @@
  *
  * Starts the IM's typing timeout.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 void purple_im_conversation_start_typing_timeout(PurpleIMConversation *im, int timeout);
@@ -149,7 +149,7 @@
  *
  * Stops the IM's typing timeout.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 void purple_im_conversation_stop_typing_timeout(PurpleIMConversation *im);
@@ -162,7 +162,7 @@
  *
  * Returns: The timeout.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 guint purple_im_conversation_get_typing_timeout(PurpleIMConversation *im);
@@ -179,7 +179,7 @@
  * typing after this quiet-period, then another #PURPLE_IM_TYPING message
  * will be sent.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 void purple_im_conversation_set_type_again(PurpleIMConversation *im, guint val);
@@ -193,7 +193,7 @@
  * Returns: The time in seconds since the epoch.  Or 0 if no additional
  *         PURPLE_IM_TYPING message should be sent.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 time_t purple_im_conversation_get_type_again(PurpleIMConversation *im);
@@ -204,7 +204,7 @@
  *
  * Starts the IM's type again timeout.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 void purple_im_conversation_start_send_typed_timeout(PurpleIMConversation *im);
@@ -215,7 +215,7 @@
  *
  * Stops the IM's type again timeout.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 void purple_im_conversation_stop_send_typed_timeout(PurpleIMConversation *im);
@@ -228,7 +228,7 @@
  *
  * Returns: The type again timeout interval.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 guint purple_im_conversation_get_send_typed_timeout(PurpleIMConversation *im);
@@ -239,7 +239,7 @@
  *
  * Updates the visual typing notification for an IM conversation.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 void purple_im_conversation_update_typing(PurpleIMConversation *im);
diff --git a/libpurple/purplekeyvaluepair.h b/libpurple/purplekeyvaluepair.h
--- a/libpurple/purplekeyvaluepair.h
+++ b/libpurple/purplekeyvaluepair.h
@@ -63,7 +63,7 @@
  *
  * Returns: The #GType for #PurpleKeyValuePair.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 GType purple_key_value_pair_get_type(void);
@@ -78,7 +78,7 @@
  *
  * Returns: (transfer full): The created PurpleKeyValuePair
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 PurpleKeyValuePair *purple_key_value_pair_new(const gchar *key, gpointer value);
@@ -94,7 +94,7 @@
  *
  * Returns: (transfer full): The created PurpleKeyValuePair
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 PurpleKeyValuePair *purple_key_value_pair_new_full(const gchar *key, gpointer value, GDestroyNotify value_destroy_func);
@@ -105,7 +105,7 @@
  *
  * Frees @kvp.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 void purple_key_value_pair_free(PurpleKeyValuePair *kvp);
@@ -121,7 +121,7 @@
  *
  * Returns: (transfer full): A new copy of @kvp.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 PurpleKeyValuePair *purple_key_value_pair_copy(PurpleKeyValuePair *kvp);
diff --git a/libpurple/purplemarkup.h b/libpurple/purplemarkup.h
--- a/libpurple/purplemarkup.h
+++ b/libpurple/purplemarkup.h
@@ -41,7 +41,7 @@
  *
  * Converts HTML markup to XHTML.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 void purple_markup_html_to_xhtml(const char *html, char **dest_xhtml,
@@ -56,7 +56,7 @@
  * Returns: The new string without HTML.  You must g_free this string
  *         when finished with it.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 char *purple_markup_strip_html(const char *str);
@@ -71,7 +71,7 @@
  *          HTML &lt;a href="whatever"&gt;&lt;/a&gt; tags. You must g_free()
  *          this string when finished with it.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 char *purple_markup_linkify(const char *str);
@@ -95,7 +95,7 @@
  * Returns: The text with HTML entities literalized.  You must g_free
  *         this string when finished with it.
  *
- * Since: 2.7.0
+ * Since: 2.7
  */
 PURPLE_AVAILABLE_IN_2_7
 char *purple_unescape_text(const char *text);
@@ -112,7 +112,7 @@
  * Returns: The text with HTML entities literalized.  You must g_free
  *         this string when finished with it.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 char *purple_unescape_html(const char *html);
@@ -138,7 +138,7 @@
  *
  * Returns: The HTML slice of string, with all formatting retained.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 char *purple_markup_slice(const char *str, guint x, guint y);
@@ -154,7 +154,7 @@
  *
  * Returns: A string containing the name of the tag.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 char *purple_markup_get_tag_name(const char *tag);
@@ -176,7 +176,7 @@
  *
  * Returns: A constant string containing the character representation of the given entity.
  *
- * Since: 2.0.0
+ * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
 const char * purple_markup_unescape_entity(const char *text, int *length);
diff --git a/libpurple/purplemenu.h b/libpurple/purplemenu.h
--- a/libpurple/purplemenu.h
+++ b/libpurple/purplemenu.h
@@ -47,7 +47,7 @@
  * model that was passed to [func@Purple.menu_walk] for its immediate
  * children.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_TYPE_IN_3_0
 typedef void (*PurpleMenuWalkFunc)(GMenuModel *model, gint index, gpointer data);
@@ -60,7 +60,7 @@
  *
  * Recursively calls @func for each item in @model and all of its children.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 void purple_menu_walk(GMenuModel *model, PurpleMenuWalkFunc func, gpointer data);
@@ -84,7 +84,7 @@
  * call purple_menu_populate_dynamic_targets() with a property pair of
  * "account" and [method@Purple.ContactInfo.get_id].
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 void purple_menu_populate_dynamic_targets(GMenu *menu, const gchar *first_property, ...) G_GNUC_NULL_TERMINATED;
@@ -106,7 +106,7 @@
  * [func@Purple.menu_populate_dynamic_targetsv] with a hash table containing
  * the key `"account"` and value from [method@Purple.ContactInfo.get_id].
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 void purple_menu_populate_dynamic_targetsv(GMenu *menu, GHashTable *properties);
@@ -120,7 +120,7 @@
  *
  * Returns: (transfer full): The new menu.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 GMenu *purple_menu_copy(GMenuModel *model);
diff --git a/libpurple/purplemessage.h b/libpurple/purplemessage.h
--- a/libpurple/purplemessage.h
+++ b/libpurple/purplemessage.h
@@ -53,11 +53,11 @@
  * @PURPLE_MESSAGE_RAW: "Raw" message - don't apply formatting.
  * @PURPLE_MESSAGE_NOTIFY: Message is a notification.
  * @PURPLE_MESSAGE_NO_LINKIFY: Message should not be auto-linkified.
- *                             Since: 2.1.0
+ *                             Since: 2.1
  * @PURPLE_MESSAGE_INVISIBLE: Message should not be displayed.
- *                            Since: 2.2.0
+ *                            Since: 2.2
  * @PURPLE_MESSAGE_FORWARDED: The message has been forward to the recipient.
- *                            Since: 3.0.0
+ *                            Since: 3.0
  *
  * Flags applicable to a message. Most will have send, recv or system.
  */
@@ -84,7 +84,7 @@
  *
  * #PurpleMessage represents any message passed between users in libpurple.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 G_DECLARE_FINAL_TYPE(PurpleMessage, purple_message, PURPLE, MESSAGE, GObject)
@@ -103,7 +103,7 @@
  *
  * Returns: (transfer full): The new #PurpleMessage instance.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 PurpleMessage *purple_message_new_outgoing(const char *author, const char *recipient, const char *contents, PurpleMessageFlags flags);
@@ -121,7 +121,7 @@
  *
  * Returns: the new #PurpleMessage.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 PurpleMessage *purple_message_new_incoming(const char *who, const char *contents, PurpleMessageFlags flags, guint64 timestamp);
@@ -137,7 +137,7 @@
  *
  * Returns: the new #PurpleMessage.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 PurpleMessage *purple_message_new_system(const char *contents, PurpleMessageFlags flags);
@@ -151,7 +151,7 @@
  *
  * Returns: the global identifier of @message.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 const char *purple_message_get_id(PurpleMessage *message);
@@ -166,7 +166,7 @@
  * > Note: This should really only be used by protocol plugins to update an id
  * of a sent message when the server has assigned the final id to the message.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 void purple_message_set_id(PurpleMessage *message, const char *id);
@@ -179,7 +179,7 @@
  *
  * Returns: the author of @message.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 const char *purple_message_get_author(PurpleMessage *message);
@@ -194,7 +194,7 @@
  * interface might not use this exact color, as it might need to adapt for
  * contrast or limits on the number of colors.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 void purple_message_set_author_name_color(PurpleMessage *message, const char *color);
@@ -207,7 +207,7 @@
  *
  * Returns: (transfer none): The hex color for the author of @message's name.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 const char *purple_message_get_author_name_color(PurpleMessage *message);
@@ -219,7 +219,7 @@
  *
  * Sets the recipient of @message to @recipient.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 void purple_message_set_recipient(PurpleMessage *message, const char *recipient);
@@ -232,7 +232,7 @@
  *
  * Returns: the recipient of @message.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 const char *purple_message_get_recipient(PurpleMessage *message);
@@ -244,7 +244,7 @@
  *
  * Sets the alias of @message's author. You don't normally need to call this.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 void purple_message_set_author_alias(PurpleMessage *message, const char *alias);
@@ -257,7 +257,7 @@
  *
  * Returns: the @message author's alias.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 const char *purple_message_get_author_alias(PurpleMessage *message);
@@ -269,7 +269,7 @@
  *
  * Sets the contents of the @message. It might be HTML.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 void purple_message_set_contents(PurpleMessage *message, const char *cont);
@@ -282,7 +282,7 @@
  *
  * Returns: the contents of @message.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 const char *purple_message_get_contents(PurpleMessage *message);
@@ -295,7 +295,7 @@
  *
  * Returns: %TRUE, if @message is empty.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 gboolean purple_message_is_empty(PurpleMessage *message);
@@ -307,7 +307,7 @@
  *
  * Sets the timestamp of @message.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 void purple_message_set_timestamp(PurpleMessage *message, GDateTime *timestamp);
@@ -321,7 +321,7 @@
  *
  * Returns: (transfer none): The #GDateTime timestamp from @message.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 GDateTime *purple_message_get_timestamp(PurpleMessage *message);
@@ -335,7 +335,7 @@
  *
  * Returns: The formatted timestamp.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 char *purple_message_format_timestamp(PurpleMessage *message, const char *format);
@@ -348,7 +348,7 @@
  * Sets flags for @message. It shouldn't be in a conflict with a message type,
  * so use it carefully.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 void purple_message_set_flags(PurpleMessage *message, PurpleMessageFlags flags);
@@ -361,7 +361,7 @@
  *
  * Returns: the flags of a @message.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 PurpleMessageFlags purple_message_get_flags(PurpleMessage *message);
@@ -374,7 +374,7 @@
  * Sets the error of @message to @error. Primarily this will be used for
  * delivery failure.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 void purple_message_set_error(PurpleMessage *message, GError *error);
@@ -387,7 +387,7 @@
  *
  * Returns: (nullable) (transfer none): The error from @message or %NULL.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 GError *purple_message_get_error(PurpleMessage *message);
@@ -401,7 +401,7 @@
  *
  * Returns %TRUE if an attachment with the same ID did not already exist.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 gboolean purple_message_add_attachment(PurpleMessage *message, PurpleAttachment *attachment);
@@ -416,7 +416,7 @@
  * Returns: %TRUE if the #PurpleAttachment was found and removed, %FALSE
  *          otherwise.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 gboolean purple_message_remove_attachment(PurpleMessage *message, guint64 id);
@@ -431,7 +431,7 @@
  * Returns: (transfer full): The #PurpleAttachment if it was found, otherwise
  *                           %NULL.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 PurpleAttachment *purple_message_get_attachment(PurpleMessage *message, guint64 id);
@@ -444,7 +444,7 @@
  *
  * Calls @func for each #PurpleAttachment that's attached to @message.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 void purple_message_foreach_attachment(PurpleMessage *message, PurpleAttachmentForeachFunc func, gpointer data);
@@ -455,7 +455,7 @@
  *
  * Removes all attachments from @message.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 void purple_message_clear_attachments(PurpleMessage *message);
@@ -470,7 +470,7 @@
  *
  * Returns: %TRUE if @message is an action, otherwise %FALSE.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 gboolean purple_message_get_action(PurpleMessage *message);
@@ -484,7 +484,7 @@
  *
  * See also [property@Message:action] for more information.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 void purple_message_set_action(PurpleMessage *message, gboolean action);
@@ -504,7 +504,7 @@
  * Returns: %TRUE if @message has been delivered and the protocol supports
  *          delivery notifications, otherwise %FALSE.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 gboolean purple_message_get_delivered(PurpleMessage *message);
@@ -520,7 +520,7 @@
  * @delivered is %TRUE it will be set to the current time, otherwise it will be
  * unset.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 void purple_message_set_delivered(PurpleMessage *message, gboolean delivered);
@@ -534,7 +534,7 @@
  *
  * Returns: (transfer none) (nullable): The delivery time of @message.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 GDateTime *purple_message_get_delivered_at(PurpleMessage *message);
@@ -549,7 +549,7 @@
  * > Note: Setting this will also set [property@Message:delivered]. If
  * @datetime is %NULL it will be set to %FALSE, otherwise %TRUE.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 void purple_message_set_delivered_at(PurpleMessage *message, GDateTime *datetime);
@@ -562,7 +562,7 @@
  *
  * Returns: %TRUE if edited, otherwise %FALSE.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 gboolean purple_message_get_edited(PurpleMessage *message);
@@ -578,7 +578,7 @@
  * @edited is %TRUE it will be set to the current time, otherwise it will be
  * unset.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 void purple_message_set_edited(PurpleMessage *message, gboolean edited);
@@ -592,7 +592,7 @@
  *
  * Returns: (transfer none) (nullable): The last edit time of @message.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 GDateTime *purple_message_get_edited_at(PurpleMessage *message);
@@ -607,7 +607,7 @@
  * > Note: Setting this will also set [property@Message:edited]. If
  * @datetime is %NULL it will be set to %FALSE, otherwise %TRUE.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 void purple_message_set_edited_at(PurpleMessage *message, GDateTime *datetime);
diff --git a/libpurple/purplemessage.c b/libpurple/purplemessage.c
--- a/libpurple/purplemessage.c
+++ b/libpurple/purplemessage.c
@@ -239,7 +239,7 @@
 	 *
 	 * The protocol-specific identifier of the message.
 	 *
-	 * Since: 3.0.0
+	 * Since: 3.0
 	 */
 	properties[PROP_ID] = g_param_spec_string(
 		"id", "ID",
@@ -252,7 +252,7 @@
 	 *
 	 * The author of the message.
 	 *
-	 * Since: 3.0.0
+	 * Since: 3.0
 	 */
 	properties[PROP_AUTHOR] = g_param_spec_string(
 		"author", "Author",
@@ -265,7 +265,7 @@
 	 *
 	 * The hex color for the author's name.
 	 *
-	 * Since: 3.0.0
+	 * Since: 3.0
 	 */
 	properties[PROP_AUTHOR_NAME_COLOR] = g_param_spec_string(
 		"author-name-color", "author-name-color",
@@ -278,7 +278,7 @@
 	 *
 	 * The alias of the author.
 	 *
-	 * Since: 3.0.0
+	 * Since: 3.0
 	 */
 	properties[PROP_AUTHOR_ALIAS] = g_param_spec_string(
 		"author-alias", "Author's alias",
@@ -291,7 +291,7 @@
 	 *
 	 * The recipient of the message.
 	 *
-	 * Since: 3.0.0
+	 * Since: 3.0
 	 */
 	properties[PROP_RECIPIENT] = g_param_spec_string(
 		"recipient", "Recipient",
@@ -304,7 +304,7 @@
 	 *
 	 * The contents of the message.
 	 *
-	 * Since: 3.0.0
+	 * Since: 3.0
 	 */
 	properties[PROP_CONTENTS] = g_param_spec_string(
 		"contents", "Contents",
@@ -322,7 +322,7 @@
 	 * interface hint that this message is different than a normal text
 	 * message.
 	 *
-	 * Since: 3.0.0
+	 * Since: 3.0
 	 */
 	properties[PROP_ACTION] = g_param_spec_boolean(
 		"action", "action",
@@ -335,7 +335,7 @@
 	 *
 	 * The timestamp of the message.
 	 *
-	 * Since: 3.0.0
+	 * Since: 3.0
 	 */
 	properties[PROP_TIMESTAMP] = g_param_spec_boxed(
 		"timestamp", "timestamp",
@@ -348,7 +348,7 @@
 	 *
 	 * The #PurpleMessageFlags for the message.
 	 *
-	 * Since: 3.0.0
+	 * Since: 3.0
 	 */
 	properties[PROP_FLAGS] = g_param_spec_flags(
 		"flags", "Flags",
@@ -362,7 +362,7 @@
 	 * An error that this message encountered. This could be something like a
 	 * failed delivery, or failed redaction, or rate limited, etc.
 	 *
-	 * Since: 3.0.0
+	 * Since: 3.0
 	 */
 	properties[PROP_ERROR] = g_param_spec_boxed(
 		"error", "error",
@@ -377,7 +377,7 @@
 	 * possibly client dependent as well. So if this is %FALSE that doesn't
 	 * necessarily mean the message was not delivered.
 	 *
-	 * Since: 3.0.0
+	 * Since: 3.0
 	 */
 	properties[PROP_DELIVERED] = g_param_spec_boolean(
 		"delivered", "delivered",
@@ -392,7 +392,7 @@
 	 * possibly client dependent as well. So if this is %NULL that doesn't
 	 * necessarily mean the message was not delivered.
 	 *
-	 * Since: 3.0.0
+	 * Since: 3.0
 	 */
 	properties[PROP_DELIVERED_AT] = g_param_spec_boxed(
 		"delivered-at", "delivered-at",
@@ -407,7 +407,7 @@
 	 *
 	 * This should typically only be set by a protocol plugin.
 	 *
-	 * Since: 3.0.0
+	 * Since: 3.0
 	 */
 	properties[PROP_EDITED] = g_param_spec_boolean(
 		"edited", "edited",
@@ -422,7 +422,7 @@
 	 * and possibly client dependent as well. So if this is %NULL that doesn't
 	 * necessarily mean the message was not edited.
 	 *
-	 * Since: 3.0.0
+	 * Since: 3.0
 	 */
 	properties[PROP_EDITED_AT] = g_param_spec_boxed(
 		"edited-at", "edited-at",
diff --git a/libpurple/purplenoopcredentialprovider.h b/libpurple/purplenoopcredentialprovider.h
--- a/libpurple/purplenoopcredentialprovider.h
+++ b/libpurple/purplenoopcredentialprovider.h
@@ -42,7 +42,7 @@
  * actually provider credentials.  It is used to implement the default behavior
  * of requiring users to input passwords.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 
 #define PURPLE_TYPE_NOOP_CREDENTIAL_PROVIDER (purple_noop_credential_provider_get_type())
@@ -61,7 +61,7 @@
  *
  * Returns: (transfer full): The new #PurpleNoopCredentialProvider instance.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 PurpleCredentialProvider *purple_noop_credential_provider_new(void);
diff --git a/libpurple/purplenotification.h b/libpurple/purplenotification.h
--- a/libpurple/purplenotification.h
+++ b/libpurple/purplenotification.h
@@ -40,7 +40,7 @@
 /**
  * PurpleNotificationType:
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_TYPE_IN_3_0
 typedef enum {
@@ -60,7 +60,7 @@
  *
  * An object that represents a notification.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 
 #define PURPLE_TYPE_NOTIFICATION (purple_notification_get_type())
@@ -84,7 +84,7 @@
  *
  * Returns: (transfer full): The new notification.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 PurpleNotification *purple_notification_new(PurpleNotificationType type, PurpleAccount *account, gpointer data, GDestroyNotify data_destroy_func);
@@ -99,7 +99,7 @@
  *
  * Returns: (transfer full): The new notification.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 PurpleNotification *purple_notification_new_from_add_contact_request(PurpleAddContactRequest *request);
@@ -115,7 +115,7 @@
  *
  * Returns: (transfer full): The new notification.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 PurpleNotification *purple_notification_new_from_authorization_request(PurpleAuthorizationRequest *authorization_request);
@@ -131,7 +131,7 @@
  *
  * Returns: (transfer full): The new notification.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 PurpleNotification *purple_notification_new_from_connection_error(PurpleAccount *account, PurpleConnectionErrorInfo *info);
@@ -144,7 +144,7 @@
  *
  * Returns: The identifier of @notification.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 const gchar *purple_notification_get_id(PurpleNotification *notification);
@@ -157,7 +157,7 @@
  *
  * Returns: The type of @notification.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 PurpleNotificationType purple_notification_get_notification_type(PurpleNotification *notification);
@@ -170,7 +170,7 @@
  *
  * Returns: (transfer none): The account of @notification.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 PurpleAccount *purple_notification_get_account(PurpleNotification *notification);
@@ -183,7 +183,7 @@
  *
  * Returns: (transfer none): The creation time of @notification.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 GDateTime *purple_notification_get_created_timestamp(PurpleNotification *notification);
@@ -200,7 +200,7 @@
  *
  * If @timestamp is %NULL, the current time will be used.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 void purple_notification_set_created_timestamp(PurpleNotification *notification, GDateTime *timestamp);
@@ -213,7 +213,7 @@
  *
  * Returns: The title of @notification.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 const gchar *purple_notification_get_title(PurpleNotification *notification);
@@ -225,7 +225,7 @@
  *
  * Sets the title of @notification to @title.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 void purple_notification_set_title(PurpleNotification *notification, const gchar *title);
@@ -238,7 +238,7 @@
  *
  * Returns: The named icon for @notification.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 const gchar *purple_notification_get_icon_name(PurpleNotification *notification);
@@ -250,7 +250,7 @@
  *
  * Sets the named icon for @notification to @icon_name.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 void purple_notification_set_icon_name(PurpleNotification *notification, const gchar *icon_name);
@@ -263,7 +263,7 @@
  *
  * Returns: %TRUE if @notification has been read, %FALSE otherwise.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 gboolean purple_notification_get_read(PurpleNotification *notification);
@@ -275,7 +275,7 @@
  *
  * Sets @notification's read state to @read.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 void purple_notification_set_read(PurpleNotification *notification, gboolean read);
@@ -288,7 +288,7 @@
  *
  * Returns: %TRUE if @notification can be interacted with, %FALSE otherwise.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 gboolean purple_notification_get_interactive(PurpleNotification *notification);
@@ -300,7 +300,7 @@
  *
  * Sets @notification's interactive state to @interactive.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 void purple_notification_set_interactive(PurpleNotification *notification, gboolean interactive);
@@ -313,7 +313,7 @@
  *
  * Returns: (transfer none): The data for @notification.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 gpointer purple_notification_get_data(PurpleNotification *notification);
@@ -329,7 +329,7 @@
  * Returns: -1 if @a's created timestamp occurred before @b, 0 if they were
  *          created at the same time, or 1 if @b was created before @a.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 gint purple_notification_compare(gconstpointer a, gconstpointer b);
@@ -344,7 +344,7 @@
  * If this is called more than once for @notification, the signal will not be
  * emitted.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 void purple_notification_delete(PurpleNotification *notification);
diff --git a/libpurple/purplenotification.c b/libpurple/purplenotification.c
--- a/libpurple/purplenotification.c
+++ b/libpurple/purplenotification.c
@@ -276,7 +276,7 @@
 	 * Emitted when the notification is deleted. This is typically done by a
 	 * user interface calling [method@PurpleNotification.delete].
 	 *
-	 * Since: 3.0.0
+	 * Since: 3.0
 	 */
 	signals[SIG_DELETED] = g_signal_new_class_handler(
 		"deleted",
@@ -295,7 +295,7 @@
 	 * The ID of the notification. Used for things that need to address it.
 	 * This is auto populated at creation time.
 	 *
-	 * Since: 3.0.0
+	 * Since: 3.0
 	 */
 	properties[PROP_ID] = g_param_spec_string(
 		"id", "id",
@@ -309,7 +309,7 @@
 	 *
 	 * The [enum@NotificationType] of this notification.
 	 *
-	 * Since: 3.0.0
+	 * Since: 3.0
 	 */
 	properties[PROP_TYPE] = g_param_spec_enum(
 		"type", "type",
@@ -323,7 +323,7 @@
 	 *
 	 * An optional [class@Account] that this notification is for.
 	 *
-	 * Since: 3.0.0
+	 * Since: 3.0
 	 */
 	properties[PROP_ACCOUNT] = g_param_spec_object(
 		"account", "account",
@@ -337,7 +337,7 @@
 	 * The creation time of this notification. This always represented as UTC
 	 * internally, and will be set to UTC now by default.
 	 *
-	 * Since: 3.0.0
+	 * Since: 3.0
 	 */
 	properties[PROP_CREATED_TIMESTAMP] = g_param_spec_boxed(
 		"created-timestamp", "created-timestamp",
@@ -352,7 +352,7 @@
 	 * choose to use this when displaying the notification. Regardless, this
 	 * should be a translated string.
 	 *
-	 * Since: 3.0.0
+	 * Since: 3.0
 	 */
 	properties[PROP_TITLE] = g_param_spec_string(
 		"title", "title",
@@ -367,7 +367,7 @@
 	 * interface may or may not choose to use this when display the
 	 * notification.
 	 *
-	 * Since: 3.0.0
+	 * Since: 3.0
 	 */
 	properties[PROP_ICON_NAME] = g_param_spec_string(
 		"icon-name", "icon-name",
@@ -380,7 +380,7 @@
 	 *
 	 * Whether or not the notification has been read.
 	 *
-	 * Since: 3.0.0
+	 * Since: 3.0
 	 */
 	properties[PROP_READ] = g_param_spec_boolean(
 		"read", "read",
@@ -393,7 +393,7 @@
 	 *
 	 * Whether or not the notification can be interacted with.
 	 *
-	 * Since: 3.0.0
+	 * Since: 3.0
 	 */
 	properties[PROP_INTERACTIVE] = g_param_spec_boolean(
 		"interactive", "interactive",
@@ -406,7 +406,7 @@
 	 *
 	 * Data specific to the [enum@NotificationType] for the notification.
 	 *
-	 * Since: 3.0.0
+	 * Since: 3.0
 	 */
 	properties[PROP_DATA] = g_param_spec_pointer(
 		"data", "data",
@@ -418,7 +418,7 @@
 	 *
 	 * A function to call to free [property@PurpleNotification:data].
 	 *
-	 * Since: 3.0.0
+	 * Since: 3.0
 	 */
 	properties[PROP_DATA_DESTROY_FUNC] = g_param_spec_pointer(
 		"data-destroy-func", "data-destroy-func",
diff --git a/libpurple/purplenotificationmanager.h b/libpurple/purplenotificationmanager.h
--- a/libpurple/purplenotificationmanager.h
+++ b/libpurple/purplenotificationmanager.h
@@ -48,7 +48,7 @@
  * Purple Notification Manager manages all notifications between protocols and
  * plugins and how the user interface interacts with them.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 
 /**
@@ -58,7 +58,7 @@
  *
  * Returns: (transfer none): The default instance.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 PurpleNotificationManager *purple_notification_manager_get_default(void);
@@ -70,7 +70,7 @@
  *
  * Returns: (transfer none): The model.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 GListModel *purple_notification_manager_get_default_as_model(void);
@@ -82,7 +82,7 @@
  *
  * Adds @notification into @manager.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 void purple_notification_manager_add(PurpleNotificationManager *manager, PurpleNotification *notification);
@@ -94,7 +94,7 @@
  *
  * Removes @notification from @manager.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 void purple_notification_manager_remove(PurpleNotificationManager *manager, PurpleNotification *notification);
@@ -112,7 +112,7 @@
  * treated differently from other notifications tied to accounts, as those are
  * transient and depend on the account being connected to be valid.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 void purple_notification_manager_remove_with_account(PurpleNotificationManager *manager, PurpleAccount *account, gboolean all);
@@ -125,7 +125,7 @@
  *
  * Returns: The number of unread notifications.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 guint purple_notification_manager_get_unread_count(PurpleNotificationManager *manager);
@@ -136,7 +136,7 @@
  *
  * Removes all notifications from @manager.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 void purple_notification_manager_clear(PurpleNotificationManager *manager);
diff --git a/libpurple/purplenotificationmanager.c b/libpurple/purplenotificationmanager.c
--- a/libpurple/purplenotificationmanager.c
+++ b/libpurple/purplenotificationmanager.c
@@ -207,7 +207,7 @@
 	 *
 	 * The number of unread notifications in the manager.
 	 *
-	 * Since: 3.0.0
+	 * Since: 3.0
 	 */
 	properties[PROP_UNREAD_COUNT] = g_param_spec_uint(
 		"unread-count", "unread-count",
@@ -226,7 +226,7 @@
 	 *
 	 * Emitted after @notification has been added to @manager.
 	 *
-	 * Since: 3.0.0
+	 * Since: 3.0
 	 */
 	signals[SIG_ADDED] = g_signal_new_class_handler(
 		"added",
@@ -247,7 +247,7 @@
 	 *
 	 * Emitted after @notification has been removed from @manager.
 	 *
-	 * Since: 3.0.0
+	 * Since: 3.0
 	 */
 	signals[SIG_REMOVED] = g_signal_new_class_handler(
 		"removed",
@@ -268,7 +268,7 @@
 	 *
 	 * Emitted after @notification has been marked as read.
 	 *
-	 * Since: 3.0.0
+	 * Since: 3.0
 	 */
 	signals[SIG_READ] = g_signal_new_class_handler(
 		"read",
@@ -289,7 +289,7 @@
 	 *
 	 * Emitted after @notification has been marked as unread.
 	 *
-	 * Since: 3.0.0
+	 * Since: 3.0
 	 */
 	signals[SIG_UNREAD] = g_signal_new_class_handler(
 		"unread",
diff --git a/libpurple/purpleoptions.h b/libpurple/purpleoptions.h
--- a/libpurple/purpleoptions.h
+++ b/libpurple/purpleoptions.h
@@ -44,7 +44,7 @@
  * Returns: (transfer full): a #GOptionGroup for the commandline arguments
  *          recognized by LibPurple.
  *
- * Since: 3.0.0
+ * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
 GOptionGroup *purple_get_option_group(void);
