diff --git a/indra/newview/lldrawpoolsky.cpp b/indra/newview/lldrawpoolsky.cpp
index 12614b5e2d6adf742648d8c9c00db812283b609f..dbe8724088716f844bd60a368dba81c721891239 100644
--- a/indra/newview/lldrawpoolsky.cpp
+++ b/indra/newview/lldrawpoolsky.cpp
@@ -111,37 +111,52 @@ void LLDrawPoolSky::render(S32 pass)
 	LLVertexBuffer::unbind();
 	gGL.diffuseColor4f(1,1,1,1);
 
-	for (S32 i = 0; i < llmin(6, face_count); ++i)
+	for (S32 i = 0; i < face_count; ++i)
 	{
-		renderSkyCubeFace(i);
+		renderSkyFace(i);
 	}
 
 	gGL.popMatrix();
 }
 
-void LLDrawPoolSky::renderSkyCubeFace(U8 side)
+void LLDrawPoolSky::renderSkyFace(U8 index)
 {
-	LLFace &face = *mDrawFace[LLVOSky::FACE_SIDE0 + side];
-	if (!face.getGeomCount())
+	LLFace* face = mDrawFace[index];
+
+	if (!face || !face->getGeomCount())
 	{
 		return;
 	}
 
-	llassert(mSkyTex);
-	mSkyTex[side].bindTexture(TRUE);
-
-    gGL.getTexUnit(0)->setTextureColorSpace(LLTexUnit::TCS_SRGB);
-
-	face.renderIndexed();
-
-	if (LLSkyTex::doInterpolate())
-	{
-		
-		LLGLEnable blend(GL_BLEND);
-		mSkyTex[side].bindTexture(FALSE);
-		gGL.diffuseColor4f(1, 1, 1, LLSkyTex::getInterpVal()); // lighting is disabled
-		face.renderIndexed();
-	}
+    F32 interp_val = gSky.mVOSkyp ? gSky.mVOSkyp->getInterpVal() : 0.0f;
+
+    if (index < 6) // sky tex...interp
+    {
+        llassert(mSkyTex);
+	    mSkyTex[index].bindTexture(true); // bind the current tex
+
+        face->renderIndexed();
+
+        if (interp_val > 0.01f) // iff, we've got enough info to lerp (a to and a from)
+	    {
+		    LLGLEnable blend(GL_BLEND);
+            llassert(mSkyTex);
+	        mSkyTex[index].bindTexture(false); // bind the "other" texture
+		    gGL.diffuseColor4f(1, 1, 1, interp_val); // lighting is disabled
+		    face->renderIndexed();
+	    }
+    }
+    else // heavenly body faces, no interp...
+    {
+        LLGLEnable blend(GL_BLEND);
+
+        LLViewerTexture* tex = face->getTexture(LLRender::DIFFUSE_MAP);
+        if (tex)
+        {
+            gGL.getTexUnit(0)->bind(tex, true);
+            face->renderIndexed();
+        }
+    }
 }
 
 void LLDrawPoolSky::endRenderPass( S32 pass )
diff --git a/indra/newview/lldrawpoolsky.h b/indra/newview/lldrawpoolsky.h
index 098bd2134ae28b60f3085bf34439f4a649d0e54b..916d8c1cbe7243892900a4db5dcf6b59cf058537 100644
--- a/indra/newview/lldrawpoolsky.h
+++ b/indra/newview/lldrawpoolsky.h
@@ -61,7 +61,7 @@ class LLDrawPoolSky : public LLFacePool
 	/*virtual*/ void endRenderPass(S32 pass);
 	void setSkyTex(LLSkyTex* const st) { mSkyTex = st; }
 
-	void renderSkyCubeFace(U8 side);
+	void renderSkyFace(U8 index);
 	void renderHeavenlyBody(U8 hb, LLFace* face);
 	void renderSunHalo(LLFace* face);
 
