public virtual Conference PlanAConference(DateTime conferenceDate, List <string> inputTalkList)
        {
            var talkList = _titleDurationSplitter.GetTalkList(inputTalkList);

            var currentSession = CreateANewTalkSession(conferenceDate);
            var currentTrack   = new Track(conferenceDate);

            currentTrack.AddASession(currentSession);

            _conference.AddATrack(currentTrack);

            var currentSessionTime = currentSession.StartTime;

            foreach (var talk in talkList)
            {
                if (FitTalkIntoTheSession(talk, currentSession, ref currentSessionTime))
                {
                    continue;
                }

                //couldn't fit into the current session, so create necessary session and track
                var currentTrackAndSession = AddNecessaryTrackAndSession(currentSession, currentTrack);
                currentTrack       = currentTrackAndSession.Item1;
                currentSession     = currentTrackAndSession.Item2;
                currentSessionTime = currentSession.StartTime;
                FitTalkIntoTheSession(talk, currentSession, ref currentSessionTime);
            }
            return(_conference);
        }