diff --git a/dashboardv2/public/css/scss/main.scss b/dashboardv2/public/css/scss/main.scss
index 3e6e77f..4b73577 100644
--- a/dashboardv2/public/css/scss/main.scss
+++ b/dashboardv2/public/css/scss/main.scss
@@ -188,6 +188,9 @@
     background-color: $transparent;
     border: 1px solid $color_jungle_green_approx;
     cursor: pointer;
+    &+.auditDetailBtn {
+        margin-left: 5px;
+    }
 }
 
 .add-seperator {
@@ -315,6 +318,10 @@
         &.editbutton[data-id="editButton"] {
             display: none !important;
         }
+        &[data-id="delete"],
+        &[data-id="edit"] {
+            display: none;
+        }
     }
 }
 
@@ -340,3 +347,39 @@
 .no-padding {
     padding: 0px !important;
 }
+
+.no-padding-bottom {
+    padding-bottom: 0px !important;
+}
+
+.no-padding-top {
+    padding-top: 0px !important;
+}
+
+.no-padding-left {
+    padding-left: 0px !important;
+}
+
+.no-padding-right {
+    padding-right: 0px !important;
+}
+
+.no-margin {
+    margin: 0px !important;
+}
+
+.no-margin-bottom {
+    margin-bottom: 0px !important;
+}
+
+.no-margin-top {
+    margin-top: 0px !important;
+}
+
+.no-margin-left {
+    margin-left: 0px !important;
+}
+
+.no-margin-right {
+    margin-right: 0px !important;
+}
diff --git a/dashboardv2/public/js/main.js b/dashboardv2/public/js/main.js
index 39e6d57..6d7d6fa 100644
--- a/dashboardv2/public/js/main.js
+++ b/dashboardv2/public/js/main.js
@@ -168,15 +168,19 @@
     'select2'
 ], function(App, Router, CommonViewFunction, Globals, UrlLinks, VEntityList, VTagList) {
     var that = this;
-    this.asyncFetchCounter = 3;
+    this.asyncFetchCounter = 4;
     this.entityDefCollection = new VEntityList();
     this.entityDefCollection.url = UrlLinks.entitiesDefApiUrl();
     this.typeHeaders = new VTagList();
     this.typeHeaders.url = UrlLinks.typesApiUrl();
+    this.enumDefCollection = new VTagList();
+    this.enumDefCollection.url = UrlLinks.enumDefApiUrl();
+    this.enumDefCollection.modelAttrName = "enumDefs";
 
     App.appRouter = new Router({
         entityDefCollection: this.entityDefCollection,
-        typeHeaders: this.typeHeaders
+        typeHeaders: this.typeHeaders,
+        enumDefCollection: this.enumDefCollection
     });
 
     var startApp = function() {
@@ -228,4 +232,11 @@
             startApp();
         }
     });
+    this.enumDefCollection.fetch({
+        skipDefaultError: true,
+        complete: function() {
+            --that.asyncFetchCounter;
+            startApp();
+        }
+    });
 });
diff --git a/dashboardv2/public/js/models/VEntity.js b/dashboardv2/public/js/models/VEntity.js
index 88310ab..aa8dbc4 100644
--- a/dashboardv2/public/js/models/VEntity.js
+++ b/dashboardv2/public/js/models/VEntity.js
@@ -52,8 +52,8 @@
 
             return this.constructor.nonCrudOperation.call(this, url, 'GET', options);
         },