diff --git a/indra/newview/lllegacyatmospherics.cpp b/indra/newview/lllegacyatmospherics.cpp
index 1660a1897e6bb964a1cebcfa39569a4dfa14420c..720c7e238854bdf7be6c6c3111d40ba686dbde92 100644
--- a/indra/newview/lllegacyatmospherics.cpp
+++ b/indra/newview/lllegacyatmospherics.cpp
@@ -442,7 +442,7 @@ void LLAtmospherics::updateFog(const F32 distance, const LLVector3& tosun_in)
     vars.density_multiplier = psky->getDensityMultiplier();    
     vars.distance_multiplier = psky->getDistanceMultiplier();
     vars.max_y = psky->getMaxY();
-    vars.sun_norm = LLEnvironment::instance().getLightDirectionCFR();
+    vars.sun_norm = LLEnvironment::instance().getSunDirectionCFR();
     vars.sunlight = psky->getSunlightColor();
     vars.ambient = psky->getAmbientColor();    
     vars.glow = psky->getGlow();
diff --git a/indra/newview/llvosky.cpp b/indra/newview/llvosky.cpp
index ad452659c63565e76fe0fa5c1bbe07089367c5a5..8d5c0f04cd9735fdbe16ec1436877e0d23a28cd2 100644
--- a/indra/newview/llvosky.cpp
+++ b/indra/newview/llvosky.cpp
@@ -90,7 +90,6 @@ namespace
 
 S32 LLSkyTex::sComponents = 4;
 S32 LLSkyTex::sResolution = 64;
-F32 LLSkyTex::sInterpVal = 0.f;
 S32 LLSkyTex::sCurrent = 0;
 
 
@@ -479,7 +478,7 @@ void LLVOSky::init()
     m_atmosphericsVars.haze_horizon = psky->getHazeHorizon();
     m_atmosphericsVars.density_multiplier = psky->getDensityMultiplier();
     m_atmosphericsVars.max_y = psky->getMaxY();
-    m_atmosphericsVars.sun_norm = LLEnvironment::instance().getClampedLightNorm();
+    m_atmosphericsVars.sun_norm = LLEnvironment::instance().getClampedSunNorm();
     m_atmosphericsVars.sunlight = psky->getSunlightColor();
     m_atmosphericsVars.ambient = psky->getAmbientColor();    
     m_atmosphericsVars.glow = psky->getGlow();
@@ -531,7 +530,7 @@ void LLVOSky::calc()
     m_atmosphericsVars.density_multiplier = psky->getDensityMultiplier();
     m_atmosphericsVars.distance_multiplier = psky->getDistanceMultiplier();
     m_atmosphericsVars.max_y = psky->getMaxY();
-    m_atmosphericsVars.sun_norm = LLEnvironment::instance().getClampedLightNorm();
+    m_atmosphericsVars.sun_norm = LLEnvironment::instance().getClampedSunNorm();
     m_atmosphericsVars.sunlight = psky->getSunlightColor();
     m_atmosphericsVars.ambient = psky->getAmbientColor();    
     m_atmosphericsVars.glow = psky->getGlow();
@@ -725,8 +724,6 @@ bool LLVOSky::updateSky()
 	next_frame = next_frame % cycle_frame_no;
 
 	mInterpVal = (!mInitialized) ? 1 : (F32)next_frame / cycle_frame_no;
-	// sInterpVal = (F32)next_frame / cycle_frame_no;
-	LLSkyTex::setInterpVal( mInterpVal );
 	LLHeavenBody::setInterpVal( mInterpVal );
 	updateDirections();
 
