diff --git a/indra/newview/llagent.cpp b/indra/newview/llagent.cpp
index 2691134aa1b2453d394e46073d364bca9cb132c1..2b6ddc7c5b3d23dc74dca80f4f7318a3c5166fba 100644
--- a/indra/newview/llagent.cpp
+++ b/indra/newview/llagent.cpp
@@ -1077,6 +1077,11 @@ void LLAgent::removeRegionChangedCallback(boost::signals2::connection callback)
 	mRegionChangedSignal.disconnect(callback);
 }
 
+void LLAgent::regionChanged()
+{
+	mRegionChangedSignal();
+}
+
 //-----------------------------------------------------------------------------
 // inPrelude()
 //-----------------------------------------------------------------------------
diff --git a/indra/newview/llagent.h b/indra/newview/llagent.h
index 549820ccc3ced3df0e73d58963aa9484f0441a4f..c7de85ac8b44d072dac3d4b0e1ee5ea8bf66f6b0 100644
--- a/indra/newview/llagent.h
+++ b/indra/newview/llagent.h
@@ -266,6 +266,8 @@ public:
     // Capability 
     std::string     getRegionCapability(const std::string &name); // short hand for if (getRegion()) { getRegion()->getCapability(name) }
 
+	void regionChanged();
+
 	/**
 	 * Register a boost callback to be called when the agent changes regions
 	 * Note that if you need to access a capability for the region, you may need to wait
diff --git a/indra/newview/llenvmanager.cpp b/indra/newview/llenvmanager.cpp
index 5c0492ea488a59229c195bc444ef17fddbba741a..f232f08225fec82894e863092e152408ed39f688 100644
--- a/indra/newview/llenvmanager.cpp
+++ b/indra/newview/llenvmanager.cpp
@@ -734,3 +734,50 @@ void LLEnvManagerNew::onRegionChange()
 							   << LL_ENDL;
 	}
 }
+
+class WindLightRefresh : public LLHTTPNode
+{
+	/*virtual*/ void post(
+		LLHTTPNode::ResponsePtr response,
+		const LLSD& context,
+		const LLSD& input) const
+	{
+		if (!input || !context || !input.isMap() || !input.has("body")) {
+			LL_INFOS() << "malformed WindLightRefresh!" << LL_ENDL;	 
+			return;
+		}
+
+		//std::string dump = input["body"].asString();
+		//LL_WARNS() << dump << LL_ENDL;
+
+		LLSD body = input["body"];
+		LLEnvManagerNew* env = LLEnvManagerNew::getInstance();
+
+		LLViewerRegion* regionp = gAgent.getRegion();
+		LLUUID region_uuid = regionp ? regionp->getRegionID() : LLUUID::null;
+
+		env->mNewRegionPrefs.clear();
+		env->mCurRegionUUID = region_uuid;
+
+		if(body.has("Interpolate")) {
+			if(body["Interpolate"].asInteger() == 1) {
+				env->mInterpNextChangeMessage = true;
+			}
+			else {
+				env->mInterpNextChangeMessage = false;
+			}
+		}
+		else {
+			env->mInterpNextChangeMessage = true;
+		}
+		LL_INFOS() << "Windlight Refresh , interpolate:" << env->mInterpNextChangeMessage << LL_ENDL;
+		env->requestRegionSettings();
+
+		// This causes the windlight editor and others to update since the windlight has changed!
+		gAgent.regionChanged();
+	}
+};
+
+LLHTTPRegistration<WindLightRefresh>
+gHTTPRegistrationWindLightRefresh(
+	"/message/WindLightRefresh");
diff --git a/indra/newview/llenvmanager.h b/indra/newview/llenvmanager.h
index 29b8dc15bd5db11daa22f9eae4f306ac0253b770..432c284b1cea44cbc20b1bd12fd2aa570e402a68 100644
--- a/indra/newview/llenvmanager.h
+++ b/indra/newview/llenvmanager.h
@@ -34,6 +34,7 @@
 class LLWLParamManager;
 class LLWaterParamManager;
 class LLWLAnimator;
+class WindLightRefresh;
 
 // generic key
 struct LLEnvKey
@@ -324,6 +325,9 @@ private:
 	bool useRegionSky();
 	bool useRegionWater();
 
+private:
+	friend class WindLightRefresh;
+
 	bool useDefaultSky();
 	bool useDefaultWater();