Index: src/lib/elm_conform.c
===================================================================
--- src/lib/elm_conform.c	(revision 65385)
+++ src/lib/elm_conform.c	(working copy)
@@ -16,6 +16,7 @@ struct _Widget_Data
    Evas_Object *shelf, *panel, *virtualkeypad;
    Evas_Object *content;
    Evas_Object *scroller;
+   Evas_Object *layout;
 #ifdef HAVE_ELEMENTARY_X
    Ecore_Event_Handler *prop_hdl;
    Ecore_X_Virtual_Keyboard_State vkb_state;
@@ -27,6 +28,7 @@ struct _Widget_Data
       Evas_Coord auto_x, auto_y; // desired delta
       Evas_Coord x, y; // current delta
    } delta;
+   Ecore_Job *show_region_job;
 };
 
 /* Enum to identify conformant swallow parts */
@@ -111,10 +113,7 @@ _theme_hook(Evas_Object *obj)
    _mirrored_set(obj, elm_widget_mirrored_get(obj));
    _elm_theme_object_set(obj, wd->base, "conformant", "base",
                          elm_widget_style_get(obj));
-   _swallow_conformant_parts(obj);
 
-   if (wd->content)
-     edje_object_part_swallow(wd->base, "elm.swallow.content", wd->content);
    edje_object_scale_set(wd->base, elm_widget_scale_get(obj)
                          * _elm_config->scale);
    _sizing_eval(obj);
@@ -133,11 +132,10 @@ _content_set_hook(Evas_Object *obj, const char *pa
    wd->content = content;
    if (content)
      {
-        elm_widget_sub_object_add(obj, content);
+        elm_object_part_content_set(wd->layout, "elm.swallow.content", content);
         evas_object_event_callback_add(content,
                                        EVAS_CALLBACK_CHANGED_SIZE_HINTS,
                                        _changed_size_hints, obj);
-        edje_object_part_swallow(wd->base, "elm.swallow.content", content);
      }
    _sizing_eval(obj);
 }
@@ -163,11 +161,10 @@ _content_unset_hook(Evas_Object *obj, const char *
    wd = elm_widget_data_get(obj);
    if ((!wd) || (!wd->content)) return NULL;
    content = wd->content;
-   elm_widget_sub_object_del(obj, wd->content);
+   elm_object_part_content_unset(wd->layout, "elm.swallow.content");
    evas_object_event_callback_del_full(wd->content,
                                        EVAS_CALLBACK_CHANGED_SIZE_HINTS,
                                        _changed_size_hints, obj);
-   edje_object_part_unswallow(wd->base, wd->content);
    wd->content = NULL;
    return content;
 }
@@ -269,7 +266,9 @@ _conformant_part_sizing_eval(Evas_Object *obj, Con
                                                 &sx, &sy, &sw, &sh)) && (xwin))
           {
 #ifdef HAVE_ELEMENTARY_X
-             ecore_x_e_illume_indicator_geometry_get(zone, &sx, &sy, &sw, &sh);
+           //NO information of the indicator geometry, reset the geometry.
+             if (!ecore_x_e_illume_indicator_geometry_get(zone, &sx, &sy, &sw, &sh))
+               sx = sy = sw = sh = 0;
 #else
              ;
 #endif
@@ -282,7 +281,9 @@ _conformant_part_sizing_eval(Evas_Object *obj, Con
                                                 &sx, &sy, &sw, &sh)) && (xwin))
           {
 #ifdef HAVE_ELEMENTARY_X
-             ecore_x_e_illume_keyboard_geometry_get(zone, &sx, &sy, &sw, &sh);
+           //NO information of the keyboard geometry, reset the geometry.
+           if (!ecore_x_e_illume_keyboard_geometry_get(zone, &sx, &sy, &sw, &sh))
+             sx = sy = sw = sh = 0;
 #else
              ;
 #endif
@@ -295,7 +296,9 @@ _conformant_part_sizing_eval(Evas_Object *obj, Con
                                                 &sx, &sy, &sw, &sh)) && (xwin))
           {
 #ifdef HAVE_ELEMENTARY_X
-             ecore_x_e_illume_softkey_geometry_get(zone, &sx, &sy, &sw, &sh);
+           //NO information of the softkey geometry, reset the geometry.
+           if (!ecore_x_e_illume_softkey_geometry_get(zone, &sx, &sy, &sw, &sh))
+             sx = sy = sw = sh = 0;
 #else
              ;
 #endif
@@ -360,18 +363,19 @@ _changed_size_hints(void *data, Evas *e __UNUSED__
 }
 
 static void
-_sub_del(void *data __UNUSED__, Evas_Object *obj, void *event_info)
+_sub_del(void *data, Evas_Object *obj __UNUSED__, void *event_info)
 {
-   Widget_Data *wd = elm_widget_data_get(obj);
+   Widget_Data *wd = elm_widget_data_get(data);
    Evas_Object *sub = event_info;
-if (!wd) return;
+
+   if (!wd) return;
    if (sub == wd->content)
      {
         evas_object_event_callback_del_full(sub,
                                             EVAS_CALLBACK_CHANGED_SIZE_HINTS,
-                                            _changed_size_hints, obj);
+                                            _changed_size_hints, data);
         wd->content = NULL;
-        _sizing_eval(obj);
+        _sizing_eval(data);
      }
 }
 
