diff --cc install/static/webui.js
index a354bff,fa37bcd..0000000
--- a/install/static/webui.js
+++ b/install/static/webui.js
diff --git a/install/static/entity.js b/install/static/entity.js
index 39836fe..b3e1fa7 100644
--- a/install/static/entity.js
+++ b/install/static/entity.js
@@ -202,3 +202,51 @@ function ipa_entity_generate_views(obj_name, container, switch_view)
 
     container.append(ul);
 }
+
+function ipa_entity_quick_links(tr, attr, value, entry_attrs) {
+
+    var obj_name = tr.closest('.search-container').attr('title');
+    var pkey = ipa_objs[obj_name].primary_key;
+    var pkey_value = entry_attrs[pkey][0];
+
+    var td = $("<td/>");
+    tr.append(td);
+
+    $("<a/>", {
+        href: "#details",
+        click: function() {
+            var state = {};
+            state[obj_name+'-facet'] = 'details';
+            state[obj_name+'-pkey'] = pkey_value;
+            $.bbq.pushState(state);
+            return false;
+        }
+    }).append($('<img/>', {
+         src: obj_name+'_details.png'
+    })).appendTo(td);
+
+    var attribute_members = ipa_objs[obj_name].attribute_members;
+    for (attr_name in attribute_members) {
+        var objs = attribute_members[attr_name];
+        for (var i = 0; i < objs.length; ++i) {
+            var m = objs[i];
+
+            $("<a/>", {
+                href: '#'+m,
+                click: function(m) {
+                    return function() {
+                        var state = {};
+                        state[obj_name+'-facet'] = 'associate';
+                        state[obj_name+'-enroll'] = m;
+                        state[obj_name+'-pkey'] = pkey_value;
+                        alert(JSON.stringify(state));
+                        $.bbq.pushState(state);
+                        return false;
+                    }
+                }(m)
+            }).append($('<img/>', {
+                src: m+'_member.png'
+            })).appendTo(td);
+        }
+    }
+}
diff --git a/install/static/group.js b/install/static/group.js
index b1c0d89..4c2c5b0 100644
--- a/install/static/group.js
+++ b/install/static/group.js
@@ -24,7 +24,7 @@ ipa_entity_set_search_definition('group', [
     ['cn', 'Name', null],
     ['gidnumber', 'GID', null],
     ['description', 'Description', null],
-    ['quick_links', 'Quick Links', group_render_quick_links]
+    ['quick_links', 'Quick Links', ipa_entity_quick_links]
 ]);
 
 ipa_entity_set_add_definition('group', [
@@ -64,47 +64,3 @@ function f_posix(dlg, mode)
         return (false);
     }
 }
