public Subject SaveSubject()
        {
            Subject.RequiredSoftware = new List <Software>();
            foreach (var softwareViewModel in SoftwareList)
            {
                if (softwareViewModel.IsChecked)
                {
                    Subject.RequiredSoftware.Add(softwareViewModel.Software);
                }
            }

            if (_adding)
            {
                SubjectDao.Add(Subject);
            }
            else
            {
                var subject = SubjectDao.FindById(Subject.Id);
                subject.Update(Subject);

                var sessions = SessionDao.GetIncompatibleSessions(subject);
                if (sessions.Count > 0)
                {
                    var dialog = new ConfirmDelete(sessions,
                                                   "Are you sure you want to update this subject? Some of the sessions have already been placed in the schedule. Following is the list of all sessions that will be deleted if you proceed with this update.")
                    {
                        HelpState = Constants.ApplicationState.SubjectsAdd
                    };
                    dialog.ShowDialog();

                    if (dialog.Confirm)
                    {
                        SubjectDao.Update(subject);
                        foreach (var session in sessions)
                        {
                            SessionDao.Remove(session.Id);
                        }

                        _mainWindowViewModel.InitRemainigSessions();
                        _mainWindowViewModel.InitSessions();
                    }
                    else
                    {
                        return(null);
                    }
                }
                else
                {
                    SubjectDao.Update(subject);
                    _mainWindowViewModel.InitRemainigSessions();
                    _mainWindowViewModel.InitSessions();
                }
            }

            return(Subject);
        }