Index: src/lib/ecore_wayland/ecore_wl.c
===================================================================
--- src/lib/ecore_wayland/ecore_wl.c	(revision 83306)
+++ src/lib/ecore_wayland/ecore_wl.c	(working copy)
@@ -132,6 +132,7 @@
 
    wl_list_init(&_ecore_wl_disp->inputs);
    wl_list_init(&_ecore_wl_disp->outputs);
+   wl_list_init(&_ecore_wl_disp->globals);
 
    _ecore_wl_disp->wl.registry =
      wl_display_get_registry(_ecore_wl_disp->wl.display);
@@ -270,6 +271,7 @@
      {
         Ecore_Wl_Output *out, *tout;
         Ecore_Wl_Input *in, *tin;
+        Ecore_Wl_Global *global, *tglobal;
 
         wl_list_for_each_safe(out, tout, &_ecore_wl_disp->outputs, link)
           _ecore_wl_output_del(out);
@@ -277,6 +279,13 @@
         wl_list_for_each_safe(in, tin, &_ecore_wl_disp->inputs, link)
           _ecore_wl_input_del(in);
 
+        wl_list_for_each_safe(global, tglobal, &_ecore_wl_disp->globals, link)
+          {
+             wl_list_remove(&global->link);
+             free(global->interface);
+             free(global);
+          }
+
         _ecore_wl_xkb_shutdown(_ecore_wl_disp);
 
         if (_ecore_wl_disp->wl.shell)
@@ -361,11 +370,18 @@
 _ecore_wl_cb_handle_global(void *data, struct wl_registry *registry, unsigned int id, const char *interface, unsigned int version EINA_UNUSED)
 {
    Ecore_Wl_Display *ewd;
+   Ecore_Wl_Global *global;
 
    LOGFN(__FILE__, __LINE__, __FUNCTION__);
 
    ewd = data;
 
+   global = malloc(sizeof(*global));
+   global->id = id;
+   global->interface = strdup(interface);
+   global->version = version;
+   wl_list_insert(ewd->globals.prev, &global->link);
+
    if (!strcmp(interface, "wl_compositor"))
      {
         ewd->wl.compositor =
Index: src/lib/ecore_wayland/Ecore_Wayland.h
===================================================================
--- src/lib/ecore_wayland/Ecore_Wayland.h	(revision 83306)
+++ src/lib/ecore_wayland/Ecore_Wayland.h	(working copy)
@@ -32,6 +32,8 @@
 typedef struct _Ecore_Wl_Display Ecore_Wl_Display;
 typedef struct _Ecore_Wl_Output Ecore_Wl_Output;
 typedef struct _Ecore_Wl_Input Ecore_Wl_Input;
+typedef struct _Ecore_Wl_Global Ecore_Wl_Global;
+
 # ifndef _ECORE_WAYLAND_WINDOW_PREDEF
 typedef struct _Ecore_Wl_Window Ecore_Wl_Window;
 # endif
@@ -70,6 +72,14 @@
    ECORE_WL_WINDOW_BUFFER_TYPE_SHM
 };
 
+struct _Ecore_Wl_Global
+{
+   unsigned int id;
+   char *interface;
+   unsigned int version;
+   struct wl_list link;
+};
+
 struct _Ecore_Wl_Display
 {
    struct 
@@ -91,6 +101,7 @@
 
    struct wl_list inputs;
    struct wl_list outputs;
+   struct wl_list globals;
 
    struct
      {
