Index: src/lib/elm_widget.h
===================================================================
--- src/lib/elm_widget.h	(리비전 72855)
+++ src/lib/elm_widget.h	(작업 사본)
@@ -521,6 +521,7 @@ typedef Eina_Bool             (*Elm_Widget_Del_Pre
 #define ELM_ACCESS_CANCEL  -2   // stop reading immediately
 
 typedef char *(*Elm_Access_Content_Cb)(void *data, Evas_Object *obj, Elm_Widget_Item *item);
+typedef void (*Elm_Access_On_Highlight_Cb)(void *data);
 
 struct _Elm_Access_Item
 {
@@ -531,9 +532,11 @@ struct _Elm_Access_Item
 
 struct _Elm_Access_Info
 {
-   Evas_Object *hoverobj;
-   Eina_List   *items;
-   Ecore_Timer *delay_timer;
+   Evas_Object               *hoverobj;
+   Eina_List                 *items;
+   Ecore_Timer               *delay_timer;
+   void                      *on_highlight_data;
+   Elm_Access_On_Highlight_Cb on_highlight;
 };
 
 EAPI void             _elm_access_clear(Elm_Access_Info *ac);
@@ -553,6 +556,8 @@ EAPI void             _elm_access_item_register(El
 EAPI Eina_Bool        _elm_access_2nd_click_timeout(Evas_Object *obj);
 EAPI void             _elm_access_highlight_set(Evas_Object* obj);
 EAPI Evas_Object *    _elm_access_edje_object_part_object_register(Evas_Object *obj, const Evas_Object *partobj, const char* part);
+EAPI void             _elm_access_widget_item_register(Elm_Widget_Item *item);
+EAPI void             _elm_access_on_highlight_hook_set(Elm_Access_Info *ac, Elm_Access_On_Highlight_Cb func, void *data);
 
 /**< put this as the first member in your widget item struct */
 #define ELM_WIDGET_ITEM       Elm_Widget_Item base
@@ -583,6 +588,7 @@ struct _Elm_Widget_Item
    Elm_Widget_Text_Get_Cb         text_get_func;
    Elm_Widget_Signal_Emit_Cb      signal_emit_func;
    Elm_Widget_Disable_Cb          disable_func;
+   Evas_Object                   *access_obj;
    Elm_Access_Info               *access;
    const char                    *access_info;
 
Index: src/lib/elm_access.c
===================================================================
--- src/lib/elm_access.c	(리비전 72855)
+++ src/lib/elm_access.c	(작업 사본)
@@ -106,6 +106,7 @@ _access_obj_over_timeout_cb(void *data)
    if (!ac) return EINA_FALSE;
    if (_elm_config->access_mode != ELM_ACCESS_MODE_OFF)
      {
+        if (ac->on_highlight) ac->on_highlight(ac->on_highlight_data);
         _elm_access_object_hilight(data);
         _elm_access_read(ac, ELM_ACCESS_CANCEL, data, NULL);
         _elm_access_read(ac, ELM_ACCESS_TYPE,   data, NULL);
@@ -279,6 +280,16 @@ _elm_access_callback_set(Elm_Access_Info *ac, int
    ai->data = data;
 }
 
+EAPI void
+_elm_access_on_highlight_hook_set(Elm_Access_Info           *ac,
+                                  Elm_Access_On_Highlight_Cb func,
+                                  void                      *data)
+{
+    if (!ac) return;
+    ac->on_highlight = func;
+    ac->on_highlight_data = data;
+}
+
 EAPI char *
 _elm_access_text_get(const Elm_Access_Info *ac, int type, Evas_Object *obj, Elm_Widget_Item *item)
 {
@@ -628,6 +639,33 @@ _access_item_del_cb(void *data, Evas *e __UNUSED__
 }
 
 EAPI void
+_elm_access_widget_item_register(Elm_Widget_Item *item)
+{
+   Evas_Object *ao;
+   Evas_Object *ho = item->view;
+   Evas_Coord x, y, w, h;
+
+   if (!item) return NULL;
+
+   // create access object
+   ao = _elm_access_add(item->widget);
+   evas_object_event_callback_add(ho, EVAS_CALLBACK_RESIZE,
+                                  _content_resize, ao);
+   evas_object_event_callback_add(ho, EVAS_CALLBACK_MOVE,
+                                  _content_move, ao);
+
+   evas_object_geometry_get(ho, &x, &y, &w, &h);
+   evas_object_move(ao, x, y);
+   evas_object_resize(ao, w, h);
+   evas_object_show(ao);
+
+   // register access object
+   _elm_access_object_register(ao, ho);
+
+   item->access_obj = ao;
+}
+
+EAPI void
 _elm_access_item_register(Elm_Widget_Item *item, Evas_Object *hoverobj)
 {
    Elm_Access_Info *ac;
Index: src/lib/elm_list.c
===================================================================
--- src/lib/elm_list.c	(리비전 72855)
+++ src/lib/elm_list.c	(작업 사본)
@@ -1179,6 +1179,39 @@ _item_del_pre_hook(Elm_Object_Item *it)
    return EINA_TRUE;
 }
 
+static char *
+_access_info_cb(void *data, Evas_Object *obj __UNUSED__, Elm_Widget_Item *item __UNUSED__)
+{
+   const char *txt = NULL;
+   Elm_List_Item *it = (Elm_List_Item *)data;
+   if (!it) return NULL;
+
+   if (!txt) txt = it->label;
+   if (txt) return strdup(txt);
+   return NULL;
+}
+
+static char *
+_access_state_cb(void *data, Evas_Object *obj __UNUSED__, Elm_Widget_Item *item __UNUSED__)
+{
+   Elm_List_Item *it = (Elm_List_Item *)data;
+   if (!it) return NULL;
+
+   if (it->base.disabled)
+      return strdup(E_("State: Disabled"));
+
+   return NULL;
+}
+
+static void
+_access_on_highlight_cb(void *data)
+{
+   Elm_Object_Item *it = (Elm_Object_Item *)data;
+   if (!it) return;
+
+   elm_list_item_bring_in(it);
+}
+
 static Elm_List_Item *
 _item_new(Evas_Object *obj, const char *label, Evas_Object *icon, Evas_Object *end, Evas_Smart_Cb func, const void *data)
 {
@@ -1194,6 +1227,21 @@ _item_new(Evas_Object *obj, const char *label, Eva
    it->func = func;
    it->base.data = data;
    VIEW(it) = edje_object_add(evas_object_evas_get(obj));
+
+   // ACCESS
+   _elm_access_widget_item_register((Elm_Widget_Item *)it);
+
+   _elm_access_text_set(_elm_access_object_get(it->base.access_obj),
+                        ELM_ACCESS_TYPE, E_("List Item"));
+   _elm_access_callback_set(_elm_access_object_get(it->base.access_obj),
+                            ELM_ACCESS_INFO,
+                            _access_info_cb, it);
+   _elm_access_callback_set(_elm_access_object_get(it->base.access_obj),
+                            ELM_ACCESS_STATE,
+                            _access_state_cb, it);
+   _elm_access_on_highlight_hook_set(_elm_access_object_get(it->base.access_obj),
+                                     _access_on_highlight_cb, it);
+
    edje_object_mirrored_set(VIEW(it), elm_widget_mirrored_get(obj));
    evas_object_event_callback_add(VIEW(it), EVAS_CALLBACK_MOUSE_DOWN,
                                   _mouse_down, it);
@@ -1469,6 +1517,29 @@ _resize(void *data, Evas *e __UNUSED__, Evas_Objec
    _sizing_eval(data);
 }
 
+static Eina_Bool
+_focus_next_hook(const Evas_Object *obj,
+                 Elm_Focus_Direction dir,
+                 Evas_Object **next)
+{
+   ELM_CHECK_WIDTYPE(obj, widtype) EINA_FALSE;
+   Widget_Data *wd = elm_widget_data_get(obj);
+   if (!wd) return EINA_FALSE;
+
+   Eina_List *items = NULL;
+   Eina_List *elist = NULL;
+   Elm_List_Item *it;
+   EINA_LIST_FOREACH(wd->items, elist, it)
+     {
+        items = eina_list_append(items, it->base.access_obj);
+        if (it->icon) items = eina_list_append(items, it->icon);
+        if (it->end) items = eina_list_append(items, it->end);
+     }
+
+   return elm_widget_focus_list_next_get
+            (obj, items, eina_list_data_get, dir, next);
+}
+
 EAPI Evas_Object *
 elm_list_add(Evas_Object *parent)
 {
@@ -1483,6 +1554,11 @@ elm_list_add(Evas_Object *parent)
    elm_widget_type_set(obj, "list");
    elm_widget_sub_object_add(parent, obj);
    elm_widget_on_focus_hook_set(obj, _on_focus_hook, NULL);
+
+   // TODO: dynamic setting should be exist.
+   if (_elm_config->access_mode == ELM_ACCESS_MODE_ON)
+     elm_widget_focus_next_hook_set(obj, _focus_next_hook);
+
    elm_widget_data_set(obj, wd);
    elm_widget_del_pre_hook_set(obj, _del_pre_hook);
    elm_widget_del_hook_set(obj, _del_hook);
