diff --git a/ext/gdk_pixbuf/gstgdkpixbufoverlay.c b/ext/gdk_pixbuf/gstgdkpixbufoverlay.c
index 6d3ba25..9cc2b99 100644
--- a/ext/gdk_pixbuf/gstgdkpixbufoverlay.c
+++ b/ext/gdk_pixbuf/gstgdkpixbufoverlay.c
@@ -82,6 +82,8 @@ enum
   PROP_OFFSET_Y,
   PROP_RELATIVE_X,
   PROP_RELATIVE_Y,
+  PROP_ABSOLUTE_X,
+  PROP_ABSOLUTE_Y,
   PROP_OVERLAY_WIDTH,
   PROP_OVERLAY_HEIGHT,
   PROP_ALPHA
@@ -163,6 +165,16 @@ gst_gdk_pixbuf_overlay_class_init (GstGdkPixbufOverlayClass * klass)
           "height, from top-left corner of video image", 0.0, 1.0, 0.0,
           GST_PARAM_CONTROLLABLE | GST_PARAM_MUTABLE_PLAYING | G_PARAM_READWRITE
           | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (gobject_class, PROP_ABSOLUTE_X,
+      g_param_spec_int ("absolute-x", "absolute x",
+          "Value is added to the final position of X", G_MININT, G_MAXINT, 0,
+          GST_PARAM_CONTROLLABLE | GST_PARAM_MUTABLE_PLAYING | G_PARAM_READWRITE
+          | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (gobject_class, PROP_ABSOLUTE_Y,
+      g_param_spec_int ("absolute-y", "absolute Y",
+          "Value is added to the final position of Y", G_MININT, G_MAXINT, 0,
+          GST_PARAM_CONTROLLABLE | GST_PARAM_MUTABLE_PLAYING | G_PARAM_READWRITE
+          | G_PARAM_STATIC_STRINGS));
   g_object_class_install_property (gobject_class, PROP_OVERLAY_WIDTH,
       g_param_spec_int ("overlay-width", "Overlay Width",
           "Width of overlay image in pixels (0 = same as overlay image)", 0,
@@ -202,6 +214,9 @@ gst_gdk_pixbuf_overlay_init (GstGdkPixbufOverlay * overlay)
   overlay->relative_x = 0.0;
   overlay->relative_y = 0.0;
 
+  overlay->absolute_x = 0;
+  overlay->absolute_y = 0;
+
   overlay->overlay_width = 0;
   overlay->overlay_height = 0;
 
@@ -244,6 +259,14 @@ gst_gdk_pixbuf_overlay_set_property (GObject * object, guint property_id,
       overlay->relative_y = g_value_get_double (value);
       overlay->update_composition = TRUE;
       break;
+    case PROP_ABSOLUTE_X:
+      overlay->absolute_x = g_value_get_int (value);
+      overlay->update_composition = TRUE;
+      break;
+    case PROP_ABSOLUTE_Y:
+      overlay->absolute_y = g_value_get_int (value);
+      overlay->update_composition = TRUE;
+      break;
     case PROP_OVERLAY_WIDTH:
       overlay->overlay_width = g_value_get_int (value);
       overlay->update_composition = TRUE;
@@ -288,6 +311,12 @@ gst_gdk_pixbuf_overlay_get_property (GObject * object, guint property_id,
     case PROP_RELATIVE_Y:
       g_value_set_double (value, overlay->relative_y);
       break;
+    case PROP_ABSOLUTE_X:
+      g_value_set_int (value, overlay->absolute_x);
+      break;
+    case PROP_ABSOLUTE_Y:
+      g_value_set_int (value, overlay->absolute_y);
+      break;
     case PROP_OVERLAY_WIDTH:
       g_value_set_int (value, overlay->overlay_width);
       break;
@@ -470,6 +499,9 @@ gst_gdk_pixbuf_overlay_update_composition (GstGdkPixbufOverlay * overlay)
       (overlay->relative_y * overlay_meta->height) :
       overlay->offset_y + (overlay->relative_y * overlay_meta->height);
 
+  x += overlay->absolute_x;
+  y += overlay->absolute_y;
+
   width = overlay->overlay_width;
   if (width == 0)
     width = overlay_meta->width;
diff --git a/ext/gdk_pixbuf/gstgdkpixbufoverlay.h b/ext/gdk_pixbuf/gstgdkpixbufoverlay.h
index 0e863df..99b7a28 100644
--- a/ext/gdk_pixbuf/gstgdkpixbufoverlay.h
+++ b/ext/gdk_pixbuf/gstgdkpixbufoverlay.h
@@ -55,6 +55,9 @@ struct _GstGdkPixbufOverlay
   gdouble                      relative_x;
   gdouble                      relative_y;
 
+  gint                         absolute_x;
+  gint                         absolute_y;
+
   gint                         overlay_width;
   gint                         overlay_height;
 