-        saveTraitsEntity: function(options) {
-            var url = UrlLinks.entitiesTraitsApiUrl();
+        saveTraitsEntity: function(token, options) {
+            var url = UrlLinks.entitiesTraitsApiUrl(token);
             options = _.extend({
                 contentType: 'application/json',
                 dataType: 'json'
diff --git a/dashboardv2/public/js/router/Router.js b/dashboardv2/public/js/router/Router.js
index db5bc1f..6bec26d 100644
--- a/dashboardv2/public/js/router/Router.js
+++ b/dashboardv2/public/js/router/Router.js
@@ -42,12 +42,17 @@
             '*actions': 'defaultAction'
         },
         initialize: function(options) {
-            _.extend(this, _.pick(options, 'entityDefCollection', 'typeHeaders'));
+            _.extend(this, _.pick(options, 'entityDefCollection', 'typeHeaders', 'enumDefCollection'));
             this.showRegions();
             this.bindCommonEvents();
             this.listenTo(this, 'route', this.postRouteExecute, this);
             this.tagCollection = new VTagList();
             this.searchVent = new Backbone.Wreqr.EventAggregator();
+            this.preFetchedCollectionLists = {
+                'entityDefCollection': this.entityDefCollection,
+                'typeHeaders': this.typeHeaders,
+                'enumDefCollection': this.enumDefCollection
+            }
         },
         bindCommonEvents: function() {
             var that = this;
@@ -110,17 +115,29 @@
                     var paramObj = Utils.getUrlState.getQueryParams();
                     this.collection = new VCatalogList();
                     this.collection.url = url;
-                    App.rNHeader.show(new BusinessCatalogHeader({ 'url': url, 'collection': this.collection }));
+                    App.rNHeader.show(new BusinessCatalogHeader(
+                        _.extend({
+                            'url': url,
+                            'collection': this.collection
+                        }, that.preFetchedCollectionLists)
+                    ));
                     if (!App.rSideNav.currentView) {
-                        App.rSideNav.show(new SideNavLayoutView({ 'url': url, 'collection': that.tagCollection, 'typeHeaders': that.typeHeaders }));
+                        App.rSideNav.show(new SideNavLayoutView(
+                            _.extend({
+                                'url': url,
+                                'collection': that.tagCollection
+                            }, that.preFetchedCollectionLists)
+                        ));
                     } else {
                         App.rSideNav.currentView.RBusinessCatalogLayoutView.currentView.manualRender("/" + url);
                         App.rSideNav.currentView.selectTab();
                     }
-                    App.rNContent.show(new BusinessCatalogDetailLayoutView({
-                        'url': url,
-                        'collection': this.collection
-                    }));
+                    App.rNContent.show(new BusinessCatalogDetailLayoutView(
+                        _.extend({
+                            'url': url,
+                            'collection': this.collection
+                        }, that.preFetchedCollectionLists)
+                    ));
                     this.collection.fetch({ reset: true });
                 } else {
                     that.defaultAction()
@@ -139,16 +156,18 @@
                     this.entityCollection = new VEntityList([], {});
                     App.rNHeader.show(new Header());
                     if (!App.rSideNav.currentView) {
-                        App.rSideNav.show(new SideNavLayoutView({ 'collection': that.tagCollection, 'typeHeaders': that.typeHeaders }));
+                        App.rSideNav.show(new SideNavLayoutView(
+                            _.extend({
+                                'collection': that.tagCollection,
+                            }, that.preFetchedCollectionLists)
+                        ));
                     } else {
                         App.rSideNav.currentView.selectTab();
                     }
-                    App.rNContent.show(new DetailPageLayoutView({
+                    App.rNContent.show(new DetailPageLayoutView(_.extend({
                         'collection': this.entityCollection,
                         'id': id,
-                        'entityDefCollection': that.entityDefCollection,
-                        'typeHeaders': that.typeHeaders
-                    }));
+                    }, that.preFetchedCollectionLists)));
                     this.entityCollection.url = UrlLinks.entitiesApiUrl(id);
                     this.entityCollection.fetch({ reset: true });
                 });
@@ -164,23 +183,24 @@
             ], function(Header, BusinessCatalogLayoutView, SideNavLayoutView, TagDetailLayoutView) {
                 App.rNHeader.show(new Header());
                 if (!App.rSideNav.currentView) {
-                    App.rSideNav.show(new SideNavLayoutView({
-                        'tag': tagName,
-                        'typeHeaders': that.typeHeaders,
-                        'collection': that.tagCollection
-                    }));
+                    App.rSideNav.show(new SideNavLayoutView(
+                        _.extend({
+                            'tag': tagName,
+                            'collection': that.tagCollection
+                        }, that.preFetchedCollectionLists)
+                    ));
                 } else {
                     App.rSideNav.currentView.RTagLayoutView.currentView.manualRender(tagName);
                     App.rSideNav.currentView.selectTab();
                 }
 
                 if (tagName) {
-                    App.rNContent.show(new TagDetailLayoutView({
-                        'tag': tagName,
-                        'entityDefCollection': that.entityDefCollection,
-                        'collection': that.tagCollection,
-                        'typeHeaders': that.typeHeaders
-                    }));
+                    App.rNContent.show(new TagDetailLayoutView(
+                        _.extend({
+                            'tag': tagName,
+                            'collection': that.tagCollection,
+                        }, that.preFetchedCollectionLists)
+                    ));
                 }
             });
         },
