diff --git a/src/environment.cpp b/src/environment.cpp
index bafc91c0020c6dde73db000922b91f39226c66a2..217d50fd594b14b9300d6fc1253d2e99d18ddc30 100644
--- a/src/environment.cpp
+++ b/src/environment.cpp
@@ -203,24 +203,42 @@ u32 Environment::getDayNightRatio()
 
 void Environment::setTimeOfDaySpeed(float speed)
 {
-	JMutexAutoLock(this->m_lock);
+	JMutexAutoLock(this->m_timeofday_lock);
 	m_time_of_day_speed = speed;
 }
 
 float Environment::getTimeOfDaySpeed()
 {
-	JMutexAutoLock(this->m_lock);
+	JMutexAutoLock(this->m_timeofday_lock);
 	float retval = m_time_of_day_speed;
 	return retval;
 }
 
+void Environment::setTimeOfDay(u32 time)
+{
+	JMutexAutoLock(this->m_time_lock);
+	m_time_of_day = time;
+	m_time_of_day_f = (float)time / 24000.0;
+}
+
+u32 Environment::getTimeOfDay()
+{
+	JMutexAutoLock(this->m_time_lock);
+	u32 retval = m_time_of_day;
+	return retval;
+}
+
+float Environment::getTimeOfDayF()
+{
+	JMutexAutoLock(this->m_time_lock);
+	float retval = m_time_of_day_f;
+	return retval;
+}
+
 void Environment::stepTimeOfDay(float dtime)
 {
-	float day_speed = 0;
-	{
-		JMutexAutoLock(this->m_lock);
-		day_speed = m_time_of_day_speed;
-	}
+	// getTimeOfDaySpeed lock the value we need to prevent MT problems
+	float day_speed = getTimeOfDaySpeed();
 	
 	m_time_counter += dtime;
 	f32 speed = day_speed * 24000./(24.*3600);
diff --git a/src/environment.h b/src/environment.h
index 9eb440c4241558d8225d372a4925e1350044e4f5..761e9068bed2998cba352ecc7345c3d572daf1df 100644
--- a/src/environment.h
+++ b/src/environment.h
@@ -81,22 +81,13 @@ class Environment
 	u32 getDayNightRatio();
 
 	// 0-23999
-	virtual void setTimeOfDay(u32 time)
-	{
-		m_time_of_day = time;
-		m_time_of_day_f = (float)time / 24000.0;
-	}
-
-	u32 getTimeOfDay()
-	{ return m_time_of_day; }
-
-	float getTimeOfDayF()
-	{ return m_time_of_day_f; }
+	virtual void setTimeOfDay(u32 time);
+	u32 getTimeOfDay();
+	float getTimeOfDayF();
 
 	void stepTimeOfDay(float dtime);
 
 	void setTimeOfDaySpeed(float speed);
-
 	float getTimeOfDaySpeed();
 
 	void setDayNightRatioOverride(bool enable, u32 value)
@@ -134,7 +125,8 @@ class Environment
 	bool m_cache_enable_shaders;
 
 private:
-	JMutex m_lock;
+	JMutex m_timeofday_lock;
+	JMutex m_time_lock;
 
 };
 
diff --git a/src/server.cpp b/src/server.cpp
index 0bb91d7584cb3557904cc1eee63c6c6143af284f..d2af9f5acf1e238c635eaae97a286f4a605bb517 100644
--- a/src/server.cpp
+++ b/src/server.cpp
@@ -535,23 +535,18 @@ void Server::AsyncRunStep(bool initial_step)
 	/*
 		Update time of day and overall game time
 	*/
-	{
-		JMutexAutoLock envlock(m_env_mutex);
-
-		m_env->setTimeOfDaySpeed(g_settings->getFloat("time_speed"));
+	m_env->setTimeOfDaySpeed(g_settings->getFloat("time_speed"));
 
-		/*
-			Send to clients at constant intervals
-		*/
+	/*
+		Send to clients at constant intervals
+	*/
 
-		m_time_of_day_send_timer -= dtime;
-		if(m_time_of_day_send_timer < 0.0)
-		{
-			m_time_of_day_send_timer = g_settings->getFloat("time_send_interval");
-			u16 time = m_env->getTimeOfDay();
-			float time_speed = g_settings->getFloat("time_speed");
-			SendTimeOfDay(PEER_ID_INEXISTENT, time, time_speed);
-		}
+	m_time_of_day_send_timer -= dtime;
+	if(m_time_of_day_send_timer < 0.0) {
+		m_time_of_day_send_timer = g_settings->getFloat("time_send_interval");
+		u16 time = m_env->getTimeOfDay();
+		float time_speed = g_settings->getFloat("time_speed");
+		SendTimeOfDay(PEER_ID_INEXISTENT, time, time_speed);
 	}
 
 	{