-
-function group_render_quick_links(tr, attr, value, entry_attrs) {
-
-    var td = $("<td/>");
-    tr.append(td);
-
-    $("<a/>", {
-        href: "jslink",
-        html: $("<img src='group_details.png' />"),
-        click: function() {
-            var state = {};
-            state['group-facet'] = 'details';
-            state['group-pkey'] = entry_attrs['cn'][0];
-            $.bbq.pushState(state);
-            return false;
-        }
-    }).appendTo(td);
-
-    $("<a/>", {
-        href: "jslink",
-        html: $("<img src='user_enroll.png' />"),
-        click: function() {
-            var state = {};
-            state['group-facet'] = 'associate';
-            state['group-enroll'] = 'user';
-            state['group-pkey'] = entry_attrs['cn'][0];
-            $.bbq.pushState(state);
-            return false;
-        }
-    }).appendTo(td);
-
-    $("<a/>", {
-        href: "jslink",
-        html: $("<img src='netgroup_member.png' />"),
-        click: function() {
-            var state = {};
-            state['group-facet'] = 'associate';
-            state['group-enroll'] = 'netgroup';
-            state['group-pkey'] = entry_attrs['cn'][0];
-            $.bbq.pushState(state);
-            return false;
-        }
-    }).appendTo(td);
-}
diff --git a/install/static/host.js b/install/static/host.js
index f59c1a3..432f2f7 100644
--- a/install/static/host.js
+++ b/install/static/host.js
@@ -24,7 +24,8 @@ ipa_entity_set_search_definition('host', [
     ['fqdn', 'Name', null],
     ['description', 'Description', null],
     ['enrolled', 'Enrolled?', null],
-    ['manages', 'Manages?', null]
+    ['manages', 'Manages?', null],
+    ['quick_links', 'Quick Links', ipa_entity_quick_links]
 ]);
 
 ipa_entity_set_add_definition('host', [
diff --git a/install/static/hostgroup.js b/install/static/hostgroup.js
index 512ebcf..e3863fe 100644
--- a/install/static/hostgroup.js
+++ b/install/static/hostgroup.js
@@ -22,7 +22,8 @@
 
 ipa_entity_set_search_definition('hostgroup', [
     ['cn', 'Name', null],
-    ['description', 'Description', null]
+    ['description', 'Description', null],
+    ['quick_links', 'Quick Links', ipa_entity_quick_links]
 ]);
 
 ipa_entity_set_add_definition('hostgroup', [
diff --git a/install/static/netgroup.js b/install/static/netgroup.js
index 625ebfd..577590a 100644
--- a/install/static/netgroup.js
+++ b/install/static/netgroup.js
@@ -22,7 +22,8 @@
 
 ipa_entity_set_search_definition('netgroup', [
     ['cn', 'Name', null],
-    ['description', 'Description', null]
+    ['description', 'Description', null],
+    ['quick_links', 'Quick Links', ipa_entity_quick_links]
 ]);
 
 ipa_entity_set_add_definition('netgroup', [
diff --git a/install/static/rolegroup.js b/install/static/rolegroup.js
index 2e52f10..0297554 100644
--- a/install/static/rolegroup.js
+++ b/install/static/rolegroup.js
@@ -23,7 +23,7 @@
 ipa_entity_set_search_definition('rolegroup', [
     ['cn', 'Role-group name', null],
     ['description', 'Description', null],
-    ['quick_links', 'Quick Links', rolegroup_render_quick_links]
+    ['quick_links', 'Quick Links', ipa_entity_quick_links]
 ]);
 
 ipa_entity_set_add_definition('rolegroup', [
@@ -39,73 +39,3 @@ ipa_entity_set_details_definition('rolegroup', [
         ['description', 'Description', null],
     ]]
 ]);
-
-function rolegroup_render_quick_links(tr, attr, value, entry_attrs) {
-
-    var td = $("<td/>");
-    tr.append(td);
-
-    $("<a/>", {
-        href: "jslink",
-        html: $("<img src='rolegroup_details.png' />"),
-        click: function() {
-            var state = {};
-            state['rolegroup-facet'] = 'details';
-            state['rolegroup-pkey'] = entry_attrs['cn'][0];
-            $.bbq.pushState(state);
-            return false;
-        }
-    }).appendTo(td);
-
-    $("<a/>", {
-        href: "jslink",
-        html: $("<img src='user_member.png' />"),
-        click: function() {
-            var state = {};
-            state['rolegroup-facet'] = 'associate';
-            state['rolegroup-enroll'] = 'user';
-            state['rolegroup-pkey'] = entry_attrs['cn'][0];
-            $.bbq.pushState(state);
-            return false;
-        }
-    }).appendTo(td);
-
-    $("<a/>", {
-        href: "jslink",
-        html: $("<img src='group_member.png' />"),
-        click: function() {
-            var state = {};
-            state['rolegroup-facet'] = 'associate';
-            state['rolegroup-enroll'] = 'group';
-            state['rolegroup-pkey'] = entry_attrs['cn'][0];
-            $.bbq.pushState(state);
-            return false;
-        }
-    }).appendTo(td);
-
-    $("<a/>", {
-        href: "jslink",
-        html: $("<img src='host_member.png' />"),
-        click: function() {
-            var state = {};
-            state['rolegroup-facet'] = 'associate';
-            state['rolegroup-enroll'] = 'host';
-            state['rolegroup-pkey'] = entry_attrs['cn'][0];
-            $.bbq.pushState(state);
-            return false;
-        }
-    }).appendTo(td);
-
-    $("<a/>", {
-        href: "jslink",
-        html: $("<img src='hostgroup_member.png' />"),
-        click: function() {
-            var state = {};
-            state['rolegroup-facet'] = 'associate';
-            state['rolegroup-enroll'] = 'hostgroup';
-            state['rolegroup-pkey'] = entry_attrs['cn'][0];
-            $.bbq.pushState(state);
-            return false;
-        }
-    }).appendTo(td);
-}
diff --git a/install/static/service.js b/install/static/service.js
index 8d8e103..c12e563 100644
--- a/install/static/service.js
+++ b/install/static/service.js
@@ -22,7 +22,7 @@
 
 ipa_entity_set_search_definition('service', [
     ['krbprincipalname', 'Principal', null],
-    ['quick_links', 'Quick Links', service_render_quick_links]
+    ['quick_links', 'Quick Links', ipa_entity_quick_links]
 ]);
 
 ipa_entity_set_add_definition('service', [
@@ -39,37 +39,6 @@ ipa_entity_set_details_definition('service', [
     ]]
 ]);
 
-function service_render_quick_links(tr, attr, value, entry_attrs) {
-
-    var td = $("<td/>");
-    tr.append(td);
-
-    $("<a/>", {
-        href: "jslink",
-        html: $("<img src='service_details.png' />"),
-        click: function() {
-            var state = {};
-            state['service-facet'] = 'details';
-            state['service-pkey'] = entry_attrs['krbprincipalname'][0];
-            $.bbq.pushState(state);
-            return false;
-        }
-    }).appendTo(td);
-
-    $("<a/>", {
-        href: "jslink",
-        html: $("<img src='host_enroll.png' />"),
-        click: function() {
-            var state = {};
-            state['service-facet'] = 'associate';
-            state['service-enroll'] = 'host';
-            state['service-pkey'] = entry_attrs['krbprincipalname'][0];
-            $.bbq.pushState(state);
-            return false;
-        }
-    }).appendTo(td);
-}
-
 function service_add_krbprincipalname(add_dialog, flag) {
     if (flag == IPA_ADD_UPDATE) {
         var service = add_dialog.find('input[name=service]').val();
diff --git a/install/static/user.js b/install/static/user.js
index 5ac7f0a..2698c8b 100644
--- a/install/static/user.js
+++ b/install/static/user.js
@@ -27,7 +27,7 @@ ipa_entity_set_search_definition('user', [
     ['mail', 'EMAIL', null],
     ['telephonenumber', 'Phone', null],
     ['title', 'Job Title', null],
-    ['quick_links', 'Quick Links', user_render_quick_links]
+    ['quick_links', 'Quick Links', ipa_entity_quick_links]
 ]);
 
 ipa_entity_set_add_definition('user', [
@@ -208,60 +208,3 @@ function a_numbers(jobj, result, mode)
 function a_manager(jobj, result, mode)
 {
 }
-
-function user_render_quick_links(tr, attr, value, entry_attrs) {
-
-    var td = $("<td/>");
-    tr.append(td);
-
-    $("<a/>", {
-        href: "jslink",
-        html: $("<img src='user_details.png' />"),
-        click: function() {
-            var state = {};
-            state['user-facet'] = 'details';
-            state['user-pkey'] = entry_attrs['uid'][0];
-            $.bbq.pushState(state);
-            return false;
-        }
-    }).appendTo(td);
-
-    $("<a/>", {
-        href: "jslink",
-        html: $("<img src='group_member.png' />"),
-        click: function() {
-            var state = {};
-            state['user-facet'] = 'associate';
-            state['user-enroll'] = 'group';
-            state['user-pkey'] = entry_attrs['uid'][0];
-            $.bbq.pushState(state);
-            return false;
-        }
-    }).appendTo(td);
-
-    $("<a/>", {
-        href: "jslink",
-        html: $("<img src='netgroup_member.png' />"),
-        click: function() {
-            var state = {};
-            state['user-facet'] = 'associate';
-            state['user-enroll'] = 'netgroup';
-            state['user-pkey'] = entry_attrs['uid'][0];
-            $.bbq.pushState(state);
-            return false;
-        }
-    }).appendTo(td);
-
-    $("<a/>", {
-        href: "jslink",
-        html: $("<img src='rolegroup_member.png' />"),
-        click: function() {
-            var state = {};
-            state['user-facet'] = 'associate';
-            state['user-enroll'] = 'role';
-            state['user-pkey'] = entry_attrs['uid'][0];
-            $.bbq.pushState(state);
-            return false;
-        }
-    }).appendTo(td);
-}
