diff --git a/dashboardv2/public/js/router/Router.js b/dashboardv2/public/js/router/Router.js
index 8a1d241..f705843 100644
--- a/dashboardv2/public/js/router/Router.js
+++ b/dashboardv2/public/js/router/Router.js
@@ -53,6 +53,10 @@
                 'enumDefCollection': this.enumDefCollection,
                 'classificationDefCollection': this.classificationDefCollection
             }
+            this.filterObj = {
+                'tagFilters': JSON.parse(Utils.localStorage.getValue('tagFilters')),
+                'entityFilters': JSON.parse(Utils.localStorage.getValue('entityFilters'))
+            }
         },
         bindCommonEvents: function() {
             var that = this;
@@ -125,6 +129,7 @@
                         App.rSideNav.show(new SideNavLayoutView(
                             _.extend({
                                 'url': url,
+                                'filterObj': that.filterObj
                             }, that.preFetchedCollectionLists)
                         ));
                     } else {
@@ -156,7 +161,7 @@
                     App.rNHeader.show(new Header());
                     if (!App.rSideNav.currentView) {
                         App.rSideNav.show(new SideNavLayoutView(
-                            _.extend({}, that.preFetchedCollectionLists)
+                            _.extend({ 'filterObj': that.filterObj }, that.preFetchedCollectionLists)
                         ));
                     } else {
                         App.rSideNav.currentView.selectTab();
@@ -193,7 +198,8 @@
                     }
                     App.rSideNav.show(new SideNavLayoutView(
                         _.extend({
-                            'tag': tagName
+                            'tag': tagName,
+                            'filterObj': that.filterObj
                         }, that.preFetchedCollectionLists)
                     ));
                 } else {
@@ -231,17 +237,13 @@
                 'views/business_catalog/SideNavLayoutView',
                 'views/search/SearchDetailLayoutView',
             ], function(Header, BusinessCatalogLayoutView, SideNavLayoutView, SearchDetailLayoutView) {
-                var paramObj = Utils.getUrlState.getQueryParams(),
-                    filterObj = {
-                        'tagFilters': JSON.parse(Utils.localStorage.getValue('tagFilters')),
-                        'entityFilters': JSON.parse(Utils.localStorage.getValue('entityFilters'))
-                    }
+                var paramObj = Utils.getUrlState.getQueryParams();
                 App.rNHeader.show(new Header());
                 if (!App.rSideNav.currentView) {
                     App.rSideNav.show(new SideNavLayoutView(
                         _.extend({
                             'searchVent': that.searchVent,
-                            'filterObj': filterObj
+                            'filterObj': that.filterObj
                         }, that.preFetchedCollectionLists)
                     ));
                 } else {
@@ -257,7 +259,7 @@
                         _.extend({
                             'value': paramObj,
                             'initialView': true,
-                            'filterObj': filterObj,
+                            'filterObj': that.filterObj,
                             'searchVent': that.searchVent
                         }, that.preFetchedCollectionLists)
                     ));
@@ -276,10 +278,7 @@
                 'views/search/SearchDetailLayoutView'
             ], function(Header, BusinessCatalogLayoutView, SideNavLayoutView, SearchDetailLayoutView) {
                 var paramObj = Utils.getUrlState.getQueryParams(),
-                    filterObj = {
-                        'tagFilters': JSON.parse(Utils.localStorage.getValue('tagFilters')),
-                        'entityFilters': JSON.parse(Utils.localStorage.getValue('entityFilters'))
-                    }
+                    filterObj = that.filterObj
                 if (paramObj && paramObj.searchType === "basic") {
                     if (paramObj.type) {
                         if (_.has(filterObj.entityFilters, paramObj.type)) {
@@ -310,7 +309,7 @@
                         _.extend({
                             'value': paramObj,
                             'searchVent': that.searchVent,
-                            'filterObj': filterObj
+                            'filterObj': that.filterObj
                         }, that.preFetchedCollectionLists)
                     ));
                 } else {
@@ -321,7 +320,7 @@
                     _.extend({
                         'value': paramObj,
                         'searchVent': that.searchVent,
-                        'filterObj': filterObj,
+                        'filterObj': that.filterObj,
                         'initialView': (paramObj.type || (paramObj.dslChecked == "true" ? "" : paramObj.tag) || (paramObj.query ? paramObj.query.trim() : "")).length === 0
                     }, that.preFetchedCollectionLists)
                 ));
@@ -342,4 +341,4 @@
         }
     });
     return AppRouter;