@@ -195,10 +215,11 @@
                 var paramObj = Utils.getUrlState.getQueryParams();
                 App.rNHeader.show(new Header());
                 if (!App.rSideNav.currentView) {
-                    App.rSideNav.show(new SideNavLayoutView({
-                        'collection': that.tagCollection,
-                        'typeHeaders': that.typeHeaders
-                    }));
+                    App.rSideNav.show(new SideNavLayoutView(
+                        _.extend({
+                            'collection': that.tagCollection
+                        }, that.preFetchedCollectionLists)
+                    ));
                 } else {
                     App.rSideNav.currentView.selectTab();
                     if (Utils.getUrlState.isTagTab()) {
@@ -208,12 +229,12 @@
                     }
                 }
                 if (Globals.entityCreate && Utils.getUrlState.isSearchTab()) {
-                    App.rNContent.show(new SearchDetailLayoutView({
-                        'value': paramObj,
-                        'entityDefCollection': that.entityDefCollection,
-                        'initialView': true,
-                        'typeHeaders': that.typeHeaders
-                    }))
+                    App.rNContent.show(new SearchDetailLayoutView(
+                        _.extend({
+                            'value': paramObj,
+                            'initialView': true
+                        }, that.preFetchedCollectionLists)
+                    ));
                 } else {
                     App.rNContent.$el.html("");
                     App.rNContent.destroy();
@@ -231,23 +252,24 @@
                 var paramObj = Utils.getUrlState.getQueryParams();
                 App.rNHeader.show(new Header());
                 if (!App.rSideNav.currentView) {
-                    App.rSideNav.show(new SideNavLayoutView({
-                        'value': paramObj,
-                        'collection': that.tagCollection,
-                        'searchVent': that.searchVent,
-                        'typeHeaders': that.typeHeaders
-                    }));
+                    App.rSideNav.show(new SideNavLayoutView(
+                        _.extend({
+                            'value': paramObj,
+                            'collection': that.tagCollection,
+                            'searchVent': that.searchVent
+                        }, that.preFetchedCollectionLists)
+                    ));
                 } else {
                     App.rSideNav.currentView.RSearchLayoutView.currentView.manualRender(paramObj);
                 }
                 App.rSideNav.currentView.selectTab();
-                App.rNContent.show(new SearchDetailLayoutView({
-                    'value': paramObj,
-                    'entityDefCollection': that.entityDefCollection,
-                    'typeHeaders': that.typeHeaders,
-                    'searchVent': that.searchVent,
-                    'initialView': (paramObj.type || (paramObj.dslChecked == "true" ? "" : paramObj.tag) || (paramObj.query ? paramObj.query.trim() : "")).length === 0
-                }));
+                App.rNContent.show(new SearchDetailLayoutView(
+                    _.extend({
+                        'value': paramObj,
+                        'searchVent': that.searchVent,
+                        'initialView': (paramObj.type || (paramObj.dslChecked == "true" ? "" : paramObj.tag) || (paramObj.query ? paramObj.query.trim() : "")).length === 0
+                    }, that.preFetchedCollectionLists)
+                ));
             });
         },
         defaultAction: function(actions) {
diff --git a/dashboardv2/public/js/templates/tag/addTagModalView_tmpl.html b/dashboardv2/public/js/templates/tag/addTagModalView_tmpl.html
index 3ca2658..cce584a 100644
--- a/dashboardv2/public/js/templates/tag/addTagModalView_tmpl.html
+++ b/dashboardv2/public/js/templates/tag/addTagModalView_tmpl.html
@@ -16,8 +16,11 @@
 -->
 <div>
     <div class="form-group hide">
+        {{#if tagModel}}
+        <h4>{{tagModel.typeName}}</h4> {{else}}
         <select class="form-control row-margin-bottom" data-id="addTagOptions" required>
         </select>
+        {{/if}}
     </div>
     <div class="row modalHeight">
         <div class="col-sm-12">
diff --git a/dashboardv2/public/js/utils/UrlLinks.js b/dashboardv2/public/js/utils/UrlLinks.js
index bdeda8d..82bd082 100644
--- a/dashboardv2/public/js/utils/UrlLinks.js
+++ b/dashboardv2/public/js/utils/UrlLinks.js
@@ -52,6 +52,14 @@
                 return entitieDefUrl.defs + '?type=entity';
             }
         },
+        enumDefApiUrl: function(name) {
+            var enumDefApiUrl = this.typedefsUrl();
+            if (name) {
+                return enumDefApiUrl.def + '/name/' + name + '?type=enum';
+            } else {
+                return enumDefApiUrl.defs + '?type=enum';
+            }
+        },
         entitiesTraitsApiUrl: function(token) {
             if (token) {
                 return this.baseUrlV2 + '/entity/guid/' + token + '/classifications';
diff --git a/dashboardv2/public/js/views/detail_page/DetailPageLayoutView.js b/dashboardv2/public/js/views/detail_page/DetailPageLayoutView.js
index dc3ae4c..d44962f 100644
--- a/dashboardv2/public/js/views/detail_page/DetailPageLayoutView.js
+++ b/dashboardv2/public/js/views/detail_page/DetailPageLayoutView.js
@@ -104,7 +104,7 @@
              * @constructs
              */
             initialize: function(options) {
-                _.extend(this, _.pick(options, 'collection', 'id', 'entityDefCollection', 'typeHeaders'));
+                _.extend(this, _.pick(options, 'collection', 'id', 'entityDefCollection', 'typeHeaders', 'enumDefCollection'));
                 this.bindEvents();
             },
             bindEvents: function() {
@@ -171,7 +171,8 @@
                         entityName: this.name,
                         typeHeaders: this.typeHeaders,
                         entityDefCollection: this.entityDefCollection,
-                        fetchCollection: this.fetchCollection.bind(that)
+                        fetchCollection: this.fetchCollection.bind(that),
+                        enumDefCollection: this.enumDefCollection
                     }
                     this.getEntityDef(obj);
                     this.renderTagTableLayoutView(obj);
@@ -325,7 +326,8 @@
                             that.fetchCollection();
                         },
                         showLoader: that.showLoader.bind(that),
-                        hideLoader: that.hideLoader.bind(that)
+                        hideLoader: that.hideLoader.bind(that),
+                        enumDefCollection: that.enumDefCollection
                     });
                     view.modal.on('ok', function() {
                         Utils.showTitleLoader(that.$('.page-title .fontLoader'), that.$('.entityDetail'));
diff --git a/dashboardv2/public/js/views/schema/SchemaLayoutView.js b/dashboardv2/public/js/views/schema/SchemaLayoutView.js
index e7f0f6e..60c2a6b 100644
--- a/dashboardv2/public/js/views/schema/SchemaLayoutView.js
+++ b/dashboardv2/public/js/views/schema/SchemaLayoutView.js
@@ -48,8 +48,7 @@
                 showMoreLess: '[data-id="showMoreLess"]',
                 showMoreLessTerm: '[data-id="showMoreLessTerm"]',
                 addAssignTag: "[data-id='addAssignTag']",
-                checkDeletedEntity: "[data-id='checkDeletedEntity']",
-
+                checkDeletedEntity: "[data-id='checkDeletedEntity']"
             },
             /** ui events hash */
             events: function() {
@@ -95,7 +94,7 @@
              * @constructs
              */
             initialize: function(options) {
-                _.extend(this, _.pick(options, 'guid', 'entityDefCollection', 'attribute', 'referredEntities', 'fetchCollection'));
+                _.extend(this, _.pick(options, 'guid', 'entityDefCollection', 'attribute', 'referredEntities', 'fetchCollection', 'enumDefCollection'));
                 this.schemaCollection = new VSchemaList([], {});
                 this.commonTableOptions = {
                     collection: this.schemaCollection,
@@ -228,7 +227,7 @@
                         //     return this;
                         // }
                     });
-                    var columns = new columnCollection(that.getSchemaTableColumns());
+                    var columns = new columnCollection(that.getSchemaTableColumns(deleteEnity));
                     //columns.setPositions().sort();
                     that.RSchemaTableLayoutView.show(new TableLayout(_.extend({}, that.commonTableOptions, {
                         columns: columns
@@ -247,7 +246,7 @@
                     });
                 });
             },
-            getSchemaTableColumns: function() {
+            getSchemaTableColumns: function(deleteEnity) {
                 var that = this,
                     col = {
                         Check: {
@@ -271,7 +270,7 @@
                                         var value = model.get('attributes')[key];
                                         if (key === "name" && model.get('guid')) {
                                             var nameHtml = '<a href="#!/detailPage/' + model.get('guid') + '">' + value + '</a>';
-                                            if (model.get('status') && Enums.entityStateReadOnly[model.get('status')]) {
+                                            if (model.get('status') && Enums.entityStateReadOnly[model.get('status')] && deleteEnity) {
                                                 nameHtml += '<button type="button" title="Deleted" class="btn btn-atlasAction btn-atlas deleteBtn"><i class="fa fa-trash"></i></button>';
                                                 return '<div class="readOnly readOnlyLink">' + nameHtml + '</div>';
                                             } else {
@@ -369,7 +368,8 @@
                             that.arr = [];
                         },
                         hideLoader: that.hideLoader.bind(that),
-                        showLoader: that.showLoader.bind(that)
+                        showLoader: that.showLoader.bind(that),
+                        enumDefCollection: that.enumDefCollection
                     });
                     // view.saveTagData = function() {
                     //override saveTagData function 
diff --git a/dashboardv2/public/js/views/search/SearchDetailLayoutView.js b/dashboardv2/public/js/views/search/SearchDetailLayoutView.js
index d44eb78..b22fae8 100644
--- a/dashboardv2/public/js/views/search/SearchDetailLayoutView.js
+++ b/dashboardv2/public/js/views/search/SearchDetailLayoutView.js
@@ -43,7 +43,7 @@
              * @constructs
              */
             initialize: function(options) {
-                _.extend(this, _.pick(options, 'value', 'initialView', 'entityDefCollection', 'typeHeaders', 'searchVent'));
+                _.extend(this, _.pick(options, 'value', 'initialView', 'entityDefCollection', 'typeHeaders', 'searchVent', 'enumDefCollection'));
             },
             bindEvents: function() {},
             onRender: function() {
@@ -61,7 +61,8 @@
                             initialView: that.initialView,
                             entityDefCollection: that.entityDefCollection,
                             typeHeaders: that.typeHeaders,
-                            searchVent: that.searchVent
+                            searchVent: that.searchVent,
+                            enumDefCollection: that.enumDefCollection
                         }));
                     }
                 });
