diff --git a/org.eclipse.jgit.lfs/.settings/.api_filters b/org.eclipse.jgit.lfs/.settings/.api_filters
index 5b8ece6..def21cd 100644
--- a/org.eclipse.jgit.lfs/.settings/.api_filters
+++ b/org.eclipse.jgit.lfs/.settings/.api_filters
@@ -3,7 +3,7 @@
     <resource path="META-INF/MANIFEST.MF">
         <filter id="924844039">
             <message_arguments>
-                <message_argument value="5.4.1"/>
+                <message_argument value="5.4.2"/>
                 <message_argument value="5.4.0"/>
             </message_arguments>
         </filter>
diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/META-INF/MANIFEST.MF b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..ccd83fe
--- /dev/null
+++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/META-INF/MANIFEST.MF
@@ -0,0 +1,5 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: JGit Target Platform Bundle
+Bundle-SymbolicName: org.eclipse.jgit.target
+Bundle-Version: 5.4.2.qualifier
diff --git a/org.eclipse.jgit/.settings/.api_filters b/org.eclipse.jgit/.settings/.api_filters
index 5ca7c0f..30ff73b 100644
--- a/org.eclipse.jgit/.settings/.api_filters
+++ b/org.eclipse.jgit/.settings/.api_filters
@@ -3,7 +3,7 @@
     <resource path="META-INF/MANIFEST.MF">
         <filter id="924844039">
             <message_arguments>
-                <message_argument value="5.4.1"/>
+                <message_argument value="5.4.2"/>
                 <message_argument value="5.4.0"/>
             </message_arguments>
         </filter>
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/api/CloneCommand.java b/org.eclipse.jgit/src/org/eclipse/jgit/api/CloneCommand.java
index 0248ba2..9f63d0f 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/api/CloneCommand.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/api/CloneCommand.java
@@ -713,7 +713,7 @@ private void cleanup() {
 					FileUtils.delete(gitDir, FileUtils.RECURSIVE
 							| FileUtils.SKIP_MISSING | FileUtils.IGNORE_ERRORS);
 				} else {
-					deleteChildren(directory);
+					deleteChildren(gitDir);
 				}
 			}
 		} catch (IOException e) {
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/util/SystemReader.java b/org.eclipse.jgit/src/org/eclipse/jgit/util/SystemReader.java
index 8431196..cec75a2 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/util/SystemReader.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/util/SystemReader.java
@@ -56,6 +56,7 @@
 import java.text.SimpleDateFormat;
 import java.util.Locale;
 import java.util.TimeZone;
+import java.util.concurrent.atomic.AtomicReference;
 
 import org.eclipse.jgit.errors.ConfigInvalidException;
 import org.eclipse.jgit.errors.CorruptObjectException;
@@ -97,9 +98,9 @@ public abstract class SystemReader {
 	private static class Default extends SystemReader {
 		private volatile String hostname;
 
-		private volatile FileBasedConfig systemConfig;
+		private AtomicReference<FileBasedConfig> systemConfig = new AtomicReference<>();
 
-		private volatile FileBasedConfig userConfig;
+		private volatile AtomicReference<FileBasedConfig> userConfig = new AtomicReference<>();
 
 		@Override
 		public String getenv(String variable) {
@@ -113,10 +114,13 @@ public String getProperty(String key) {
 
 		@Override
 		public FileBasedConfig openSystemConfig(Config parent, FS fs) {
-			if (systemConfig == null) {
-				systemConfig = createSystemConfig(parent, fs);
+			FileBasedConfig c = systemConfig.get();
+			if (c == null) {
+				systemConfig.compareAndSet(null,
+						createSystemConfig(parent, fs));
+				c = systemConfig.get();
 			}
-			return systemConfig;
+			return c;
 		}
 
 		protected FileBasedConfig createSystemConfig(Config parent, FS fs) {
@@ -126,7 +130,7 @@ protected FileBasedConfig createSystemConfig(Config parent, FS fs) {
 					return new FileBasedConfig(parent, configFile, fs);
 				}
 			}
-			return new FileBasedConfig(null, fs) {
+			return new FileBasedConfig(parent, null, fs) {
 				@Override
 				public void load() {
 					// empty, do not load
@@ -142,40 +146,35 @@ public boolean isOutdated() {
 
 		@Override
 		public FileBasedConfig openUserConfig(Config parent, FS fs) {
-			if (userConfig == null) {
-				File home = fs.userHome();
-				userConfig = new FileBasedConfig(parent,
-						new File(home, ".gitconfig"), fs); //$NON-NLS-1$
+			FileBasedConfig c = userConfig.get();
+			if (c == null) {
+				userConfig.compareAndSet(null, new FileBasedConfig(parent,
+						new File(fs.userHome(), ".gitconfig"), fs)); //$NON-NLS-1$
+				c = userConfig.get();
 			}
-			return userConfig;
+			return c;
 		}
 
 		@Override
 		public StoredConfig getSystemConfig()
 				throws IOException, ConfigInvalidException {
-			if (systemConfig == null) {
-				systemConfig = createSystemConfig(null, FS.DETECTED);
-			}
-			if (systemConfig.isOutdated()) {
+			FileBasedConfig c = openSystemConfig(null, FS.DETECTED);
+			if (c.isOutdated()) {
 				LOG.debug("loading system config {}", systemConfig); //$NON-NLS-1$
-				systemConfig.load();
+				c.load();
 			}
-			return systemConfig;
+			return c;
 		}
 
 		@Override
 		public StoredConfig getUserConfig()
 				throws IOException, ConfigInvalidException {
-			if (userConfig == null) {
-				userConfig = openUserConfig(getSystemConfig(), FS.DETECTED);
-			} else {
-				getSystemConfig();
-			}
-			if (userConfig.isOutdated()) {
+			FileBasedConfig c = openUserConfig(getSystemConfig(), FS.DETECTED);
+			if (c.isOutdated()) {
 				LOG.debug("loading user config {}", userConfig); //$NON-NLS-1$
-				userConfig.load();
+				c.load();
 			}
-			return userConfig;
+			return c;
 		}
 
 		@Override
