diff --git a/indra/newview/alcontrolcache.cpp b/indra/newview/alcontrolcache.cpp
index f07ea55c93892694a7b14c33b6d5ecd33ca3f8be..94404221d66eb22a3a813bd0cab9e230f2e2f54f 100644
--- a/indra/newview/alcontrolcache.cpp
+++ b/indra/newview/alcontrolcache.cpp
@@ -27,7 +27,6 @@ bool ALControlCache::SnapEnabled;
 S32  ALControlCache::ToastGap;
 F32  ALControlCache::YawFromMousePosition = 90.f;
 F32  ALControlCache::PitchFromMousePosition = 90.f;
-U32  ALControlCache::RenderToneMapType = 0;
 
 
 #define DECLARE_CTRL(ctrl, type, ctrl_type) \
@@ -81,6 +80,4 @@ void ALControlCache::initControls()
 	DECLARE_CTRL_S32(ToastGap);
     DECLARE_CTRL_F32(YawFromMousePosition);
     DECLARE_CTRL_F32(PitchFromMousePosition);
-
-	DECLARE_CTRL_U32(RenderToneMapType);
 }
diff --git a/indra/newview/alcontrolcache.h b/indra/newview/alcontrolcache.h
index a5c4715f1a6fbfb5d3fc560d66dd9f0448f6e74c..44b6fa2aae488f38a7f136681fad76b3c1473db9 100644
--- a/indra/newview/alcontrolcache.h
+++ b/indra/newview/alcontrolcache.h
@@ -29,7 +29,6 @@ struct ALControlCache
 	static S32		ToastGap;
     static F32		YawFromMousePosition;
     static F32      PitchFromMousePosition;
-	static U32		RenderToneMapType;
 };
 
 #endif
\ No newline at end of file
diff --git a/indra/newview/alfloaterlightbox.cpp b/indra/newview/alfloaterlightbox.cpp
index 13636e98fb1149de1eec2306befae108ba65056c..e3385bba452712bbd8d99f7ec72df6bc3e5141f3 100644
--- a/indra/newview/alfloaterlightbox.cpp
+++ b/indra/newview/alfloaterlightbox.cpp
@@ -31,6 +31,7 @@
 #include "llviewerprecompiledheaders.h"
 #include "alfloaterlightbox.h"
 
+#include "alrenderutils.h"
 #include "llviewercontrol.h"
 #include "llspinctrl.h"
 #include "llsliderctrl.h"
@@ -43,23 +44,26 @@ ALFloaterLightBox::ALFloaterLightBox(const LLSD& key)
     mCommitCallbackRegistrar.add("LightBox.ResetControlDefault", std::bind(&ALFloaterLightBox::onClickResetControlDefault, this, std::placeholders::_2));
     mCommitCallbackRegistrar.add("LightBox.ResetGroupDefault", std::bind(&ALFloaterLightBox::onClickResetGroupDefault, this, std::placeholders::_2));
     mCommitCallbackRegistrar.add("LightBox.CASSelect", boost::bind(&ALFloaterLightBox::updateCAS, this));
-    mCommitCallbackRegistrar.add("LightBox.TonemapperSelect", boost::bind(&ALFloaterLightBox::updateTonemapper, this));
-    mCommitCallbackRegistrar.add("LightBox.TonemapperCommit", std::bind(&ALFloaterLightBox::commitTonemapper, this, std::placeholders::_2));
     mCommitCallbackRegistrar.add("LightBox.CASCommit", std::bind(&ALFloaterLightBox::commitCAS, this, std::placeholders::_2));
     mCommitCallbackRegistrar.add("LightBox.SSAOCommit", std::bind(&ALFloaterLightBox::commitSSAO, this, std::placeholders::_2));
 }
 
+ALFloaterLightBox::~ALFloaterLightBox()
+{
+	mTonemapConnection.disconnect();
+}
+
 BOOL ALFloaterLightBox::postBuild()
 {
+    updateTonemapper();
+    mTonemapConnection = gSavedSettings.getControl("RenderToneMapType")->getSignal()->connect([&](LLControlVariable* control, const LLSD&, const LLSD&){ updateTonemapper(); });
 	return TRUE;
 }
 
 void ALFloaterLightBox::draw()
 {
-    updateTonemapper();
     updateSSAO();
     updateCAS();
-
     LLFloater::draw();
 }
 
