void shoutsWorker_DoWork(object sender, DoWorkEventArgs e)
		{
			AnimeSeriesVM ser = e.Argument as AnimeSeriesVM;
			List<Trakt_ShoutUserVM> tempShouts = new List<Trakt_ShoutUserVM>();

			try
			{
				System.Windows.Application.Current.Dispatcher.Invoke(System.Windows.Threading.DispatcherPriority.Normal, (Action)delegate()
				{
					Shouts.Clear();
				});

				// get shouts from trakt
				List<JMMServerBinary.Contract_Trakt_ShoutUser> rawShouts = JMMServerVM.Instance.clientBinaryHTTP.GetTraktShoutsForAnime(ser.AniDB_ID);
				foreach (JMMServerBinary.Contract_Trakt_ShoutUser contract in rawShouts)
				{
					Trakt_ShoutUserVM shout = new Trakt_ShoutUserVM(contract);

					shout.DelayedUserImage = @"/Images/blankposter.png";
					System.Windows.Application.Current.Dispatcher.Invoke(System.Windows.Threading.DispatcherPriority.Normal, (Action)delegate()
					{
						Shouts.Add(shout);
					});

					imagesToDownload.Add(shout);
				}

				// get recommendations from AniDB
				List<JMMServerBinary.Contract_AniDB_Recommendation> rawRecs = JMMServerVM.Instance.clientBinaryHTTP.GetAniDBRecommendations(ser.AniDB_ID);
				foreach (JMMServerBinary.Contract_AniDB_Recommendation contract in rawRecs)
				{
					AniDB_RecommendationVM rec = new AniDB_RecommendationVM(contract);

					rec.DelayedUserImage = @"/Images/blankposter.png";
					System.Windows.Application.Current.Dispatcher.Invoke(System.Windows.Threading.DispatcherPriority.Normal, (Action)delegate()
					{
						Shouts.Add(rec);
					});

					imagesToDownload.Add(rec);
				}

			}
			catch (Exception ex)
			{
				logger.ErrorException(ex.ToString(), ex);
			}
		}
        void commentsWorker_DoWork(object sender, DoWorkEventArgs e)
        {
            AnimeSeriesVM ser = e.Argument as AnimeSeriesVM;
            List<Trakt_CommentUserVM> tempComments = new List<Trakt_CommentUserVM>();

            try
            {
                System.Windows.Application.Current.Dispatcher.Invoke(System.Windows.Threading.DispatcherPriority.Normal, (Action)delegate ()
                {
                    Comments.Clear();
                });

                // get comments from trakt
                List<JMMServerBinary.Contract_Trakt_CommentUser> rawComments = JMMServerVM.Instance.clientBinaryHTTP.GetTraktCommentsForAnime(ser.AniDB_ID);
                foreach (JMMServerBinary.Contract_Trakt_CommentUser contract in rawComments)
                {
                    Trakt_CommentUserVM comment = new Trakt_CommentUserVM(contract);

                    System.Windows.Application.Current.Dispatcher.Invoke(System.Windows.Threading.DispatcherPriority.Normal, (Action)delegate ()
                    {
                        Comments.Add(comment);
                    });

                }

                // get recommendations from AniDB
                List<JMMServerBinary.Contract_AniDB_Recommendation> rawRecs = JMMServerVM.Instance.clientBinaryHTTP.GetAniDBRecommendations(ser.AniDB_ID);
                foreach (JMMServerBinary.Contract_AniDB_Recommendation contract in rawRecs)
                {
                    AniDB_RecommendationVM rec = new AniDB_RecommendationVM(contract);

                    System.Windows.Application.Current.Dispatcher.Invoke(System.Windows.Threading.DispatcherPriority.Normal, (Action)delegate ()
                    {
                        Comments.Add(rec);
                    });
                }

            }
            catch (Exception ex)
            {
                logger.ErrorException(ex.ToString(), ex);
            }
        }
        void refreshDataWorker_DoWork(object sender, DoWorkEventArgs e)
        {
            List<object> tempComments = new List<object>();

            try
            {
                AnimeSeriesVM animeSeries = (AnimeSeriesVM)e.Argument;
                if (animeSeries == null) return;

                // get comments from Trakt
                List<JMMServerBinary.Contract_Trakt_CommentUser> rawComments = JMMServerVM.Instance.clientBinaryHTTP.GetTraktCommentsForAnime(animeSeries.AniDB_ID);
                foreach (JMMServerBinary.Contract_Trakt_CommentUser contract in rawComments)
                {
                    Trakt_CommentUserVM traktComment = new Trakt_CommentUserVM(contract);
                    tempComments.Add(traktComment);
                }

                // get comments from AniDB
                // get recommendations from AniDB
                List<JMMServerBinary.Contract_AniDB_Recommendation> rawRecs = JMMServerVM.Instance.clientBinaryHTTP.GetAniDBRecommendations(animeSeries.AniDB_ID);
                foreach (JMMServerBinary.Contract_AniDB_Recommendation contract in rawRecs)
                {
                    AniDB_RecommendationVM rec = new AniDB_RecommendationVM(contract);
                    tempComments.Add(rec);
                }
            }
            catch (Exception ex)
            {
                Utils.ShowErrorMessage(ex);
            }

            e.Result = tempComments;
        }