diff --git a/modules/block.skinr.inc b/modules/block.skinr.inc
index 6081eca6758f6b139ab2a26f29f1a8b3f737ae56..9343691de72f54219fe96f392bc00b27411e8412 100644
--- a/modules/block.skinr.inc
+++ b/modules/block.skinr.inc
@@ -50,6 +50,19 @@ function block_skinr_ui_element_options($theme_name = NULL) {
 }
 
 /**
+ * Implements hook_skinr_ui_element_title().
+ */
+function block_skinr_ui_element_title($module, $element, $theme_name) {
+  if ($module == 'block') {
+    //list($module, $delta) = explode('__', $element, 2);
+    $blocks = _block_skinr_load_blocks($theme_name);
+    if (!empty($blocks[$element]->info)) {
+      return $blocks[$element]->info;
+    }
+  }
+}
+
+/**
  * Returns a list of enabled blocks for a given theme.
  *
  * Based on _block_rehash(), but without the blocks table rebuild part.
diff --git a/modules/comment.skinr.inc b/modules/comment.skinr.inc
index 5b49cd8d45d47d1f0b421c5318bf5376db330688..f70bcfe521aecbc6d285caaf33ce0644dbbbd32f 100644
--- a/modules/comment.skinr.inc
+++ b/modules/comment.skinr.inc
@@ -27,6 +27,16 @@ function comment_skinr_ui_element_options($theme_name = NULL) {
 }
 
 /**
+ * Implements hook_skinr_ui_element_title().
+ */
+function comment_skinr_ui_element_title($module, $element, $theme_name) {
+  if ($module == 'comment') {
+    $type = node_type_get_type($element);
+    return $type->name;
+  }
+}
+
+/**
  * Implements hook_skinr_theme_hooks().
  */
 function comment_skinr_theme_hooks($module, $element) {
diff --git a/modules/node.skinr.inc b/modules/node.skinr.inc
index c22f297043efb8fac647a7549091f28f4a13a7a7..2c714a3112d0c497dd4cd298f95467fb91254b18 100644
--- a/modules/node.skinr.inc
+++ b/modules/node.skinr.inc
@@ -27,6 +27,16 @@ function node_skinr_ui_element_options($theme_name = NULL) {
 }
 
 /**
+ * Implements hook_skinr_ui_element_title().
+ */
+function node_skinr_ui_element_title($module, $element, $theme_name) {
+  if ($module == 'node') {
+    $type = node_type_get_type($element);
+    return $type->name;
+  }
+}
+
+/**
  * Implements hook_skinr_theme_hooks().
  */
 function node_skinr_theme_hooks($module, $element) {
diff --git a/modules/system.skinr.inc b/modules/system.skinr.inc
index 39caa340f24616165f9422b9d23ff80b10daaba6..b637c4bb7d58d408fa4833270bc6b245f306e8ce 100644
--- a/modules/system.skinr.inc
+++ b/modules/system.skinr.inc
@@ -36,6 +36,23 @@ function system_skinr_ui_element_options($theme_name = NULL) {
 }
 
 /**
+ * Implements hook_skinr_ui_element_title().
+ */
+function system_skinr_ui_element_title($module, $element, $theme_name) {
+  if ($module == 'system') {
+    $regions = system_region_list($theme_name);
+
+    $title = t('Page');
+    if (strpos($element, 'region') === 0) {
+      // Strip the region__ part off the region name.
+      $region = substr($theme_hooks[0], 8);
+      $title = t('Region %region', array('%region' => isset($regions[$region]) ? $regions[$region] : $region));
+    }
+    return $title;
+  }
+}
+
+/**
  * Implements hook_skinr_theme_hooks().
  */
 function system_skinr_theme_hooks($module, $element) {
diff --git a/modules/views.skinr.inc b/modules/views.skinr.inc
index 2bff085d9d0532614bb57dd5b94bb81b31ec76be..be5dbb8f7afd9325d71ecc71ff7a0ef0ada9b79e 100644
--- a/modules/views.skinr.inc
+++ b/modules/views.skinr.inc
@@ -33,6 +33,20 @@ function views_skinr_ui_element_options($theme_name = NULL) {
 }
 
 /**
+ * Implements hook_skinr_ui_element_title().
+ */
+function views_skinr_ui_element_title($module, $element, $theme_name) {
+  if ($module == 'views') {
+    list($name, $display_id) = explode('__', $element, 2);
+    if ($view = views_get_view($name)) {
+      if ($view->set_display($display_id)) {
+        return $view->get_title();
+      }
+    }
+  }
+}
+
+/**
  * Implements hook_skinr_theme_hooks().
  */
 function views_skinr_theme_hooks($module, $element) {
diff --git a/skinr_context/skinr_context_ui.module b/skinr_context/skinr_context_ui.module
index 00caa554a39ef1300dfa79597ead8b0fa981f093..9bbff91bfe51d34f271ce77eb049574c478eb9bf 100644
--- a/skinr_context/skinr_context_ui.module
+++ b/skinr_context/skinr_context_ui.module
@@ -744,7 +744,7 @@ function skinr_context_ui_skin_list_subform() {
     'theme' => array('data' => t('Theme'), 'field' => 's.theme'),
     'type' => array('data' => t('Type'), 'field' => 's.module'),
     'group' => array('data' => t('Group'), 'field' => 'gs.gid'),
-    'element' => array('data' => t('Element ID'), 'field' => 's.element'),
+    'element' => array('data' => t('Element'), 'field' => 's.element'),
     'skin' => array('data' => t('Skin'), 'field' => 's.skin'),
     'status' => array('data' => t('Status'), 'field' => 's.status'),
     'operations' => array('data' => t('Operations')),
@@ -786,12 +786,14 @@ function skinr_context_ui_skin_list_subform() {
         'query' => $destination,
       ),
     );
+
     $group = skinr_context_group_load($skin->gid);
+    $title = reset(skinr_invoke_all('skinr_ui_element_title', $skin->module, $skin->element, $skin->theme));
     $options[$skin->sid] = array(
       'theme' => isset($themes[$skin->theme]) ? $themes[$skin->theme]->info['name'] : '<em>' . $skin->theme . '</em>',
       'type' => $skin->module,
       'group' => t('@group [gid: !gid]', array('@group' => $group->title, '!gid' => $group->gid)),
-      'element' => $skin->element,
+      'element' => $title ? $title : $skin->element,
       'skin' => $skin->skin == '_additional' ? '<em>' . t('Additional classes') . '</em>' : (isset($skin_info[$skin->skin]) ? $skin_info[$skin->skin]['title'] : '<em>' . $skin->skin . '</em>'),
       'status' => $skin->status ? t('enabled') : t('disabled'),
       'operations' => array(
diff --git a/skinr_context/tests/skinr_context.test b/skinr_context/tests/skinr_context.test
index 94ccf22244ac38025cfb61d628a8ec64d5f52896..2662753fa6bd4406a4816cf9c0ff2216c60e069e 100644
--- a/skinr_context/tests/skinr_context.test
+++ b/skinr_context/tests/skinr_context.test
@@ -152,7 +152,7 @@ class SkinrContextDisplayTestCase extends SkinrWebTestCase {
 
   public static function getInfo() {
     return array(
-      'name' => 'Display',
+      'name' => 'Context Display',
       'description' => 'Tests if applied skins appear on the front-end.',
       'dependencies' => array('ctools', 'context'),
       'group' => 'Skinr',
diff --git a/skinr_panels/skinr_panels.skinr.inc b/skinr_panels/skinr_panels.skinr.inc
index a177f4c583caba083ccacce6835d05fc9c924fe0..7cdc546e50e846d561a2cda0638bce767a6d9c04 100644
--- a/skinr_panels/skinr_panels.skinr.inc
+++ b/skinr_panels/skinr_panels.skinr.inc
@@ -143,6 +143,38 @@ function skinr_panels_skinr_ui_element_options($theme_name = NULL) {
 }
 
 /**
+ * Implements hook_skinr_ui_element_title().
+ */
+function skinr_panels_skinr_ui_element_title($module, $element, $theme_name) {
+  if ($module == 'panels') {
+    list($hook, $did, $pid) = explode('__', $element);
+    if ($display = panels_load_display($did)) {
+      $title = $display->title;
+      if (!$title && module_exists('panels_node')) {
+        $nid = db_query("SELECT nid FROM {panels_node} WHERE did = :did", array(
+          ':did' => $did,
+        ))->fetchField();
+        if ($node = node_load($nid)) {
+          $title = $node->title;
+        }
+      }
+      return t('Pane %pane on %panel', array('%panel' => $title ? $title : t('display !did', array('!did' => $did)), '%pane' => $pid));
+    }
+  }
+}
+
+function _skinr_panels_type($did) {
+  if (module_exists('panels_node')) {
+    $query = db_query("SELECT nid FROM {panels_node} WHERE did = :did", array(
+      ':did' => $did,
+    ));
+    if ($query->countQuery()->execute()->fetchField()) {
+      $type = 'node';
+    }
+  }
+}
+
+/**
  * Implements hook_skinr_theme_hooks().
  */
 function skinr_panels_skinr_theme_hooks($module, $element) {
diff --git a/skinr_panels/tests/skinr_panels.test b/skinr_panels/tests/skinr_panels.test
index 722417c0e2ae6821190bbe758cba26cc970aa64f..c540842b8e51ba86e2ad37a079001aea19371e52 100644
--- a/skinr_panels/tests/skinr_panels.test
+++ b/skinr_panels/tests/skinr_panels.test
@@ -19,7 +19,7 @@ class SkinrPanelsTestCase extends DrupalWebTestCase {
   }
 
   function setUp() {
-    parent::setUp(array('block', 'page_manager', 'panels_node', 'panels_mini', 'skinr_panels_test'));
+    parent::setUp(array('block', 'page_manager', 'panels_node', 'panels_mini', 'skinr_panels_test', 'skinr_ui_test'));
 
     $this->admin_user = $this->drupalCreateUser(array(
       'administer blocks',
@@ -174,5 +174,20 @@ class SkinrPanelsTestCase extends DrupalWebTestCase {
     // Make sure this panel's options are returned.
     $this->drupalGet('admin/structure/skinr/add');
     $this->assertOptionExists('element', 'pane__1__1', 'Panel pane was returned by panels_skinr_ui_element_options().');
+
+    // Test the returned element title.
+    $skin = (object) array(
+      'theme' => $default_theme,
+      'module' => 'panels',
+      'element' => 'pane__2__2',
+      'skin' => 'skinr_ui_test_bgcolor',
+      'options' => array('bgcolor_red'),
+      'status' => 1,
+    );
+    skinr_skin_save($skin);
+
+    $title = reset(skinr_invoke_all('skinr_ui_element_title', $skin->module, $skin->element, $skin->theme));
+    $this->verbose($title);
+    $this->assertEqual($title, 'Pane <em class="placeholder">2</em> on <em class="placeholder">Panels test page</em>', 'Panel title was returned.');
   }
 }
diff --git a/skinr_panels/tests/skinr_panels_test/pages_default/skinr_panels_test.inc b/skinr_panels/tests/skinr_panels_test/pages_default/skinr_panels_test.inc
index 9483104ab91c6761cf67bc761570c787ef60cb7e..f60c32ec4c79ebf1573333b360045daf96bf4656 100644
--- a/skinr_panels/tests/skinr_panels_test/pages_default/skinr_panels_test.inc
+++ b/skinr_panels/tests/skinr_panels_test/pages_default/skinr_panels_test.inc
@@ -42,7 +42,7 @@ $display->panel_settings = array(
   ),
 );
 $display->cache = array();
-$display->title = '';
+$display->title = 'Panels test page';
 $display->content = array();
 $display->panels = array();
   $pane = new stdClass;
diff --git a/skinr_ui.admin.inc b/skinr_ui.admin.inc
index ce10de3a6835df5862ac4eb0aea07bd6fe574bf8..902ecc4e7b4ee3a66c7fb2478c65807af0082bd8 100644
--- a/skinr_ui.admin.inc
+++ b/skinr_ui.admin.inc
@@ -400,7 +400,7 @@ function skinr_ui_admin_skins() {
   $header = array(
     'theme' => array('data' => t('Theme'), 'field' => 's.theme'),
     'type' => array('data' => t('Type'), 'field' => 's.module'),
-    'element' => array('data' => t('Element ID'), 'field' => 's.element'),
+    'element' => array('data' => t('Element'), 'field' => 's.element'),
     'skin' => array('data' => t('Skin'), 'field' => 's.skin'),
     'status' => array('data' => t('Status'), 'field' => 's.status'),
     'operations' => array('data' => t('Operations')),
@@ -441,10 +441,12 @@ function skinr_ui_admin_skins() {
         'query' => $destination,
       ),
     );
+
+    $title = reset(skinr_invoke_all('skinr_ui_element_title', $skin->module, $skin->element, $skin->theme));
     $options[$skin->sid] = array(
       'theme' => isset($themes[$skin->theme]) ? $themes[$skin->theme]->info['name'] : '<em>' . $skin->theme . '</em>',
       'type' => $skin->module,
-      'element' => $skin->element,
+      'element' => $title ? $title : $skin->element,
       'skin' => $skin->skin == '_additional' ? '<em>' . t('Additional classes') . '</em>' : (isset($skin_info[$skin->skin]) ? $skin_info[$skin->skin]['title'] : '<em>' . $skin->skin . '</em>'),
       'status' => $skin->status ? t('enabled') : t('disabled'),
       'operations' => array(
diff --git a/skinr_ui.api.php b/skinr_ui.api.php
index 59b1a2dab6346a79b9cc89d6d27cf29f973b36ed..3eac6f18b6829ced00058729fb0e64ddbb3e00db 100644
--- a/skinr_ui.api.php
+++ b/skinr_ui.api.php
@@ -25,7 +25,8 @@
  * These options are used on the 'add skin' form.
  *
  * @param $theme_name
- *   The name of the theme to provide available options for.
+ *   (optional) The name of the theme to provide available options for. If no
+ *   theme is given, the current theme is used.
  *
  * @return
  *   An array consting of arrays of element options, keyed by the implementing
@@ -44,5 +45,28 @@ function hook_skinr_ui_element_options($theme_name = NULL) {
 }
 
 /**
+ * Returns the human readable title for a given element.
+ *
+ * @param $module
+ *   The module implementing given element.
+ * @param $element
+ *   An element.
+ * @param $theme_name
+ *   The name of the theme.
+ *
+ * @return
+ *   A string containing the element's title in human readable form.
+ *
+ * @see skinr_ui_admin_skins()
+ * @see skinr_context_ui_skin_list_subform()
+ */
+function hook_skinr_ui_element_title($module, $element, $theme_name) {
+  if ($module == 'node') {
+    $type = node_type_get_type($element);
+    return $type->name;
+  }
+}
+
+/**
  * @}
  */
diff --git a/skinr_ui.module b/skinr_ui.module
index 5452a9cd2c83c935caa1c5c3e2f6b527c5c64593..24183851cb800a8e325bc9e508ec8a0259224993 100644
--- a/skinr_ui.module
+++ b/skinr_ui.module
@@ -11,6 +11,7 @@
 function skinr_ui_hook_info() {
   $hooks = array(
     'skinr_ui_element_options',
+    'skinr_ui_element_title',
   );
   $hooks = array_fill_keys($hooks, array(
     'group' => 'skinr',
diff --git a/tests/skinr_ui.test b/tests/skinr_ui.test
index 8b5a8187012fdba5800a6333a5a8059616546ce5..ca774645ab806058a9ef50a65cc0726c7d1aa41d 100644
--- a/tests/skinr_ui.test
+++ b/tests/skinr_ui.test
@@ -303,7 +303,7 @@ class SkinrUIAdminTestCase extends SkinrUITestCase {
     $skin = (object) array(
       'theme' => 'skinr_test_subtheme',
       'module' => 'block',
-      'element' => 'system-user-menu',
+      'element' => 'system__user-menu',
       'skin' => 'skinr_test_subtheme',
       'options' => array('option1', 'option2'),
       'status' => 1,
@@ -319,7 +319,7 @@ class SkinrUIAdminTestCase extends SkinrUITestCase {
     // Load an uncached version of the skin configuration object.
     $skin = skinr_skin_load_unchanged($skin->sid);
     $this->assertFalse($skin->status, 'Status was disabled successfully.');
-    $this->assertEqual($skin->element, 'system-user-menu', 'Only status was updated, even though the object was modified before updating status.');
+    $this->assertEqual($skin->element, 'system__user-menu', 'Only status was updated, even though the object was modified before updating status.');
 
     // Enable the skin configuration.
     $this->drupalGet('admin/structure/skinr');
@@ -378,7 +378,7 @@ class SkinrUIPluginTestCase extends DrupalWebTestCase {
   }
 
   function setUp() {
-    parent::setUp(array('block', 'comment', 'node', 'skinr_ui'));
+    parent::setUp(array('block', 'comment', 'node', 'skinr_ui', 'skinr_test'));
 
     $this->admin_user = $this->drupalCreateUser(array(
       'administer blocks',
@@ -442,12 +442,28 @@ class SkinrUIPluginTestCase extends DrupalWebTestCase {
     // Make sure this block's options are returned.
     $this->drupalGet('admin/structure/skinr/add');
     $this->assertOptionExists('element', 'system__user-menu', 'User menu block was returned by block_skinr_ui_element_options().');
+
+    // Test the returned element title.
+    $skin = (object) array(
+      'theme' => $default_theme,
+      'module' => 'block',
+      'element' => 'system__user-menu',
+      'skin' => 'skinr_ui_test_bgcolor',
+      'options' => array('bgcolor_red'),
+      'status' => 1,
+    );
+    skinr_skin_save($skin);
+
+    $title = reset(skinr_invoke_all('skinr_ui_element_title', $skin->module, $skin->element, $skin->theme));
+    $this->assertTrue($title == 'User menu', 'Block title was returned.');
   }
 
   /**
    * Tests comment plugin.
    */
   function testComment() {
+    $default_theme = variable_get('theme_default', 'bartik');
+
     // Create a node.
     $node1 = $this->drupalCreateNode(array('type' => 'article'));
 
@@ -468,12 +484,28 @@ class SkinrUIPluginTestCase extends DrupalWebTestCase {
     // Make sure this block's options are returned.
     $this->drupalGet('admin/structure/skinr/add');
     $this->assertOptionExists('element', 'article', 'Node type was returned by node_skinr_ui_element_options().');
+
+    // Test the returned element title.
+    $skin = (object) array(
+      'theme' => $default_theme,
+      'module' => 'comment',
+      'element' => 'article',
+      'skin' => 'skinr_ui_test_bgcolor',
+      'options' => array('bgcolor_red'),
+      'status' => 1,
+    );
+    skinr_skin_save($skin);
+
+    $title = reset(skinr_invoke_all('skinr_ui_element_title', $skin->module, $skin->element, $skin->theme));
+    $this->assertEqual($title, 'Article', 'Node type title was returned.');
   }
 
   /**
    * Tests node plugin.
    */
   function testNode() {
+    $default_theme = variable_get('theme_default', 'bartik');
+
     // Create a node.
     $node = $this->drupalCreateNode(array('type' => 'article'));
 
@@ -487,6 +519,20 @@ class SkinrUIPluginTestCase extends DrupalWebTestCase {
     // Make sure this block's options are returned.
     $this->drupalGet('admin/structure/skinr/add');
     $this->assertOptionExists('element', 'article', 'Node type was returned by node_skinr_ui_element_options().');
+
+    // Test the returned element title.
+    $skin = (object) array(
+      'theme' => $default_theme,
+      'module' => 'node',
+      'element' => 'article',
+      'skin' => 'skinr_ui_test_bgcolor',
+      'options' => array('bgcolor_red'),
+      'status' => 1,
+    );
+    skinr_skin_save($skin);
+
+    $title = reset(skinr_invoke_all('skinr_ui_element_title', $skin->module, $skin->element, $skin->theme));
+    $this->assertEqual($title, 'Article', 'Node type title was returned.');
   }
 
   /**
@@ -549,6 +595,8 @@ class SkinrUIPluginViewsTestCase extends DrupalWebTestCase {
    * Tests views plugin.
    */
   function testViews() {
+    $default_theme = variable_get('theme_default', 'bartik');
+
     // Go to the view's page.
     $this->drupalGet('skinr-ui-test-view');
 
@@ -559,5 +607,19 @@ class SkinrUIPluginViewsTestCase extends DrupalWebTestCase {
     $this->drupalGet('admin/structure/skinr/add');
     $this->assertOptionExists('element', 'skinr_ui_test__default', 'Default display for our view was returned by views_skinr_ui_element_options().');
     $this->assertOptionExists('element', 'skinr_ui_test__page', 'Page display for our view was returned by views_skinr_ui_element_options().');
+
+    // Test the returned element title.
+    $skin = (object) array(
+      'theme' => $default_theme,
+      'module' => 'views',
+      'element' => 'skinr_ui_test__page',
+      'skin' => 'skinr_ui_test_bgcolor',
+      'options' => array('bgcolor_red'),
+      'status' => 1,
+    );
+    skinr_skin_save($skin);
+
+    $title = reset(skinr_invoke_all('skinr_ui_element_title', $skin->module, $skin->element, $skin->theme));
+    $this->assertEqual($title, 'Skinr UI Test', 'View title was returned.');
   }
 }
