diff --git a/src/settings.h b/src/settings.h
index 6300ddd6f60d195fa883bcea8a4861442ade6c29..bfe7dd5a455487fef1cd92f7932df2f73d6e474c 100644
--- a/src/settings.h
+++ b/src/settings.h
@@ -741,9 +741,7 @@ class Settings
 	void clear()
 	{
 		JMutexAutoLock lock(m_mutex);
-
-		m_settings.clear();
-		m_defaults.clear();
+		clearNoLock();
 	}
 
 	void updateValue(const Settings &other, const std::string &name)
@@ -758,8 +756,6 @@ class Settings
 			m_settings[name] = val;
 		} catch (SettingNotFoundException &e) {
 		}
-
-		return;
 	}
 
 	void update(const Settings &other)
@@ -770,17 +766,14 @@ class Settings
 		JMutexAutoLock lock(m_mutex);
 		JMutexAutoLock lock2(other.m_mutex);
 
-		m_settings.insert(other.m_settings.begin(), other.m_settings.end());
-		m_defaults.insert(other.m_defaults.begin(), other.m_defaults.end());
-
-		return;
+		updateNoLock(other);
 	}
 
 	Settings & operator+=(const Settings &other)
 	{
 		update(other);
-		return *this;
 
+		return *this;
 	}
 
 	Settings & operator=(const Settings &other)
@@ -791,14 +784,27 @@ class Settings
 		JMutexAutoLock lock(m_mutex);
 		JMutexAutoLock lock2(other.m_mutex);
 
-
-		clear();
-		update(other);
+		clearNoLock();
+		updateNoLock(other);
 
 		return *this;
 	}
 
 private:
+
+	void updateNoLock(const Settings &other)
+	{
+		m_settings.insert(other.m_settings.begin(), other.m_settings.end());
+		m_defaults.insert(other.m_defaults.begin(), other.m_defaults.end());
+	}
+
+	void clearNoLock()
+	{
+		m_settings.clear();
+		m_defaults.clear();
+	}
+
+
 	std::map<std::string, std::string> m_settings;
 	std::map<std::string, std::string> m_defaults;
 	// All methods that access m_settings/m_defaults directly should lock this.