@@ -443,17 +447,13 @@ _conformant_move_resize_event_cb(void *data __UNUS
 
 // showing the focused/important region.
 static void
-_content_resize_event_cb(void *data, Evas *e __UNUSED__, Evas_Object *obj
-                         __UNUSED__, void *event_info __UNUSED__)
+_show_region_job(void *data)
 {
    Evas_Object *focus_obj;
    Evas_Object *conformant = (Evas_Object *)data;
    Widget_Data *wd = elm_widget_data_get(conformant);
 
    if (!wd) return;
-#ifdef HAVE_ELEMENTARY_X
-   if (wd->vkb_state == ECORE_X_VIRTUAL_KEYBOARD_STATE_OFF) return;
-#endif
 
    focus_obj = elm_widget_focused_object_get(conformant);
    if (focus_obj)
@@ -467,9 +467,27 @@ static void
 
         elm_widget_show_region_set(focus_obj, x, y, w, h, EINA_TRUE);
      }
+
+   wd->show_region_job = NULL;
 }
 
+static void
+_content_resize_event_cb(void *data, Evas *e __UNUSED__, Evas_Object *obj
+                         __UNUSED__, void *event_info __UNUSED__)
+{
+   Evas_Object *conformant = (Evas_Object *)data;
+   Widget_Data *wd = elm_widget_data_get(conformant);
+
+   if (!wd) return;
 #ifdef HAVE_ELEMENTARY_X
+   if (wd->vkb_state == ECORE_X_VIRTUAL_KEYBOARD_STATE_OFF) return;
+#endif
+
+   if (wd->show_region_job) ecore_job_del(wd->show_region_job);
+   wd->show_region_job = ecore_job_add(_show_region_job, conformant);
+}
+
+#ifdef HAVE_ELEMENTARY_X
 static void
 _update_autoscroll_objs(void *data)
 {
@@ -576,7 +594,12 @@ elm_conformant_add(Evas_Object *parent)
    _elm_theme_object_set(obj, wd->base, "conformant", "base", "default");
    elm_widget_resize_object_set(obj, wd->base);
 
+   wd->layout = elm_layout_add(obj);
+   edje_object_part_swallow(wd->base, "elm.swallow.content", wd->layout);
+   elm_layout_theme_set(wd->layout, "conformant", "layout", "content");
+
    _swallow_conformant_parts(obj);
+
 #ifdef HAVE_ELEMENTARY_X
    Evas_Object *top = elm_widget_top_get(obj);
    Ecore_X_Window xwin = elm_win_xwindow_get(top);
@@ -595,7 +618,7 @@ elm_conformant_add(Evas_Object *parent)
    evas_object_event_callback_add(obj, EVAS_CALLBACK_MOVE,
                                        _conformant_move_resize_event_cb, obj);
 
-   evas_object_smart_callback_add(obj, "sub-object-del", _sub_del, obj);
+   evas_object_smart_callback_add(wd->layout, "sub-object-del", _sub_del, obj);
 
    _mirrored_set(obj, elm_widget_mirrored_get(obj));
    _sizing_eval(obj);
@@ -629,5 +652,6 @@ elm_conformant_content_area_get(const Evas_Object
    if (!wd) return NULL;
    /*Finger waggle warning*/
    _elm_dangerous_call_check(__FUNCTION__);
-   return (Evas_Object *)edje_object_part_object_get(wd->base, "elm.swallow.content");
+
+   return wd->layout;
 }
Index: data/themes/widgets/conformant.edc
===================================================================
--- data/themes/widgets/conformant.edc	(revision 65385)
+++ data/themes/widgets/conformant.edc	(working copy)
@@ -38,3 +38,13 @@ group { name: "elm/conformant/base/default";
       }
    }
 }
+
+group { name: "elm/conformant/layout/content";
+   parts {
+      part { name: "elm.swallow.content";
+         type: SWALLOW;
+         description { state: "default" 0.0;
+         }
+      }
+   }
+}
