public IEnumerable <IPresentation> GetFilteredPresentations(IEventFilters filters)
        {
            // Check if filtered event and event years are already stored and if not download all event data
            _feedService.DownloadFilteredEventData(filters);

            // Get a list of Presentation objects
            List <IPresentation> presentations = null;

            // Get filtered Session ids
            var filteredSessionIds = _sessionRepository.FilterSessions(filters);

            if (filteredSessionIds != null)
            {
                var sessions = _sessionRepository.GetSessionsInSessionIdList(filteredSessionIds);

                // Filter for selected speakers
                if (filters.SpeakerIds != null && filters.SpeakerIds.Count() > 0)
                {
                    var videoIds      = _speakerVideoRepository.GetVideoIdListWhereInSpeakerIdList(filters.SpeakerIds);
                    var videos        = _videoRepository.GetVideosByVideoIdList(videoIds);
                    var videoMetaData = videos.Select(x => new { x.EventName, x.EventYear, x.SessionCode }).Distinct().ToList();

                    var filteredSessions = new List <ISession>();
                    foreach (var videoData in videoMetaData)
                    {
                        var sessionToAdd = sessions.Where(x => x.EventName == videoData.EventName && x.EventYear == videoData.EventYear && x.Code == videoData.SessionCode).FirstOrDefault();
                        if (sessionToAdd != null)
                        {
                            filteredSessions.Add(sessionToAdd);
                        }
                    }
                    sessions = filteredSessions;
                }

                if (sessions != null)
                {
                    var converter = new Converter <ISession, IPresentation>(SessionToPresentation);
                    presentations = sessions.ToList().ConvertAll(converter);
                    foreach (var presentation in presentations)
                    {
                        GetExtendedPresentationData(presentation);
                    }
                }
            }
            return(presentations);
        }