diff --git a/install/ui/entity.js b/install/ui/entity.js
index 7545c8a..c82f4a8 100644
--- a/install/ui/entity.js
+++ b/install/ui/entity.js
@@ -198,7 +198,7 @@ IPA.facet_header = function(spec) {
                 breadcrumb.unshift($('<a/>', {
                     'class': 'breadcrumb-element',
                     text: IPA.nav.get_state(entity.name+'-pkey'),
-                    title: entity.title,
+                    title: entity.metadata.label_singular,
                     click: function(entity) {
                         return function() {
                             IPA.nav.show_page(entity.name, 'default');
@@ -471,7 +471,7 @@ IPA.entity = function (spec) {
 
     that.get_containing_entity = function() {
         return that.containing_entity ?
-        IPA.get_entity(that.containing_entity) : null;
+                IPA.get_entity(that.containing_entity) : null;
     };
 
     that.get_dialog = function(name) {
@@ -835,8 +835,15 @@ IPA.entity_builder = function(){
                 var other_entity = other_entities[j];
                 var association_name = attribute_member+'_'+other_entity;
 
+                //already prepared facet
                 var facet = get_spec_by_name(entity.facet_specs, association_name);
-                if (facet) continue;
+                //already prepared direct facet for indirect facet
+                var direct_facet = get_direct_facet(entity.facet_specs,
+                                                    attribute_member,
+                                                    other_entity);
+                if (facet || direct_facet) {
+                    continue; //in both cases don't prepare new facet
+                }
 
                 var tmp_spec = $.extend({}, spec);
                 tmp_spec.name = association_name;
@@ -860,6 +867,22 @@ IPA.entity_builder = function(){
         return null;
     }
 
+    /*
+     * If it's an indirect attribute member, return its direct facets spec
+     * if it exists.
+     */
+    function get_direct_facet(facets, attribute_member, other_entity) {
+
+        var index = attribute_member.indexOf('indirect');
+        if(index > -1) {
+            var direct_attribute_member = attribute_member.substring(0, index);
+            return get_spec_by_name(facets,
+                                    direct_attribute_member+'_'+other_entity);
+        }
+
+        return null;
+    }
+
     function add_redirect_info(facet_name){
         if (!entity.redirect_facet){
             entity.redirect_facet = 'search';
@@ -924,6 +947,15 @@ IPA.facet_builder = function(entity) {
 
     var that = {};
 
+    that.prepare_methods = {};
+
+    function init() {
+        that.prepare_methods.search = that.prepare_search_spec;
+        that.prepare_methods.nested_search = that.prepare_nested_search_spec;
+        that.prepare_methods.details = that.prepare_details_spec;
+        that.prepare_methods.association = that.prepare_association_spec;
+    }
+
     that.build_facets = function() {
 
         if(entity.facet_specs && entity.facet_specs.length) {
@@ -941,12 +973,10 @@ IPA.facet_builder = function(entity) {
         //do common logic
         spec.entity = entity;
 
-
         //prepare spec based on type
-        var prepare_method_name = 'prepare_'+type+'_spec';
-        if(that[prepare_method_name] &&
-                typeof that[prepare_method_name] === 'function') {
-            that[prepare_method_name](spec);
+        var prepare_method = that.prepare_methods[type];
+        if(prepare_method) {
+            prepare_method.call(that, spec);
         }
 
         //add facet
@@ -995,9 +1025,9 @@ IPA.facet_builder = function(entity) {
 
         var index = spec.name.indexOf('_');
         spec.attribute_member = spec.attribute_member ||
-        spec.name.substring(0, index);
+            spec.name.substring(0, index);
         spec.other_entity = spec.other_entity ||
-        spec.name.substring(index+1);
+            spec.name.substring(index+1);
 
         spec.add_title = IPA.messages.association.add[spec.attribute_member];
         spec.remove_title = IPA.messages.association.remove[spec.attribute_member];
@@ -1037,6 +1067,8 @@ IPA.facet_builder = function(entity) {
         return false;
     };
 
+    init();
+
     return that;
 };
 
diff --git a/install/ui/search.js b/install/ui/search.js
index fe84c2e..83b9105 100644
--- a/install/ui/search.js
+++ b/install/ui/search.js
@@ -100,9 +100,6 @@ IPA.search_facet = function(spec) {
     }
 
     that.create_content = function(container) {
-        /*should be in the initialize section, but can not, due to
-          get_entity circular references.*/
-        initialize_table_columns();
         that.table.create(container);
     };
 
@@ -292,6 +289,9 @@ IPA.search_facet = function(spec) {
     // methods that should be invoked by subclasses
     that.search_facet_create_content = that.create_content;
 
+    //initialization
+    initialize_table_columns();
+
     return that;
 };
 
