public void Dispose()
        {
            lock (sync) {
                if (disposing | disposed)
                {
                    return;
                }
                else
                {
                    disposing = true;
                }
            }

            Application.IdleTimeoutRemove(refresh_timeout_id);
            refresh_timeout_id = 0;

            ServiceManager.PlayerEngine.DisconnectEvent(OnPlayerEvent);
            ServiceManager.Get <DBusCommandService> ().ArgumentPushed -= OnCommandLineArgument;
            ServiceManager.Get <Network> ().StateChanged -= OnNetworkStateChanged;

            if (download_manager_iface != null)
            {
                download_manager_iface.Dispose();
                download_manager_iface = null;
            }

            if (feeds_manager != null)
            {
                feeds_manager.Dispose();
                feeds_manager = null;
            }

            if (download_manager != null)
            {
                download_manager.Dispose();
                download_manager = null;
            }

            DisposeInterface();

            lock (sync) {
                disposing = false;
                disposed  = true;
            }
        }