diff --git a/dashboardv2/public/js/views/search/SearchResultLayoutView.js b/dashboardv2/public/js/views/search/SearchResultLayoutView.js
index 314e137..c014f71 100644
--- a/dashboardv2/public/js/views/search/SearchResultLayoutView.js
+++ b/dashboardv2/public/js/views/search/SearchResultLayoutView.js
@@ -126,7 +126,7 @@
              * @constructs
              */
             initialize: function(options) {
-                _.extend(this, _.pick(options, 'value', 'initialView', 'entityDefCollection', 'typeHeaders', 'searchVent'));
+                _.extend(this, _.pick(options, 'value', 'initialView', 'entityDefCollection', 'typeHeaders', 'searchVent', 'enumDefCollection'));
                 var pagination = "";
                 this.entityModel = new VEntity();
                 this.searchCollection = new VSearchList();
@@ -490,7 +490,8 @@
                         },
                         tagList: that.getTagList(guid, multiple),
                         showLoader: that.showLoader.bind(that),
-                        hideLoader: that.hideLoader.bind(that)
+                        hideLoader: that.hideLoader.bind(that),
+                        enumDefCollection: that.enumDefCollection
                     });
                 });
             },
diff --git a/dashboardv2/public/js/views/tag/TagDetailTableLayoutView.js b/dashboardv2/public/js/views/tag/TagDetailTableLayoutView.js
index 677058b..cdbd00f 100644
--- a/dashboardv2/public/js/views/tag/TagDetailTableLayoutView.js
+++ b/dashboardv2/public/js/views/tag/TagDetailTableLayoutView.js
@@ -43,6 +43,7 @@
                 detailValue: "[data-id='detailValue']",
                 addTag: "[data-id='addTag']",
                 deleteTag: "[data-id='delete']",
