diff --git a/gobject/gobject.c b/gobject/gobject.c
index f906d31..f73521b 100644
--- a/gobject/gobject.c
+++ b/gobject/gobject.c
@@ -1634,6 +1634,1060 @@ g_object_get (gpointer     _object,
   va_end (var_args);
 }
 
+static gchar *
+lcopy (GValue *value, ...)
+{
+  gchar *error;
+  va_list var_args;
+
+  error = NULL;
+
+  va_start (var_args, value);
+  G_VALUE_LCOPY (value, var_args, 0, &error);
+  va_end (var_args);
+
+  return error;
+}
+
+static void
+g_object_get_generic (gpointer     object,
+                      const gchar *property_name,
+                      const gchar *str_func,
+                      GType        gtype,
+                      gpointer     value)
+{
+  GParamSpec *pspec;
+  GValue gvalue = { 0, };
+  gchar *error;
+
+  if (!G_IS_OBJECT (object))
+    {
+      g_return_if_fail_warning ("Glib-Object",
+                                str_func, "G_IS_OBJECT");
+      return;
+    }
+  if (property_name == NULL)
+    {
+      g_return_if_fail_warning ("Glib-Object",
+                                str_func, "property_name != NULL");
+      return;
+    }
+
+  g_object_ref (object);
+
+  pspec = g_param_spec_pool_lookup (pspec_pool,
+                                    property_name,
+                                    G_OBJECT_TYPE (object),
+                                    TRUE);
+
+  if (!pspec)
+    g_warning ("%s: object class `%s' has no property named `%s'",
+               str_func,
+               G_OBJECT_TYPE_NAME (object),
+               property_name);
+  else if (!g_type_is_a (pspec->value_type, gtype))
+    g_warning ("%s: property `%s' of object class `%s' is not '%s'",
+               str_func,
+               pspec->name,
+               G_OBJECT_TYPE_NAME (object),
+               g_type_name (gtype));
+  else if (!(pspec->flags & G_PARAM_READABLE))
+    g_warning ("%s: property `%s' of object class `%s' is not readable",
+               str_func,
+               pspec->name,
+               G_OBJECT_TYPE_NAME (object));
+  else
+    {
+      g_value_init (&gvalue, G_PARAM_SPEC_VALUE_TYPE (pspec));
+
+      object_get_property (object, pspec, &gvalue);
+
+      error = lcopy (&gvalue, value);
+      if (error)
+        {
+          g_warning ("%s: %s", str_func, error);
+          g_free (error);
+        }
+
+      g_value_unset (&gvalue);
+    }
+
+  g_object_unref (object);
+}
+
+/**
+ * g_object_get_boolean:
+ * @object: a #GObject
+ * @property_name: the name of the property to get
+ *
+ * Retrieve the boolean value of the specified property.
+ *
+ * Return value: an integer
+ *
+ * Since: 2.24
+ */
+gboolean
+g_object_get_boolean (gpointer     object,
+                      const gchar *property_name)
+{
+  gboolean value = FALSE;
+
+  g_object_get_generic (object, property_name,
+                        G_STRFUNC, G_TYPE_BOOLEAN, &value);
+
+  return value;
+}
+
+/**
+ * g_object_get_boxed:
+ * @object: a #GObject
+ * @property_name: the name of the property to get
+ *
+ * Retrieve the boxed value of the specified property.
+ *
+ * Return value: a boxed value
+ *
+ * Since: 2.24
+ */
+gpointer
+g_object_get_boxed (gpointer     object,
+                    const gchar *property_name)
+{
+  gpointer value = NULL;
+
+  g_object_get_generic (object, property_name,
+                        G_STRFUNC, G_TYPE_BOXED, &value);
+
+  return value;
+}
+
+/**
+ * g_object_get_char:
+ * @object: a #GObject
+ * @property_name: the name of the property to get
+ *
+ * Retrieve the character value of the specified property.
+ *
+ * Return value: a character
+ *
+ * Since: 2.24
+ */
+gchar
+g_object_get_char (gpointer     object,
+                   const gchar *property_name)
+{
+  gchar value = 0;
+
+  g_object_get_generic (object, property_name,
+                        G_STRFUNC, G_TYPE_CHAR, &value);
+
+  return value;
+}
+
+/**
+ * g_object_get_uchar:
+ * @object: a #GObject
+ * @property_name: the name of the property to get
+ *
+ * Retrieve the unsigned character value of the specified property.
+ *
+ * Return value: an unsigned character
+ *
+ * Since: 2.24
+ */
+guchar
+g_object_get_uchar (gpointer     object,
+                    const gchar *property_name)
+{
+  guchar value = 0;
+
+  g_object_get_generic (object, property_name,
+                        G_STRFUNC, G_TYPE_UCHAR, &value);
+
+  return value;
+}
+
+/**
+ * g_object_get_double:
+ * @object: a #GObject
+ * @property_name: the name of the property to get
+ *
+ * Retrieve the double value of the specified property.
+ *
+ * Return value: a double
+ *
+ * Since: 2.24
+ */
+gdouble
+g_object_get_double (gpointer     object,
+                     const gchar *property_name)
+{
+  gdouble value = 0;
+
+  g_object_get_generic (object, property_name,
+                        G_STRFUNC, G_TYPE_DOUBLE, &value);
+
+  return value;
+}
+
+/**
+ * g_object_get_float:
+ * @object: a #GObject
+ * @property_name: the name of the property to get
+ *
+ * Retrieve the float value of the specified property.
+ *
+ * Return value: a float
+ *
+ * Since: 2.24
+ */
+gfloat
+g_object_get_float (gpointer     object,
+                    const gchar *property_name)
+{
+  gfloat value = 0;
+
+  g_object_get_generic (object, property_name,
+                        G_STRFUNC, G_TYPE_FLOAT, &value);
+
+  return value;
+}
+
+/**
+ * g_object_get_int:
+ * @object: a #GObject
+ * @property_name: the name of the property to get
+ *
+ * Retrieve the integer value of the specified property.
+ *
+ * Return value: an integer
+ *
+ * Since: 2.24
+ */
+gint
+g_object_get_int (gpointer     object,
+                  const gchar *property_name)
+{
+  gint value = 0;
+
+  g_object_get_generic (object, property_name,
+                        G_STRFUNC, G_TYPE_INT, &value);
+
+  return value;
+}
+
+/**
+ * g_object_get_uint:
+ * @object: a #GObject
+ * @property_name: the name of the property to get
+ *
+ * Retrieve the unsigned integer value of the specified property.
+ *
+ * Return value: an unsigned integer
+ *
+ * Since: 2.24
+ */
+guint
+g_object_get_uint (gpointer     object,
+                   const gchar *property_name)
+{
+  guint value = 0;
+
+  g_object_get_generic (object, property_name,
+                        G_STRFUNC, G_TYPE_UINT, &value);
+
+  return value;
+}
+
+/**
+ * g_object_get_int64:
+ * @object: a #GObject
+ * @property_name: the name of the property to get
+ *
+ * Retrieve the 64bit integer value of the specified property.
+ *
+ * Return value: a 64bit integer
+ *
+ * Since: 2.24
+ */
+gint64
+g_object_get_int64 (gpointer     object,
+                    const gchar *property_name)
+{
+  gint64 value = 0;
+
+  g_object_get_generic (object, property_name,
+                        G_STRFUNC, G_TYPE_INT64, &value);
+
+  return value;
+}
+
+/**
+ * g_object_get_uint64:
+ * @object: a #GObject
+ * @property_name: the name of the property to get
+ *
+ * Retrieve the unsigned 64bit integer value of the specified property.
+ *
+ * Return value: an unsigned 64bit integer
+ *
+ * Since: 2.24
+ */
+guint64
+g_object_get_uint64 (gpointer     object,
+                     const gchar *property_name)
+{
+  guint64 value = 0;
+
+  g_object_get_generic (object, property_name,
+                        G_STRFUNC, G_TYPE_UINT64, &value);
+
+  return value;
+}
+
+/**
+ * g_object_get_long:
+ * @object: a #GObject
+ * @property_name: the name of the property to get
+ *
+ * Retrieve the long value of the specified property.
+ *
+ * Return value: a long
+ *
+ * Since: 2.24
+ */
+glong
+g_object_get_long (gpointer     object,
+                   const gchar *property_name)
+{
+  glong value = 0;
+
+  g_object_get_generic (object, property_name,
+                        G_STRFUNC, G_TYPE_LONG, &value);
+
+  return value;
+}
+
+/**
+ * g_object_get_ulong:
+ * @object: a #GObject
+ * @property_name: the name of the property to get
+ *
+ * Retrieve the unsigned long value of the specified property.
+ *
+ * Return value: an unsigned long
+ *
+ * Since: 2.24
+ */
+gulong
+g_object_get_ulong (gpointer     object,
+                    const gchar *property_name)
+{
+  gulong value = 0;
+
+  g_object_get_generic (object, property_name,
+                        G_STRFUNC, G_TYPE_ULONG, &value);
+
+  return value;
+}
+
+/**
+ * g_object_get_string:
+ * @object: a #GObject
+ * @property_name: the name of the property to get
+ *
+ * Retrieve the string value of the specified property.
+ *
+ * Return value: a newly allocated string
+ *
+ * Since: 2.24
+ */
+gchar *
+g_object_get_string (gpointer     object,
+                     const gchar *property_name)
+{
+  gchar* value = NULL;
+
+  g_object_get_generic (object, property_name,
+                        G_STRFUNC, G_TYPE_STRING, &value);
+
+  return value;
+}
+
+/**
+ * g_object_get_enum:
+ * @object: a #GObject
+ * @property_name: the name of the property to get
+ *
+ * Retrieve the enumeration value of the specified property.
+ *
+ * Return value: an enumeration
+ *
+ * Since: 2.24
+ */
+gint
+g_object_get_enum (gpointer     object,
+                   const gchar *property_name)
+{
+  gint value = 0;
+
+  g_object_get_generic (object, property_name,
+                        G_STRFUNC, G_TYPE_ENUM, &value);
+
+  return value;
+}
+
+/**
+ * g_object_get_flags:
+ * @object: a #GObject
+ * @property_name: the name of the property to get
+ *
+ * Retrieve the flag value of the specified property.
+ *
+ * Return value: a flag value
+ *
+ * Since: 2.24
+ */
+guint
+g_object_get_flags (gpointer     object,
+                    const gchar *property_name)
+{
+  guint value = 0;
+
+  g_object_get_generic (object, property_name,
+                        G_STRFUNC, G_TYPE_FLAGS, &value);
+
+  return value;
+}
+
+/**
+ * g_object_get_object:
+ * @object: a #GObject
+ * @property_name: the name of the property to get
+ *
+ * Retrieve the object value of the specified property.
+ *
+ * Return value: an object
+ *
+ * Since: 2.24
+ */
+gpointer
+g_object_get_object (gpointer     object,
+                     const gchar *property_name)
+{
+  gpointer value = NULL;
+
+  g_object_get_generic (object, property_name,
+                        G_STRFUNC, G_TYPE_OBJECT, &value);
+
+  return value;
+}
+
+/**
+ * g_object_get_pointer:
+ * @object: a #GObject
+ * @property_name: the name of the property to get
+ *
+ * Retrieve the pointer value of the specified property.
+ *
+ * Return value: a pointer
+ *
+ * Since: 2.24
+ */
+gpointer
+g_object_get_pointer (gpointer     object,
+                      const gchar *property_name)
+{
+  gpointer value = NULL;
+
+  g_object_get_generic (object, property_name,
+                        G_STRFUNC, G_TYPE_POINTER, &value);
+
+  return value;
+}
+
+/**
+ * g_object_get_gtype:
+ * @object: a #GObject
+ * @property_name: the name of the property to get
+ *
+ * Retrieve the #GType value of the specified property.
+ *
+ * Return value: a #GType
+ *
+ * Since: 2.24
+ */
+GType
+g_object_get_gtype (gpointer     object,
+                    const gchar *property_name)
+{
+  GType value = G_TYPE_NONE;
+
+  g_object_get_generic (object, property_name,
+                        G_STRFUNC, G_TYPE_GTYPE, &value);
+
+  return value;
+}
+
+/**
+ * g_object_get_param:
+ * @object: a #GObject
+ * @property_name: the name of the property to get
+ *
+ * Retrieve the #GParamSpec value of the specified property.
+ *
+ * Return value: a #GParamSpec
+ *
+ * Since: 2.24
+ */
+GParamSpec*
+g_object_get_param (gpointer     object,
+                    const gchar *property_name)
+{
+  GParamSpec* value = NULL;
+
+  g_object_get_generic (object, property_name,
+                        G_STRFUNC, G_TYPE_PARAM, &value);
+
+  return value;
+}
+
+/**
+ * g_object_get_unichar:
+ * @object: a #GObject
+ * @property_name: the name of the property to get
+ *
+ * Retrieve the unicode character value of the specified property.
+ *
+ * Return value: a unicode character
+ *
+ * Since: 2.24
+ */
+gunichar
+g_object_get_unichar (gpointer     object,
+                      const gchar *property_name)
+{
+  gunichar value = 0;
+
+  g_object_get_generic (object, property_name,
+                        G_STRFUNC, G_TYPE_PARAM_UNICHAR, &value);
+
+  return value;
+}
+
+static void
+g_object_set_generic (gpointer     object,
+                      const gchar *property_name,
+                      const gchar *str_func,
+                      GType        gtype,
+                      gpointer     value)
+{
+  GObjectNotifyQueue *nqueue;
+  GParamSpec *pspec;
+  GValue gvalue = { 0, };
+
+  if (!G_IS_OBJECT (object))
+    {
+      g_return_if_fail_warning ("Glib-Object",
+                                str_func, "G_IS_OBJECT");
+      return;
+    }
+  if (property_name == NULL)
+    {
+      g_return_if_fail_warning ("Glib-Object",
+                                str_func, "property_name != NULL");
+      return;
+    }
+
+  g_object_ref (object);
+  nqueue = g_object_notify_queue_freeze (object, &property_notify_context);
+
+  pspec = g_param_spec_pool_lookup (pspec_pool,
+                                    property_name,
+                                    G_OBJECT_TYPE (object),
+                                    TRUE);
+
+  if (!pspec)
+    g_warning ("%s: object class `%s' has no property named `%s'",
+               str_func,
+               G_OBJECT_TYPE_NAME (object),
+               property_name);
+  else if (!g_type_is_a (pspec->value_type, gtype))
+    g_warning ("%s: property `%s' of object class `%s' is not '%s'",
+               str_func,
+               pspec->name,
+               G_OBJECT_TYPE_NAME (object),
+               g_type_name (gtype));
+  else if (!(pspec->flags & G_PARAM_WRITABLE))
+    g_warning ("%s: property `%s' of object class `%s' is not writable",
+               str_func,
+               pspec->name,
+               G_OBJECT_TYPE_NAME (object));
+  else if ((pspec->flags & G_PARAM_CONSTRUCT_ONLY) && !object_in_construction_list (object))
+    g_warning ("%s: construct property \"%s\" for object `%s' can't be set after construction",
+               str_func,
+               pspec->name,
+               G_OBJECT_TYPE_NAME (object));
+  else
+    {
+      g_value_init (&gvalue, G_PARAM_SPEC_VALUE_TYPE (pspec));
+
+      switch (G_PARAM_SPEC_VALUE_TYPE (pspec))
+      {
+        case G_TYPE_BOOLEAN:
+          g_value_set_boolean (&gvalue, *((gboolean*)(value)));
+          break;
+        case G_TYPE_BOXED:
+          g_value_set_boxed (&gvalue, value);
+          break;
+        case G_TYPE_CHAR:
+          g_value_set_char (&gvalue, *((gchar*)(value)));
+          break;
+        case G_TYPE_UCHAR:
+          g_value_set_uchar (&gvalue, *((guchar*)(value)));
+          break;
+        case G_TYPE_DOUBLE:
+          g_value_set_double (&gvalue, *((gdouble*)(value)));
+          break;
+        case G_TYPE_FLOAT:
+          g_value_set_float (&gvalue, *((gfloat*)(value)));
+          break;
+        case G_TYPE_INT:
+          g_value_set_int (&gvalue, *((gint*)(value)));
+          break;
+        case G_TYPE_UINT:
+          g_value_set_uint (&gvalue, *((guint*)(value)));
+          break;
+        case G_TYPE_INT64:
+          g_value_set_int64 (&gvalue, *((gint64*)(value)));
+          break;
+        case G_TYPE_UINT64:
+          g_value_set_uint64 (&gvalue, *((guint64*)(value)));
+          break;
+        case G_TYPE_LONG:
+          g_value_set_long (&gvalue, *((glong*)(value)));
+          break;
+        case G_TYPE_ULONG:
+          g_value_set_ulong (&gvalue, *((gulong*)(value)));
+          break;
+        case G_TYPE_STRING:
+          g_value_set_string (&gvalue, value);
+          break;
+        case G_TYPE_ENUM:
+          g_value_set_enum (&gvalue, *((gulong*)(value)));
+          break;
+        case G_TYPE_FLAGS:
+          g_value_set_flags (&gvalue, *((gulong*)(value)));
+          break;
+        case G_TYPE_OBJECT:
+          g_value_set_object (&gvalue, value);
+          break;
+        case G_TYPE_POINTER:
+          g_value_set_pointer (&gvalue, value);
+          break;
+        default:
+          {
+            GType ptype = G_PARAM_SPEC_VALUE_TYPE (pspec);
+            if (ptype == G_TYPE_GTYPE)
+              g_value_set_gtype (&gvalue, *((GType*)(value)));
+            else if (ptype == G_TYPE_PARAM)
+              g_value_set_param (&gvalue, value);
+            else if (G_PARAM_SPEC_TYPE (pspec) == G_TYPE_PARAM_UNICHAR)
+              g_value_set_uint (&gvalue, *((gunichar*)(value)));
+            else
+              g_assert_not_reached ();
+          }
+      }
+
+      object_set_property (object, pspec, &gvalue, nqueue);
+
+      g_value_unset (&gvalue);
+    }
+
+  g_object_notify_queue_thaw (object, nqueue);
+  g_object_unref (object);
+}
+
+/**
+ * g_object_set_boolean:
+ * @object: a #GObject
+ * @property_name: the name of the property to set
+ * @value: the value to set
+ *
+ * Set the boolean value of the specified property.
+ *
+ * Since: 2.24
+ */
+void
+g_object_set_boolean (gpointer     object,
+                      const gchar *property_name,
+                      gboolean     value)
+{
+  g_object_set_generic (object, property_name,
+                        G_STRFUNC, G_TYPE_BOOLEAN, &value);
+}
+
+/**
+ * g_object_set_boxed:
+ * @object: a #GObject
+ * @property_name: the name of the property to set
+ * @value: the value to set
+ *
+ * Set the boxed value of the specified property.
+ *
+ * Since: 2.24
+ */
+void
+g_object_set_boxed (gpointer     object,
+                    const gchar *property_name,
+                    gpointer     value)
+{
+  g_object_set_generic (object, property_name,
+                        G_STRFUNC, G_TYPE_BOXED, &value);
+}
+
+/**
+ * g_object_set_char:
+ * @object: a #GObject
+ * @property_name: the name of the property to set
+ * @value: the value to set
+ *
+ * Set the character value of the specified property.
+ *
+ * Since: 2.24
+ */
+void
+g_object_set_char (gpointer     object,
+                   const gchar *property_name,
+                   gchar        value)
+{
+  g_object_set_generic (object, property_name,
+                        G_STRFUNC, G_TYPE_CHAR, &value);
+}
+
+/**
+ * g_object_set_uchar:
+ * @object: a #GObject
+ * @property_name: the name of the property to set
+ * @value: the value to set
+ *
+ * Set the unsigned character value of the specified property.
+ *
+ * Since: 2.24
+ */
+void
+g_object_set_uchar (gpointer     object,
+                    const gchar *property_name,
+                    guchar       value)
+{
+  g_object_set_generic (object, property_name,
+                        G_STRFUNC, G_TYPE_UCHAR, &value);
+}
+
+/**
+ * g_object_set_double:
+ * @object: a #GObject
+ * @property_name: the name of the property to set
+ * @value: the value to set
+ *
+ * Set the double value of the specified property.
+ *
+ * Since: 2.24
+ */
+void
+g_object_set_double (gpointer     object,
+                     const gchar *property_name,
+                     gdouble      value)
+{
+  g_object_set_generic (object, property_name,
+                        G_STRFUNC, G_TYPE_DOUBLE, &value);
+}
+
+/**
+ * g_object_set_float:
+ * @object: a #GObject
+ * @property_name: the name of the property to set
+ * @value: the value to set
+ *
+ * Set the floating point value of the specified property.
+ *
+ * Since: 2.24
+ */
+void
+g_object_set_float (gpointer     object,
+                    const gchar *property_name,
+                    gfloat       value)
+{
+  g_object_set_generic (object, property_name,
+                        G_STRFUNC, G_TYPE_FLOAT, &value);
+}
+
+/**
+ * g_object_set_int:
+ * @object: a #GObject
+ * @property_name: the name of the property to set
+ * @value: the value to set
+ *
+ * Set the integer value of the specified property.
+ *
+ * Since: 2.24
+ */
+void
+g_object_set_int (gpointer     object,
+                  const gchar *property_name,
+                  gint         value)
+{
+  g_object_set_generic (object, property_name,
+                        G_STRFUNC, G_TYPE_INT, &value);
+}
+
+/**
+ * g_object_set_uint:
+ * @object: a #GObject
+ * @property_name: the name of the property to set
+ * @value: the value to set
+ *
+ * Set the unsigned integer value of the specified property.
+ *
+ * Since: 2.24
+ */
+void
+g_object_set_uint (gpointer     object,
+                   const gchar *property_name,
+                   guint        value)
+{
+  g_object_set_generic (object, property_name,
+                        G_STRFUNC, G_TYPE_UINT, &value);
+}
+
+/**
+ * g_object_set_int64:
+ * @object: a #GObject
+ * @property_name: the name of the property to set
+ * @value: the value to set
+ *
+ * Set the 64bit integer value of the specified property.
+ *
+ * Since: 2.24
+ */
+void
+g_object_set_int64 (gpointer     object,
+                    const gchar *property_name,
+                    gint64       value)
+{
+  g_object_set_generic (object, property_name,
+                        G_STRFUNC, G_TYPE_INT64, &value);
+}
+
+/**
+ * g_object_set_uint64:
+ * @object: a #GObject
+ * @property_name: the name of the property to set
+ * @value: the value to set
+ *
+ * Set the unsigned 64bit integer value of the specified property.
+ *
+ * Since: 2.24
+ */
+void
+g_object_set_uint64 (gpointer      object,
+                     const gchar  *property_name,
+                     guint64       value)
+{
+  g_object_set_generic (object, property_name,
+                        G_STRFUNC, G_TYPE_UINT64, &value);
+}
+
+/**
+ * g_object_set_long:
+ * @object: a #GObject
+ * @property_name: the name of the property to set
+ * @value: the value to set
+ *
+ * Set the long value of the specified property.
+ *
+ * Since: 2.24
+ */
+void
+g_object_set_long (gpointer      object,
+                   const gchar  *property_name,
+                   glong         value)
+{
+  g_object_set_generic (object, property_name,
+                        G_STRFUNC, G_TYPE_LONG, &value);
+}
+
+/**
+ * g_object_set_ulong:
+ * @object: a #GObject
+ * @property_name: the name of the property to set
+ * @value: the value to set
+ *
+ * Set the unsigned long value of the specified property.
+ *
+ * Since: 2.24
+ */
+void
+g_object_set_ulong (gpointer       object,
+                    const gchar   *property_name,
+                    gulong         value)
+{
+  g_object_set_generic (object, property_name,
+                        G_STRFUNC, G_TYPE_ULONG, &value);
+}
+
+/**
+ * g_object_set_string:
+ * @object: a #GObject
+ * @property_name: the name of the property to set
+ * @value: the value to set
+ *
+ * Set the string value of the specified property.
+ *
+ * Since: 2.24
+ */
+void
+g_object_set_string (gpointer     object,
+                     const gchar *property_name,
+                     const gchar *value)
+{
+  g_object_set_generic (object, property_name,
+                        G_STRFUNC, G_TYPE_STRING, (gchar*)value);
+}
+
+/**
+ * g_object_set_enum:
+ * @object: a #GObject
+ * @property_name: the name of the property to set
+ * @value: the value to set
+ *
+ * Set the enumeration value of the specified property.
+ *
+ * Since: 2.24
+ */
+void
+g_object_set_enum (gpointer     object,
+                   const gchar *property_name,
+                   gint         value)
+{
+  g_object_set_generic (object, property_name,
+                        G_STRFUNC, G_TYPE_ENUM, GINT_TO_POINTER (value));
+}
+
+/**
+ * g_object_set_flags:
+ * @object: a #GObject
+ * @property_name: the name of the property to set
+ * @value: the value to set
+ *
+ * Set the flag value of the specified property.
+ *
+ * Since: 2.24
+ */
+void
+g_object_set_flags (gpointer     object,
+                    const gchar *property_name,
+                    guint        value)
+{
+  g_object_set_generic (object, property_name,
+                        G_STRFUNC, G_TYPE_FLAGS, GUINT_TO_POINTER (value));
+}
+
+/**
+ * g_object_set_object:
+ * @object: a #GObject
+ * @property_name: the name of the property to set
+ * @value: the value to set
+ *
+ * Set the object value of the specified property.
+ *
+ * Since: 2.24
+ */
+void
+g_object_set_object (gpointer     object,
+                     const gchar *property_name,
+                     gpointer     value)
+{
+  g_object_set_generic (object, property_name,
+                        G_STRFUNC, G_TYPE_OBJECT, value);
+}
+
+/**
+ * g_object_set_pointer:
+ * @object: a #GObject
+ * @property_name: the name of the property to set
+ * @value: the value to set
+ *
+ * Set the pointer value of the specified property.
+ *
+ * Since: 2.24
+ */
+void
+g_object_set_pointer (gpointer     object,
+                      const gchar *property_name,
+                      gpointer     value)
+{
+  g_object_set_generic (object, property_name,
+                        G_STRFUNC, G_TYPE_POINTER, value);
+}
+
+/**
+ * g_object_set_gtype:
+ * @object: a #GObject
+ * @property_name: the name of the property to set
+ * @value: the value to set
+ *
+ * Set the #GType value of the specified property.
+ *
+ * Since: 2.24
+ */
+void
+g_object_set_gtype (gpointer     object,
+                    const gchar *property_name,
+                    GType        value)
+{
+  g_object_set_generic (object, property_name,
+                        G_STRFUNC, G_TYPE_GTYPE, GSIZE_TO_POINTER (value));
+}
+
+/**
+ * g_object_set_param:
+ * @object: a #GObject
+ * @property_name: the name of the property to set
+ * @value: the value to set
+ *
+ * Set the #GParamSpec value of the specified property.
+ *
+ * Since: 2.24
+ */
+void
+g_object_set_param (gpointer     object,
+                    const gchar *property_name,
+                    GParamSpec  *value)
+{
+  g_object_set_generic (object, property_name,
+                        G_STRFUNC, G_TYPE_PARAM, value);
+}
+
+/**
+ * g_object_set_unichar:
+ * @object: a #GObject
+ * @property_name: the name of the property to set
+ * @value: the value to set
+ *
+ * Set the unicode character value of the specified property.
+ *
+ * Since: 2.24
+ */
+void
+g_object_set_unichar (gpointer     object,
+                      const gchar *property_name,
+                      gunichar     value)
+{
+  g_object_set_generic (object, property_name,
+                        G_STRFUNC, G_TYPE_PARAM_UNICHAR, GUINT_TO_POINTER (value));
+}
+
 /**
  * g_object_set_property:
  * @object: a #GObject
diff --git a/gobject/gobject.h b/gobject/gobject.h
index 751e5f2..0a84694 100644
--- a/gobject/gobject.h
+++ b/gobject/gobject.h
@@ -414,6 +414,108 @@ void	    g_object_set                      (gpointer	       object,
 void        g_object_get                      (gpointer        object,
 					       const gchar    *first_property_name,
 					       ...) G_GNUC_NULL_TERMINATED;
+gboolean    g_object_get_boolean              (gpointer        object,
+                                               const gchar    *property_name);
+gpointer    g_object_get_boxed                (gpointer        object,
+                                               const gchar    *property_name);
+gchar       g_object_get_char                 (gpointer        object,
+                                               const gchar    *property_name);
+guchar      g_object_get_uchar                (gpointer        object,
+                                               const gchar    *property_name);
+gdouble     g_object_get_double               (gpointer        object,
+                                               const gchar    *property_name);
+gfloat      g_object_get_float                (gpointer        object,
+                                               const gchar    *property_name);
+gint        g_object_get_int                  (gpointer        object,
+                                               const gchar    *property_name);
+guint       g_object_get_uint                 (gpointer        object,
+                                               const gchar    *property_name);
+gint64      g_object_get_int64                (gpointer        object,
+                                               const gchar    *property_name);
+guint64     g_object_get_uint64               (gpointer        object,
+                                               const gchar    *property_name);
+glong       g_object_get_long                 (gpointer        object,
+                                               const gchar    *property_name);
+gulong      g_object_get_ulong                (gpointer        object,
+                                               const gchar    *property_name);
+gchar*      g_object_get_string               (gpointer        object,
+                                               const gchar    *property_name);
+gint        g_object_get_enum                 (gpointer        object,
+                                               const gchar    *property_name);
+guint       g_object_get_flags                (gpointer        object,
+                                               const gchar    *property_name);
+gpointer    g_object_get_object               (gpointer        object,
+                                               const gchar    *property_name);
+gpointer    g_object_get_pointer              (gpointer        object,
+                                               const gchar    *property_name);
+GType       g_object_get_gtype                (gpointer        object,
+                                               const gchar    *property_name);
+GParamSpec* g_object_get_param                (gpointer        object,
+                                               const gchar    *property_name);
+gunichar    g_object_get_unichar              (gpointer        object,
+                                               const gchar    *property_name);
+
+void        g_object_set_boolean              (gpointer        object,
+                                               const gchar    *property_name,
+                                               gboolean        value);
+void        g_object_set_boxed                (gpointer        object,
+                                               const gchar    *property_name,
+                                               gpointer        value);
+void        g_object_set_char                 (gpointer        object,
+                                               const gchar    *property_name,
+                                               gchar           value);
+void        g_object_set_uchar                (gpointer        object,
+                                               const gchar    *property_name,
+                                               guchar          value);
+void        g_object_set_double               (gpointer        object,
+                                               const gchar    *property_name,
+                                               gdouble         value);
+void        g_object_set_float                (gpointer        object,
+                                               const gchar    *property_name,
+                                               gfloat          value);
+void        g_object_set_int                  (gpointer        object,
+                                               const gchar    *property_name,
+                                               gint            value);
+void        g_object_set_uint                 (gpointer        object,
+                                               const gchar    *property_name,
+                                               guint           value);
+void        g_object_set_int64                (gpointer        object,
+                                               const gchar    *property_name,
+                                               gint64          value);
+void        g_object_set_uint64               (gpointer        object,
+                                               const gchar    *property_name,
+                                               guint64         value);
+void        g_object_set_long                 (gpointer        object,
+                                               const gchar    *property_name,
+                                               glong           value);
+void        g_object_set_ulong                (gpointer        object,
+                                               const gchar    *property_name,
+                                               gulong          value);
+void        g_object_set_string               (gpointer        object,
+                                               const gchar    *property_name,
+                                               const gchar*    value);
+void        g_object_set_enum                 (gpointer        object,
+                                               const gchar    *property_name,
+                                               gint            value);
+void        g_object_set_flags                (gpointer        object,
+                                               const gchar    *property_name,
+                                               guint           value);
+void        g_object_set_object               (gpointer        object,
+                                               const gchar    *property_name,
+                                               gpointer        value);
+void        g_object_set_pointer              (gpointer        object,
+                                               const gchar    *property_name,
+                                               gpointer        value);
+void        g_object_set_gtype                (gpointer        object,
+                                               const gchar    *property_name,
+                                               GType           value);
+void        g_object_set_param                (gpointer        object,
+                                               const gchar    *property_name,
+                                               GParamSpec     *value);
+void        g_object_set_unichar              (gpointer        object,
+                                               const gchar    *property_name,
+                                               gunichar        value);
+
 gpointer    g_object_connect                  (gpointer	       object,
 					       const gchar    *signal_spec,
 					       ...) G_GNUC_NULL_TERMINATED;
diff --git a/gobject/gobject.symbols b/gobject/gobject.symbols
index a43dd08..eb52cb2 100644
--- a/gobject/gobject.symbols
+++ b/gobject/gobject.symbols
@@ -126,6 +126,46 @@ g_object_connect G_GNUC_NULL_TERMINATED
 g_object_disconnect G_GNUC_NULL_TERMINATED
 g_object_freeze_notify
 g_object_get G_GNUC_NULL_TERMINATED
+g_object_get_boolean
+g_object_get_boxed
+g_object_get_char
+g_object_get_uchar
+g_object_get_double
+g_object_get_float
+g_object_get_int
+g_object_get_uint
+g_object_get_int64
+g_object_get_uint64
+g_object_get_long
+g_object_get_ulong
+g_object_get_string
+g_object_get_enum
+g_object_get_flags
+g_object_get_object
+g_object_get_pointer
+g_object_get_gtype
+g_object_get_param
+g_object_get_unichar
+g_object_set_boolean
+g_object_set_boxed
+g_object_set_char
+g_object_set_uchar
+g_object_set_double
+g_object_set_float
+g_object_set_int
+g_object_set_uint
+g_object_set_int64
+g_object_set_uint64
+g_object_set_long
+g_object_set_ulong
+g_object_set_string
+g_object_set_enum
+g_object_set_flags
+g_object_set_object
+g_object_set_pointer
+g_object_set_gtype
+g_object_set_param
+g_object_set_unichar
 g_object_get_data
 g_object_get_property
 g_object_get_qdata