-});
+});
\ No newline at end of file
diff --git a/dashboardv2/public/js/views/business_catalog/SideNavLayoutView.js b/dashboardv2/public/js/views/business_catalog/SideNavLayoutView.js
index 013c72e..8f41399 100644
--- a/dashboardv2/public/js/views/business_catalog/SideNavLayoutView.js
+++ b/dashboardv2/public/js/views/business_catalog/SideNavLayoutView.js
@@ -96,6 +96,8 @@
                 that.RTagLayoutView.show(new TagLayoutView({
                     collection: that.classificationDefCollection,
                     tag: that.tag,
+                    value: that.value,
+                    filterObj: that.filterObj,
                     typeHeaders: that.typeHeaders
                 }));
             });
@@ -128,4 +130,4 @@
         },
     });
     return SideNavLayoutView;
-});
+});
\ No newline at end of file
diff --git a/dashboardv2/public/js/views/search/QueryBuilderView.js b/dashboardv2/public/js/views/search/QueryBuilderView.js
index 468a2d7..ec20734 100644
--- a/dashboardv2/public/js/views/search/QueryBuilderView.js
+++ b/dashboardv2/public/js/views/search/QueryBuilderView.js
@@ -138,13 +138,27 @@
                         }
                     }
                 }
-
                 _.each(this.attrObj, function(obj) {
                     var returnObj = that.getObjDef(obj, rules_widgets);
                     if (returnObj) {
                         filters.push(returnObj);
                     }
                 });
+                filters = _.uniq(filters, 'id');
+                if (rules_widgets) {
+                    for (var i = 0; i < rules_widgets.rules.length; i++) {
+                        if (!_.find(filters, { id: rules_widgets.rules[i].id })) {
+                            var type = (this.tag ? 'tagFilters' : 'entityFilters');
+                            var list = JSON.parse(Utils.localStorage.getValue(type));
+                            delete list[this.value.tag];
+                            list = _.isEmpty(list) ? null : list;
+                            Utils.localStorage.setValue(type, JSON.stringify(list));
+                            this.filterObj[type] = list;
+                            rules_widgets = null;
+                            break;
+                        }
+                    }
+                }
                 if (filters && !_.isEmpty(filters)) {
                     this.ui.builder.queryBuilder({
                         plugins: ['bt-tooltip-errors'],
@@ -178,4 +192,4 @@
             }
         });
     return QueryBuilderView;
-});
+});
\ No newline at end of file
diff --git a/dashboardv2/public/js/views/search/SearchLayoutView.js b/dashboardv2/public/js/views/search/SearchLayoutView.js
index cb8844d..76d6f77 100644
--- a/dashboardv2/public/js/views/search/SearchLayoutView.js
+++ b/dashboardv2/public/js/views/search/SearchLayoutView.js
@@ -282,32 +282,36 @@
                 var filtertype = this.attrModal.tag ? 'tagFilters' : 'entityFilters',
                     rule = this.attrModal.RQueryBuilder.currentView.ui.builder.queryBuilder('getRules'),
                     result = this.getQueryBuilderParsData(rule);