+                editTag: "[data-id='edit']",
             },
             /** ui events hash */
             events: function() {
@@ -53,6 +54,9 @@
                 events["click " + this.ui.deleteTag] = function(e) {
                     this.deleteTagDataModal(e);
                 };
+                events["click " + this.ui.editTag] = function(e) {
+                    this.editTagDataModal(e);
+                };
                 return events;
             },
             /**
@@ -60,7 +64,7 @@
              * @constructs
              */
             initialize: function(options) {
-                _.extend(this, _.pick(options, 'entity', 'guid', 'term', 'entityName', 'fetchCollection'));
+                _.extend(this, _.pick(options, 'entity', 'guid', 'term', 'entityName', 'fetchCollection', 'enumDefCollection'));
                 this.collectionObject = this.entity;
                 this.tagTermCollection = new VTagList();
                 var tagorterm = _.toArray(this.collectionObject.classifications),
@@ -151,7 +155,7 @@
                             sortable: false,
                             formatter: _.extend({}, Backgrid.CellFormatter.prototype, {
                                 fromRaw: function(rawValue, model) {
-                                    return '<a href="javascript:void(0)"><i class="fa fa-trash" data-id="delete" data-name="' + model.get('typeName') + '"></i></a>';
+                                    return '<button class="btn btn-atlasAction btn-atlas no-margin-bottom typeLOV" data-id="delete" data-name="' + model.get('typeName') + '"><i class="fa fa-trash"></i></button> <button class="btn btn-atlasAction btn-atlas no-margin-bottom typeLOV" data-id="edit" data-name="' + model.get('typeName') + '"><i class="fa fa-pencil"></i></button>';
                                 }
                             })
                         },
