// Command actions
        public void SaveReference(object input)
        {
            try
            {
                ReferenceRepo referenceRepo = new ReferenceRepo();

                // 0. Get old reference name
                _name = referenceRepo.GetReferenceNameWithId(Reference.ID);

                bool hasMainArticle = !string.IsNullOrWhiteSpace(MainArticleTitle);

                if (hasMainArticle)
                {
                    Reference.ArticleID = (new ArticleRepo()).CheckArticleWithTitle(MainArticleTitle);
                }

                // 1. Update reference in database
                if (hasMainArticle)
                {
                    referenceRepo.UpdateReference(Reference, true);
                }
                else
                {
                    referenceRepo.UpdateReference(Reference, false);
                }

                // 1.1 Track reference update
                ReferenceInfo info = new ReferenceInfo(Reference.Name);
                new Tracker(new User()
                {
                    Username = "******", Admin = 1
                }).TrackUpdate <ReferenceInfo>(info, _name);
            }
            catch (Exception e)
            {
                // Reference with that name already exists (ask merge dialog)
                if (e.Message.Contains("UNIQUE"))
                {
                    if (
                        _dialogService.OpenDialog(new DialogYesNoViewModel("Reference with that name already exists, do you want to merge?", "Merge reference", DialogType.Question))
                        )
                    {
                        ReferenceRepo  repo          = new ReferenceRepo();
                        Reference      referenceFrom = repo.GetReference(_name);
                        Reference      referenceInto = repo.GetReference(Reference.Name);
                        List <Article> articlesFrom  = repo.LoadArticlesForReference(referenceFrom);
                        List <Article> articlesInto  = repo.LoadArticlesForReference(referenceInto);

                        // 1. Get unique articles between 2 references
                        List <Article> uniques = articlesFrom.Where(art => !articlesInto.Exists(el => el.Title == art.Title)).ToList();

                        // 2. Add those articles into merged reference
                        repo.AddListOfArticlesToReference(referenceInto, uniques);

                        // 3. Delete old reference
                        repo.DeleteReference(referenceFrom);
                    }
                }
                // Generic exception
                else
                {
                    new BugTracker().Track("Refernce Editor", "Save Reference", e.Message, e.StackTrace);
                    _dialogService.OpenDialog(new DialogOkViewModel("Something went wrong.", "Error", DialogType.Error));
                }
            }
            finally
            {
                _parent.PopulateReferences();

                // Close window
                (input as ICommand).Execute(null);
            }
        }