protected override void OnInit(EventArgs e)
        {
            base.OnInit(e);

            TxtTags.Attributes.Add("readonly", "readonly");

            TxtTags.Text = currentTags;

            List <string> tags = new List <string>();

            foreach (string tag in currentTags.Split(';'))
            {
                tags.Add(tag.ToLower());
            }

            Dictionary <MainTagInfo, List <string> > mainTagAndSynonyms = (Dictionary <MainTagInfo, List <string> >)HttpRuntime.Cache["MainTagsAndSynonyms"];

            if (mainTagAndSynonyms == null)
            {
                mainTagAndSynonyms = new Dictionary <MainTagInfo, List <string> >();
                //Get all words that have Synonym
                QuickParameters quickParSynonyms = new QuickParameters();
                quickParSynonyms.Udc            = UserDataContext.GetUserDataContext();
                quickParSynonyms.ObjectType     = 5;
                quickParSynonyms.IgnoreCache    = true;
                quickParSynonyms.PageSize       = 9999999;
                quickParSynonyms.DisablePaging  = true;
                quickParSynonyms.SortBy         = QuickSort.Title;
                quickParSynonyms.Direction      = QuickSortDirection.Asc;
                quickParSynonyms.RelationParams = new RelationParams {
                    ExcludeSystemObjects = false, RelationType = "Synonym", ParentObjectType = 5, GroupSort = QuickSort.Title, GroupSortDirection = QuickSortDirection.Asc
                };
                DataObjectList <DataObjectTag> tagWithSynonyms = DataObjects.Load <DataObjectTag>(quickParSynonyms);
                GroupByInfoComparer            comp            = new GroupByInfoComparer();
                IEnumerable <IGrouping <GroupByInfo, DataObjectTag> > outerSquence = tagWithSynonyms.GroupBy(x => x.GroupByInfo, comp);
                foreach (var keyGroupSequence in outerSquence)
                {
                    List <string> tagSynonymList = new List <string>();
                    tagSynonymList.Add(string.Format("{0}", keyGroupSequence.Key.Title));
                    foreach (DataObjectTag DataObjectTag in keyGroupSequence)
                    {
                        tagSynonymList.Add(DataObjectTag.Title);
                    }
                    mainTagAndSynonyms.Add(new MainTagInfo {
                        SynonymCount = keyGroupSequence.Count(), Title = keyGroupSequence.Key.Title
                    }, tagSynonymList);
                }
                CSBooster_DataContext cdc = new CSBooster_DataContext(Helper.GetSiemeConnectionString());
                var tagList = cdc.hisp_DataObjectTag_GetAllButSynonyms();
                foreach (var tag in tagList)
                {
                    List <string> tagSynonymList = new List <string>();
                    tagSynonymList.Add(tag.OBJ_Title);
                    mainTagAndSynonyms.Add(new MainTagInfo {
                        SynonymCount = 0, Title = tag.OBJ_Title
                    }, tagSynonymList);
                }
                HttpRuntime.Cache.Insert("MainTagsAndSynonyms", mainTagAndSynonyms, null, DateTime.Now.Add(new TimeSpan(1, 0, 0)), System.Web.Caching.Cache.NoSlidingExpiration, System.Web.Caching.CacheItemPriority.Normal, null);
            }
            var orderedTags = mainTagAndSynonyms.OrderBy(x => x.Key.Title);

            foreach (var mainTagAndSynonym in orderedTags)
            {
                var tagItem = new ListItem();
                tagItem.Text = mainTagAndSynonym.Key.Title;
                if (mainTagAndSynonym.Key.SynonymCount > 0)
                {
                    tagItem.Text = string.Format("{0} (+{1})", tagItem.Text, mainTagAndSynonym.Key.SynonymCount);
                }
                if (tags.Contains(mainTagAndSynonym.Key.Title.ToLower()))
                {
                    tagItem.Selected = true;
                    tagItem.Attributes.Add("class", "CSB_cb_selected");
                }
                else
                {
                    tagItem.Attributes.Add("class", "CSB_cb_unselected");
                }
                tagItem.Attributes.Add("onClick", string.Format("UpdateTagsTextbox(this, '{0}', '{1}')", this.TxtTags.ClientID, string.Join(";", mainTagAndSynonym.Value.ToArray()).Replace("'", @"\'")));
                CblTags.Items.Add(tagItem);
            }
        }