@@ -164,7 +168,8 @@
                 require(['views/tag/addTagModalView'], function(AddTagModalView) {
                     var view = new AddTagModalView({
                         guid: that.guid,
-                        modalCollection: that.collection
+                        modalCollection: that.collection,
+                        enumDefCollection: that.enumDefCollection
                     });
                     // view.saveTagData = function() {
                     //override saveTagData function
@@ -218,6 +223,23 @@
 
                     }
                 });
+            },
+            editTagDataModal: function(e) {
+                var that = this,
+                    tagName = $(e.currentTarget).data('name'),
+                    tagModel = _.findWhere(that.collectionObject.classifications, { typeName: tagName });
+                require([
+                    'views/tag/addTagModalView'
+                ], function(AddTagModalView) {
+                    var view = new AddTagModalView({
+                        'tagModel': tagModel,
+                        callback: function() {
+                            that.fetchCollection();
+                        },
+                        guid: that.guid,
+                        'enumDefCollection': that.enumDefCollection
+                    });
+                });
             }
         });
     return TagDetailTableLayoutView;
diff --git a/dashboardv2/public/js/views/tag/addTagModalView.js b/dashboardv2/public/js/views/tag/addTagModalView.js
index 01e1dfd..7c6b85f 100644
--- a/dashboardv2/public/js/views/tag/addTagModalView.js
+++ b/dashboardv2/public/js/views/tag/addTagModalView.js
@@ -31,6 +31,11 @@
 
     var AddTagModel = Marionette.LayoutView.extend({
         template: AddTagModalViewTmpl,
+        templateHelpers: function() {
+            return {
+                tagModel: this.tagModel
+            };
+        },
 
         regions: {},
         ui: {
@@ -47,38 +52,40 @@
          * @constructs
          */
         initialize: function(options) {
-            var that = this;
-            _.extend(this, _.pick(options, 'modalCollection', 'guid', 'callback', 'multiple', 'showLoader', 'hideLoader', 'tagList'));
+            _.extend(this, _.pick(options, 'modalCollection', 'guid', 'callback', 'multiple', 'showLoader', 'hideLoader', 'tagList', 'tagModel', 'enumDefCollection'));
             this.collection = new VTagList();
             this.commonCollection = new VTagList();
-            this.enumCollection = new VTagList();
-            this.enumCollection.url = UrlLinks.typedefsUrl().defs;
-            this.enumCollection.modelAttrName = "enumDefs";
-            this.asyncAttrFetchCounter = 0;
-            this.asyncEnumFetchCounter = 2;
-            this.modal = new Modal({
-                title: 'Add Tag',
-                content: this,
-                okText: 'Add',
-                cancelText: "Cancel",
-                allowCancel: true,
-            }).open();
-            this.modal.$el.find('button.ok').attr("disabled", true);
+            var that = this,
+                modalObj = {
+                    title: 'Add Tag',
+                    content: this,
+                    okText: 'Add',
+                    cancelText: "Cancel",
+                    allowCancel: true,
+                },
+                state = this.tagModel ? false : true;
+            if (this.tagModel) {
+                modalObj.title = 'Edit Tag';
+                modalObj.okText = 'Update';
+            }
+            this.modal = new Modal(modalObj).open();
+            this.modal.$el.find('button.ok').attr("disabled", state);
             this.on('ok', function() {
-                var tagName = this.ui.addTagOptions.val();
-                var tagAttributes = {};
-                var tagAttributeNames = this.$(".attrName");
+                var tagName = this.tagModel ? this.tagModel.typeName : this.ui.addTagOptions.val(),
+                    tagAttributes = {},
+                    tagAttributeNames = this.$(".attrName"),
+                    obj = {
+                        tagName: tagName,
+                        tagAttributes: tagAttributes,
+                        guid: [],
+                        skipEntity: [],
+                        deletedEntity: []
+                    };
                 tagAttributeNames.each(function(i, item) {
                     var selection = $(item).data("key");
                     tagAttributes[selection] = $(item).val() || null;
                 });
-                var obj = {
-                    tagName: tagName,
-                    tagAttributes: tagAttributes,
-                    guid: [],
-                    skipEntity: [],
-                    deletedEntity: []
-                }
+
                 if (that.multiple) {
                     _.each(that.multiple, function(entity, i) {
                         var name = Utils.getName(entity.model);
@@ -172,22 +179,17 @@
 
         onRender: function() {
             var that = this;
-            $.extend(this.collection.queryParams, { type: 'TRAIT', notsupertype: 'TaxonomyTerm' });
+            $.extend(this.collection.queryParams, { type: 'classification' });
             this.hideAttributeBox();
             this.collection.fetch({
                 reset: true,
                 complete: function() {
-                    --that.asyncEnumFetchCounter;
-                    that.showAttributeBox(that.asyncEnumFetchCounter);
+                    if (that.tagModel) {
+                        that.fetchTagSubData(that.tagModel.typeName);
+                    }
+                    that.showAttributeBox();
                 },
             });
-            that.enumCollection.fetch({
-                complete: function() {
-                    --that.asyncEnumFetchCounter;
-                    that.showAttributeBox(that.asyncEnumFetchCounter);
-                },
-                reset: true
-            });
         },
         bindEvents: function() {
             var that = this;
@@ -213,7 +215,7 @@
                 }
                 // using obj.get('name') insted of name variable because if html is presen in name then escaped name will not found in tagList.
                 if (_.indexOf(that.tagList, obj.get('name')) === -1) {
-                    str += '<option>' + name + '</option>';
+                    str += '<option ' + (that.tagModel && that.tagModel.typeName === name ? 'selected' : '') + '>' + name + '</option>';
                 }
             });
             this.ui.addTagOptions.html(str);
@@ -232,24 +234,18 @@
             this.fetchTagSubData(tagname);
         },
         fetchTagSubData: function(tagname) {
-            var that = this;
-            ++this.asyncAttrFetchCounter;
-            this.commonCollection.url = UrlLinks.typesClassicationApiUrl(tagname);
-            this.commonCollection.fetch({
-                reset: true,
-                complete: function() {
-                    --that.asyncAttrFetchCounter;
-                    that.showAttributeBox();
-                }
+            var attributeDefs = Utils.getNestedSuperTypeObj({
+                data: this.collection.fullCollection.find({ name: tagname }).toJSON(),
+                collection: this.collection,
+                attrMerge: true
             });
+            this.subAttributeData(attributeDefs);
         },
-        showAttributeBox: function(counter) {
-            if ((counter || this.asyncAttrFetchCounter) === 0) {
-                this.$('.attrLoader').hide();
-                this.$('.form-group.hide').removeClass('hide');
-                if (this.ui.tagAttribute.children().length !== 0) {
-                    this.ui.tagAttribute.parent().show();
-                }
+        showAttributeBox: function() {
+            this.$('.attrLoader').hide();
+            this.$('.form-group.hide').removeClass('hide');
+            if (this.ui.tagAttribute.children().length !== 0) {
+                this.ui.tagAttribute.parent().show();
             }
         },
         hideAttributeBox: function() {
@@ -257,44 +253,26 @@
             this.ui.tagAttribute.parent().hide();
             this.$('.attrLoader').show();
         },
-        subAttributeData: function() {
+        subAttributeData: function(attributeDefs) {
             var that = this;
-            if (this.commonCollection.models[0]) {
-                if (this.commonCollection.models[0].get('attributeDefs')) {
-                    _.each(this.commonCollection.models[0].get('attributeDefs'), function(obj) {
-                        var name = Utils.getName(obj, 'name');
-                        var typeName = Utils.getName(obj, 'typeName');
-                        var typeNameValue = that.enumCollection.fullCollection.findWhere({ 'name': typeName });
-                        if (typeNameValue) {
-                            var str = "<option disabled='disabled' selected>-- Select " + typeName + " --</option>";
-                            var enumValue = typeNameValue.get('elementDefs');
-                            _.each(enumValue, function(key, value) {
-                                str += '<option>' + key.value + '</option>';
-                            })
-                            that.ui.tagAttribute.append('<div class="form-group"><label>' + name + '</label>' +
-                                '<select class="form-control attributeInputVal attrName" data-key="' + name + '">' + str + '</select></div>');
-                        } else {
-                            that.ui.tagAttribute.append('<div class="form-group"><label>' + name + '</label>' +
-                                '<input type="text" class="form-control attributeInputVal attrName" data-key="' + name + '" ></input></div>');
-                        }
-                    });
-                }
-                if (this.commonCollection.models[0].get('superTypes')) {
-                    var superTypes = this.commonCollection.models[0].get('superTypes');
-                    if (!_.isArray(superTypes)) {
-                        superTypes = [superTypes];
-                    }
-                    if (superTypes.length) {
-                        _.each(superTypes, function(name) {
-                            that.fetchTagSubData(name);
-                        });
+            if (attributeDefs) {
+                _.each(attributeDefs, function(obj) {
+                    var name = Utils.getName(obj, 'name');
+                    var typeName = Utils.getName(obj, 'typeName');
+                    var typeNameValue = that.enumDefCollection.fullCollection.findWhere({ 'name': typeName });
+                    if (typeNameValue) {
+                        var str = "<option disabled='disabled'" + (!that.tagModel ? 'selected' : '') + ">-- Select " + typeName + " --</option>";
+                        var enumValue = typeNameValue.get('elementDefs');
+                        _.each(enumValue, function(key, value) {
+                            str += '<option ' + (that.tagModel && key.value === _.values(that.tagModel.attributes)[0] ? 'selected' : '') + '>' + key.value + '</option>';
+                        })
+                        that.ui.tagAttribute.append('<div class="form-group"><label>' + name + '</label>' +
+                            '<select class="form-control attributeInputVal attrName" data-key="' + name + '">' + str + '</select></div>');
                     } else {
-                        this.showAttributeBox();
+                        that.ui.tagAttribute.append('<div class="form-group"><label>' + name + '</label>' +
+                            '<input type="text" value="' + (that.tagModel ? (that.tagModel.attributes[name] == null ? '' : that.tagModel.attributes[name]) : '') + '" class="form-control attributeInputVal attrName" data-key="' + name + '" ></input></div>');
                     }
-                } else {
-                    this.showAttributeBox();
-                }
-            } else {
+                });
                 this.showAttributeBox();
             }
         },
@@ -310,15 +288,23 @@
                     },
                     "entityGuids": options.guid
                 };
+            if (this.tagModel) {
+                json = [{
+                    "typeName": tagName,
+                    "attributes": tagAttributes
+                }]
+            }
             if (this.showLoader) {
                 this.showLoader();
             }
-            this.entityModel.saveTraitsEntity({
+            this.entityModel.saveTraitsEntity(this.tagModel ? options.guid : null, {
                 skipDefaultError: true,
                 data: JSON.stringify(json),
+                type: this.tagModel ? 'PUT' : 'POST',
                 success: function(data) {
+                    var addupdatetext = that.tagModel ? 'updated successfully to ' : 'added to ';
                     Utils.notifySuccess({
-                        content: "Tag " + tagName + " has been added to " + (that.multiple ? "entities" : "entity")
+                        content: "Tag " + tagName + " has been " + addupdatetext + (that.multiple ? "entities" : "entity")
                     });
                     if (options.modalCollection) {
                         options.modalCollection.fetch({ reset: true });