@@ -76,10 +80,9 @@ void ALFloaterLightBox::onClickResetControlDefault(const LLSD& userdata)
 void ALFloaterLightBox::onClickResetGroupDefault(const LLSD& userdata)
 {
 	const std::string& setting_group = userdata.asString();
-	LLControlVariable* controlp = nullptr;
 	if (setting_group == "sharpen")
 	{
-		controlp = gSavedSettings.getControl("RenderSharpenMethod");
+		LLControlVariable* controlp = gSavedSettings.getControl("RenderSharpenMethod");
 		if (controlp)
 		{
 			controlp->resetToDefault(true);
@@ -89,7 +92,7 @@ void ALFloaterLightBox::onClickResetGroupDefault(const LLSD& userdata)
 		{
 			controlp->resetToDefault(true);
 		}
-	    controlp = gSavedSettings.getControl("RenderSharpenDLSParams");
+		controlp = gSavedSettings.getControl("RenderSharpenDLSParams");
 		if (controlp)
 		{
 			controlp->resetToDefault(true);
@@ -97,412 +100,400 @@ void ALFloaterLightBox::onClickResetGroupDefault(const LLSD& userdata)
 	}
 	else if (setting_group == "tonemap")
 	{
-		controlp = gSavedSettings.getControl("RenderToneMapType");
-		if (controlp)
 		{
-			controlp->resetToDefault(true);
+			LLControlVariable* controlp = gSavedSettings.getControl("RenderExposure");
+			if (controlp)
+			{
+				controlp->resetToDefault(true);
+			}
 		}
-		controlp = gSavedSettings.getControl("RenderExposure");
-		if (controlp)
+
+		U32 tone_map_type = gSavedSettings.getU32("RenderToneMapType");
+		switch (tone_map_type)
 		{
-			controlp->resetToDefault(true);
+		case ALRenderUtil::TONEMAP_AMD:
+		{
+			LLControlVariable* controlp = gSavedSettings.getControl("AlchemyToneMapAMDHDRMax");
+			if (controlp)
+			{
+				controlp->resetToDefault(true);
+			}
+			controlp = gSavedSettings.getControl("AlchemyToneMapAMDContrast");
+			if (controlp)
+			{
+				controlp->resetToDefault(true);
+			}
+			controlp = gSavedSettings.getControl("AlchemyToneMapAMDShoulder");
+			if (controlp)
+			{
+				controlp->resetToDefault(true);
+			}
+			break;
+		}
+		case ALRenderUtil::TONEMAP_UCHIMURA:
+		{
+			LLControlVariable* controlp = gSavedSettings.getControl("AlchemyToneMapUchimuraMaxBrightness");
+			if (controlp)
+			{
+				controlp->resetToDefault(true);
+			}
+			controlp = gSavedSettings.getControl("AlchemyToneMapUchimuraContrast");
+			if (controlp)
+			{
+				controlp->resetToDefault(true);
+			}
+			controlp = gSavedSettings.getControl("AlchemyToneMapUchimuraLinearStart");
+			if (controlp)
+			{
+				controlp->resetToDefault(true);
+			}
+			controlp = gSavedSettings.getControl("AlchemyToneMapUchimuraLinearLength");
+			if (controlp)
+			{
+				controlp->resetToDefault(true);
+			}
+			controlp = gSavedSettings.getControl("AlchemyToneMapUchimuraBlackLevel");
+			if (controlp)
+			{
+				controlp->resetToDefault(true);
+			}
+			break;
+		}
+		case ALRenderUtil::TONEMAP_UNCHARTED:
+		{
+			LLControlVariable* controlp = gSavedSettings.getControl("AlchemyToneMapFilmicToeStr");
+			if (controlp)
+			{
+				controlp->resetToDefault(true);
+			}
+			controlp = gSavedSettings.getControl("AlchemyToneMapFilmicToeLen");
+			if (controlp)
+			{
+				controlp->resetToDefault(true);
+			}
+			controlp = gSavedSettings.getControl("AlchemyToneMapFilmicShoulderStr");
+			if (controlp)
+			{
+				controlp->resetToDefault(true);
+			}
+			controlp = gSavedSettings.getControl("AlchemyToneMapFilmicShoulderLen");
+			if (controlp)
+			{
+				controlp->resetToDefault(true);
+			}
+			controlp = gSavedSettings.getControl("AlchemyToneMapFilmicShoulderAngle");
+			if (controlp)
+			{
+				controlp->resetToDefault(true);
+			}
+			controlp = gSavedSettings.getControl("AlchemyToneMapFilmicGamma");
+			if (controlp)
+			{
+				controlp->resetToDefault(true);
+			}
+			controlp = gSavedSettings.getControl("AlchemyToneMapFilmicWhitePoint");
+			if (controlp)
+			{
+				controlp->resetToDefault(true);
+			}
+			break;
+		}
 		}
-        controlp = gSavedSettings.getControl("RenderToneMapUchimuraA");
-        if (controlp)
-        {
-            controlp->resetToDefault(true);
-        }
-        controlp = gSavedSettings.getControl("RenderToneMapUchimuraB");
-        if (controlp)
-        {
-            controlp->resetToDefault(true);
-        }
-        controlp = gSavedSettings.getControl("RenderToneMapLottesA");
-        if (controlp)
-        {
-            controlp->resetToDefault(true);
-        }
-        controlp = gSavedSettings.getControl("RenderToneMapLottesB");
-        if (controlp)
-        {
-            controlp->resetToDefault(true);
-        }
-        controlp = gSavedSettings.getControl("RenderToneMapUnchartedA");
-        if (controlp)
-        {
-            controlp->resetToDefault(true);
-        }
-        controlp = gSavedSettings.getControl("RenderToneMapUnchartedB");
-        if (controlp)
-        {
-            controlp->resetToDefault(true);
-        }
-        controlp = gSavedSettings.getControl("RenderToneMapUnchartedC");
-        if (controlp)
-        {
-            controlp->resetToDefault(true);
-        }
 	}
 }
 
 void ALFloaterLightBox::updateTonemapper()
 {
-    //TODO: We should figure out how to call this on floater open, otherwise it'll be weird.
-    
-    //Init Text
-    LLTextBox* text1 = getChild<LLTextBox>("tonemapper_dynamic_text1");
-    LLTextBox* text2 = getChild<LLTextBox>("tonemapper_dynamic_text2");
-    LLTextBox* text3 = getChild<LLTextBox>("tonemapper_dynamic_text3");
-    LLTextBox* text4 = getChild<LLTextBox>("tonemapper_dynamic_text4");
-    LLTextBox* text5 = getChild<LLTextBox>("tonemapper_dynamic_text5");
-    LLTextBox* text6 = getChild<LLTextBox>("tonemapper_dynamic_text6");
-    LLTextBox* text7 = getChild<LLTextBox>("tonemapper_dynamic_text7");
-    LLTextBox* text8 = getChild<LLTextBox>("tonemapper_dynamic_text8");
+	//Init Text
+	LLTextBox* text1 = getChild<LLTextBox>("tonemapper_dynamic_text1");
+	LLTextBox* text2 = getChild<LLTextBox>("tonemapper_dynamic_text2");
+	LLTextBox* text3 = getChild<LLTextBox>("tonemapper_dynamic_text3");
+	LLTextBox* text4 = getChild<LLTextBox>("tonemapper_dynamic_text4");
+	LLTextBox* text5 = getChild<LLTextBox>("tonemapper_dynamic_text5");
+	LLTextBox* text6 = getChild<LLTextBox>("tonemapper_dynamic_text6");
+	LLTextBox* text7 = getChild<LLTextBox>("tonemapper_dynamic_text7");
 
 	//Init Spinners
-    LLSpinCtrl* spinner1 = getChild<LLSpinCtrl>("tonemapper_dynamic_spinner1");
-    LLSpinCtrl* spinner2 = getChild<LLSpinCtrl>("tonemapper_dynamic_spinner2");
-    LLSpinCtrl* spinner3 = getChild<LLSpinCtrl>("tonemapper_dynamic_spinner3");
-    LLSpinCtrl* spinner4 = getChild<LLSpinCtrl>("tonemapper_dynamic_spinner4");
-    LLSpinCtrl* spinner5 = getChild<LLSpinCtrl>("tonemapper_dynamic_spinner5");
-    LLSpinCtrl* spinner6 = getChild<LLSpinCtrl>("tonemapper_dynamic_spinner6");
-    LLSpinCtrl* spinner7 = getChild<LLSpinCtrl>("tonemapper_dynamic_spinner7");
-    LLSpinCtrl* spinner8 = getChild<LLSpinCtrl>("tonemapper_dynamic_spinner8");
-
-    // Init Sliders
-    LLSliderCtrl* slider1 = getChild<LLSliderCtrl>("tonemapper_dynamic_slider1");
-    LLSliderCtrl* slider2 = getChild<LLSliderCtrl>("tonemapper_dynamic_slider2");
-    LLSliderCtrl* slider3 = getChild<LLSliderCtrl>("tonemapper_dynamic_slider3");
-    LLSliderCtrl* slider4 = getChild<LLSliderCtrl>("tonemapper_dynamic_slider4");
-    LLSliderCtrl* slider5 = getChild<LLSliderCtrl>("tonemapper_dynamic_slider5");
-    LLSliderCtrl* slider6 = getChild<LLSliderCtrl>("tonemapper_dynamic_slider6");
-    LLSliderCtrl* slider7 = getChild<LLSliderCtrl>("tonemapper_dynamic_slider7");
-    LLSliderCtrl* slider8 = getChild<LLSliderCtrl>("tonemapper_dynamic_slider8");
-
-    // Check the state of RenderToneMapType
-    U32 TMap = gSavedSettings.getU32("RenderToneMapType");
-
-    //Init Ctrl Objects
-    ALToneMapCtrl tm1;
-    ALToneMapCtrl tm2;
-    ALToneMapCtrl tm3;
-    ALToneMapCtrl tm4;
-    ALToneMapCtrl tm5;
-    ALToneMapCtrl tm6;
-    ALToneMapCtrl tm7;
-    ALToneMapCtrl tm8;
-
-    //These get to live on their own, lucky!
-	LLVector3 vTM_A;
-    LLVector3 vTM_B;
-    LLVector3 vTM_C;
-
-    if (TMap == 7)  // Uchimura
-    {
-        vTM_A = gSavedSettings.getVector3("RenderToneMapUchimuraA");
-
-        // max display brightness
-        tm1.TM_Enable = TRUE;
-        tm1.TM_CtrlName = "Max Brightness:";
-        tm1.TM_Min      = 0.0f;
-        tm1.TM_Max      = 1.0f;
-
-        // contrast
-        tm2.TM_Enable = TRUE;
-        tm2.TM_CtrlName = "Contrast:";
-        tm2.TM_Min      = 0.01f;
-        tm2.TM_Max      = 1.0f;
-
-        // linear section start
-        tm3.TM_Enable = TRUE;
-        tm3.TM_CtrlName = "Linear Start:";
-        tm3.TM_Min      = 0.01f;
-        tm3.TM_Max      = 2.0f;
-
-        vTM_B = gSavedSettings.getVector3("RenderToneMapUchimuraB");
-
-        // linear section length
-        tm4.TM_Enable   = TRUE;
-        tm4.TM_CtrlName = "Linear Length:";
-        tm4.TM_Min      = 0.01f;
-        tm4.TM_Max      = 1.0f;
-
-        // black
-        tm5.TM_Enable   = TRUE;
-        tm5.TM_CtrlName = "Black Level:";
-        tm5.TM_Min      = -4.0f;
-        tm5.TM_Max      = 4.0f;
-
-        // pedestal
-        tm6.TM_Enable   = TRUE;
-        tm6.TM_CtrlName = "Pedestal:";
-        tm6.TM_Min      = -2.0f;
-        tm6.TM_Max      = 2.0f;
-    }
-    else if (TMap == 8)  // Lottes
-    {
-        //TODO: Better names?
-        vTM_A = gSavedSettings.getVector3("RenderToneMapLottesA");
-
-        // a
-        tm1.TM_Enable   = TRUE;
-        tm1.TM_CtrlName = "A:";
-        tm1.TM_Min      = 0.0f;
-        tm1.TM_Max      = 1.0f;
-
-        // d
-        tm2.TM_Enable   = TRUE;
-        tm2.TM_CtrlName = "D:";
-        tm2.TM_Min      = 0.01f;
-        tm2.TM_Max      = 1.0f;
-
-        // maxhdr
-        tm3.TM_Enable   = TRUE;
-        tm3.TM_CtrlName = "Max HDR:";
-        tm3.TM_Min      = 0.01f;
-        tm3.TM_Max      = 2.0f;
-
-        vTM_B = gSavedSettings.getVector3("RenderToneMapLottesB");
-
-        // midln
-        tm4.TM_Enable   = TRUE;
-        tm4.TM_CtrlName = "Mid Level:";
-        tm4.TM_Min      = 0.01f;
-        tm4.TM_Max      = 1.0f;
-
-        // black
-        tm5.TM_Enable   = TRUE;
-        tm5.TM_CtrlName = "Black Level:";
-        tm5.TM_Min      = -4.0f;
-        tm5.TM_Max      = 4.0f;
-    }
-    else if (TMap == 9)  // Uncharted
-    {
-        //TODO: What in the world are these settings actually called?!
-        vTM_A = gSavedSettings.getVector3("RenderToneMapUnchartedA");
-
-        // a
-        tm1.TM_Enable   = TRUE;
-        tm1.TM_CtrlName = "A:";
-        tm1.TM_Min      = 0.0f;
-        tm1.TM_Max      = 4.0f;
-
-        // b
-        tm2.TM_Enable   = TRUE;
-        tm2.TM_CtrlName = "B:";
-        tm2.TM_Min      = 0.0f;
-        tm2.TM_Max      = 4.0f;
-
-        // c
-        tm3.TM_Enable   = TRUE;
-        tm3.TM_CtrlName = "C:";
-        tm3.TM_Min      = 0.0f;
-        tm3.TM_Max      = 4.0f;
-
-        vTM_B = gSavedSettings.getVector3("RenderToneMapUnchartedB");
-
-        // d
-        tm4.TM_Enable   = TRUE;
-        tm4.TM_CtrlName = "D:";
-        tm4.TM_Min      = 0.0f;
-        tm4.TM_Max      = 4.0f;
-
-        // e
-        tm5.TM_Enable   = TRUE;
-        tm5.TM_CtrlName = "E:";
-        tm5.TM_Min      = -0.5f;
-        tm5.TM_Max      = 0.05f;
-        tm5.TM_Inc      = 0.001f;
-        tm5.TM_Precision = 3;
-
-        // f
-        tm6.TM_Enable   = TRUE;
-        tm6.TM_CtrlName = "F:";
-        tm6.TM_Min      = 0.04f;
-        tm6.TM_Max      = 4.0f;
-
-        vTM_C = gSavedSettings.getVector3("RenderToneMapUnchartedC");
-
-        // w
-        tm7.TM_Enable   = TRUE;
-        tm7.TM_CtrlName = "W:";
-        tm7.TM_Min      = 0.0f;
-        tm7.TM_Max      = 12.0f;
-
-        // exposure bias
-        tm8.TM_Enable   = TRUE;
-        tm8.TM_CtrlName = "Exposure Bias:";
-        tm8.TM_Min      = 0.0f;
-        tm8.TM_Max      = 16.0f;
-    }
-
-    //Set Controls
-
-    //Visibilty
-    text1->setVisible(tm1.TM_Enable);
-    text1->setText(tm1.TM_CtrlName);
-    spinner1->setVisible(tm1.TM_Enable);
-    slider1->setVisible(tm1.TM_Enable);
-
-    text2->setVisible(tm2.TM_Enable);
-    text2->setText(tm2.TM_CtrlName);
-    spinner2->setVisible(tm2.TM_Enable);
-    slider2->setVisible(tm2.TM_Enable);
-
-    text3->setVisible(tm3.TM_Enable);
-    text3->setText(tm3.TM_CtrlName);
-    spinner3->setVisible(tm3.TM_Enable);
-    slider3->setVisible(tm3.TM_Enable);
-
-    text4->setVisible(tm4.TM_Enable);
-    text4->setText(tm4.TM_CtrlName);
-    spinner4->setVisible(tm4.TM_Enable);
-    slider4->setVisible(tm4.TM_Enable);
-
-    text5->setVisible(tm5.TM_Enable);
-    text5->setText(tm5.TM_CtrlName);
-    spinner5->setVisible(tm5.TM_Enable);
-    slider5->setVisible(tm5.TM_Enable);
-
-    text6->setVisible(tm6.TM_Enable);
-    text6->setText(tm6.TM_CtrlName);
-    spinner6->setVisible(tm6.TM_Enable);
-    slider6->setVisible(tm6.TM_Enable);
-
-    text7->setVisible(tm7.TM_Enable);
-    text7->setText(tm7.TM_CtrlName);
-    spinner7->setVisible(tm7.TM_Enable);
-    slider7->setVisible(tm7.TM_Enable);
-
-    text8->setVisible(tm8.TM_Enable);
-    text8->setText(tm8.TM_CtrlName);
-    spinner8->setVisible(tm8.TM_Enable);
-    slider8->setVisible(tm8.TM_Enable);
-
-    //Min Values
-    spinner1->setMinValue(tm1.TM_Min);
-    slider1->setMinValue(tm1.TM_Min);
-
-    spinner2->setMinValue(tm2.TM_Min);
-    slider2->setMinValue(tm2.TM_Min);
-
-    spinner3->setMinValue(tm3.TM_Min);
-    slider3->setMinValue(tm3.TM_Min);
-
-    spinner4->setMinValue(tm4.TM_Min);
-    slider4->setMinValue(tm4.TM_Min);
-
-    spinner5->setMinValue(tm5.TM_Min);
-    slider5->setMinValue(tm5.TM_Min);
-
-    spinner6->setMinValue(tm6.TM_Min);
-    slider6->setMinValue(tm6.TM_Min);
-
-    spinner7->setMinValue(tm7.TM_Min);
-    slider7->setMinValue(tm7.TM_Min);
-
-    spinner8->setMinValue(tm8.TM_Min);
-    slider8->setMinValue(tm8.TM_Min);
-
-    //Max Values
-    spinner1->setMaxValue(tm1.TM_Max);
-    slider1->setMaxValue(tm1.TM_Max);
-
-    spinner2->setMaxValue(tm2.TM_Max);
-    slider2->setMaxValue(tm2.TM_Max);
-
-    spinner3->setMaxValue(tm3.TM_Max);
-    slider3->setMaxValue(tm3.TM_Max);
-
-    spinner4->setMaxValue(tm4.TM_Max);
-    slider4->setMaxValue(tm4.TM_Max);
-
-    spinner5->setMaxValue(tm5.TM_Max);
-    slider5->setMaxValue(tm5.TM_Max);
-
-    spinner6->setMaxValue(tm6.TM_Max);
-    slider6->setMaxValue(tm6.TM_Max);
-
-    spinner7->setMaxValue(tm7.TM_Max);
-    slider7->setMaxValue(tm7.TM_Max);
-
-    spinner8->setMaxValue(tm8.TM_Max);
-    slider8->setMaxValue(tm8.TM_Max);
-
-    //Precision
-    spinner1->setPrecision(tm1.TM_Precision);
-    slider1->setPrecision(tm1.TM_Precision);
-
-    spinner2->setPrecision(tm2.TM_Precision);
-    slider2->setPrecision(tm2.TM_Precision);
-
-    spinner3->setPrecision(tm3.TM_Precision);
-    slider3->setPrecision(tm3.TM_Precision);
-
-    spinner4->setPrecision(tm4.TM_Precision);
-    slider4->setPrecision(tm4.TM_Precision);
-
-    spinner5->setPrecision(tm5.TM_Precision);
-    slider5->setPrecision(tm5.TM_Precision);
-
-    spinner6->setPrecision(tm6.TM_Precision);
-    slider6->setPrecision(tm6.TM_Precision);
-
-    spinner7->setPrecision(tm7.TM_Precision);
-    slider7->setPrecision(tm7.TM_Precision);
-
-    spinner8->setPrecision(tm8.TM_Precision);
-    slider8->setPrecision(tm8.TM_Precision);
-
-    //Increment
-    spinner1->setIncrement(tm1.TM_Inc);
-    slider1->setIncrement(tm1.TM_Inc);
-
-    spinner2->setIncrement(tm2.TM_Inc);
-    slider2->setIncrement(tm2.TM_Inc);
-
-    spinner3->setIncrement(tm3.TM_Inc);
-    slider3->setIncrement(tm3.TM_Inc);
-
-    spinner4->setIncrement(tm4.TM_Inc);
-    slider4->setIncrement(tm4.TM_Inc);
-
-    spinner5->setIncrement(tm5.TM_Inc);
-    slider5->setIncrement(tm5.TM_Inc);
-
-    spinner6->setIncrement(tm6.TM_Inc);
-    slider6->setIncrement(tm6.TM_Inc);
-
-    spinner7->setIncrement(tm7.TM_Inc);
-    slider7->setIncrement(tm7.TM_Inc);
-
-    spinner8->setIncrement(tm8.TM_Inc);
-    slider8->setIncrement(tm8.TM_Inc);
-
-    // Values
-    spinner1->setValue(vTM_A[VX]);
-    slider1->setValue(vTM_A[VX]);
-
-    spinner2->setValue(vTM_A[VY]);
-    slider2->setValue(vTM_A[VY]);
-
-    spinner3->setValue(vTM_A[VZ]);
-    slider3->setValue(vTM_A[VZ]);
-
-    spinner4->setValue(vTM_B[VX]);
-    slider4->setValue(vTM_B[VX]);
-
-    spinner5->setValue(vTM_B[VY]);
-    slider5->setValue(vTM_B[VY]);
-
-    spinner6->setValue(vTM_B[VZ]);
-    slider6->setValue(vTM_B[VZ]);
-
-    spinner7->setValue(vTM_C[VX]);
-    slider7->setValue(vTM_C[VX]);
-
-    spinner8->setValue(vTM_C[VY]);
-    slider8->setValue(vTM_C[VY]);
+	LLSpinCtrl* spinner1 = getChild<LLSpinCtrl>("tonemapper_dynamic_spinner1");
+	LLSpinCtrl* spinner2 = getChild<LLSpinCtrl>("tonemapper_dynamic_spinner2");
+	LLSpinCtrl* spinner3 = getChild<LLSpinCtrl>("tonemapper_dynamic_spinner3");
+	LLSpinCtrl* spinner4 = getChild<LLSpinCtrl>("tonemapper_dynamic_spinner4");
+	LLSpinCtrl* spinner5 = getChild<LLSpinCtrl>("tonemapper_dynamic_spinner5");
+	LLSpinCtrl* spinner6 = getChild<LLSpinCtrl>("tonemapper_dynamic_spinner6");
+	LLSpinCtrl* spinner7 = getChild<LLSpinCtrl>("tonemapper_dynamic_spinner7");
+
+	// Init Sliders
+	LLSliderCtrl* slider1 = getChild<LLSliderCtrl>("tonemapper_dynamic_slider1");
+	LLSliderCtrl* slider2 = getChild<LLSliderCtrl>("tonemapper_dynamic_slider2");
+	LLSliderCtrl* slider3 = getChild<LLSliderCtrl>("tonemapper_dynamic_slider3");
+	LLSliderCtrl* slider4 = getChild<LLSliderCtrl>("tonemapper_dynamic_slider4");
+	LLSliderCtrl* slider5 = getChild<LLSliderCtrl>("tonemapper_dynamic_slider5");
+	LLSliderCtrl* slider6 = getChild<LLSliderCtrl>("tonemapper_dynamic_slider6");
+	LLSliderCtrl* slider7 = getChild<LLSliderCtrl>("tonemapper_dynamic_slider7");
+
+	// Check the state of RenderToneMapType
+	switch (gSavedSettings.getU32("RenderToneMapType"))
+	{
+	default:
+	{
+		text1->setVisible(FALSE);
+		spinner1->setVisible(FALSE);
+		slider1->setVisible(FALSE);
+
+		text2->setVisible(FALSE);
+		spinner2->setVisible(FALSE);
+		slider2->setVisible(FALSE);
+
+		text3->setVisible(FALSE);
+		spinner3->setVisible(FALSE);
+		slider3->setVisible(FALSE);
+
+		text4->setVisible(FALSE);
+		spinner4->setVisible(FALSE);
+		slider4->setVisible(FALSE);
+
+		text5->setVisible(FALSE);
+		spinner5->setVisible(FALSE);
+		slider5->setVisible(FALSE);
+
+		text6->setVisible(FALSE);
+		spinner6->setVisible(FALSE);
+		slider6->setVisible(FALSE);
+
+		text7->setVisible(FALSE);
+		spinner7->setVisible(FALSE);
+		slider7->setVisible(FALSE);
+		break;
+	}
+	case ALRenderUtil::TONEMAP_UCHIMURA:
+	{
+		text1->setVisible(TRUE);
+		text1->setText(std::string("Max Brightness"));
+		spinner1->setVisible(TRUE);
+		spinner1->setMinValue(0.01);
+		spinner1->setMaxValue(8.0);
+		spinner1->setIncrement(0.1);
+		spinner1->setControlName("AlchemyToneMapUchimuraMaxBrightness");
+		slider1->setVisible(TRUE);
+		slider1->setMinValue(0.01);
+		slider1->setMaxValue(8.0);
+		slider1->setIncrement(0.1);
+		slider1->setControlName("AlchemyToneMapUchimuraMaxBrightness", nullptr);
+
+		text2->setVisible(TRUE);
+		text2->setText(std::string("Contrast"));
+		spinner2->setVisible(TRUE);
+		spinner2->setMinValue(0.01);
+		spinner2->setMaxValue(2.0);
+		spinner2->setIncrement(0.01);
+		spinner2->setControlName("AlchemyToneMapUchimuraContrast");
+		slider2->setVisible(TRUE);
+		slider2->setMinValue(0.01);
+		slider2->setMaxValue(2.0);
+		slider2->setIncrement(0.01);
+		slider2->setControlName("AlchemyToneMapUchimuraContrast", nullptr);
+
+		text3->setVisible(TRUE);
+		text3->setText(std::string("Linear Start"));
+		spinner3->setVisible(TRUE);
+		spinner3->setMinValue(0.01);
+		spinner3->setMaxValue(1.0);
+		spinner3->setIncrement(0.01);
+		spinner3->setControlName("AlchemyToneMapUchimuraLinearStart");
+		slider3->setVisible(TRUE);
+		slider3->setMinValue(0.01);
+		slider3->setMaxValue(1.0);
+		slider3->setIncrement(0.01);
+		slider3->setControlName("AlchemyToneMapUchimuraLinearStart", nullptr);
+
+		text4->setVisible(TRUE);
+		text4->setText(std::string("Linear Length"));
+		spinner4->setVisible(TRUE);
+		spinner4->setMinValue(0.01);
+		spinner4->setMaxValue(1.0);
+		spinner4->setIncrement(0.01);
+		spinner4->setControlName("AlchemyToneMapUchimuraLinearLength");
+		slider4->setVisible(TRUE);
+		slider4->setMinValue(0.01);
+		slider4->setMaxValue(1.0);
+		slider4->setIncrement(0.01);
+		slider4->setControlName("AlchemyToneMapUchimuraLinearLength", nullptr);
+
+		text5->setVisible(TRUE);
+		text5->setText(std::string("Black Level"));
+		spinner5->setVisible(TRUE);
+		spinner5->setMinValue(0.01);
+		spinner5->setMaxValue(4.0);
+		spinner5->setIncrement(0.01);
+		spinner5->setControlName("AlchemyToneMapUchimuraBlackLevel");
+		slider5->setVisible(TRUE);
+		slider5->setMinValue(0.01);
+		slider5->setMaxValue(4.0);
+		slider5->setIncrement(0.01);
+		slider5->setControlName("AlchemyToneMapUchimuraBlackLevel", nullptr);
+
+		text6->setVisible(FALSE);
+		spinner6->setVisible(FALSE);
+		slider6->setVisible(FALSE);
+
+		text7->setVisible(FALSE);
+		spinner7->setVisible(FALSE);
+		slider7->setVisible(FALSE);
+		break;
+	}
+	case ALRenderUtil::TONEMAP_AMD:
+	{
+		text1->setVisible(TRUE);
+		text1->setText(std::string("HDR Max"));
+		spinner1->setVisible(TRUE);
+		spinner1->setMinValue(1.0);
+		spinner1->setMaxValue(24.0);
+		spinner1->setIncrement(0.1);
+		spinner1->setControlName("AlchemyToneMapAMDHDRMax");
+		slider1->setVisible(TRUE);
+		slider1->setMinValue(1.0);
+		slider1->setMaxValue(24.0);
+		slider1->setIncrement(0.1);
+		slider1->setControlName("AlchemyToneMapAMDHDRMax", nullptr);
+
+		text2->setVisible(TRUE);
+		text2->setText(std::string("Contrast"));
+		spinner2->setVisible(TRUE);
+		spinner2->setMinValue(0.5);
+		spinner2->setMaxValue(4.0);
+		spinner2->setControlName("AlchemyToneMapAMDContrast");
+		spinner2->setIncrement(0.01);
+		slider2->setVisible(TRUE);
+		slider2->setMinValue(0.5);
+		slider2->setMaxValue(4.0);
+		slider2->setIncrement(0.01);
+		slider2->setControlName("AlchemyToneMapAMDContrast", nullptr);
+
+		text3->setVisible(TRUE);
+		text3->setText(std::string("Shoulder"));
+		spinner3->setVisible(TRUE);
+		spinner3->setMinValue(0.5);
+		spinner3->setMaxValue(4.0);
+		spinner3->setIncrement(0.01);
+		spinner3->setControlName("AlchemyToneMapAMDShoulder");
+		slider3->setVisible(TRUE);
+		slider3->setMinValue(0.5);
+		slider3->setMaxValue(4.0);
+		slider3->setIncrement(0.01);
+		slider3->setControlName("AlchemyToneMapAMDShoulder", nullptr);
+
+		text4->setVisible(FALSE);
+		spinner4->setVisible(FALSE);
+		slider4->setVisible(FALSE);
+
+		text5->setVisible(FALSE);
+		spinner5->setVisible(FALSE);
+		slider5->setVisible(FALSE);
+
+		text6->setVisible(FALSE);
+		spinner6->setVisible(FALSE);
+		slider6->setVisible(FALSE);
+
+		text7->setVisible(FALSE);
+		spinner7->setVisible(FALSE);
+		slider7->setVisible(FALSE);
+		break;
+	}
+	case ALRenderUtil::TONEMAP_UNCHARTED:
+	{
+		text1->setVisible(TRUE);
+		text1->setText(std::string("Toe Strength"));
+		spinner1->setVisible(TRUE);
+		spinner1->setMinValue(0.0);
+		spinner1->setMaxValue(1.0);
+		spinner1->setIncrement(0.01);
+		spinner1->setControlName("AlchemyToneMapFilmicToeStr");
+		slider1->setVisible(TRUE);
+		slider1->setMinValue(0.0);
+		slider1->setMaxValue(1.0);
+		slider1->setIncrement(0.01);
+		slider1->setControlName("AlchemyToneMapFilmicToeStr", nullptr);
+
+		text2->setVisible(TRUE);
+		text2->setText(std::string("Toe Length"));
+		spinner2->setVisible(TRUE);
+		spinner2->setMinValue(0.01);
+		spinner2->setMaxValue(1.0);
+		spinner2->setIncrement(0.01);
+		spinner2->setControlName("AlchemyToneMapFilmicToeLen");
+		slider2->setVisible(TRUE);
+		slider2->setMinValue(0.01);
+		slider2->setMaxValue(1.0);
+		slider2->setIncrement(0.01);
+		slider2->setControlName("AlchemyToneMapFilmicToeLen", nullptr);
+
+		text3->setVisible(TRUE);
+		text3->setText(std::string("Shoulder Strength"));
+		spinner3->setVisible(TRUE);
+		spinner3->setMinValue(0.0);
+		spinner3->setMaxValue(1.0);
+		spinner3->setIncrement(0.01);
+		spinner3->setControlName("AlchemyToneMapFilmicShoulderStr");
+		slider3->setVisible(TRUE);
+		slider3->setMinValue(0.0);
+		slider3->setMaxValue(1.0);
+		slider3->setIncrement(0.01);
+		slider3->setControlName("AlchemyToneMapFilmicShoulderStr", nullptr);
+
+		text4->setVisible(TRUE);
+		text4->setText(std::string("Shoulder Length"));
+		spinner4->setVisible(TRUE);
+		spinner4->setMinValue(0.01);
+		spinner4->setMaxValue(8.0);
+		spinner4->setIncrement(0.01);
+		spinner4->setControlName("AlchemyToneMapFilmicShoulderLen");
+		slider4->setVisible(TRUE);
+		slider4->setMinValue(0.01);
+		slider4->setMaxValue(8.0);
+		slider4->setIncrement(0.01);
+		slider4->setControlName("AlchemyToneMapFilmicShoulderLen", nullptr);
+
+		text5->setVisible(TRUE);
+		text5->setText(std::string("Shoulder Angle"));
+		spinner5->setVisible(TRUE);
+		spinner5->setMinValue(0.0);
+		spinner5->setMaxValue(1.0);
+		spinner5->setIncrement(0.01);
+		spinner5->setControlName("AlchemyToneMapFilmicShoulderAngle");
+		slider5->setVisible(TRUE);
+		slider5->setMinValue(0.0);
+		slider5->setMaxValue(1.0);
+		slider5->setIncrement(0.01);
+		slider5->setControlName("AlchemyToneMapFilmicShoulderAngle", nullptr);
+
+		text6->setVisible(TRUE);
+		text6->setText(std::string("Gamma"));
+		spinner6->setVisible(TRUE);
+		spinner6->setMinValue(0.01);
+		spinner6->setMaxValue(5.0);
+		spinner6->setIncrement(0.01);
+		spinner6->setControlName("AlchemyToneMapFilmicGamma");
+		slider6->setVisible(TRUE);
+		slider6->setMinValue(0.01);
+		slider6->setMaxValue(5.0);
+		slider6->setIncrement(0.01);
+		slider6->setControlName("AlchemyToneMapFilmicGamma", nullptr);
+
+		text7->setVisible(TRUE);
+		text7->setText(std::string("White Point"));
+		spinner7->setVisible(TRUE);
+		spinner7->setMinValue(1.0);
+		spinner7->setMaxValue(16.0);
+		spinner7->setIncrement(0.1);
+		spinner7->setControlName("AlchemyToneMapFilmicWhitePoint");
+		slider7->setVisible(TRUE);
+		slider7->setMinValue(1.0);
+		slider7->setMaxValue(16.0);
+		slider7->setIncrement(0.1);
+		slider7->setControlName("AlchemyToneMapFilmicWhitePoint", nullptr);
+		break;
+	}
+	}
 }
 
 void ALFloaterLightBox::updateSSAO() 
diff --git a/indra/newview/alfloaterlightbox.h b/indra/newview/alfloaterlightbox.h
index 1f0da0065da97a730230001093ba30528608661c..a86877b0755bb4d0c096289a5eff40366c98aff8 100644
--- a/indra/newview/alfloaterlightbox.h
+++ b/indra/newview/alfloaterlightbox.h
@@ -41,6 +41,7 @@ class ALFloaterLightBox final : public LLFloater
 {
 public:
 	ALFloaterLightBox(const LLSD& key);
+    ~ALFloaterLightBox() override;
 	BOOL postBuild() override;
     virtual void draw() override;
 
@@ -53,6 +54,8 @@ class ALFloaterLightBox final : public LLFloater
     void commitTonemapper(const LLSD& userdata);
     void commitCAS(const LLSD& userdata);
     void commitSSAO(const LLSD& userdata);
+
+    boost::signals2::scoped_connection mTonemapConnection;
 	
 };
 
diff --git a/indra/newview/alrenderutils.cpp b/indra/newview/alrenderutils.cpp
index 50d7d7affc21ed8df8dc72492a831a0bb994cae1..b6fbb0cc110f985db1d3a96526f329d9f09b66a2 100644
--- a/indra/newview/alrenderutils.cpp
+++ b/indra/newview/alrenderutils.cpp
@@ -46,8 +46,7 @@ const U32 ALRENDER_BUFFER_MASK = LLVertexBuffer::MAP_VERTEX | LLVertexBuffer::MA
 static LLStaticHashedString al_exposure("exposure");
 static LLStaticHashedString tone_uchimura_a("tone_uchimura_a");
 static LLStaticHashedString tone_uchimura_b("tone_uchimura_b");
-static LLStaticHashedString tone_lottes_a("tone_lottes_a");
-static LLStaticHashedString tone_lottes_b("tone_lottes_b");
+static LLStaticHashedString tonemap_amd_params("tonemap_amd");
 static LLStaticHashedString tone_uncharted_a("tone_uncharted_a");
 static LLStaticHashedString tone_uncharted_b("tone_uncharted_b");
 static LLStaticHashedString tone_uncharted_c("tone_uncharted_c");
@@ -248,13 +247,21 @@ ALRenderUtil::ALRenderUtil()
 	gSavedSettings.getControl("RenderColorGradeLUT")->getSignal()->connect(boost::bind(&ALRenderUtil::setupColorGrade, this));
 	gSavedSettings.getControl("RenderToneMapType")->getSignal()->connect(boost::bind(&ALRenderUtil::setupTonemap, this));
 	gSavedSettings.getControl("RenderExposure")->getSignal()->connect(boost::bind(&ALRenderUtil::setupTonemap, this));
-	gSavedSettings.getControl("RenderToneMapLottesA")->getSignal()->connect(boost::bind(&ALRenderUtil::setupTonemap, this));
-	gSavedSettings.getControl("RenderToneMapLottesB")->getSignal()->connect(boost::bind(&ALRenderUtil::setupTonemap, this));
-	gSavedSettings.getControl("RenderToneMapUchimuraA")->getSignal()->connect(boost::bind(&ALRenderUtil::setupTonemap, this));
-	gSavedSettings.getControl("RenderToneMapUchimuraB")->getSignal()->connect(boost::bind(&ALRenderUtil::setupTonemap, this));
-	gSavedSettings.getControl("RenderToneMapUnchartedA")->getSignal()->connect(boost::bind(&ALRenderUtil::setupTonemap, this));
-	gSavedSettings.getControl("RenderToneMapUnchartedB")->getSignal()->connect(boost::bind(&ALRenderUtil::setupTonemap, this));
-	gSavedSettings.getControl("RenderToneMapUnchartedC")->getSignal()->connect(boost::bind(&ALRenderUtil::setupTonemap, this));
+	gSavedSettings.getControl("AlchemyToneMapAMDHDRMax")->getSignal()->connect(boost::bind(&ALRenderUtil::setupTonemap, this));
+	gSavedSettings.getControl("AlchemyToneMapAMDContrast")->getSignal()->connect(boost::bind(&ALRenderUtil::setupTonemap, this));
+	gSavedSettings.getControl("AlchemyToneMapAMDShoulder")->getSignal()->connect(boost::bind(&ALRenderUtil::setupTonemap, this));
+	gSavedSettings.getControl("AlchemyToneMapUchimuraMaxBrightness")->getSignal()->connect(boost::bind(&ALRenderUtil::setupTonemap, this));
+	gSavedSettings.getControl("AlchemyToneMapUchimuraContrast")->getSignal()->connect(boost::bind(&ALRenderUtil::setupTonemap, this));
+	gSavedSettings.getControl("AlchemyToneMapUchimuraLinearStart")->getSignal()->connect(boost::bind(&ALRenderUtil::setupTonemap, this));
+	gSavedSettings.getControl("AlchemyToneMapUchimuraLinearLength")->getSignal()->connect(boost::bind(&ALRenderUtil::setupTonemap, this));
+	gSavedSettings.getControl("AlchemyToneMapUchimuraBlackLevel")->getSignal()->connect(boost::bind(&ALRenderUtil::setupTonemap, this));
+	gSavedSettings.getControl("AlchemyToneMapFilmicToeStr")->getSignal()->connect(boost::bind(&ALRenderUtil::setupTonemap, this));
+	gSavedSettings.getControl("AlchemyToneMapFilmicToeLen")->getSignal()->connect(boost::bind(&ALRenderUtil::setupTonemap, this));
+	gSavedSettings.getControl("AlchemyToneMapFilmicShoulderStr")->getSignal()->connect(boost::bind(&ALRenderUtil::setupTonemap, this));
+	gSavedSettings.getControl("AlchemyToneMapFilmicShoulderLen")->getSignal()->connect(boost::bind(&ALRenderUtil::setupTonemap, this));
+	gSavedSettings.getControl("AlchemyToneMapFilmicShoulderAngle")->getSignal()->connect(boost::bind(&ALRenderUtil::setupTonemap, this));
+	gSavedSettings.getControl("AlchemyToneMapFilmicGamma")->getSignal()->connect(boost::bind(&ALRenderUtil::setupTonemap, this));
+	gSavedSettings.getControl("AlchemyToneMapFilmicWhitePoint")->getSignal()->connect(boost::bind(&ALRenderUtil::setupTonemap, this));
 	gSavedSettings.getControl("RenderSharpenMethod")->getSignal()->connect(boost::bind(&ALRenderUtil::setupSharpen, this));
 	gSavedSettings.getControl("RenderSharpenCASParams")->getSignal()->connect(boost::bind(&ALRenderUtil::setupSharpen, this));
 	gSavedSettings.getControl("RenderSharpenDLSParams")->getSignal()->connect(boost::bind(&ALRenderUtil::setupSharpen, this));
@@ -312,13 +319,12 @@ bool ALRenderUtil::setupTonemap()
 
 		mTonemapExposure = llclamp(gSavedSettings.getF32("RenderExposure"), 0.5f, 4.f);
 
-		mToneLottesParamA = gSavedSettings.getVector3("RenderToneMapLottesA");
-		mToneLottesParamB = gSavedSettings.getVector3("RenderToneMapLottesB");
-		mToneUchimuraParamA = gSavedSettings.getVector3("RenderToneMapUchimuraA");
-		mToneUchimuraParamB = gSavedSettings.getVector3("RenderToneMapUchimuraB");
-		mToneUnchartedParamA = gSavedSettings.getVector3("RenderToneMapUnchartedA");
-		mToneUnchartedParamB = gSavedSettings.getVector3("RenderToneMapUnchartedB");
-		mToneUnchartedParamC = gSavedSettings.getVector3("RenderToneMapUnchartedC");
+		mToneAMDParams = LLVector3(gSavedSettings.getF32("AlchemyToneMapAMDHDRMax"), gSavedSettings.getF32("AlchemyToneMapAMDContrast"), gSavedSettings.getF32("AlchemyToneMapAMDShoulder"));
+		mToneUchimuraParamA = LLVector3(gSavedSettings.getF32("AlchemyToneMapUchimuraMaxBrightness"), gSavedSettings.getF32("AlchemyToneMapUchimuraContrast"), gSavedSettings.getF32("AlchemyToneMapUchimuraLinearStart"));
+		mToneUchimuraParamB = LLVector3(gSavedSettings.getF32("AlchemyToneMapUchimuraLinearLength"), gSavedSettings.getF32("AlchemyToneMapUchimuraBlackLevel"), 0.0);
+		mToneUnchartedParamA = LLVector3(gSavedSettings.getF32("AlchemyToneMapFilmicToeStr"), gSavedSettings.getF32("AlchemyToneMapFilmicToeLen"), gSavedSettings.getF32("AlchemyToneMapFilmicShoulderStr"));
+		mToneUnchartedParamB = LLVector3(gSavedSettings.getF32("AlchemyToneMapFilmicShoulderLen"), gSavedSettings.getF32("AlchemyToneMapFilmicShoulderAngle"), gSavedSettings.getF32("AlchemyToneMapFilmicGamma"));
+		mToneUnchartedParamC = LLVector3(gSavedSettings.getF32("AlchemyToneMapFilmicWhitePoint"), 2.0, 0.0);
 	}
 	else
 	{
@@ -539,8 +545,7 @@ void ALRenderUtil::renderTonemap(LLRenderTarget* src, LLRenderTarget* exposure,
 	}
 	case ALTonemap::TONEMAP_AMD:
 	{
-		tone_shader->uniform3fv(tone_lottes_a, 1, mToneLottesParamA.mV);
-		tone_shader->uniform3fv(tone_lottes_b, 1, mToneLottesParamB.mV);
+		tone_shader->uniform3fv(tonemap_amd_params, 1, mToneAMDParams.mV);
 		break;
 	}
 	case ALTonemap::TONEMAP_UNCHARTED:
diff --git a/indra/newview/alrenderutils.h b/indra/newview/alrenderutils.h
index 1363c9bc99f21841744911af0c92980b4c007e8d..7a95eb3b8f9935d9629a332261d87dc0d729360a 100644
--- a/indra/newview/alrenderutils.h
+++ b/indra/newview/alrenderutils.h
@@ -48,16 +48,10 @@ class ALRenderUtil
 	enum ALTonemap : uint32_t
 	{
 		TONEMAP_NONE = 0,
-		TONEMAP_LINEAR,
-		TONEMAP_REINHARD,
-		TONEMAP_REINHARD2,
-		TONEMAP_FILMIC,
-		TONEMAP_UNREAL,
-		TONEMAP_ACES_NARCOWICZ,
+		TONEMAP_ACES_HILL,
 		TONEMAP_UCHIMURA,
 		TONEMAP_AMD,
 		TONEMAP_UNCHARTED,
-		TONEMAP_ACES_HILL,
 		TONEMAP_COUNT
 	};
 	bool setupTonemap();
@@ -84,8 +78,7 @@ class ALRenderUtil
 
 	// State
 	U32 mTonemapType = ALTonemap::TONEMAP_NONE;
-	LLVector3 mToneLottesParamA;
-	LLVector3 mToneLottesParamB;
+	LLVector3 mToneAMDParams;
 	LLVector3 mToneUchimuraParamA;
 	LLVector3 mToneUchimuraParamB;
 	LLVector3 mToneUnchartedParamA;
diff --git a/indra/newview/app_settings/settings_alchemy.xml b/indra/newview/app_settings/settings_alchemy.xml
index 8de25bbb042c07345bb633a19f03266b91bea634..82ecebc6875946eea763f5dbe793324c0ad5cfb3 100644
--- a/indra/newview/app_settings/settings_alchemy.xml
+++ b/indra/newview/app_settings/settings_alchemy.xml
@@ -420,50 +420,6 @@
       <key>Value</key>
       <real>1.0</real>
     </map>
-    <key>AlchemyLookAtShow</key>
-    <map>
-      <key>Comment</key>
-      <string>[OBSOLETE]</string>
-      <key>Persist</key>
-      <integer>1</integer>
-      <key>Type</key>
-      <string>Boolean</string>
-      <key>Value</key>
-      <integer>0</integer>
-    </map>
-    <key>AlchemyLookAtLines</key>
-    <map>
-      <key>Comment</key>
-      <string>[OBSOLETE]</string>
-      <key>Persist</key>
-      <integer>1</integer>
-      <key>Type</key>
-      <string>Boolean</string>
-      <key>Value</key>
-      <integer>0</integer>
-    </map>
-    <key>AlchemyLookAtNames</key>
-    <map>
-      <key>Comment</key>
-      <string>[OBSOLETE]</string>
-      <key>Persist</key>
-      <integer>1</integer>
-      <key>Type</key>
-      <string>U32</string>
-      <key>Value</key>
-      <integer>0</integer>
-    </map>
-    <key>AlchemyLookAtHideSelf</key>
-    <map>
-      <key>Comment</key>
-      <string>[OBSOLETE]</string>
-      <key>Persist</key>
-      <integer>1</integer>
-      <key>Type</key>
-      <string>Boolean</string>
-      <key>Value</key>
-      <integer>0</integer>
-    </map>
     <key>AlchemyLookAtPrivate</key>
     <map>
       <key>Comment</key>
@@ -1176,10 +1132,43 @@
         <real>0.0</real>
       </array>
     </map>
-    <key>RenderToneMapExposure</key>
+    <key>RenderToneMapType</key>
     <map>
       <key>Comment</key>
-      <string>[OBSOLETE]</string>
+      <string>Tonemapping type 0 - HDR Debug, 1 - ACES, 2 - Uchimura, 3 - AMD, 4 - Uncharted</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>U32</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
+    <key>AlchemyToneMapAMDHDRMax</key>
+    <map>
+      <key>Comment</key>
+      <string>How much HDR range before clipping. HDR modes likely need this pushed up to say 25.0.</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>F32</string>
+      <key>Value</key>
+      <real>16.0</real>
+    </map>
+    <key>AlchemyToneMapAMDContrast</key>
+    <map>
+      <key>Comment</key>
+      <string>Use as a baseline to tune the amount of contrast the tonemapper has.</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>F32</string>
+      <key>Value</key>
+      <real>1.4</real>
+    </map>
+    <key>AlchemyToneMapAMDShoulder</key>
+    <map>
+      <key>Comment</key>
+      <string>Tonemap shoulder adjustment</string>
       <key>Persist</key>
       <integer>1</integer>
       <key>Type</key>
@@ -1187,121 +1176,137 @@
       <key>Value</key>
       <real>1.0</real>
     </map>
-    <key>RenderToneMapLottesA</key>
+    <key>AlchemyToneMapUchimuraMaxBrightness</key>
     <map>
       <key>Comment</key>
-      <string>x (a), y (d), z (hdrMax)</string>
+      <string>Maximum Possible Display Brightness</string>
       <key>Persist</key>
       <integer>1</integer>
       <key>Type</key>
-      <string>Vector3</string>
+      <string>F32</string>
       <key>Value</key>
-      <array>
-        <real>1.4</real>
-        <real>1.0</real>
-        <real>16.0</real>
-      </array>
+      <real>1.0</real>
     </map>
-    <key>RenderToneMapLottesB</key>
+    <key>AlchemyToneMapUchimuraContrast</key>
     <map>
       <key>Comment</key>
-      <string>[OBSOLETE]</string>
+      <string>Contrast Adjustment</string>
       <key>Persist</key>
       <integer>1</integer>
       <key>Type</key>
-      <string>Vector3</string>
+      <string>F32</string>
       <key>Value</key>
-      <array>
-        <real>0.18</real>
-        <real>0.18</real>
-        <real>0.0</real>
-      </array>
+      <real>1.0</real>
     </map>
-    <key>RenderToneMapType</key>
+    <key>AlchemyToneMapUchimuraLinearStart</key>
     <map>
       <key>Comment</key>
-      <string>Tonemapping type 0 - HDR Debug, 1 - Linear, 2 - Reinhard, 3 - Reinhard2, 4 - Filmic, 5 - Unreal, 6 - ACES Narkowicz, 7 - Uchimura, 8 - AMD, 9 - Uncharted, 10 - Aces Hill</string>
+      <string>Curve Linear Section Start</string>
       <key>Persist</key>
       <integer>1</integer>
       <key>Type</key>
-      <string>U32</string>
+      <string>F32</string>
       <key>Value</key>
-      <integer>10</integer>
+      <real>0.22</real>
     </map>
-    <key>RenderToneMapUchimuraA</key>
+    <key>AlchemyToneMapUchimuraLinearLength</key>
     <map>
       <key>Comment</key>
-      <string>x (max display brightness), y (contrast), z (linear section start)</string>
+      <string>Length of linear section in tonemapping curve</string>
       <key>Persist</key>
       <integer>1</integer>
       <key>Type</key>
-      <string>Vector3</string>
+      <string>F32</string>
       <key>Value</key>
-      <array>
-        <real>1.0</real>
-        <real>1.0</real>
-        <real>0.22</real>
-      </array>
+      <real>0.44</real>
     </map>
-    <key>RenderToneMapUchimuraB</key>
+    <key>AlchemyToneMapUchimuraBlackLevel</key>
     <map>
       <key>Comment</key>
-      <string>x (linear section length), y (black), z (pedestal)</string>
+      <string>Adjust black range of curve</string>
       <key>Persist</key>
       <integer>1</integer>
       <key>Type</key>
-      <string>Vector3</string>
+      <string>F32</string>
       <key>Value</key>
-      <array>
-        <real>0.4</real>
-        <real>1.13</real>
-        <real>0.0</real>
-      </array>
+      <real>1.33</real>
     </map>
-    <key>RenderToneMapUnchartedA</key>
+    <key>AlchemyToneMapFilmicToeStr</key>
     <map>
       <key>Comment</key>
-      <string>A, B, C</string>
+      <string>Toe Strength</string>
       <key>Persist</key>
       <integer>1</integer>
       <key>Type</key>
-      <string>Vector3</string>
+      <string>F32</string>
       <key>Value</key>
-      <array>
-        <real>0.15</real>
-        <real>0.50</real>
-        <real>0.10</real>
-      </array>
+      <real>0.22</real>
     </map>
-    <key>RenderToneMapUnchartedB</key>
+    <key>AlchemyToneMapFilmicToeLen</key>
     <map>
       <key>Comment</key>
-      <string>D, E, F</string>
+      <string>Toe Length</string>
       <key>Persist</key>
       <integer>1</integer>
       <key>Type</key>
-      <string>Vector3</string>
+      <string>F32</string>
       <key>Value</key>
-      <array>
-        <real>0.20</real>
-        <real>0.02</real>
-        <real>0.20</real>
-      </array>
+      <real>0.30</real>
     </map>
-    <key>RenderToneMapUnchartedC</key>
+    <key>AlchemyToneMapFilmicShoulderStr</key>
     <map>
       <key>Comment</key>
-      <string>W, ExposureBias, UNUSED</string>
+      <string>Shoulder Strength</string>
       <key>Persist</key>
       <integer>1</integer>
       <key>Type</key>
-      <string>Vector3</string>
+      <string>F32</string>
       <key>Value</key>
-      <array>
-        <real>11.2</real>
-        <real>2.0</real>
-        <real>0.0</real>
-      </array>
+      <real>0.22</real>
+    </map>
+    <key>AlchemyToneMapFilmicShoulderLen</key>
+    <map>
+      <key>Comment</key>
+      <string>Shoulder Length</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>F32</string>
+      <key>Value</key>
+      <real>0.20</real>
+    </map>
+    <key>AlchemyToneMapFilmicShoulderAngle</key>
+    <map>
+      <key>Comment</key>
+      <string>Shoulder Angle</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>F32</string>
+      <key>Value</key>
+      <real>0.01</real>
+    </map>
+    <key>AlchemyToneMapFilmicGamma</key>
+    <map>
+      <key>Comment</key>
+      <string>Curve Gamma</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>F32</string>
+      <key>Value</key>
+      <real>0.3</real>
+    </map>
+    <key>AlchemyToneMapFilmicWhitePoint</key>
+    <map>
+      <key>Comment</key>
+      <string>Curve White Point</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>F32</string>
+      <key>Value</key>
+      <real>8.0</real>
     </map>
     <key>ResetUserColorsOnLogout</key>
     <map>
@@ -1391,5 +1396,165 @@
       <key>Value</key>
       <integer>1023</integer>
     </map>
+    <key>AlchemyLookAtShow</key>
+    <map>
+      <key>Comment</key>
+      <string>[OBSOLETE]</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
+    <key>AlchemyLookAtLines</key>
+    <map>
+      <key>Comment</key>
+      <string>[OBSOLETE]</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
+    <key>AlchemyLookAtNames</key>
+    <map>
+      <key>Comment</key>
+      <string>[OBSOLETE]</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>U32</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
+    <key>AlchemyLookAtHideSelf</key>
+    <map>
+      <key>Comment</key>
+      <string>[OBSOLETE]</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
+    <key>RenderToneMapExposure</key>
+    <map>
+      <key>Comment</key>
+      <string>[OBSOLETE]</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>F32</string>
+      <key>Value</key>
+      <real>1.0</real>
+    </map>
+    <key>RenderToneMapLottesA</key>
+    <map>
+      <key>Comment</key>
+      <string>[OBSOLETE]</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Vector3</string>
+      <key>Value</key>
+      <array>
+        <real>1.4</real>
+        <real>1.0</real>
+        <real>16.0</real>
+      </array>
+    </map>
+    <key>RenderToneMapLottesB</key>
+    <map>
+      <key>Comment</key>
+      <string>[OBSOLETE]</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Vector3</string>
+      <key>Value</key>
+      <array>
+        <real>0.18</real>
+        <real>0.18</real>
+        <real>0.0</real>
+      </array>
+    </map>
+    <key>RenderToneMapUchimuraA</key>
+    <map>
+      <key>Comment</key>
+      <string>[OBSOLETE]</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Vector3</string>
+      <key>Value</key>
+      <array>
+        <real>1.0</real>
+        <real>1.0</real>
+        <real>0.22</real>
+      </array>
+    </map>
+    <key>RenderToneMapUchimuraB</key>
+    <map>
+      <key>Comment</key>
+      <string>[OBSOLETE]</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Vector3</string>
+      <key>Value</key>
+      <array>
+        <real>0.4</real>
+        <real>1.13</real>
+        <real>0.0</real>
+      </array>
+    </map>
+    <key>RenderToneMapUnchartedA</key>
+    <map>
+      <key>Comment</key>
+      <string>[OBSOLETE]</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Vector3</string>
+      <key>Value</key>
+      <array>
+        <real>0.22</real>
+        <real>0.30</real>
+        <real>0.10</real>
+      </array>
+    </map>
+    <key>RenderToneMapUnchartedB</key>
+    <map>
+      <key>Comment</key>
+      <string>[OBSOLETE]</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Vector3</string>
+      <key>Value</key>
+      <array>
+        <real>0.20</real>
+        <real>0.01</real>
+        <real>0.30</real>
+      </array>
+    </map>
+    <key>RenderToneMapUnchartedC</key>
+    <map>
+      <key>Comment</key>
+      <string>[OBSOLETE]</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Vector3</string>
+      <key>Value</key>
+      <array>
+        <real>6.5</real>
+        <real>2.0</real>
+        <real>0.0</real>
+      </array>
+    </map>
   </map>
 </llsd>
diff --git a/indra/newview/app_settings/shaders/class1/alchemy/toneMapF.glsl b/indra/newview/app_settings/shaders/class1/alchemy/toneMapF.glsl
index 3b3368ded65bac646f38ccc7ab5996145b6e6dc0..4a17af977310e16b2b6aaaec67565a1bec17c443 100644
--- a/indra/newview/app_settings/shaders/class1/alchemy/toneMapF.glsl
+++ b/indra/newview/app_settings/shaders/class1/alchemy/toneMapF.glsl
@@ -47,45 +47,8 @@ uniform sampler3D colorgrade_lut;
 uniform vec4 colorgrade_lut_size;
 #endif
 
-vec3 reinhard(vec3 x)
-{
-    return x/(1+x);
-}
-
-vec3 reinhard2(vec3 x) {
-    const float L_white = 4.0;
-    return (x * (1.0 + x / (L_white * L_white))) / (1.0 + x);
-}
-
-vec3 filmic(vec3 color)
-{
-    color = max(vec3(0.), color - vec3(0.004));
-    color = (color * (6.2 * color + .5)) / (color * (6.2 * color + 1.7) + 0.06);
-    return color;
-}
-
-vec3 unreal(vec3 x)
-{
-    // Unreal 3, Documentation: "Color Grading"
-    // Adapted to be close to Tonemap_ACES, with similar range
-    // Gamma 2.2 correction is baked in, don't use with sRGB conversion!
-    return x / (x + 0.155) * 1.019;
-}
-
-vec3 ACES_Narkowicz(vec3 x)
-{
-    // Narkowicz 2015, "ACES Filmic Tone Mapping Curve"
-    const float a = 2.51;
-    const float b = 0.03;
-    const float c = 2.43;
-    const float d = 0.59;
-    const float e = 0.14;
-    return (x * (a * x + b)) / (x * (c * x + d) + e);
-}
-
 // ACES filmic tone map approximation
 // see https://github.com/TheRealMJP/BakingLab/blob/master/BakingLab/ACES.hlsl
-
 // sRGB => XYZ => D65_2_D60 => AP1 => RRT_SAT
 const mat3 ACESInputMat = mat3
 (
@@ -152,7 +115,7 @@ vec3 uchimura(vec3 x)
     float m = tone_uchimura_a.z; // linear section start
     float l = tone_uchimura_b.x; // linear section length
     float c = tone_uchimura_b.y; // black
-    float b = tone_uchimura_b.z; // pedestal
+    float b = 0.0; // pedestal
     
     return uchimura(x, P, a, m, l, c, b);
 }
@@ -184,12 +147,12 @@ float ColTone(float x, vec4 p)
     return z / (pow(z, p.g)*p.b + p.a); 
 }
 
-uniform vec3 tone_lottes_a = vec3(1.4, 1.0, 16.0);
+uniform vec3 tonemap_amd = vec3(16.0, 1.4, 1.0);
 vec3 AMDTonemapper(vec3 color)
 {
-    float hdrMax = tone_lottes_a.z; // How much HDR range before clipping. HDR modes likely need this pushed up to say 25.0.
-    float contrast = tone_lottes_a.x; // Use as a baseline to tune the amount of contrast the tonemapper has.
-    float shoulder = tone_lottes_a.y; // Likely don’t need to mess with this factor, unless matching existing tonemapper is not working well..
+    float hdrMax = tonemap_amd.x; // How much HDR range before clipping. HDR modes likely need this pushed up to say 25.0.
+    float contrast = tonemap_amd.y; // Use as a baseline to tune the amount of contrast the tonemapper has.
+    float shoulder = tonemap_amd.z; // Likely don’t need to mess with this factor, unless matching existing tonemapper is not working well..
     const float midIn = 0.18; // most games will have a {0.0 to 1.0} range for LDR so midIn should be 0.18.
     const float midOut = 0.18; // Use for LDR. For HDR10 10:10:10:2 use maybe 0.18/25.0 to start. For scRGB, I forget what a good starting point is, need to re-calculate.
 
@@ -224,13 +187,14 @@ vec3 AMDTonemapper(vec3 color)
 //--------------------------------------------------------------------------------------
 
 // Hable, http://filmicworlds.com/blog/filmic-tonemapping-operators/
-uniform vec3 tone_uncharted_a = vec3(0.15, 0.50, 0.10); // A, B, C
-uniform vec3 tone_uncharted_b = vec3(0.20, 0.02, 0.30); // D, E, F
-uniform vec3 tone_uncharted_c = vec3(11.2, 2.0, 0.0); // W, ExposureBias, Unused
+uniform vec3 tone_uncharted_a = vec3(0.22, 0.30, 0.10); // A, B, C
+uniform vec3 tone_uncharted_b = vec3(0.20, 0.01, 0.30); // D, E, F
+uniform vec3 tone_uncharted_c = vec3(8.0, 2.0, 0.0); // W, ExposureBias, Unused
 vec3 Uncharted2Tonemap(vec3 x)
 {
-    float A = tone_uncharted_a.x;
-    float B = tone_uncharted_a.y;
+    float ExposureBias = tone_uncharted_c.y;
+    float A = tone_uncharted_a.x * ExposureBias * ExposureBias;
+    float B = tone_uncharted_a.y * ExposureBias;
     float C = tone_uncharted_a.z;
     float D = tone_uncharted_b.x;
     float E = tone_uncharted_b.y;
@@ -241,8 +205,7 @@ vec3 Uncharted2Tonemap(vec3 x)
 
 vec3 uncharted2(vec3 col)
 {
-    float ExposureBias = tone_uncharted_c.y;
-    return Uncharted2Tonemap(ExposureBias*col)/Uncharted2Tonemap(vec3(tone_uncharted_c.x));;
+    return Uncharted2Tonemap(col)/Uncharted2Tonemap(vec3(tone_uncharted_c.x));
 }
 
 //=================================
@@ -301,6 +264,8 @@ float legacyGammaApprox()
     return gc/c * gamma;
 }
 
+vec3 legacy_adjust_post(vec3 c);
+
 void main()
 {
     vec4 diff = texture(diffuseRect, vary_fragcoord);
@@ -308,51 +273,23 @@ void main()
     float exp_scale = texture(exposureMap, vec2(0.5,0.5)).r;
     diff.rgb *= exposure * exp_scale * legacyGammaApprox();
     
-    #if TONEMAP_METHOD == 0 // None, Gamma Correct Only
-    #define NEEDS_GAMMA_CORRECT 1
-    #elif TONEMAP_METHOD == 1 // Linear
-    #define NEEDS_GAMMA_CORRECT 1
-    diff.rgb = clamp(diff.rgb, 0, 1);
-    #elif TONEMAP_METHOD == 2 // Reinhard method
-    #define NEEDS_GAMMA_CORRECT 1
-    diff.rgb = reinhard(diff.rgb);
-    #elif TONEMAP_METHOD == 3 // Reinhard2 method
-    #define NEEDS_GAMMA_CORRECT 1
-    diff.rgb = reinhard2(diff.rgb);
-    #elif TONEMAP_METHOD == 4 // Filmic method
-    #define NEEDS_GAMMA_CORRECT 0
-    diff.rgb = filmic(diff.rgb);
-    #elif TONEMAP_METHOD == 5 // Unreal method
-    #define NEEDS_GAMMA_CORRECT 0
-    diff.rgb = unreal(diff.rgb);
-    #elif TONEMAP_METHOD == 6 // Aces Narkowicz method
-    #define NEEDS_GAMMA_CORRECT 1
-    diff.rgb = ACES_Narkowicz(diff.rgb);
-    #elif TONEMAP_METHOD == 10 // Aces Hill method
-    #define NEEDS_GAMMA_CORRECT 1
+#if TONEMAP_METHOD == 1 // Aces Hill method
     diff.rgb *= 1.0/0.6;
     diff.rgb = ACES_Hill(diff.rgb);
-    #elif TONEMAP_METHOD == 7 // Uchimura's Gran Turismo method
-    #define NEEDS_GAMMA_CORRECT 1
+#elif TONEMAP_METHOD == 2 // Uchimura's Gran Turismo method
     diff.rgb = uchimura(diff.rgb);
-    #elif TONEMAP_METHOD == 8 // AMD Tonemapper
-    #define NEEDS_GAMMA_CORRECT 1
+#elif TONEMAP_METHOD == 3 // AMD Tonemapper
     diff.rgb = AMDTonemapper(diff.rgb);
-    #elif TONEMAP_METHOD == 9 // Uncharted
-    #define NEEDS_GAMMA_CORRECT 1
+#elif TONEMAP_METHOD == 4 // Uncharted
     diff.rgb = uncharted2(diff.rgb);
-    #else
-    #define NEEDS_GAMMA_CORRECT 1
-    #endif
+#endif
     
     // We should always be 0-1 past here.
     diff.rgb = clamp(diff.rgb, 0, 1);
-
-    #if NEEDS_GAMMA_CORRECT != 0
     diff.rgb = linear_to_srgb(diff.rgb);
-    #endif
-    
-    #if COLOR_GRADE_LUT != 0
+    diff.rgb = legacy_adjust_post(diff.rgb);
+
+#if COLOR_GRADE_LUT != 0
     // Invert coord for compat with DX-style LUT
     diff.g = colorgrade_lut_size.y > 0.5 ? 1.0 - diff.g : diff.g;
 
@@ -363,7 +300,7 @@ void main()
     vec3 scale = (vec3(colorgrade_lut_size.x) - 1.0) / vec3(colorgrade_lut_size.x);
     vec3 offset = 1.0 / (2.0 * vec3(colorgrade_lut_size.x));
     diff = vec4(textureLod(colorgrade_lut, scale * diff.rgb + offset, 0).rgb, diff.a);
-    #endif
+#endif
 
     vec2 tc = vary_fragcoord.xy*screen_res*4.0;
     vec3 seed = (diff.rgb+vec3(1.0))*vec3(tc.xy, tc.x+tc.y);
diff --git a/indra/newview/skins/default/xui/en/floater_lightbox_settings.xml b/indra/newview/skins/default/xui/en/floater_lightbox_settings.xml
index 52b506056ab26382e98047afe57d2546a6677bfa..1a566180660836059cf99261a4e4e4861ccba079 100644
--- a/indra/newview/skins/default/xui/en/floater_lightbox_settings.xml
+++ b/indra/newview/skins/default/xui/en/floater_lightbox_settings.xml
@@ -311,47 +311,21 @@
 					top_pad="-16"
 					width="80">
 					<combo_box.item
-						label="Linear"
-						name="toneLinear"
+						label="ACES"
+						name="toneACES"
 						value="1" />
-					<combo_box.item
-						label="Reinhard"
-						name="toneReinhard"
-						value="2" />
-					<combo_box.item
-						label="Reinhard2"
-						name="toneReinhard2"
-						value="3" />
-					<combo_box.item
-						label="Filmic"
-						name="toneFilmic"
-						value="4" />
-					<combo_box.item
-						label="Unreal"
-						name="toneUnreal"
-						value="5" />
-					<combo_box.item
-						label="ACES Narkowicz"
-						name="toneACESNark"
-						value="6" />
-					<combo_box.item
-						label="ACES Hill"
-						name="toneACESHill"
-						value="10" />
 					<combo_box.item
 						label="Uchimura"
 						name="toneUchimura"
-						value="7" />
+						value="2" />
 					<combo_box.item
 						label="AMD Tonemapper"
 						name="toneAMD"
-						value="8" />
+						value="3" />
 					<combo_box.item
 						label="Uncharted"
 						name="toneUncharted"
-						value="9" />
-					<combo_box.commit_callback
-       					function="LightBox.TonemapperSelect" />
+						value="4" />
 				</combo_box>
 				<button
 					name="exposure_default_btn"
@@ -429,32 +403,21 @@
 					left_delta="100"
 					right="-55"
 					show_text="false"
-					name="tonemapper_dynamic_slider1"
-					control_name="">
-					<slider.commit_callback
-						function="LightBox.TonemapperCommit"
-						parameter="slider" />
-					</slider>
+					name="tonemapper_dynamic_slider1" />
 				<spinner
 					visible="false"
 					top_pad="-20"
 					height="15"
 					label_width="0"
 					right="-1"
-					decimal_digits="1"
+					decimal_digits="2"
 					follows="top|right"
 					layout="topleft"
 					max_val="1.0"
 					min_val="0.0"
 					width="55"
 					increment=".1"
-					name="tonemapper_dynamic_spinner1"
-					control_name="">
-					<spinner.commit_callback
-						function="LightBox.TonemapperCommit"
-						parameter="spinner" />
-					</spinner>
-					
+					name="tonemapper_dynamic_spinner1" />
 				<text
 					visible="false"
 					name="tonemapper_dynamic_text2"
@@ -477,31 +440,21 @@
 					left_delta="100"
 					right="-55"
 					show_text="false"
-					name="tonemapper_dynamic_slider2"
-					control_name="">
-					<slider.commit_callback
-						function="LightBox.TonemapperCommit"
-						parameter="slider" />
-					</slider>
+					name="tonemapper_dynamic_slider2" />
 				<spinner
 					visible="false"
 					top_pad="-20"
 					height="15"
 					label_width="0"
 					right="-1"
-					decimal_digits="1"
+					decimal_digits="2"
 					follows="top|right"
 					layout="topleft"
 					max_val="1.0"
 					min_val="0.0"
 					width="55"
 					increment=".1"
-					name="tonemapper_dynamic_spinner2"
-					control_name="">
-					<spinner.commit_callback
-						function="LightBox.TonemapperCommit"
-						parameter="spinner" />
-					</spinner>
+					name="tonemapper_dynamic_spinner2" />
 				<text
 					visible="false"
 					name="tonemapper_dynamic_text3"
@@ -524,31 +477,21 @@
 					left_delta="100"
 					right="-55"
 					show_text="false"
-					name="tonemapper_dynamic_slider3"
-					control_name="">
-					<slider.commit_callback
-						function="LightBox.TonemapperCommit"
-						parameter="slider" />
-					</slider>
+					name="tonemapper_dynamic_slider3" />
 				<spinner
 					visible="false"
 					top_pad="-20"
 					height="15"
 					label_width="0"
 					right="-1"
-					decimal_digits="1"
+					decimal_digits="2"
 					follows="top|right"
 					layout="topleft"
 					max_val="1.0"
 					min_val="0.0"
 					width="55"
 					increment=".1"
-					name="tonemapper_dynamic_spinner3"
-					control_name="">
-					<spinner.commit_callback
-						function="LightBox.TonemapperCommit"
-						parameter="spinner" />
-					</spinner>
+					name="tonemapper_dynamic_spinner3" />
 				<text
 					visible="false"
 					name="tonemapper_dynamic_text4"
@@ -571,31 +514,21 @@
 					left_delta="100"
 					right="-55"
 					show_text="false"
-					name="tonemapper_dynamic_slider4"
-					control_name="">
-					<slider.commit_callback
-						function="LightBox.TonemapperCommit"
-						parameter="slider" />
-					</slider>
+					name="tonemapper_dynamic_slider4" />
 				<spinner
 					visible="false"
 					top_pad="-20"
 					height="15"
 					label_width="0"
 					right="-1"
-					decimal_digits="1"
+					decimal_digits="2"
 					follows="top|right"
 					layout="topleft"
 					max_val="1.0"
 					min_val="0.0"
 					width="55"
 					increment=".1"
-					name="tonemapper_dynamic_spinner4"
-					control_name="">
-					<spinner.commit_callback
-						function="LightBox.TonemapperCommit"
-						parameter="spinner" />
-					</spinner>
+					name="tonemapper_dynamic_spinner4" />
 				<text
 					visible="false"
 					name="tonemapper_dynamic_text5"
@@ -618,31 +551,21 @@
 					left_delta="100"
 					right="-55"
 					show_text="false"
-					name="tonemapper_dynamic_slider5"
-					control_name="">
-					<slider.commit_callback
-						function="LightBox.TonemapperCommit"
-						parameter="slider" />
-					</slider>
+					name="tonemapper_dynamic_slider5" />
 				<spinner
 					visible="false"
 					top_pad="-20"
 					height="15"
 					label_width="0"
 					right="-1"
-					decimal_digits="1"
+					decimal_digits="2"
 					follows="top|right"
 					layout="topleft"
 					max_val="1.0"
 					min_val="0.0"
 					width="55"
 					increment=".1"
-					name="tonemapper_dynamic_spinner5"
-					control_name="">
-					<spinner.commit_callback
-						function="LightBox.TonemapperCommit"
-						parameter="spinner" />
-					</spinner>
+					name="tonemapper_dynamic_spinner5" />
 				<text
 					visible="false"
 					name="tonemapper_dynamic_text6"
@@ -665,31 +588,21 @@
 					left_delta="100"
 					right="-55"
 					show_text="false"
-					name="tonemapper_dynamic_slider6"
-					control_name="">
-					<slider.commit_callback
-						function="LightBox.TonemapperCommit"
-						parameter="slider" />
-					</slider>
+					name="tonemapper_dynamic_slider6" />
 				<spinner
 					visible="false"
 					top_pad="-20"
 					height="15"
 					label_width="0"
 					right="-1"
-					decimal_digits="1"
+					decimal_digits="2"
 					follows="top|right"
 					layout="topleft"
 					max_val="1.0"
 					min_val="0.0"
 					width="55"
 					increment=".1"
-					name="tonemapper_dynamic_spinner6"
-					control_name="">
-					<spinner.commit_callback
-						function="LightBox.TonemapperCommit"
-						parameter="spinner" />
-					</spinner>
+					name="tonemapper_dynamic_spinner6" />
 				<text
 					visible="false"
 					name="tonemapper_dynamic_text7"
@@ -712,79 +625,21 @@
 					left_delta="100"
 					right="-55"
 					show_text="false"
-					name="tonemapper_dynamic_slider7"
-					control_name="">
-					<slider.commit_callback
-						function="LightBox.TonemapperCommit"
-						parameter="slider" />
-					</slider>
-				<spinner
-					visible="false"
-					top_pad="-20"
-					height="15"
-					label_width="0"
-					right="-1"
-					decimal_digits="1"
-					follows="top|right"
-					layout="topleft"
-					max_val="1.0"
-					min_val="0.0"
-					width="55"
-					increment=".1"
-					name="tonemapper_dynamic_spinner7"
-					control_name="">
-					<spinner.commit_callback
-						function="LightBox.TonemapperCommit"
-						parameter="spinner" />
-					</spinner>
-				<text
-					visible="false"
-					name="tonemapper_dynamic_text8"
-					follows="left|top"
-					height="15"
-					left="30"
-					top_pad="10"
-					width="100"
-					layout="topleft"
-					value="TonemapD8:" />
-				<slider
-					visible="false"
-					top_pad="-18"
-					height="20"
-					increment=".1"
-					follows="left|top|right"
-					layout="topleft"
-					max_val="1.0"
-					min_val="0.0"
-					left_delta="100"
-					right="-55"
-					show_text="false"
-					name="tonemapper_dynamic_slider8"
-					control_name="">
-					<slider.commit_callback
-						function="LightBox.TonemapperCommit"
-						parameter="slider" />
-					</slider>
+					name="tonemapper_dynamic_slider7" />
 				<spinner
 					visible="false"
 					top_pad="-20"
 					height="15"
 					label_width="0"
 					right="-1"
-					decimal_digits="1"
+					decimal_digits="2"
 					follows="top|right"
 					layout="topleft"
 					max_val="1.0"
 					min_val="0.0"
 					width="55"
 					increment=".1"
-					name="tonemapper_dynamic_spinner8"
-					control_name="">
-					<spinner.commit_callback
-						function="LightBox.TonemapperCommit"
-						parameter="spinner" />
-					</spinner>
-				
+					name="tonemapper_dynamic_spinner7" />	
 			</panel>
 			<!--Rendering Panel-->
 			<panel