Migrate remote connection timeout preference to EGit core

Migrate the value, if it is set, during the EGit core activator.
Add an API class GitSettings to provide access to some core EGit
settings.

Bug: 563634
Change-Id: Ie854be26ca4bda5a32263599dd1a3f4531167d75
Signed-off-by: Thomas Wolf <thomas.wolf@paranor.ch>
diff --git a/org.eclipse.egit.core/META-INF/MANIFEST.MF b/org.eclipse.egit.core/META-INF/MANIFEST.MF
index 7e058e1..7452139 100644
--- a/org.eclipse.egit.core/META-INF/MANIFEST.MF
+++ b/org.eclipse.egit.core/META-INF/MANIFEST.MF
@@ -48,6 +48,7 @@
    org.eclipse.egit.core.junit",
  org.eclipse.egit.core.project;version="5.10.0";x-friends:="org.eclipse.egit.ui,org.eclipse.egit.ui.test,org.eclipse.egit.gitflow.ui",
  org.eclipse.egit.core.securestorage;version="5.10.0";x-friends:="org.eclipse.egit.ui",
+ org.eclipse.egit.core.settings;version="5.10.0",
  org.eclipse.egit.core.storage;version="5.10.0";
   uses:="org.eclipse.core.runtime,
    org.eclipse.jgit.dircache,
diff --git a/org.eclipse.egit.core/src/org/eclipse/egit/core/Activator.java b/org.eclipse.egit.core/src/org/eclipse/egit/core/Activator.java
index 3c8f7e4..cd4b96a 100644
--- a/org.eclipse.egit.core/src/org/eclipse/egit/core/Activator.java
+++ b/org.eclipse.egit.core/src/org/eclipse/egit/core/Activator.java
@@ -92,6 +92,7 @@
 import org.eclipse.team.core.RepositoryProvider;
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.ServiceReference;
+import org.osgi.service.prefs.BackingStoreException;
 import org.osgi.util.tracker.ServiceTracker;
 
 /**
@@ -223,6 +224,7 @@
 
 		super.start(context);
 		pluginId = context.getBundle().getSymbolicName();
+		migratePreferences();
 
 		FS.FileStoreAttributes.setBackground(true);
 
@@ -275,6 +277,35 @@
 		registerBuiltinLFS();
 	}
 
+	private void migratePreferences() {
+		IEclipsePreferences corePrefs = InstanceScope.INSTANCE
+				.getNode(getPluginId());
+		boolean changed = false;
+		IEclipsePreferences uiPrefs = InstanceScope.INSTANCE
+				.getNode("org.eclipse.egit.ui"); //$NON-NLS-1$
+		String old_ui_preference_key = "remote_connection_timeout"; //$NON-NLS-1$
+		int timeout = corePrefs
+				.getInt(GitCorePreferences.core_remoteConnectionTimeout, -1);
+		if (timeout < 0) {
+			timeout = uiPrefs.getInt(old_ui_preference_key, -1);
+			if (timeout > 0) {
+				corePrefs.putInt(
+						GitCorePreferences.core_remoteConnectionTimeout,
+						timeout);
+				uiPrefs.remove(old_ui_preference_key);
+				changed = true;
+			}
+		}
+		if (changed) {
+			try {
+				corePrefs.flush();
+				uiPrefs.flush();
+			} catch (BackingStoreException e) {
+				logError(e.getMessage(), e);
+			}
+		}
+	}
+
 	@SuppressWarnings("unchecked")
 	private void setupSSH(final BundleContext context) {
 		String sshClient = Platform.getPreferencesService().getString(pluginId,
diff --git a/org.eclipse.egit.core/src/org/eclipse/egit/core/GitCorePreferenceInitializer.java b/org.eclipse.egit.core/src/org/eclipse/egit/core/GitCorePreferenceInitializer.java
index befa40e..bcead64 100644
--- a/org.eclipse.egit.core/src/org/eclipse/egit/core/GitCorePreferenceInitializer.java
+++ b/org.eclipse.egit.core/src/org/eclipse/egit/core/GitCorePreferenceInitializer.java
@@ -39,6 +39,7 @@
 		p.putInt(GitCorePreferences.core_maxPullThreadsCount, 3);
 		p.put(GitCorePreferences.core_sshClient, "apache"); //$NON-NLS-1$
 		p.put(GitCorePreferences.core_httpClient, "apache"); //$NON-NLS-1$
+		p.putInt(GitCorePreferences.core_remoteConnectionTimeout, 30);
 	}
 
 }
diff --git a/org.eclipse.egit.core/src/org/eclipse/egit/core/GitCorePreferences.java b/org.eclipse.egit.core/src/org/eclipse/egit/core/GitCorePreferences.java
index d4c164f..4ae2cb3 100644
--- a/org.eclipse.egit.core/src/org/eclipse/egit/core/GitCorePreferences.java
+++ b/org.eclipse.egit.core/src/org/eclipse/egit/core/GitCorePreferences.java
@@ -94,4 +94,10 @@
 	 */
 	public static final String core_sshClient = "core_ssh_client"; //$NON-NLS-1$
 
+	/**
+	 * The timeout in seconds for establishing a remote connection for cloning,
+	 * pushing, or fetching.
+	 */
+	public static final String core_remoteConnectionTimeout = "core_remote_connection_timeout"; //$NON-NLS-1$
+
 }
diff --git a/org.eclipse.egit.core/src/org/eclipse/egit/core/internal/ProjectReferenceImporter.java b/org.eclipse.egit.core/src/org/eclipse/egit/core/internal/ProjectReferenceImporter.java
index 77f4ec0..56a012c 100644
--- a/org.eclipse.egit.core/src/org/eclipse/egit/core/internal/ProjectReferenceImporter.java
+++ b/org.eclipse.egit.core/src/org/eclipse/egit/core/internal/ProjectReferenceImporter.java
@@ -40,6 +40,7 @@
 import org.eclipse.egit.core.RepositoryUtil;
 import org.eclipse.egit.core.op.CloneOperation;
 import org.eclipse.egit.core.op.ConnectProviderOperation;
