private void StartSync()
        {
            SetSyncControlProperties(true);

            var syncThread = new Thread(() =>
            {
                if (TraktSettings.AccountStatus != ConnectionState.Connected)
                {
                    // stop sync
                    SetSyncControlProperties(false);
                    TraktSettings.AccountStatus = ConnectionState.Pending;
                    return;
                }

                TraktLogger.Info("Library and Playback Sync started for all enabled plugins");

                // get data from online and store in cache so its readily available for plugin sync
                // data will also be used in user activity feed on the dashboard
                if (!TraktCache.RefreshData())
                {
                    return;
                }

                foreach (var item in clbPlugins.CheckedItems)
                {
                    try
                    {
                        switch (item.ToString())
                        {
                        case "Moving Pictures":
                            var movingPictures = new MovingPictures(TraktSettings.MovingPictures);
                            movingPictures.SyncLibrary();
                            movingPictures.SyncProgress();
                            break;

                        case "MP-TVSeries":
                            var tvSeries = new TVSeries(TraktSettings.TVSeries);
                            tvSeries.SyncLibrary();
                            tvSeries.SyncProgress();
                            break;

                        case "My Videos":
                            var myVideos = new MyVideos(TraktSettings.MyVideos);
                            myVideos.SyncLibrary();
                            myVideos.SyncProgress();
                            break;

                        case "My Films":
                            var myFilms = new MyFilmsHandler(TraktSettings.MyFilms);
                            myFilms.SyncLibrary();
                            myFilms.SyncProgress();
                            break;
                        }
                    }
                    catch (Exception ex)
                    {
                        TraktLogger.Error("Error synchronising library, Plugin = '{0}', Error = '{1}'", item.ToString(), ex.Message);
                        continue;
                    }
                }

                // save user activity cache
                TraktCache.Save();

                TraktLogger.Info("Library and Playback Sync completed for all enabled plugins");
                SetSyncControlProperties(false);

                if (SilentMode || AutoCloseAfterSync)
                {
                    CloseConfig();
                }
            })
            {
                Name         = "Sync",
                IsBackground = true
            };

            syncThread.Start();
        }