diff --git a/atk/Makefile.am b/atk/Makefile.am
index 0572324..2459680 100644
--- a/atk/Makefile.am
+++ b/atk/Makefile.am
@@ -37,10 +37,12 @@ libatk_1_0_la_SOURCES = \
atknoopobjectfactory.c \
atkobject.c \
atkobjectfactory.c \
+ atkplug.c \
atkregistry.c \
atkrelation.c \
atkrelationset.c \
atkselection.c \
+ atksocket.c \
atkstate.c \
atkstateset.c \
atkstreamablecontent.c \
@@ -67,12 +69,14 @@ atk_headers = \
atknoopobjectfactory.h \
atkobject.h \
atkobjectfactory.h \
+ atkplug.h \
atkimage.h \
atkregistry.h \
atkrelation.h \
atkrelationtype.h \
atkrelationset.h \
atkselection.h \
+ atksocket.h \
atkstate.h \
atkstateset.h \
atkstreamablecontent.h \
diff --git a/atk/atk.h b/atk/atk.h
index a7536a0..4047f99 100755
--- a/atk/atk.h
+++ b/atk/atk.h
@@ -35,11 +35,13 @@
#include <atk/atknoopobject.h>
#include <atk/atknoopobjectfactory.h>
#include <atk/atkobjectfactory.h>
+#include <atk/atkplug.h>
#include <atk/atkregistry.h>
#include <atk/atkrelation.h>
#include <atk/atkrelationset.h>
#include <atk/atkrelationtype.h>
#include <atk/atkselection.h>
+#include <atk/atksocket.h>
#include <atk/atkstate.h>
#include <atk/atkstateset.h>
#include <atk/atkstreamablecontent.h>
diff --git a/atk/atkplug.c b/atk/atkplug.c
new file mode 100644
index 0000000..4ceb11d
--- a/dev/null
+++ b/atk/atkplug.c
@@ -0,0 +1,74 @@
+/* ATK - Accessibility Toolkit
+ * Copyright (C) 2009 Novell, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include "atk.h"
+#include "atkplug.h"
+
+G_DEFINE_TYPE (AtkPlug, atk_plug, ATK_TYPE_OBJECT);
+
+static void atk_plug_class_init (AtkPlugClass *klass);
+
+static void
+atk_plug_init (AtkPlug* obj)
+{
+}
+
+static void
+atk_plug_class_init (AtkPlugClass* klass)
+{
+ klass->get_object_id = NULL;
+}
+
+AtkObject*
+atk_plug_new (void)
+{
+ AtkObject* accessible;
+
+ accessible = g_object_new (ATK_TYPE_PLUG, NULL);
+ g_return_val_if_fail (accessible != NULL, NULL);
+
+ accessible->role = ATK_ROLE_FILLER;
+ accessible->layer = ATK_LAYER_WIDGET;
+
+ return accessible;
+}
+
+/**
+ * atk_plug_get_plug_id:
+ * @obj: an #AtkPlug
+ *
+ * Gets the unique ID of an #AtkPlug object, which can be used to embed inside
+ * of an #AtkSocket using atk_socket_embed().
+ *
+ * Returns: the unique ID for the plug
+ **/
+gchar*
+atk_plug_get_id (AtkPlug* obj)
+{
+ AtkPlugClass *klass;
+
+ g_return_val_if_fail (ATK_IS_PLUG (obj), NULL);
+
+ klass = g_type_class_peek (ATK_TYPE_PLUG);
+
+ if (klass && klass->get_object_id)
+ return (klass->get_object_id) (obj);
+ else
+ return NULL;
+}
diff --git a/atk/atkplug.h b/atk/atkplug.h
new file mode 100644
index 0000000..7d6efd4
--- a/dev/null
+++ b/atk/atkplug.h
@@ -0,0 +1,61 @@
+/* ATK - Accessibility Toolkit
+ * Copyright 2009 Novell, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#if defined(ATK_DISABLE_SINGLE_INCLUDES) && !defined (__ATK_H_INSIDE__) && !defined (ATK_COMPILATION)
+#error "Only <atk/atk.h> can be included directly."
+#endif
+
+#ifndef __ATK_PLUG_H__
+#define __ATK_PLUG_H__
+
+G_BEGIN_DECLS
+
+#define ATK_TYPE_PLUG (atk_plug_get_type ())
+#define ATK_PLUG(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), ATK_TYPE_PLUG, AtkPlug))
+#define ATK_IS_PLUG(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), ATK_TYPE_PLUG))
+#define ATK_PLUG_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), ATK_TYPE_PLUG, AtkPlugClass))
+#define ATK_IS_PLUG_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), ATK_TYPE_PLUG))
+#define ATK_PLUG_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), ATK_TYPE_PLUG, AtkPlugClass))
+
+typedef struct _AtkPlug AtkPlug;
+typedef struct _AtkPlugClass AtkPlugClass;
+
+struct _AtkPlug
+{
+ AtkObject parent;
+};
+
+GType atk_plug_get_type (void);
+
+struct _AtkPlugClass
+{
+ AtkObjectClass parent_class;
+
+ /* to be subscribed to by atk-bridge */
+
+ /*< protected >*/
+ gchar* (* get_object_id) (AtkPlug* obj);
+};
+
+AtkObject* atk_plug_new (void);
+gchar* atk_plug_get_id (AtkPlug* plug);
+
+G_END_DECLS
+
+#endif /* __ATK_PLUG_H__ */
diff --git a/atk/atksocket.c b/atk/atksocket.c
new file mode 100644
index 0000000..4fac8be
--- a/dev/null
+++ b/atk/atksocket.c
@@ -0,0 +1,93 @@
+/* ATK - Accessibility Toolkit
+ * Copyright (C) 2009 Novell, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include "atk.h"
+#include "atksocket.h"
+
+G_DEFINE_TYPE (AtkSocket, atk_socket, ATK_TYPE_OBJECT);
+
+static void atk_socket_class_init (AtkSocketClass *klass);
+
+static void
+atk_socket_init (AtkSocket* obj)
+{
+ obj->embedded_plug_id = NULL;
+}
+
+static void
+atk_socket_class_init (AtkSocketClass* klass)
+{
+ klass->embed = NULL;
+}
+
+AtkObject*
+atk_socket_new (void)
+{
+ AtkObject* accessible;
+
+ accessible = g_object_new (ATK_TYPE_SOCKET, NULL);
+ g_return_val_if_fail (accessible != NULL, NULL);
+
+ accessible->role = ATK_ROLE_FILLER;
+ accessible->layer = ATK_LAYER_WIDGET;
+
+ return accessible;
+}
+
+/**
+ * atk_socket_embed:
+ * @obj: an #AtkSocket
+ * @plug_id: the ID of an #AtkPlug
+ *
+ * Embeds the children of an #AtkPlug as the children of the #AtkSocket. The
+ * plug may be in the same process or in a different process.
+ **/
+void
+atk_socket_embed (AtkSocket* obj, gchar* plug_id)
+{
+ AtkSocketClass *klass;
+
+ g_return_if_fail (plug_id != NULL);
+ g_return_if_fail (ATK_IS_SOCKET (obj));
+
+ klass = g_type_class_peek (ATK_TYPE_SOCKET);
+ if (klass && klass->embed)
+ {
+ if (obj->embedded_plug_id)
+ g_free (obj->embedded_plug_id);
+ obj->embedded_plug_id = g_strdup (plug_id);
+ (klass->embed) (obj, plug_id);
+ }
+}
+
+/**
+ * atk_socket_is_occupied:
+ * @obj: an #AtkSocket
+ *
+ * Determines whether or not the socket has an embedded plug.
+ *
+ * Returns: TRUE if a plug is embedded in the socket
+ **/
+gboolean
+atk_socket_is_occupied (AtkSocket* obj)
+{
+ g_return_val_if_fail (ATK_IS_SOCKET (obj), FALSE);
+
+ return (obj->embedded_plug_id != NULL);
+}
diff --git a/atk/atksocket.h b/atk/atksocket.h
new file mode 100644
index 0000000..813d4f3
--- a/dev/null
+++ b/atk/atksocket.h
@@ -0,0 +1,65 @@
+/* ATK - Accessibility Toolkit
+ * Copyright 2009 Novell, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#if defined(ATK_DISABLE_SINGLE_INCLUDES) && !defined (__ATK_H_INSIDE__) && !defined (ATK_COMPILATION)
+#error "Only <atk/atk.h> can be included directly."
+#endif
+
+#ifndef __ATK_SOCKET_H__
+#define __ATK_SOCKET_H__
+
+G_BEGIN_DECLS
+
+#define ATK_TYPE_SOCKET (atk_socket_get_type ())
+#define ATK_SOCKET(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), ATK_TYPE_SOCKET, AtkSocket))
+#define ATK_IS_SOCKET(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), ATK_TYPE_SOCKET))
+#define ATK_SOCKET_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), ATK_TYPE_SOCKET, AtkSocketClass))
+#define ATK_IS_SOCKET_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), ATK_TYPE_SOCKET))
+#define ATK_SOCKET_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), ATK_TYPE_SOCKET, AtkSocketClass))
+
+typedef struct _AtkSocket AtkSocket;
+typedef struct _AtkSocketClass AtkSocketClass;
+
+struct _AtkSocket
+{
+ AtkObject parent;
+
+ /*< private >*/
+ gchar* embedded_plug_id;
+};
+
+GType atk_socket_get_type (void);
+
+struct _AtkSocketClass
+{
+ AtkObjectClass parent_class;
+
+ /* to be subscribed to by atk-bridge */
+
+ /*< protected >*/
+ void (* embed) (AtkSocket *obj, gchar* plug_id);
+};
+
+AtkObject* atk_socket_new (void);
+void atk_socket_embed (AtkSocket* obj, gchar* plug_id);
+gboolean atk_socket_is_occupied (AtkSocket* obj);
+
+G_END_DECLS
+
+#endif /* __ATK_SOCKET_H__ */