-                if (result && !_.isEmpty(result.criterion)) {
-                    this.query[this.type][filtertype] = +new Date();
-                    if (result) {
-                        var filterObj = this.filterObj ? this.filterObj[filtertype] : null;
-                        if (!filterObj) {
-                            filterObj = {};
+
+                if (result) {
+                    if (!_.isEmpty(result.criterion)) {
+                        this.query[this.type][filtertype] = +new Date();
+                        if (result) {
+                            var filterObj = this.filterObj ? this.filterObj[filtertype] : null;
+                            if (!filterObj) {
+                                filterObj = {};
+                            }
+                            var temp = {}; // IE fix
+                            temp[(this.attrModal.tag ? this.value.tag : this.value.type)] = { 'result': result, 'rule': rule };
+                            _.extend(filterObj, temp);
+                            this.filterObj[filtertype] = filterObj;
+                            this.makeFilterButtonActive(this.attrModal.tag ? 'tag' : 'type');
+                            Utils.localStorage.setValue((filtertype), JSON.stringify(filterObj));
+                        } else {
+                            this.filterObj[filtertype] = null;
+                            this.query[this.type][filtertype] = null;
+                            this.makeFilterButtonActive(this.attrModal.tag ? 'tag' : 'type');
+                            Utils.localStorage.removeValue(filtertype);
                         }
-                        var temp = {}; // IE fix
-                        temp[(this.attrModal.tag ? this.value.tag : this.value.type)] = { 'result': result, 'rule': rule };
-                        _.extend(filterObj, temp);
-                        this.filterObj[filtertype] = filterObj;
-                        this.makeFilterButtonActive(this.attrModal.tag ? 'tag' : 'type');
-                        Utils.localStorage.setValue((filtertype), JSON.stringify(filterObj));
-                    } else {
-                        this.filterObj[filtertype] = null;
-                        this.query[this.type][filtertype] = null;
-                        this.makeFilterButtonActive(this.attrModal.tag ? 'tag' : 'type');
-                        Utils.localStorage.removeValue(filtertype);
+
                     }
+                    this.attrModal.modal.close();
                 } else {
                     this.filterObj[filtertype] = null;
                     this.query[this.type][filtertype] = null;
                     this.makeFilterButtonActive(this.attrModal.tag ? 'tag' : 'type');
                     Utils.localStorage.removeValue(filtertype);
                 }
-                this.attrModal.modal.close();
             },
             getQueryBuilderParsData: function(obj) {
                 if (obj) {
@@ -378,17 +382,26 @@
                     } else if (this.value.dslChecked == "false" && this.dsl == true) {
                         this.ui.searchType.prop("checked", false).trigger("change");
                     }
+                    this.ui.typeLov.val(this.value.type);
                     if (this.ui.typeLov.data('select2')) {
-                        this.ui.typeLov.val(this.value.type).trigger('change');
-                    } else {
-                        this.ui.typeLov.val(this.value.type);
+                        if (this.ui.typeLov.val() !== this.value.type) {
+                            this.value.type = null;
+                            this.ui.typeLov.val("").trigger("change");
+                        } else {
+                            this.ui.typeLov.trigger("change");
+                        }
                     }
 
                     if (!this.dsl) {
+                        this.ui.tagLov.val(this.value.tag);
                         if (this.ui.tagLov.data('select2')) {
-                            this.ui.tagLov.val(this.value.tag).trigger('change');
-                        } else {
-                            this.ui.typeLov.val(this.value.tag);
+                            // To handle delete scenario.
+                            if (this.ui.tagLov.val() !== this.value.tag) {
+                                this.value.tag = null;
+                                this.ui.tagLov.val("").trigger("change");
+                            } else {
+                                this.ui.tagLov.trigger("change");
+                            }
                         }
                     }
                     this.ui.searchInput.val(this.value.query || "");
@@ -468,7 +481,11 @@
                 this.ui.typeLov.val("").trigger("change");
                 this.ui.tagLov.val("").trigger("change");
                 this.ui.searchInput.val("");
-                this.checkForButtonVisiblity()
+                this.checkForButtonVisiblity();
+                Utils.localStorage.removeValue('tagFilters');
+                Utils.localStorage.removeValue('entityFilters');
+                this.filterObj.tagFilters = null;
+                this.filterObj.entityFilters = null;
                 Utils.setUrl({
                     url: '#!/search/searchResult',
                     urlParams: {
@@ -481,4 +498,4 @@
             }
         });
     return SearchLayoutView;
-});
+});
\ No newline at end of file
diff --git a/dashboardv2/public/js/views/tag/TagLayoutView.js b/dashboardv2/public/js/views/tag/TagLayoutView.js
index b8a1cd1..2714770 100644
--- a/dashboardv2/public/js/views/tag/TagLayoutView.js
+++ b/dashboardv2/public/js/views/tag/TagLayoutView.js
@@ -59,7 +59,7 @@
              * @constructs
              */
             initialize: function(options) {
-                _.extend(this, _.pick(options, 'tag', 'collection', 'typeHeaders'));
+                _.extend(this, _.pick(options, 'tag', 'collection', 'typeHeaders', 'filterObj', 'value'));
             },
             bindEvents: function() {
                 var that = this;
@@ -417,10 +417,19 @@
                         }
                         that.collection.remove(deleteTagData);
                         // to update tag list of search tab fetch typeHeaders.
+                        var tagList = JSON.parse(Utils.localStorage.getValue('tagFilters'));
+                        if (tagList) {
+                            delete tagList[that.tagName];
+                        }
+                        tagList = _.isEmpty(tagList) ? null : tagList;
+                        if (that.filterObj['tagFilters'] && that.filterObj['tagFilters'][that.tagName]) {
+                            delete that.filterObj['tagFilters'][that.tagName];
+                        }
+                        Utils.localStorage.setValue('tagFilters', JSON.stringify(tagList));
                         that.typeHeaders.fetch({ reset: true });
                     }
                 });
             }
         });
     return TagLayoutView;
-});
+});
\ No newline at end of file