+import org.eclipse.egit.core.settings.GitSettings;
 import org.eclipse.jgit.lib.Config;
 import org.eclipse.jgit.lib.ConfigConstants;
 import org.eclipse.jgit.lib.Constants;
@@ -139,7 +140,7 @@
 			}
 		} else {
 			try {
-				int timeout = 60;
+				int timeout = GitSettings.getRemoteConnectionTimeout();
 				final CloneOperation cloneOperation = new CloneOperation(
 						gitUrl, true, null, workDir.toFile(), refToCheckout,
 						Constants.DEFAULT_REMOTE_NAME, timeout);
diff --git a/org.eclipse.egit.core/src/org/eclipse/egit/core/settings/GitSettings.java b/org.eclipse.egit.core/src/org/eclipse/egit/core/settings/GitSettings.java
new file mode 100644
index 0000000..9e3a502
--- /dev/null
+++ b/org.eclipse.egit.core/src/org/eclipse/egit/core/settings/GitSettings.java
@@ -0,0 +1,86 @@
+/*******************************************************************************
+ * Copyright (C) 2020 Thomas Wolf <thomas.wolf@paranor.ch>
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *******************************************************************************/
+package org.eclipse.egit.core.settings;
+
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.Collection;
+import java.util.Objects;
+import java.util.stream.Collectors;
+
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.egit.core.Activator;
+import org.eclipse.egit.core.GitCorePreferences;
+import org.eclipse.egit.core.RepositoryUtil;
+
+/**
+ * API to access some core EGit settings.
+ *
+ * @since 5.10
+ */
+public final class GitSettings {
+
+	private GitSettings() {
+		// No instantiation
+	}
+
+	/**
+	 * Retrieves the configured connection timeout in seconds.
+	 *
+	 * @return the configured connection timeout in seconds; 60 seconds by
+	 *         default.
+	 */
+	public static int getRemoteConnectionTimeout() {
+		return Platform.getPreferencesService().getInt(Activator.getPluginId(),
+				GitCorePreferences.core_remoteConnectionTimeout, 60, null);
+	}
+
+	/**
+	 * Retrieves the {@link Path} of the default directory where to create new
+	 * clones.
+	 *
+	 * @return the {@link Path} to the directory
+	 */
+	public static Path getDefaultRepositoryDir() {
+		return Paths.get(RepositoryUtil.getDefaultRepositoryDir());
+	}
+
+	/**
+	 * Retrieves the set of absolute paths to all repositories configured in
+	 * EGit.
+	 * <p>
+	 * Note that there is no guarantee that all the paths returned correspond to
+	 * existing directories. Repositories can be deleted outside of EGit.
+	 * </p>
+	 *
+	 * @return a collection of absolute path strings pointing to the git
+	 *         directories of repositories configured in EGit.
+	 */
+	public static Collection<Path> getConfiguredRepositoryDirectories() {
+		return Activator.getDefault().getRepositoryUtil().getRepositories()
+				.stream().map(Paths::get).collect(Collectors.toSet());
+	}
+
+	/**
+	 * Adds a repository to the list of repositories configured in EGit.
+	 *
+	 * @param gitDir
+	 *            to add; must not be {@code null}
+	 * @throws IllegalArgumentException
+	 *             if {@code gitDir} does not "look like" a git repository
+	 *             directory
+	 */
+	public static void addConfiguredRepository(Path gitDir)
+			throws IllegalArgumentException {
+		Activator.getDefault().getRepositoryUtil().addConfiguredRepository(
+				Objects.requireNonNull(gitDir).toFile());
+	}
+}
diff --git a/org.eclipse.egit.gitflow.ui/META-INF/MANIFEST.MF b/org.eclipse.egit.gitflow.ui/META-INF/MANIFEST.MF
index 076aeba..fe64157 100644
--- a/org.eclipse.egit.gitflow.ui/META-INF/MANIFEST.MF
+++ b/org.eclipse.egit.gitflow.ui/META-INF/MANIFEST.MF
@@ -14,6 +14,7 @@
  org.eclipse.egit.core.internal.job;version="[5.10.0,5.11.0)",
  org.eclipse.egit.core.op;version="[5.10.0,5.11.0)",
  org.eclipse.egit.core.project;version="[5.10.0,5.11.0)",
+ org.eclipse.egit.core.settings;version="[5.10.0,5.11.0)",
  org.eclipse.egit.gitflow;version="[5.10.0,5.11.0)",
  org.eclipse.egit.gitflow.op;version="[5.10.0,5.11.0)",
  org.eclipse.egit.ui;version="[5.10.0,5.11.0)",
diff --git a/org.eclipse.egit.gitflow.ui/src/org/eclipse/egit/gitflow/ui/internal/UIPreferences.java b/org.eclipse.egit.gitflow.ui/src/org/eclipse/egit/gitflow/ui/internal/UIPreferences.java
index 66dc1dd..0190846 100644
--- a/org.eclipse.egit.gitflow.ui/src/org/eclipse/egit/gitflow/ui/internal/UIPreferences.java
+++ b/org.eclipse.egit.gitflow.ui/src/org/eclipse/egit/gitflow/ui/internal/UIPreferences.java
@@ -15,7 +15,12 @@
  * <p>
  * All plug-in preferences shall be referenced by a constant in this class.
  */
-public class UIPreferences {
+public final class UIPreferences {
+
+	private UIPreferences() {
+		// No instantiation
+	}
+
 	/** */
 	public final static String FEATURE_FINISH_SQUASH = "feature_finish_squash"; //$NON-NLS-1$
 
diff --git a/org.eclipse.egit.gitflow.ui/src/org/eclipse/egit/gitflow/ui/internal/actions/AbstractPublishHandler.java b/org.eclipse.egit.gitflow.ui/src/org/eclipse/egit/gitflow/ui/internal/actions/AbstractPublishHandler.java
index 0cd6f99..24946d9 100644
--- a/org.eclipse.egit.gitflow.ui/src/org/eclipse/egit/gitflow/ui/internal/actions/AbstractPublishHandler.java
+++ b/org.eclipse.egit.gitflow.ui/src/org/eclipse/egit/gitflow/ui/internal/actions/AbstractPublishHandler.java
@@ -17,11 +17,10 @@
 import org.eclipse.core.commands.ExecutionException;
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.egit.core.internal.job.JobUtil;
+import org.eclipse.egit.core.settings.GitSettings;
 import org.eclipse.egit.gitflow.GitFlowRepository;
 import org.eclipse.egit.gitflow.op.CurrentBranchPublishOperation;
-import org.eclipse.egit.ui.Activator;
 import org.eclipse.egit.ui.JobFamilies;
-import org.eclipse.egit.ui.UIPreferences;
 
 /**
  * git flow {feature,release,hotfix} finish
@@ -33,10 +32,8 @@
 		final GitFlowRepository gfRepo = GitFlowHandlerUtil.getRepository(event);
 
 		try {
-			int timeout = Activator.getDefault().getPreferenceStore()
-					.getInt(UIPreferences.REMOTE_CONNECTION_TIMEOUT);
 			CurrentBranchPublishOperation publishOperation = new CurrentBranchPublishOperation(
-					gfRepo, timeout);
+					gfRepo, GitSettings.getRemoteConnectionTimeout());
 			JobUtil.scheduleUserWorkspaceJob(publishOperation,
 					getProgressText(), JobFamilies.REBASE,
 					new PostPublishUiTask(gfRepo, publishOperation));
diff --git a/org.eclipse.egit.gitflow.ui/src/org/eclipse/egit/gitflow/ui/internal/actions/FeatureStartHandler.java b/org.eclipse.egit.gitflow.ui/src/org/eclipse/egit/gitflow/ui/internal/actions/FeatureStartHandler.java
index f11295b..d4f5c74 100644
--- a/org.eclipse.egit.gitflow.ui/src/org/eclipse/egit/gitflow/ui/internal/actions/FeatureStartHandler.java
+++ b/org.eclipse.egit.gitflow.ui/src/org/eclipse/egit/gitflow/ui/internal/actions/FeatureStartHandler.java
@@ -14,14 +14,13 @@
 import org.eclipse.core.commands.ExecutionEvent;
 import org.eclipse.core.commands.ExecutionException;
 import org.eclipse.egit.core.internal.job.JobUtil;
+import org.eclipse.egit.core.settings.GitSettings;
 import org.eclipse.egit.gitflow.GitFlowRepository;
 import org.eclipse.egit.gitflow.op.FeatureStartOperation;
 import org.eclipse.egit.gitflow.op.GitFlowOperation;
 import org.eclipse.egit.gitflow.ui.internal.JobFamilies;
 import org.eclipse.egit.gitflow.ui.internal.UIText;
 import org.eclipse.egit.gitflow.ui.internal.validation.FeatureNameValidator;
-import org.eclipse.egit.ui.Activator;
-import org.eclipse.egit.ui.UIPreferences;
 import org.eclipse.jface.dialogs.InputDialog;
 import org.eclipse.jface.window.Window;
 import org.eclipse.ui.handlers.HandlerUtil;
@@ -50,10 +49,9 @@
 		}
 
 		final String featureName = inputDialog.getValue();
-		int timeout = Activator.getDefault().getPreferenceStore()
-				.getInt(UIPreferences.REMOTE_CONNECTION_TIMEOUT);
 		GitFlowOperation operation = new FeatureStartOperation(
-				gfRepo, featureName, timeout);
+				gfRepo, featureName,
+				GitSettings.getRemoteConnectionTimeout());
 		String fullBranchName = gfRepo.getConfig()
 				.getFullFeatureBranchName(featureName);
 		JobUtil.scheduleUserWorkspaceJob(operation,
diff --git a/org.eclipse.egit.gitflow.ui/src/org/eclipse/egit/gitflow/ui/internal/actions/FeatureTrackHandler.java b/org.eclipse.egit.gitflow.ui/src/org/eclipse/egit/gitflow/ui/internal/actions/FeatureTrackHandler.java
index 350b7b3..2a56414 100644
--- a/org.eclipse.egit.gitflow.ui/src/org/eclipse/egit/gitflow/ui/internal/actions/FeatureTrackHandler.java
+++ b/org.eclipse.egit.gitflow.ui/src/org/eclipse/egit/gitflow/ui/internal/actions/FeatureTrackHandler.java
@@ -27,13 +27,12 @@
 import org.eclipse.core.runtime.jobs.IJobManager;
 import org.eclipse.core.runtime.jobs.Job;
 import org.eclipse.egit.core.internal.job.JobUtil;
+import org.eclipse.egit.core.settings.GitSettings;
 import org.eclipse.egit.gitflow.GitFlowRepository;
 import org.eclipse.egit.gitflow.op.FeatureListOperation;
 import org.eclipse.egit.gitflow.op.FeatureTrackOperation;
 import org.eclipse.egit.gitflow.ui.internal.UIText;
 import org.eclipse.egit.gitflow.ui.internal.dialogs.FeatureBranchSelectionDialog;
-import org.eclipse.egit.ui.Activator;
-import org.eclipse.egit.ui.UIPreferences;
 import org.eclipse.jface.dialogs.MessageDialog;
 import org.eclipse.jface.window.Window;
 import org.eclipse.jgit.lib.Ref;
@@ -53,8 +52,7 @@
 		final List<Ref> refs = new ArrayList<>();
 		Shell activeShell = HandlerUtil.getActiveShell(event);
 
-		int timeout = Activator.getDefault().getPreferenceStore()
-				.getInt(UIPreferences.REMOTE_CONNECTION_TIMEOUT);
+		int timeout = GitSettings.getRemoteConnectionTimeout();
 		FeatureListOperation featureListOperation = new FeatureListOperation(
 				gfRepo, timeout);
 		JobUtil.scheduleUserWorkspaceJob(featureListOperation,
diff --git a/org.eclipse.egit.ui/META-INF/MANIFEST.MF b/org.eclipse.egit.ui/META-INF/MANIFEST.MF
index 7cb303f..3541439 100644
--- a/org.eclipse.egit.ui/META-INF/MANIFEST.MF
+++ b/org.eclipse.egit.ui/META-INF/MANIFEST.MF
@@ -47,6 +47,7 @@
  org.eclipse.egit.core.op;version="[5.10.0,5.11.0)",
  org.eclipse.egit.core.project;version="[5.10.0,5.11.0)",
  org.eclipse.egit.core.securestorage;version="[5.10.0,5.11.0)",
+ org.eclipse.egit.core.settings;version="[5.10.0,5.11.0)",
  org.eclipse.egit.core.synchronize;version="[5.10.0,5.11.0)",
  org.eclipse.egit.core.synchronize.dto;version="[5.10.0,5.11.0)",
  org.eclipse.jgit.annotations;version="[5.10.0,5.11.0)",
diff --git a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/PluginPreferenceInitializer.java b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/PluginPreferenceInitializer.java
index bdd63f8..21a1e96 100644
--- a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/PluginPreferenceInitializer.java
+++ b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/PluginPreferenceInitializer.java
@@ -141,7 +141,6 @@
 		store.setDefault(UIPreferences.HISTORY_SHOW_BRANCH_SEQUENCE, true);
 		store.setDefault(UIPreferences.HISTORY_SHOW_TAG_SEQUENCE, false);
 		store.setDefault(UIPreferences.BLAME_IGNORE_WHITESPACE, false);
-		store.setDefault(UIPreferences.REMOTE_CONNECTION_TIMEOUT, 30 /* seconds */);
 		store.setDefault(UIPreferences.STAGING_VIEW_PRESENTATION,
 				StagingView.Presentation.LIST.name());
 		store.setDefault(UIPreferences.STAGING_VIEW_FILENAME_MODE, true);
diff --git a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/UIPreferences.java b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/UIPreferences.java
index fa5e9ae..2b1d1ce 100644
--- a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/UIPreferences.java
+++ b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/UIPreferences.java
@@ -24,7 +24,12 @@
  * <p>
  * All plug-in preferences shall be referenced by a constant in this class.
  */
-public class UIPreferences {
+public final class UIPreferences {
+
+	private UIPreferences() {
+		// No instantiation
+	}
+
 	/** */
 	public final static String REPOSITORIES_VIEW_FILTERS = "repositories_view_filters"; //$NON-NLS-1$
 	/** */
@@ -184,8 +189,6 @@
 	public static final String REFRESH_ON_INDEX_CHANGE = "refesh_on_index_change"; //$NON-NLS-1$
 	/** */
 	public static final String REFRESH_ONLY_WHEN_ACTIVE = "refesh_only_when_active"; //$NON-NLS-1$
-	/** */
-	public static final String REMOTE_CONNECTION_TIMEOUT = "remote_connection_timeout"; //$NON-NLS-1$
 
 	/** Holds true if the logical model should be used. */
 	public static final String USE_LOGICAL_MODEL = "enable_logical_model"; //$NON-NLS-1$
diff --git a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/actions/SimpleFetchActionHandler.java b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/actions/SimpleFetchActionHandler.java
index 3d51de7..ace5c15 100644
--- a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/actions/SimpleFetchActionHandler.java
+++ b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/actions/SimpleFetchActionHandler.java
@@ -14,8 +14,6 @@
 
 import org.eclipse.core.commands.ExecutionEvent;
 import org.eclipse.core.commands.ExecutionException;
-import org.eclipse.egit.ui.Activator;
-import org.eclipse.egit.ui.UIPreferences;
 import org.eclipse.egit.ui.internal.UIText;
 import org.eclipse.egit.ui.internal.fetch.FetchOperationUI;
 import org.eclipse.egit.ui.internal.fetch.SimpleConfigureFetchDialog;
@@ -46,8 +44,7 @@
 			return null;
 		}
 
-		new FetchOperationUI(repository, config, Activator.getDefault().getPreferenceStore()
-						.getInt(UIPreferences.REMOTE_CONNECTION_TIMEOUT), false).start();
+		new FetchOperationUI(repository, config, false).start();
 		return null;
 	}
 
diff --git a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/clone/AbstractGitCloneWizard.java b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/clone/AbstractGitCloneWizard.java
index 1d35f43..f57f830 100644
--- a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/clone/AbstractGitCloneWizard.java
+++ b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/clone/AbstractGitCloneWizard.java
@@ -45,9 +45,9 @@
 import org.eclipse.egit.core.op.ConfigurePushAfterCloneTask;
 import org.eclipse.egit.core.op.SetRepositoryConfigPropertyTask;
 import org.eclipse.egit.core.securestorage.UserPasswordCredentials;
+import org.eclipse.egit.core.settings.GitSettings;
 import org.eclipse.egit.ui.Activator;
 import org.eclipse.egit.ui.JobFamilies;
-import org.eclipse.egit.ui.UIPreferences;
 import org.eclipse.egit.ui.internal.SecureStoreUtils;
 import org.eclipse.egit.ui.internal.UIText;
 import org.eclipse.egit.ui.internal.clone.GitCloneSourceProviderExtension.CloneSourceProvider;
@@ -254,8 +254,7 @@
 			return false;
 		}
 
-		int timeout = Activator.getDefault().getPreferenceStore()
-				.getInt(UIPreferences.REMOTE_CONNECTION_TIMEOUT);
+		int timeout = GitSettings.getRemoteConnectionTimeout();
 		final CloneOperation op = new CloneOperation(uri, allSelected,
 				selectedBranches, workdir, ref != null ? ref.getName() : null,
 				remoteName, timeout);
diff --git a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/clone/SourceBranchPage.java b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/clone/SourceBranchPage.java
index be9a449..3af27e6 100644
--- a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/clone/SourceBranchPage.java
+++ b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/clone/SourceBranchPage.java
@@ -26,6 +26,7 @@
 import org.eclipse.core.runtime.jobs.JobChangeAdapter;
 import org.eclipse.egit.core.op.ListRemoteOperation;
 import org.eclipse.egit.core.securestorage.UserPasswordCredentials;
+import org.eclipse.egit.core.settings.GitSettings;
 import org.eclipse.egit.ui.Activator;
 import org.eclipse.egit.ui.UIPreferences;
 import org.eclipse.egit.ui.internal.CommonUtils;
@@ -360,9 +361,8 @@
 		final ListRemoteOperation listRemoteOp;
 		final URIish uri = newRepoSelection.getURI();
 		try {
-			int timeout = Activator.getDefault().getPreferenceStore().getInt(
-					UIPreferences.REMOTE_CONNECTION_TIMEOUT);
-			listRemoteOp = new ListRemoteOperation(uri, timeout);
+			listRemoteOp = new ListRemoteOperation(uri,
+					GitSettings.getRemoteConnectionTimeout());
 			if (credentials != null)
 				listRemoteOp
 						.setCredentialsProvider(new EGitCredentialsProvider(
diff --git a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/components/AsynchronousListOperation.java b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/components/AsynchronousListOperation.java
index d8644b8..75741df 100644
--- a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/components/AsynchronousListOperation.java
+++ b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/components/AsynchronousListOperation.java
@@ -17,8 +17,7 @@
 
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.egit.core.op.ListRemoteOperation;
-import org.eclipse.egit.ui.Activator;
-import org.eclipse.egit.ui.UIPreferences;
+import org.eclipse.egit.core.settings.GitSettings;
 import org.eclipse.egit.ui.internal.UIText;
 import org.eclipse.egit.ui.internal.dialogs.CancelableFuture;
 import org.eclipse.jgit.lib.Ref;
@@ -65,8 +64,7 @@
 	protected void prepareRun() throws InvocationTargetException {
 		try {
 			listOp = new ListRemoteOperation(repository, new URIish(uriText),
-					Activator.getDefault().getPreferenceStore()
-							.getInt(UIPreferences.REMOTE_CONNECTION_TIMEOUT));
+					GitSettings.getRemoteConnectionTimeout());
 		} catch (URISyntaxException e) {
 			throw new InvocationTargetException(e);
 		}
diff --git a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/components/RefContentAssistProvider.java b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/components/RefContentAssistProvider.java
index cca8633..803e31a 100644
--- a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/components/RefContentAssistProvider.java
+++ b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/components/RefContentAssistProvider.java
@@ -18,8 +18,8 @@
 
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.egit.core.op.ListRemoteOperation;
+import org.eclipse.egit.core.settings.GitSettings;
 import org.eclipse.egit.ui.Activator;
-import org.eclipse.egit.ui.UIPreferences;
 import org.eclipse.egit.ui.internal.CommonUtils;
 import org.eclipse.egit.ui.internal.UIText;
 import org.eclipse.jface.dialogs.ProgressMonitorDialog;
@@ -88,9 +88,7 @@
 			boolean local = pushMode == source;
 			if (!local) {
 				final ListRemoteOperation lop = new ListRemoteOperation(repo,
-						uri,
-						Activator.getDefault().getPreferenceStore().getInt(
-								UIPreferences.REMOTE_CONNECTION_TIMEOUT));
+						uri, GitSettings.getRemoteConnectionTimeout());
 				IRunnableWithProgress runnable = new IRunnableWithProgress() {
 					@Override
 					public void run(IProgressMonitor monitor)
diff --git a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/components/RefSpecPage.java b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/components/RefSpecPage.java
index 19e167e..6f827b2 100644
--- a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/components/RefSpecPage.java
+++ b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/components/RefSpecPage.java
@@ -20,8 +20,8 @@
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.egit.core.op.ListRemoteOperation;
 import org.eclipse.egit.core.securestorage.UserPasswordCredentials;
+import org.eclipse.egit.core.settings.GitSettings;
 import org.eclipse.egit.ui.Activator;
-import org.eclipse.egit.ui.UIPreferences;
 import org.eclipse.egit.ui.internal.UIIcons;
 import org.eclipse.egit.ui.internal.UIText;
 import org.eclipse.egit.ui.internal.credentials.EGitCredentialsProvider;
@@ -241,9 +241,8 @@
 		try {
 			final URIish uri;
 			uri = newRepoSelection.getURI(pushPage);
-			int timeout = Activator.getDefault().getPreferenceStore().getInt(
-					UIPreferences.REMOTE_CONNECTION_TIMEOUT);
-			listRemotesOp = new ListRemoteOperation(local, uri, timeout);
+			listRemotesOp = new ListRemoteOperation(local, uri,
+					GitSettings.getRemoteConnectionTimeout());
 			if (credentials != null)
 				listRemotesOp
 						.setCredentialsProvider(new EGitCredentialsProvider(
diff --git a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/fetch/FetchGerritChangePage.java b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/fetch/FetchGerritChangePage.java
index a9c9260..b2151d6 100644
--- a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/fetch/FetchGerritChangePage.java
+++ b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/fetch/FetchGerritChangePage.java
@@ -1115,9 +1115,6 @@
 	private RevCommit fetchChange(String uri, RefSpec spec,
 			IProgressMonitor monitor) throws CoreException, URISyntaxException,
 			IOException {
-		int timeout = Activator.getDefault().getPreferenceStore()
-				.getInt(UIPreferences.REMOTE_CONNECTION_TIMEOUT);
-
 		List<RefSpec> specs = new ArrayList<>(1);
 		specs.add(spec);
 
@@ -1125,8 +1122,8 @@
 				.bind(UIText.FetchGerritChangePage_FetchingTaskName,
 						spec.getSource());
 		monitor.subTask(taskName);
-		FetchResult fetchRes = new FetchOperationUI(repository,
-				new URIish(uri), specs, timeout, false).execute(monitor);
+		FetchResult fetchRes = new FetchOperationUI(repository, new URIish(uri),
+				specs, false).execute(monitor);
 
 		monitor.worked(1);
 		try (RevWalk rw = new RevWalk(repository)) {
diff --git a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/fetch/FetchOperationUI.java b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/fetch/FetchOperationUI.java
index 52ce1c8..e3ab739 100644
--- a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/fetch/FetchOperationUI.java
+++ b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/fetch/FetchOperationUI.java
@@ -22,6 +22,7 @@
 import org.eclipse.core.runtime.Status;
 import org.eclipse.core.runtime.jobs.Job;
 import org.eclipse.egit.core.op.FetchOperation;
+import org.eclipse.egit.core.settings.GitSettings;
 import org.eclipse.egit.ui.Activator;
 import org.eclipse.egit.ui.JobFamilies;
 import org.eclipse.egit.ui.UIPreferences;
@@ -55,14 +56,14 @@
 	/**
 	 * @param repository
 	 * @param config
-	 * @param timeout
 	 * @param dryRun
 	 *
 	 */
 	public FetchOperationUI(Repository repository, RemoteConfig config,
-			int timeout, boolean dryRun) {
+			boolean dryRun) {
 		this.repository = repository;
-		op = new FetchOperation(repository, config, timeout, dryRun);
+		op = new FetchOperation(repository, config,
+				GitSettings.getRemoteConnectionTimeout(), dryRun);
 		sourceString = NLS.bind("{0} - {1}", repository.getDirectory() //$NON-NLS-1$
 				.getParentFile().getName(), config.getName());
 
@@ -72,13 +73,13 @@
 	 * @param repository
 	 * @param uri
 	 * @param specs
-	 * @param timeout
 	 * @param dryRun
 	 */
 	public FetchOperationUI(Repository repository, URIish uri,
-			List<RefSpec> specs, int timeout, boolean dryRun) {
+			List<RefSpec> specs, boolean dryRun) {
 		this.repository = repository;
-		op = new FetchOperation(repository, uri, specs, timeout, dryRun);
+		op = new FetchOperation(repository, uri, specs,
+				GitSettings.getRemoteConnectionTimeout(), dryRun);
 		sourceString = uri.toPrivateString();
 	}
 
diff --git a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/fetch/FetchSourcePage.java b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/fetch/FetchSourcePage.java
index f4e0533..44b4bf7 100644
--- a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/fetch/FetchSourcePage.java
+++ b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/fetch/FetchSourcePage.java
@@ -17,8 +17,7 @@
 
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.egit.core.op.ListRemoteOperation;
-import org.eclipse.egit.ui.Activator;
-import org.eclipse.egit.ui.UIPreferences;
+import org.eclipse.egit.core.settings.GitSettings;
 import org.eclipse.egit.ui.UIUtils;
 import org.eclipse.egit.ui.internal.CommonUtils;
 import org.eclipse.egit.ui.internal.UIText;
@@ -135,8 +134,7 @@
 			List<Ref> proposals = new ArrayList<>();
 			uriToCheck = config.getURIs().get(0);
 			final ListRemoteOperation lop = new ListRemoteOperation(repository,
-					uriToCheck, Activator.getDefault().getPreferenceStore()
-							.getInt(UIPreferences.REMOTE_CONNECTION_TIMEOUT));
+					uriToCheck, GitSettings.getRemoteConnectionTimeout());
 			try {
 				new ProgressMonitorDialog(getShell()).run(true, true,
 						new IRunnableWithProgress() {
diff --git a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/fetch/FetchWizard.java b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/fetch/FetchWizard.java
index 5146b27..edc3259 100644
--- a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/fetch/FetchWizard.java
+++ b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/fetch/FetchWizard.java
@@ -19,7 +19,6 @@
 import org.eclipse.core.runtime.Status;
 import org.eclipse.egit.core.securestorage.UserPasswordCredentials;
 import org.eclipse.egit.ui.Activator;
-import org.eclipse.egit.ui.UIPreferences;
 import org.eclipse.egit.ui.internal.SecureStoreUtils;
 import org.eclipse.egit.ui.internal.UIIcons;
 import org.eclipse.egit.ui.internal.UIText;
@@ -110,20 +109,18 @@
 		}
 
 		final FetchOperationUI op;
-		int timeout = Activator.getDefault().getPreferenceStore().getInt(
-				UIPreferences.REMOTE_CONNECTION_TIMEOUT);
 		final RepositorySelection repoSelection = repoPage.getSelection();
 
 		if (calledFromRepoPage)
 			op = new FetchOperationUI(localDb, repoSelection.getConfig(),
-					timeout, false);
+					false);
 		else if (repoSelection.isConfigSelected())
 			op = new FetchOperationUI(localDb, repoSelection.getConfig()
-					.getURIs().get(0), refSpecPage.getRefSpecs(), timeout,
+					.getURIs().get(0), refSpecPage.getRefSpecs(),
 					false);
 		else
 			op = new FetchOperationUI(localDb, repoSelection.getURI(false),
-					refSpecPage.getRefSpecs(), timeout, false);
+					refSpecPage.getRefSpecs(), false);
 
 		UserPasswordCredentials credentials = repoPage.getCredentials();
 		if (credentials != null)
diff --git a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/fetch/SimpleConfigureFetchDialog.java b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/fetch/SimpleConfigureFetchDialog.java
index 276dc8a..03f351a 100644
--- a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/fetch/SimpleConfigureFetchDialog.java
+++ b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/fetch/SimpleConfigureFetchDialog.java
@@ -21,7 +21,6 @@
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.egit.ui.Activator;
-import org.eclipse.egit.ui.UIPreferences;
 import org.eclipse.egit.ui.internal.UIText;
 import org.eclipse.egit.ui.internal.dialogs.AbstractConfigureRemoteDialog;
 import org.eclipse.egit.ui.internal.selection.SelectionRepositoryStateCache;
@@ -266,10 +265,8 @@
 
 	@Override
 	protected void dryRun(IProgressMonitor monitor) {
-		int timeout = Activator.getDefault().getPreferenceStore()
-				.getInt(UIPreferences.REMOTE_CONNECTION_TIMEOUT);
 		final FetchOperationUI op = new FetchOperationUI(getRepository(),
-				getConfig(), timeout, true);
+				getConfig(), true);
 		try {
 			final FetchResult result = op.execute(monitor);
 			getShell().getDisplay().asyncExec(new Runnable() {
@@ -290,10 +287,8 @@
 
 	@Override
 	protected void performOperation() {
-		int timeout = Activator.getDefault().getPreferenceStore()
-				.getInt(UIPreferences.REMOTE_CONNECTION_TIMEOUT);
 		FetchOperationUI op = new FetchOperationUI(getRepository(), getConfig(),
-				timeout, false);
+				false);
 		op.start();
 	}
 }
diff --git a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/preferences/GitPreferenceRoot.java b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/preferences/GitPreferenceRoot.java
index 653753b..02bc3df 100644
--- a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/preferences/GitPreferenceRoot.java
+++ b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/preferences/GitPreferenceRoot.java
@@ -216,9 +216,16 @@
 		addField(pullEditor);
 
 		IntegerFieldEditor timeoutEditor = new IntegerFieldEditor(
-				UIPreferences.REMOTE_CONNECTION_TIMEOUT,
+				GitCorePreferences.core_remoteConnectionTimeout,
 				UIText.RemoteConnectionPreferencePage_TimeoutLabel,
-				remoteConnectionsGroup);
+				remoteConnectionsGroup) {
+
+			@Override
+			public void setPreferenceStore(IPreferenceStore store) {
+				super.setPreferenceStore(
+						store == null ? null : getSecondaryPreferenceStore());
+			}
+		};
 		timeoutEditor.getLabelControl(remoteConnectionsGroup).setToolTipText(
 				UIText.RemoteConnectionPreferencePage_ZeroValueTooltip);
 		addField(timeoutEditor);
diff --git a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/pull/PullOperationUI.java b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/pull/PullOperationUI.java
index 506bfc4..0cb203b 100644
--- a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/pull/PullOperationUI.java
+++ b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/pull/PullOperationUI.java
@@ -35,9 +35,9 @@
 import org.eclipse.core.runtime.jobs.JobChangeAdapter;
 import org.eclipse.egit.core.op.PullOperation;
 import org.eclipse.egit.core.op.PullOperation.PullReferenceConfig;
+import org.eclipse.egit.core.settings.GitSettings;
 import org.eclipse.egit.ui.Activator;
 import org.eclipse.egit.ui.JobFamilies;
-import org.eclipse.egit.ui.UIPreferences;
 import org.eclipse.egit.ui.internal.UIRepositoryUtils;
 import org.eclipse.egit.ui.internal.UIText;
 import org.eclipse.egit.ui.internal.branch.LaunchFinder;
@@ -81,9 +81,8 @@
 	 */
 	public PullOperationUI(Set<Repository> repositories) {
 		this.repositories = repositories.toArray(new Repository[0]);
-		int timeout = Activator.getDefault().getPreferenceStore().getInt(
-				UIPreferences.REMOTE_CONNECTION_TIMEOUT);
-		pullOperation = new PullOperation(repositories, timeout);
+		pullOperation = new PullOperation(repositories,
+				GitSettings.getRemoteConnectionTimeout());
 		pullOperation.setCredentialsProvider(new EGitCredentialsProvider());
 		for (Repository repository : repositories)
 			results.put(repository, NOT_TRIED_STATUS);
@@ -95,9 +94,8 @@
 	public PullOperationUI(Map<Repository, PullReferenceConfig> configs) {
 		this.repositories = configs.keySet()
 				.toArray(new Repository[0]);
-		int timeout = Activator.getDefault().getPreferenceStore()
-				.getInt(UIPreferences.REMOTE_CONNECTION_TIMEOUT);
-		pullOperation = new PullOperation(configs, timeout);
+		pullOperation = new PullOperation(configs,
+				GitSettings.getRemoteConnectionTimeout());
 		pullOperation.setCredentialsProvider(new EGitCredentialsProvider());
 		for (Repository repository : repositories) {
 			results.put(repository, NOT_TRIED_STATUS);
diff --git a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/push/ConfirmationPage.java b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/push/ConfirmationPage.java
index 64853a5..6eb0b17 100644
--- a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/push/ConfirmationPage.java
+++ b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/push/ConfirmationPage.java
@@ -25,8 +25,8 @@
 import org.eclipse.egit.core.op.PushOperationResult;
 import org.eclipse.egit.core.op.PushOperationSpecification;
 import org.eclipse.egit.core.securestorage.UserPasswordCredentials;
+import org.eclipse.egit.core.settings.GitSettings;
 import org.eclipse.egit.ui.Activator;
-import org.eclipse.egit.ui.UIPreferences;
 import org.eclipse.egit.ui.internal.UIText;
 import org.eclipse.egit.ui.internal.components.RepositorySelection;
 import org.eclipse.egit.ui.internal.credentials.EGitCredentialsProvider;
@@ -198,9 +198,8 @@
 			final PushOperationSpecification spec = new PushOperationSpecification();
 			for (final URIish uri : displayedRepoSelection.getPushURIs())
 				spec.addURIRefUpdates(uri, copyUpdates(updates));
-			int timeout = Activator.getDefault().getPreferenceStore().getInt(
-					UIPreferences.REMOTE_CONNECTION_TIMEOUT);
-			operation = new PushOperation(local, spec, true, timeout);
+			operation = new PushOperation(local, spec, true,
+					GitSettings.getRemoteConnectionTimeout());
 			if (credentials != null)
 				operation.setCredentialsProvider(new EGitCredentialsProvider(
 						credentials.getUser(), credentials.getPassword()));
diff --git a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/push/PushOperationUI.java b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/push/PushOperationUI.java
index 680f2e8..e84e291 100644
--- a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/push/PushOperationUI.java
+++ b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/push/PushOperationUI.java
@@ -25,8 +25,8 @@
 import org.eclipse.egit.core.op.PushOperation;
 import org.eclipse.egit.core.op.PushOperationResult;
 import org.eclipse.egit.core.op.PushOperationSpecification;
+import org.eclipse.egit.core.settings.GitSettings;
 import org.eclipse.egit.ui.Activator;
-import org.eclipse.egit.ui.UIPreferences;
 import org.eclipse.egit.ui.internal.UIText;
 import org.eclipse.egit.ui.internal.credentials.EGitCredentialsProvider;
 import org.eclipse.jgit.annotations.NonNull;
@@ -176,7 +176,8 @@
 
 	private void createPushOperation() throws CoreException {
 		if (remoteName != null) {
-			op = new PushOperation(repository, remoteName, dryRun, getTimeout());
+			op = new PushOperation(repository, remoteName, dryRun,
+					GitSettings.getRemoteConnectionTimeout());
 			return;
 		}
 
@@ -214,7 +215,8 @@
 				}
 			}
 		}
-		op = new PushOperation(repository, spec, dryRun, getTimeout());
+		op = new PushOperation(repository, spec, dryRun,
+				GitSettings.getRemoteConnectionTimeout());
 	}
 
 	/**
@@ -251,11 +253,6 @@
 		return destinationString;
 	}
 
-	private int getTimeout() {
-		return Activator.getDefault().getPreferenceStore()
-				.getInt(UIPreferences.REMOTE_CONNECTION_TIMEOUT);
-	}
-
 	/**
 	 * Defines the {@link PushMode}.If not set explicitly,
 	 * {@link PushMode#UPSTREAM} is assumed.
diff --git a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/push/PushWizard.java b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/push/PushWizard.java
index 1cdf3d1..11cf0c2 100644
--- a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/push/PushWizard.java
+++ b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/push/PushWizard.java
@@ -26,8 +26,8 @@
 import org.eclipse.egit.core.op.PushOperationResult;
 import org.eclipse.egit.core.op.PushOperationSpecification;
 import org.eclipse.egit.core.securestorage.UserPasswordCredentials;
+import org.eclipse.egit.core.settings.GitSettings;
 import org.eclipse.egit.ui.Activator;
-import org.eclipse.egit.ui.UIPreferences;
 import org.eclipse.egit.ui.internal.SecureStoreUtils;
 import org.eclipse.egit.ui.internal.UIIcons;
 import org.eclipse.egit.ui.internal.UIText;
@@ -252,8 +252,7 @@
 					spec.addURIRefUpdates(uri, ConfirmationPage
 							.copyUpdates(updates));
 			}
-			int timeout = Activator.getDefault().getPreferenceStore().getInt(
-					UIPreferences.REMOTE_CONNECTION_TIMEOUT);
+			int timeout = GitSettings.getRemoteConnectionTimeout();
 			return new PushOperation(localDb, spec, false, timeout);
 		} catch (final IOException e) {
 			ErrorDialog.openError(getShell(),
diff --git a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/tree/command/FetchConfiguredRemoteCommand.java b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/tree/command/FetchConfiguredRemoteCommand.java
index 40cf2ff..f973c00 100644
--- a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/tree/command/FetchConfiguredRemoteCommand.java
+++ b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/tree/command/FetchConfiguredRemoteCommand.java
@@ -21,8 +21,6 @@
 
 import org.eclipse.core.commands.ExecutionEvent;
 import org.eclipse.core.commands.ExecutionException;
-import org.eclipse.egit.ui.Activator;
-import org.eclipse.egit.ui.UIPreferences;
 import org.eclipse.egit.ui.internal.UIText;
 import org.eclipse.egit.ui.internal.fetch.FetchOperationUI;
 import org.eclipse.egit.ui.internal.fetch.SimpleConfigureFetchDialog;
@@ -54,10 +52,7 @@
 							UIText.SimpleFetchActionHandler_NothingToFetchDialogMessage);
 			return null;
 		}
-		int timeout = Activator.getDefault().getPreferenceStore()
-				.getInt(UIPreferences.REMOTE_CONNECTION_TIMEOUT);
-		new FetchOperationUI(node.getRepository(), config, timeout, false)
-				.start();
+		new FetchOperationUI(node.getRepository(), config, false).start();
 		return null;
 	}
 
diff --git a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/synchronize/SynchronizeFetchJob.java b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/synchronize/SynchronizeFetchJob.java
index 409510b..50cb394 100644
--- a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/synchronize/SynchronizeFetchJob.java
+++ b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/synchronize/SynchronizeFetchJob.java
@@ -20,7 +20,6 @@
 import org.eclipse.egit.core.synchronize.dto.GitSynchronizeData;
 import org.eclipse.egit.core.synchronize.dto.GitSynchronizeDataSet;
 import org.eclipse.egit.ui.Activator;
-import org.eclipse.egit.ui.UIPreferences;
 import org.eclipse.egit.ui.internal.UIText;
 import org.eclipse.egit.ui.internal.credentials.EGitCredentialsProvider;
 import org.eclipse.egit.ui.internal.fetch.FetchOperationUI;
@@ -34,15 +33,11 @@
 
 class SynchronizeFetchJob extends WorkspaceJob {
 
-	private final int timeout;
-
 	private final GitSynchronizeDataSet gsdSet;
 
 	SynchronizeFetchJob(GitSynchronizeDataSet gsdSet) {
 		super(UIText.SynchronizeFetchJob_JobName);
 		this.gsdSet = gsdSet;
-		timeout = Activator.getDefault().getPreferenceStore()
-				.getInt(UIPreferences.REMOTE_CONNECTION_TIMEOUT);
 	}
 
 	@Override
@@ -72,7 +67,7 @@
 			}
 
 			FetchOperationUI fetchOperationUI = new FetchOperationUI(repo,
-					config, timeout, false);
+					config, false);
 			fetchOperationUI.setCredentialsProvider(new EGitCredentialsProvider());
 			try {
 				fetchOperationUI.execute(progress.newChild(1));