@@ -912,6 +909,8 @@ void LLVOSky::setSunTextures(const LLUUID& sun_texture, const LLUUID& sun_textur
     mSunTexturep[0] = sun_texture.isNull() ? nullptr : LLViewerTextureManager::getFetchedTexture(sun_texture, FTT_DEFAULT, TRUE, LLGLTexture::BOOST_UI);
     mSunTexturep[1] = sun_texture_next.isNull() ? nullptr : LLViewerTextureManager::getFetchedTexture(sun_texture_next, FTT_DEFAULT, TRUE, LLGLTexture::BOOST_UI);
 
+    bool can_use_wl = gPipeline.canUseWindLightShaders();
+
     if (mFace[FACE_SUN])
     {
         if (mSunTexturep[0])
@@ -934,11 +933,14 @@ void LLVOSky::setSunTextures(const LLUUID& sun_texture, const LLUUID& sun_textur
 
         mFace[FACE_SUN]->setTexture(LLRender::DIFFUSE_MAP, mSunTexturep[0]);
 
-        if (mSunTexturep[1])
+        if (can_use_wl)
         {
-	        mSunTexturep[1]->setAddressMode(LLTexUnit::TAM_CLAMP);            
+            if (mSunTexturep[1])
+            {
+	            mSunTexturep[1]->setAddressMode(LLTexUnit::TAM_CLAMP);            
+            }
+            mFace[FACE_SUN]->setTexture(LLRender::ALTERNATE_DIFFUSE_MAP, mSunTexturep[1]);
         }
-        mFace[FACE_SUN]->setTexture(LLRender::ALTERNATE_DIFFUSE_MAP, mSunTexturep[1]);
     }
 }
 
@@ -946,6 +948,8 @@ void LLVOSky::setMoonTextures(const LLUUID& moon_texture, const LLUUID& moon_tex
 {
     LLSettingsSky::ptr_t psky = LLEnvironment::instance().getCurrentSky();
 
+    bool can_use_wl = gPipeline.canUseWindLightShaders();
+
     mMoonTexturep[0] = moon_texture.isNull()      ? nullptr : LLViewerTextureManager::getFetchedTexture(moon_texture, FTT_DEFAULT, TRUE, LLGLTexture::BOOST_UI);
     mMoonTexturep[1] = moon_texture_next.isNull() ? nullptr : LLViewerTextureManager::getFetchedTexture(moon_texture_next, FTT_DEFAULT, TRUE, LLGLTexture::BOOST_UI);
 
@@ -957,7 +961,7 @@ void LLVOSky::setMoonTextures(const LLUUID& moon_texture, const LLUUID& moon_tex
         }
         mFace[FACE_MOON]->setTexture(LLRender::DIFFUSE_MAP, mMoonTexturep[0]);
     
-        if (mMoonTexturep[1])
+        if (mMoonTexturep[1] && can_use_wl)
         {
 	        mMoonTexturep[1]->setAddressMode(LLTexUnit::TAM_CLAMP);
             mFace[FACE_MOON]->setTexture(LLRender::ALTERNATE_DIFFUSE_MAP, mMoonTexturep[1]);
diff --git a/indra/newview/llvosky.h b/indra/newview/llvosky.h
index 8c2817e1edb6193063a578b931fa222fdc9391ac..5f270855997926ad72b931f54ad2d741db5b64e1 100644
--- a/indra/newview/llvosky.h
+++ b/indra/newview/llvosky.h
@@ -57,13 +57,8 @@ class LLSkyTex
 	LLColor4		*mSkyData;
 	LLVector3		*mSkyDirs;			// Cache of sky direction vectors
 	static S32		sCurrent;
-	static F32		sInterpVal;
 
 public:
-	static F32 getInterpVal()					{ return sInterpVal; }
-	static void setInterpVal(const F32 v)		{ sInterpVal = v; }
-	static BOOL doInterpolate()					{ return sInterpVal > 0.001f; }
-
 	void bindTexture(BOOL curr = TRUE);
 	
 protected:
@@ -299,6 +294,8 @@ class LLVOSky : public LLStaticViewerObject
 	LLFace	*mFace[FACE_COUNT];
 	LLVector3	mBumpSunDir;
 
+    F32 getInterpVal() const { return mInterpVal; }
+
 protected:
 	~LLVOSky();