diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt
index 1a19e81010e6c026d432e0ec138eb8f3b6bfaeb7..109001f82ecdf0a2bb1dc2da048662285ede9c2a 100644
--- a/indra/newview/CMakeLists.txt
+++ b/indra/newview/CMakeLists.txt
@@ -234,6 +234,7 @@ set(viewer_SOURCE_FILES
     llfloaterexperienceprofile.cpp
     llfloaterexperiences.cpp
     llfloaterfacebook.cpp
+    llfloaterfixedenvironment.cpp
     llfloaterflickr.cpp
     llfloaterfonttest.cpp
     llfloatergesture.cpp
@@ -420,6 +421,7 @@ set(viewer_SOURCE_FILES
     llpanelblockedlist.cpp
     llpanelclassified.cpp
     llpanelcontents.cpp
+    llpaneleditwater.cpp
     llpaneleditwearable.cpp
     llpanelenvironment.cpp
     llpanelexperiencelisteditor.cpp
@@ -849,6 +851,7 @@ set(viewer_HEADER_FILES
     llfloaterexperienceprofile.h
     llfloaterexperiences.h
     llfloaterfacebook.h
+    llfloaterfixedenvironment.h
     llfloaterflickr.h
     llfloaterfonttest.h
     llfloatergesture.h
@@ -1028,6 +1031,7 @@ set(viewer_HEADER_FILES
     llpanelblockedlist.h
     llpanelclassified.h
     llpanelcontents.h
+    llpaneleditwater.h
     llpaneleditwearable.h
     llpanelenvironment.h
     llpanelexperiencelisteditor.h
diff --git a/indra/newview/llenvironment.cpp b/indra/newview/llenvironment.cpp
index c5a1af8747bca126de71dc653ab1149d4c7265a2..214ebb82b09c82b5facd2ee9627b645cc87163f3 100644
--- a/indra/newview/llenvironment.cpp
+++ b/indra/newview/llenvironment.cpp
@@ -329,6 +329,30 @@ S64Seconds LLEnvironment::getEnvironmentDayOffset(EnvSelection_t env)
 
 LLEnvironment::fixedEnvironment_t LLEnvironment::getEnvironmentFixed(LLEnvironment::EnvSelection_t env)
 {
+    if (env == ENV_CURRENT)
+    {
+        fixedEnvironment_t fixed;
+        for (S32 idx = mSelectedEnvironment; idx < ENV_END; ++idx)
+        {
+            if (fixed.first && fixed.second)
+                break;
+
+            DayInstance::ptr_t environment = getEnvironmentInstance(static_cast<EnvSelection_t>(idx));
+            if (environment)
+            {
+                if (!fixed.first)
+                    fixed.first = environment->getSky();
+                if (!fixed.second)
+                    fixed.second = environment->getWater();
+            }
+        }
+
+        if (!fixed.first || !fixed.second)
+            LL_WARNS("ENVIRONMENT") << "Can not construct complete fixed environment.  Missing Sky and/or Water." << LL_ENDL;
+
+        return fixed;
+    }
+
     if ((env < ENV_EDIT) || (env > ENV_DEFAULT))
     {
         LL_WARNS("ENVIRONMENT") << "Attempt to retrieve invalid environment selection." << LL_ENDL;
diff --git a/indra/newview/llenvironment.h b/indra/newview/llenvironment.h
index a7159ca84da4c9242cbc526f0744c0d0af5b0802..95b24314cbdb31d119223529e82ff176ec8fb6d1 100644
--- a/indra/newview/llenvironment.h
+++ b/indra/newview/llenvironment.h
@@ -82,7 +82,8 @@ class LLEnvironment : public LLSingleton<LLEnvironment>
         ENV_PARCEL,
         ENV_REGION,
         ENV_DEFAULT,
-        ENV_END
+        ENV_END,
+        ENV_CURRENT = -1
     };
 
     typedef boost::signals2::connection     connection_t;
diff --git a/indra/newview/llfloaterfixedenvironment.cpp b/indra/newview/llfloaterfixedenvironment.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..d5162ef622df4218628d3f74230cdcdfafd2c19f
--- /dev/null
+++ b/indra/newview/llfloaterfixedenvironment.cpp
@@ -0,0 +1,817 @@
+/** 
+ * @file llfloaterfixedenvironment.cpp
+ * @brief Floaters to create and edit fixed settings for sky and water.
+ *
+ * $LicenseInfo:firstyear=2011&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2011, Linden Research, Inc.
+ * 
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ * 
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ * 
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
+ * $/LicenseInfo$
+ */
+
+#include "llviewerprecompiledheaders.h"
+
+#include "llfloaterfixedenvironment.h"
+
+#include <boost/make_shared.hpp>
+
+// libs
+#include "llbutton.h"
+#include "llnotifications.h"
+#include "llnotificationsutil.h"
+#include "llsliderctrl.h"
+#include "lltabcontainer.h"
+
+// newview
+#include "llpaneleditwater.h"
+
+#include "llsettingssky.h"
+#include "llsettingswater.h"
+
+#include "llenvironment.h"
+
+namespace
+{
+    const std::string FIELD_SETTINGS_NAME("settings_name");
+
+    const std::string CONTROL_TAB_AREA("tab_settings");
+
+    const std::string BUTTON_NAME_LOAD("btn_load");
+    const std::string BUTTON_NAME_IMPORT("btn_import");
+    const std::string BUTTON_NAME_COMMIT("btn_commit");
+    const std::string BUTTON_NAME_CANCEL("btn_cancel");
+}
+
+LLFloaterFixedEnvironment::LLFloaterFixedEnvironment(const LLSD &key) :
+    LLFloater(key)
+{
+}
+
+BOOL LLFloaterFixedEnvironment::postBuild()
+{
+    mTab = getChild<LLTabContainer>(CONTROL_TAB_AREA);
+    mTxtName = getChild<LLLineEditor>(FIELD_SETTINGS_NAME);
+
+    mTxtName->setCommitOnFocusLost(TRUE);
+    mTxtName->setCommitCallback([this](LLUICtrl *, const LLSD &) { onNameChanged(mTxtName->getValue().asString()); });
+
+    return TRUE;
+}
+
+void LLFloaterFixedEnvironment::onFocusReceived()
+{
+    updateEditEnvironment();
+    LLEnvironment::instance().setSelectedEnvironment(LLEnvironment::ENV_EDIT);
+}
+
+void LLFloaterFixedEnvironment::onFocusLost()
+{
+    LLEnvironment::instance().setSelectedEnvironment(LLEnvironment::ENV_LOCAL);
+}
+
+void LLFloaterFixedEnvironment::refresh()
+{
+    mTxtName->setValue(mSettings->getName());
+
+    S32 count = mTab->getTabCount();
+
+    for (S32 idx = 0; idx < count; ++idx)
+    {
+        LLSettingsEditPanel *panel = static_cast<LLSettingsEditPanel *>(mTab->getPanelByIndex(idx));
+        if (panel)
+            panel->refresh();
+    }
+}
+
+void LLFloaterFixedEnvironment::syncronizeTabs()
+{
+    S32 count = mTab->getTabCount();
+
+    for (S32 idx = 0; idx < count; ++idx)
+    {
+        LLSettingsEditPanel *panel = static_cast<LLSettingsEditPanel *>(mTab->getPanelByIndex(idx));
+        if (panel)
+            panel->setSettings(mSettings);
+    }
+}
+
+void LLFloaterFixedEnvironment::onNameChanged(const std::string &name)
+{
+    mSettings->setName(name);
+}
+
+//=========================================================================
+LLFloaterFixedEnvironmentWater::LLFloaterFixedEnvironmentWater(const LLSD &key):
+    LLFloaterFixedEnvironment(key)
+{}
+
+BOOL LLFloaterFixedEnvironmentWater::postBuild()
+{
+    if (!LLFloaterFixedEnvironment::postBuild())
+        return FALSE;
+
+    LLPanelSettingsWater * panel;
+    panel = new LLPanelSettingsWaterMainTab;
+    panel->buildFromFile("panel_settings_water.xml");
+    panel->setWater(std::static_pointer_cast<LLSettingsWater>(mSettings));
+    mTab->addTabPanel(LLTabContainer::TabPanelParams().panel(panel).select_tab(true));
+
+    // Initialize the settings, take a snapshot of the current water. 
+    mSettings = LLEnvironment::instance().getEnvironmentFixedWater(LLEnvironment::ENV_CURRENT)->buildClone();
+
+    mSettings->setName("Snapshot water (new)");
+
+    mTxtName->setValue(mSettings->getName());
+
+    syncronizeTabs();
+    refresh();
+    return TRUE;
+}
+
+void LLFloaterFixedEnvironmentWater::updateEditEnvironment(void)
+{
+    LLEnvironment::instance().setEnvironment(LLEnvironment::ENV_EDIT, 
+        std::static_pointer_cast<LLSettingsWater>(mSettings));
+}
+
+//=========================================================================
+
+#if 0
+// virtual
+BOOL LLFloaterEditSky::postBuild()
+{
+	mSkyPresetNameEditor = getChild<LLLineEditor>("sky_preset_name");
+	mSkyPresetCombo = getChild<LLComboBox>("sky_preset_combo");
+	mMakeDefaultCheckBox = getChild<LLCheckBoxCtrl>("make_default_cb");
+	mSaveButton = getChild<LLButton>("save");
+    mSkyAdapter = boost::make_shared<LLSkySettingsAdapter>();
+
+    LLEnvironment::instance().setSkyListChange(boost::bind(&LLFloaterEditSky::onSkyPresetListChange, this));
+
+	initCallbacks();
+
+// 	// Create the sun position scrubber on the slider.
+// 	getChild<LLMultiSliderCtrl>("WLSunPos")->addSlider(12.f);
+
+	return TRUE;
+}
+
+// virtual
+void LLFloaterEditSky::onOpen(const LLSD& key)
+{
+	bool new_preset = isNewPreset();
+	std::string param = key.asString();
+	std::string floater_title = getString(std::string("title_") + param);
+	std::string hint = getString(std::string("hint_" + param));
+
+	// Update floater title.
+	setTitle(floater_title);
+
+	// Update the hint at the top.
+	getChild<LLUICtrl>("hint")->setValue(hint);
+
+	// Hide the hint to the right of the combo if we're invoked to create a new preset.
+	getChildView("note")->setVisible(!new_preset);
+
+	// Switch between the sky presets combobox and preset name input field.
+	mSkyPresetCombo->setVisible(!new_preset);
+	mSkyPresetNameEditor->setVisible(new_preset);
+
+	reset();
+}
+
+// virtual
+void LLFloaterEditSky::onClose(bool app_quitting)
+{
+	if (!app_quitting) // there's no point to change environment if we're quitting
+	{
+        LLEnvironment::instance().clearEnvironment(LLEnvironment::ENV_EDIT);
+        LLEnvironment::instance().setSelectedEnvironment(LLEnvironment::ENV_LOCAL);
+	}
+}
+
+// virtual
+void LLFloaterEditSky::draw()
+{
+	syncControls();
+	LLFloater::draw();
+}
+
+void LLFloaterEditSky::initCallbacks(void)
+{
+	// *TODO: warn user if a region environment update comes while we're editing a region sky preset.
+
+	mSkyPresetNameEditor->setKeystrokeCallback(boost::bind(&LLFloaterEditSky::onSkyPresetNameEdited, this), NULL);
+	mSkyPresetCombo->setCommitCallback(boost::bind(&LLFloaterEditSky::onSkyPresetSelected, this));
+	mSkyPresetCombo->setTextEntryCallback(boost::bind(&LLFloaterEditSky::onSkyPresetNameEdited, this));
+
+	mSaveButton->setCommitCallback(boost::bind(&LLFloaterEditSky::onBtnSave, this));
+	getChild<LLButton>("cancel")->setCommitCallback(boost::bind(&LLFloaterEditSky::onBtnCancel, this));
+
+	// Connect to region info updates.
+	LLRegionInfoModel::instance().setUpdateCallback(boost::bind(&LLFloaterEditSky::onRegionInfoUpdate, this));
+
+	//-------------------------------------------------------------------------
+// LEGACY_ATMOSPHERICS
+    // ambient
+    getChild<LLUICtrl>("WLAmbient")->setCommitCallback(boost::bind(&LLFloaterEditSky::onColorControlMoved, this, _1, &mSkyAdapter->mAmbient));
+
+	// blue horizon/density
+	getChild<LLUICtrl>("WLBlueHorizon")->setCommitCallback(boost::bind(&LLFloaterEditSky::onColorControlMoved, this, _1, &mSkyAdapter->mBlueHorizon));
+    getChild<LLUICtrl>("WLBlueDensity")->setCommitCallback(boost::bind(&LLFloaterEditSky::onColorControlMoved, this, _1, &mSkyAdapter->mBlueDensity));
+
+	// haze density, horizon, mult, and altitude
+    getChild<LLUICtrl>("WLHazeDensity")->setCommitCallback(boost::bind(&LLFloaterEditSky::onFloatControlMoved, this, _1, &mSkyAdapter->mHazeDensity));
+    getChild<LLUICtrl>("WLHazeHorizon")->setCommitCallback(boost::bind(&LLFloaterEditSky::onFloatControlMoved, this, _1, &mSkyAdapter->mHazeHorizon));
+    getChild<LLUICtrl>("WLDensityMult")->setCommitCallback(boost::bind(&LLFloaterEditSky::onFloatControlMoved, this, _1, &mSkyAdapter->mDensityMult));
+    getChild<LLUICtrl>("WLDistanceMult")->setCommitCallback(boost::bind(&LLFloaterEditSky::onFloatControlMoved, this, _1, &mSkyAdapter->mDistanceMult));
+    getChild<LLUICtrl>("WLMaxAltitude")->setCommitCallback(boost::bind(&LLFloaterEditSky::onFloatControlMoved, this, _1, &mSkyAdapter->mMaxAlt));
+
+	// sunlight
+    getChild<LLUICtrl>("WLSunlight")->setCommitCallback(boost::bind(&LLFloaterEditSky::onColorControlMoved, this, _1, &mSkyAdapter->mSunlight));
+
+	// glow
+    getChild<LLUICtrl>("WLGlowR")->setCommitCallback(boost::bind(&LLFloaterEditSky::onGlowRMoved, this, _1, &mSkyAdapter->mGlow));
+    getChild<LLUICtrl>("WLGlowB")->setCommitCallback(boost::bind(&LLFloaterEditSky::onGlowBMoved, this, _1, &mSkyAdapter->mGlow));
+
+	// time of day
+//     getChild<LLUICtrl>("WLSunPos")->setCommitCallback(boost::bind(&LLFloaterEditSky::onSunMoved, this, _1, &mSkyAdapter->mLightnorm));     // multi-slider
+// 	getChild<LLTimeCtrl>("WLDayTime")->setCommitCallback(boost::bind(&LLFloaterEditSky::onTimeChanged, this));                          // time ctrl
+//     getChild<LLUICtrl>("WLEastAngle")->setCommitCallback(boost::bind(&LLFloaterEditSky::onSunMoved, this, _1, &mSkyAdapter->mLightnorm));
+    getChild<LLJoystickQuaternion>("WLSunRotation")->setCommitCallback(boost::bind(&LLFloaterEditSky::onSunRotationChanged, this));
+    getChild<LLJoystickQuaternion>("WLMoonRotation")->setCommitCallback(boost::bind(&LLFloaterEditSky::onMoonRotationChanged, this));
+
+	// Clouds
+
+	// Cloud Color
+    getChild<LLUICtrl>("WLCloudColor")->setCommitCallback(boost::bind(&LLFloaterEditSky::onColorControlMoved, this, _1, &mSkyAdapter->mCloudColor));
+
+	// Cloud
+    getChild<LLUICtrl>("WLCloudX")->setCommitCallback(boost::bind(&LLFloaterEditSky::onColorControlRMoved, this, _1, &mSkyAdapter->mCloudMain));
+    getChild<LLUICtrl>("WLCloudY")->setCommitCallback(boost::bind(&LLFloaterEditSky::onColorControlGMoved, this, _1, &mSkyAdapter->mCloudMain));
+    getChild<LLUICtrl>("WLCloudDensity")->setCommitCallback(boost::bind(&LLFloaterEditSky::onColorControlBMoved, this, _1, &mSkyAdapter->mCloudMain));
+
+	// Cloud Detail
+    getChild<LLUICtrl>("WLCloudDetailX")->setCommitCallback(boost::bind(&LLFloaterEditSky::onColorControlRMoved, this, _1, &mSkyAdapter->mCloudDetail));
+    getChild<LLUICtrl>("WLCloudDetailY")->setCommitCallback(boost::bind(&LLFloaterEditSky::onColorControlGMoved, this, _1, &mSkyAdapter->mCloudDetail));
+    getChild<LLUICtrl>("WLCloudDetailDensity")->setCommitCallback(boost::bind(&LLFloaterEditSky::onColorControlBMoved, this, _1, &mSkyAdapter->mCloudDetail));
+
+	// Cloud extras
+    getChild<LLUICtrl>("WLCloudCoverage")->setCommitCallback(boost::bind(&LLFloaterEditSky::onFloatControlMoved, this, _1, &mSkyAdapter->mCloudCoverage));
+    getChild<LLUICtrl>("WLCloudScale")->setCommitCallback(boost::bind(&LLFloaterEditSky::onFloatControlMoved, this, _1, &mSkyAdapter->mCloudScale));
+	getChild<LLUICtrl>("WLCloudScrollX")->setCommitCallback(boost::bind(&LLFloaterEditSky::onCloudScrollXMoved, this, _1));
+	getChild<LLUICtrl>("WLCloudScrollY")->setCommitCallback(boost::bind(&LLFloaterEditSky::onCloudScrollYMoved, this, _1));
+    
+
+	// Dome
+    getChild<LLUICtrl>("WLGamma")->setCommitCallback(boost::bind(&LLFloaterEditSky::onFloatControlMoved, this, _1, &mSkyAdapter->mWLGamma));
+	getChild<LLUICtrl>("WLStarAlpha")->setCommitCallback(boost::bind(&LLFloaterEditSky::onStarAlphaMoved, this, _1));
+}
+
+//=================================================================================================
+
+void LLFloaterEditSky::syncControls()
+{
+    LLSettingsSky::ptr_t psky = LLEnvironment::instance().getCurrentSky();
+    mEditSettings = psky;
+
+    std::string name = psky->getName();
+
+    mSkyPresetNameEditor->setText(name);
+    mSkyPresetCombo->setValue(name);
+
+// LEGACY_ATMOSPHERICS
+    // ambient
+    mSkyAdapter->mAmbient.setColor3( psky->getAmbientColor() );
+	setColorSwatch("WLAmbient", mSkyAdapter->mAmbient, WL_SUN_AMBIENT_SLIDER_SCALE);
+
+	// blue horizon / density
+	mSkyAdapter->mBlueHorizon.setColor3( psky->getBlueHorizon() );
+	setColorSwatch("WLBlueHorizon", mSkyAdapter->mBlueHorizon, WL_BLUE_HORIZON_DENSITY_SCALE);
+    mSkyAdapter->mBlueDensity.setColor3( psky->getBlueDensity() );
+	setColorSwatch("WLBlueDensity", mSkyAdapter->mBlueDensity, WL_BLUE_HORIZON_DENSITY_SCALE);
+
+	// haze density, horizon, mult, and altitude
+    mSkyAdapter->mHazeDensity = psky->getHazeDensity();
+	childSetValue("WLHazeDensity", (F32) mSkyAdapter->mHazeDensity);
+    mSkyAdapter->mHazeHorizon = psky->getHazeHorizon();
+	childSetValue("WLHazeHorizon", (F32) mSkyAdapter->mHazeHorizon);
+    mSkyAdapter->mDensityMult = psky->getDensityMultiplier();
+	childSetValue("WLDensityMult", ((F32) mSkyAdapter->mDensityMult) * mSkyAdapter->mDensityMult.getMult());
+    mSkyAdapter->mMaxAlt = psky->getMaxY();
+    mSkyAdapter->mDistanceMult = psky->getDistanceMultiplier();
+	childSetValue("WLDistanceMult", (F32) mSkyAdapter->mDistanceMult);
+	childSetValue("WLMaxAltitude", (F32) mSkyAdapter->mMaxAlt);
+
+	// Lighting
+
+	// sunlight
+    mSkyAdapter->mSunlight.setColor3( psky->getSunlightColor() );
+	setColorSwatch("WLSunlight", mSkyAdapter->mSunlight, WL_SUN_AMBIENT_SLIDER_SCALE);
+
+	// glow
+    mSkyAdapter->mGlow.setColor3( psky->getGlow() );
+	childSetValue("WLGlowR", 2 - mSkyAdapter->mGlow.getRed() / 20.0f);
+	childSetValue("WLGlowB", -mSkyAdapter->mGlow.getBlue() / 5.0f);
+
+	
+
+//     LLSettingsSky::azimalt_t azal = psky->getSunRotationAzAl();
+// 
+// 	F32 time24 = sun_pos_to_time24(azal.second / F_TWO_PI);
+// 	getChild<LLMultiSliderCtrl>("WLSunPos")->setCurSliderValue(time24, TRUE);
+// 	getChild<LLTimeCtrl>("WLDayTime")->setTime24(time24);
+// 	childSetValue("WLEastAngle", azal.first / F_TWO_PI);
+    getChild<LLJoystickQuaternion>("WLSunRotation")->setRotation(psky->getSunRotation());
+    getChild<LLJoystickQuaternion>("WLMoonRotation")->setRotation(psky->getMoonRotation());
+
+	// Clouds
+
+	// Cloud Color
+    mSkyAdapter->mCloudColor.setColor3( psky->getCloudColor() );
+	setColorSwatch("WLCloudColor", mSkyAdapter->mCloudColor, WL_CLOUD_SLIDER_SCALE);
+
+	// Cloud
+    mSkyAdapter->mCloudMain.setColor3( psky->getCloudPosDensity1() );
+	childSetValue("WLCloudX", mSkyAdapter->mCloudMain.getRed());
+	childSetValue("WLCloudY", mSkyAdapter->mCloudMain.getGreen());
+	childSetValue("WLCloudDensity", mSkyAdapter->mCloudMain.getBlue());
+
+	// Cloud Detail
+	mSkyAdapter->mCloudDetail.setColor3( psky->getCloudPosDensity2() );
+	childSetValue("WLCloudDetailX", mSkyAdapter->mCloudDetail.getRed());
+	childSetValue("WLCloudDetailY", mSkyAdapter->mCloudDetail.getGreen());
+	childSetValue("WLCloudDetailDensity", mSkyAdapter->mCloudDetail.getBlue());
+
+	// Cloud extras
+    mSkyAdapter->mCloudCoverage = psky->getCloudShadow();
+    mSkyAdapter->mCloudScale = psky->getCloudScale();
+	childSetValue("WLCloudCoverage", (F32) mSkyAdapter->mCloudCoverage);
+	childSetValue("WLCloudScale", (F32) mSkyAdapter->mCloudScale);
+
+	// cloud scrolling
+    LLVector2 scroll_rate = psky->getCloudScrollRate();
+
+    // LAPRAS: These should go away...
+    childDisable("WLCloudLockX");
+ 	childDisable("WLCloudLockY");
+
+	// disable if locked, enable if not
+	childEnable("WLCloudScrollX");
+	childEnable("WLCloudScrollY");
+
+	// *HACK cloud scrolling is off my an additive of 10
+	childSetValue("WLCloudScrollX", scroll_rate[0] - 10.0f);
+	childSetValue("WLCloudScrollY", scroll_rate[1] - 10.0f);
+
+	// Tweak extras
+
+    mSkyAdapter->mWLGamma = psky->getGamma();
+	childSetValue("WLGamma", (F32) mSkyAdapter->mWLGamma);
+
+	childSetValue("WLStarAlpha", psky->getStarBrightness());
+}
+
+void LLFloaterEditSky::setColorSwatch(const std::string& name, const WLColorControl& from_ctrl, F32 k)
+{
+	// Set the value, dividing it by <k> first.
+	LLColor4 color = from_ctrl.getColor4();
+	getChild<LLColorSwatchCtrl>(name)->set(color / k);
+}
+
+// color control callbacks
+void LLFloaterEditSky::onColorControlMoved(LLUICtrl* ctrl, WLColorControl* color_ctrl)
+{
+	LLColorSwatchCtrl* swatch = static_cast<LLColorSwatchCtrl*>(ctrl);
+	LLColor4 color_vec(swatch->get().mV);
+
+	// Multiply RGB values by the appropriate factor.
+	F32 k = WL_CLOUD_SLIDER_SCALE;
+	if (color_ctrl->getIsSunOrAmbientColor())
+	{
+		k = WL_SUN_AMBIENT_SLIDER_SCALE;
+	}
+	else if (color_ctrl->getIsBlueHorizonOrDensity())
+	{
+		k = WL_BLUE_HORIZON_DENSITY_SCALE;
+	}
+
+	color_vec *= k; // intensity isn't affected by the multiplication
+
+    // Set intensity to maximum of the RGB values.
+    color_vec.mV[3] = color_max(color_vec);
+
+	// Apply the new RGBI value.
+	color_ctrl->setColor4(color_vec);
+	color_ctrl->update(mEditSettings);
+}
+
+void LLFloaterEditSky::onColorControlRMoved(LLUICtrl* ctrl, void* userdata)
+{
+	LLSliderCtrl* sldr_ctrl = static_cast<LLSliderCtrl*>(ctrl);
+	WLColorControl* color_ctrl = static_cast<WLColorControl *>(userdata);
+
+    F32 red_value = sldr_ctrl->getValueF32();
+    F32 k = 1.0f;
+
+	if (color_ctrl->getIsSunOrAmbientColor())
+	{
+		k = WL_SUN_AMBIENT_SLIDER_SCALE;
+	}
+	if (color_ctrl->getIsBlueHorizonOrDensity())
+	{
+		k = WL_BLUE_HORIZON_DENSITY_SCALE;
+	}
+    color_ctrl->setRed(red_value * k);
+
+    adjustIntensity(color_ctrl, red_value, k);
+    color_ctrl->update(mEditSettings);
+}
+
+void LLFloaterEditSky::onColorControlGMoved(LLUICtrl* ctrl, void* userdata)
+{
+    LLSliderCtrl* sldr_ctrl = static_cast<LLSliderCtrl*>(ctrl);
+    WLColorControl* color_ctrl = static_cast<WLColorControl *>(userdata);
+
+    F32 green_value = sldr_ctrl->getValueF32();
+    F32 k = 1.0f;
+
+    if (color_ctrl->getIsSunOrAmbientColor())
+    {
+        k = WL_SUN_AMBIENT_SLIDER_SCALE;
+    }
+    if (color_ctrl->getIsBlueHorizonOrDensity())
+    {
+        k = WL_BLUE_HORIZON_DENSITY_SCALE;
+    }
+    color_ctrl->setGreen(green_value * k);
+
+    adjustIntensity(color_ctrl, green_value, k);
+    color_ctrl->update(mEditSettings);
+}
+
+void LLFloaterEditSky::onColorControlBMoved(LLUICtrl* ctrl, void* userdata)
+{
+    LLSliderCtrl* sldr_ctrl = static_cast<LLSliderCtrl*>(ctrl);
+    WLColorControl* color_ctrl = static_cast<WLColorControl *>(userdata);
+
+    F32 blue_value = sldr_ctrl->getValueF32();
+    F32 k = 1.0f;
+
+    if (color_ctrl->getIsSunOrAmbientColor())
+    {
+        k = WL_SUN_AMBIENT_SLIDER_SCALE;
+    }
+    if (color_ctrl->getIsBlueHorizonOrDensity())
+    {
+        k = WL_BLUE_HORIZON_DENSITY_SCALE;
+    }
+    color_ctrl->setBlue(blue_value * k);
+
+    adjustIntensity(color_ctrl, blue_value, k);
+    color_ctrl->update(mEditSettings);
+}
+
+void LLFloaterEditSky::adjustIntensity(WLColorControl *ctrl, F32 val, F32 scale)
+{
+    if (ctrl->getHasSliderName())
+    {
+        LLColor4 color = ctrl->getColor4();
+        F32 i = color_max(color) / scale;
+        ctrl->setIntensity(i);
+        std::string name = ctrl->getSliderName();
+        name.append("I");
+
+        childSetValue(name, i);
+    }
+}
+
+
+/// GLOW SPECIFIC CODE
+void LLFloaterEditSky::onGlowRMoved(LLUICtrl* ctrl, void* userdata)
+{
+
+	LLSliderCtrl* sldr_ctrl = static_cast<LLSliderCtrl*>(ctrl);
+	WLColorControl* color_ctrl = static_cast<WLColorControl *>(userdata);
+
+	// scaled by 20
+	color_ctrl->setRed((2 - sldr_ctrl->getValueF32()) * 20);
+
+	color_ctrl->update(mEditSettings);
+}
+
+/// \NOTE that we want NEGATIVE (-) B
+void LLFloaterEditSky::onGlowBMoved(LLUICtrl* ctrl, void* userdata)
+{
+	LLSliderCtrl* sldr_ctrl = static_cast<LLSliderCtrl*>(ctrl);
+	WLColorControl* color_ctrl = static_cast<WLColorControl *>(userdata);
+
+	/// \NOTE that we want NEGATIVE (-) B and NOT by 20 as 20 is too big
+	color_ctrl->setBlue(-sldr_ctrl->getValueF32() * 5);
+
+	color_ctrl->update(mEditSettings);
+}
+
+void LLFloaterEditSky::onFloatControlMoved(LLUICtrl* ctrl, void* userdata)
+{
+	LLSliderCtrl* sldr_ctrl = static_cast<LLSliderCtrl*>(ctrl);
+	WLFloatControl * floatControl = static_cast<WLFloatControl *>(userdata);
+
+	floatControl->setValue(sldr_ctrl->getValueF32() / floatControl->getMult());
+
+	floatControl->update(mEditSettings);
+}
+
+
+// Lighting callbacks
+
+// time of day
+void LLFloaterEditSky::onSunMoved(LLUICtrl* ctrl, void* userdata)
+{
+	LLMultiSliderCtrl* sun_msldr = getChild<LLMultiSliderCtrl>("WLSunPos");
+	LLSliderCtrl* east_sldr = getChild<LLSliderCtrl>("WLEastAngle");
+	LLTimeCtrl* time_ctrl = getChild<LLTimeCtrl>("WLDayTime");
+	WLColorControl* color_ctrl = static_cast<WLColorControl *>(userdata);
+
+	F32 time24  = sun_msldr->getCurSliderValue();
+	time_ctrl->setTime24(time24); // sync the time ctrl with the new sun position
+
+	// get the two angles
+    F32 azimuth = F_TWO_PI * east_sldr->getValueF32();
+    F32 altitude = F_TWO_PI * time24_to_sun_pos(time24);
+    mEditSettings->setSunRotation(azimuth, altitude);
+    mEditSettings->setMoonRotation(azimuth + F_PI, -altitude);
+
+    LLVector4 sunnorm( mEditSettings->getSunDirection(), 1.f );
+
+	color_ctrl->update(mEditSettings);
+}
+
+void LLFloaterEditSky::onTimeChanged()
+{
+	F32 time24 = getChild<LLTimeCtrl>("WLDayTime")->getTime24();
+	getChild<LLMultiSliderCtrl>("WLSunPos")->setCurSliderValue(time24, TRUE);
+    onSunMoved(getChild<LLUICtrl>("WLSunPos"), &(mSkyAdapter->mLightnorm));
+}
+
+void LLFloaterEditSky::onSunRotationChanged()
+{
+    LLJoystickQuaternion* sun_spinner = getChild<LLJoystickQuaternion>("WLSunRotation");
+    LLQuaternion sunrot(sun_spinner->getRotation());
+
+    mEditSettings->setSunRotation(sunrot);
+}
+
+void LLFloaterEditSky::onMoonRotationChanged()
+{
+    LLJoystickQuaternion* moon_spinner = getChild<LLJoystickQuaternion>("WLMoonRotation");
+    LLQuaternion moonrot(moon_spinner->getRotation());
+
+    mEditSettings->setMoonRotation(moonrot);
+}
+
+void LLFloaterEditSky::onStarAlphaMoved(LLUICtrl* ctrl)
+{
+	LLSliderCtrl* sldr_ctrl = static_cast<LLSliderCtrl*>(ctrl);
+
+    mEditSettings->setStarBrightness(sldr_ctrl->getValueF32());
+}
+
+// Clouds
+void LLFloaterEditSky::onCloudScrollXMoved(LLUICtrl* ctrl)
+{
+	LLSliderCtrl* sldr_ctrl = static_cast<LLSliderCtrl*>(ctrl);
+	// *HACK  all cloud scrolling is off by an additive of 10.
+    mEditSettings->setCloudScrollRateX(sldr_ctrl->getValueF32() + 10.0f);
+}
+
+void LLFloaterEditSky::onCloudScrollYMoved(LLUICtrl* ctrl)
+{
+	LLSliderCtrl* sldr_ctrl = static_cast<LLSliderCtrl*>(ctrl);
+
+	// *HACK  all cloud scrolling is off by an additive of 10.
+    mEditSettings->setCloudScrollRateY(sldr_ctrl->getValueF32() + 10.0f);
+}
+
+//=================================================================================================
+
+void LLFloaterEditSky::reset()
+{
+	if (isNewPreset())
+	{
+		mSkyPresetNameEditor->setValue(LLSD());
+		mSaveButton->setEnabled(FALSE); // will be enabled as soon as users enters a name
+	}
+	else
+	{
+		refreshSkyPresetsList();
+
+		// Disable controls until a sky preset to edit is selected.
+		enableEditing(false);
+	}
+}
+
+bool LLFloaterEditSky::isNewPreset() const
+{
+	return mKey.asString() == "new";
+}
+
+void LLFloaterEditSky::refreshSkyPresetsList()
+{
+	mSkyPresetCombo->removeall();
+
+    LLEnvironment::list_name_id_t list = LLEnvironment::instance().getSkyList();
+
+    for (LLEnvironment::list_name_id_t::iterator it = list.begin(); it != list.end(); ++it)
+    {
+        mSkyPresetCombo->add((*it).first, LLSDArray((*it).first)((*it).second));
+    }
+
+	mSkyPresetCombo->setLabel(getString("combo_label"));
+}
+
+void LLFloaterEditSky::enableEditing(bool enable)
+{
+	// Enable/disable the tab and their contents.
+	LLTabContainer* tab_container = getChild<LLTabContainer>("WindLight Tabs");
+	tab_container->setEnabled(enable);
+	for (S32 i = 0; i < tab_container->getTabCount(); ++i)
+	{
+		tab_container->enableTabButton(i, enable);
+		tab_container->getPanelByIndex(i)->setCtrlsEnabled(enable);
+	}
+
+	// Enable/disable saving.
+	mSaveButton->setEnabled(enable);
+	mMakeDefaultCheckBox->setEnabled(enable);
+}
+
+void LLFloaterEditSky::saveRegionSky()
+{
+#if 0
+	LLWLParamKey key(getSelectedSkyPreset());
+	llassert(key.scope == LLEnvKey::SCOPE_REGION);
+
+	LL_DEBUGS("Windlight") << "Saving region sky preset: " << key.name  << LL_ENDL;
+	LLWLParamManager& wl_mgr = LLWLParamManager::instance();
+	wl_mgr.mCurParams.mName = key.name;
+	wl_mgr.setParamSet(key, wl_mgr.mCurParams);
+
+	// *TODO: save to cached region settings.
+	LL_WARNS("Windlight") << "Saving region sky is not fully implemented yet" << LL_ENDL;
+#endif
+}
+
+std::string LLFloaterEditSky::getSelectedPresetName() const
+{
+    std::string name;
+    if (mSkyPresetNameEditor->getVisible())
+    {
+        name = mSkyPresetNameEditor->getText();
+    }
+    else
+    {
+        LLSD combo_val = mSkyPresetCombo->getValue();
+        name = combo_val[0].asString();
+    }
+
+    return name;
+}
+
+void LLFloaterEditSky::onSkyPresetNameEdited()
+{
+    std::string name = mSkyPresetNameEditor->getText();
+    LLSettingsWater::ptr_t psky = LLEnvironment::instance().getCurrentWater();
+
+    psky->setName(name);
+}
+
+void LLFloaterEditSky::onSkyPresetSelected()
+{
+    std::string name;
+
+    name = getSelectedPresetName();
+
+    LLSettingsSky::ptr_t psky = LLEnvironment::instance().findSkyByName(name);
+
+    if (!psky)
+    {
+        LL_WARNS("WATEREDIT") << "Could not find water preset" << LL_ENDL;
+        enableEditing(false);
+        return;
+    }
+
+    psky = psky->buildClone();
+    LLEnvironment::instance().setEnvironment(LLEnvironment::ENV_EDIT, psky);
+    mEditSettings = psky;
+
+    syncControls();
+    enableEditing(true);
+
+}
+
+bool LLFloaterEditSky::onSaveAnswer(const LLSD& notification, const LLSD& response)
+{
+	S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
+
+	// If they choose save, do it.  Otherwise, don't do anything
+	if (option == 0)
+	{
+		onSaveConfirmed();
+	}
+
+	return false;
+}
+
+void LLFloaterEditSky::onSaveConfirmed()
+{
+    // Save currently displayed water params to the selected preset.
+    std::string name = mEditSettings->getName();
+
+    LL_DEBUGS("Windlight") << "Saving sky preset " << name << LL_ENDL;
+
+    LLEnvironment::instance().addSky(mEditSettings);
+
+    // Change preference if requested.
+    if (mMakeDefaultCheckBox->getEnabled() && mMakeDefaultCheckBox->getValue())
+    {
+        LL_DEBUGS("Windlight") << name << " is now the new preferred sky preset" << LL_ENDL;
+        LLEnvironment::instance().setEnvironment(LLEnvironment::ENV_LOCAL, mEditSettings);
+    }
+
+    closeFloater();
+}
+
+void LLFloaterEditSky::onBtnSave()
+{
+    LLEnvironment::instance().addSky(mEditSettings);
+    LLEnvironment::instance().setEnvironment(LLEnvironment::ENV_LOCAL, mEditSettings);
+
+    closeFloater();
+}
+
+void LLFloaterEditSky::onBtnCancel()
+{
+	closeFloater();
+}
+
+void LLFloaterEditSky::onSkyPresetListChange()
+{
+    refreshSkyPresetsList();
+}
+
+void LLFloaterEditSky::onRegionSettingsChange()
+{
+#if 0
+	// If creating a new sky, don't bother.
+	if (isNewPreset())
+	{
+		return;
+	}
+
+	if (getSelectedSkyPreset().scope == LLEnvKey::SCOPE_REGION) // if editing a region sky
+	{
+		// reset the floater to its initial state
+		reset();
+
+		// *TODO: Notify user?
+	}
+	else // editing a local sky
+	{
+		refreshSkyPresetsList();
+	}
+#endif
+}
+
+void LLFloaterEditSky::onRegionInfoUpdate()
+{
+#if 0
+	bool can_edit = true;
+
+	// If we've selected a region sky preset for editing.
+	if (getSelectedSkyPreset().scope == LLEnvKey::SCOPE_REGION)
+	{
+		// check whether we have the access
+		can_edit = LLEnvManagerNew::canEditRegionSettings();
+	}
+
+	enableEditing(can_edit);
+#endif
+}
+#endif
+
diff --git a/indra/newview/llfloaterfixedenvironment.h b/indra/newview/llfloaterfixedenvironment.h
new file mode 100644
index 0000000000000000000000000000000000000000..0d2d21533e0bb32044e6c24216163aa9c0ef2f71
--- /dev/null
+++ b/indra/newview/llfloaterfixedenvironment.h
@@ -0,0 +1,171 @@
+/** 
+ * @file llfloaterfixedenvironment.h
+ * @brief Floaters to create and edit fixed settings for sky and water.
+ *
+ * $LicenseInfo:firstyear=2011&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2011, Linden Research, Inc.
+ * 
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ * 
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ * 
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
+ * $/LicenseInfo$
+ */
+
+#ifndef LL_FLOATERFIXEDENVIRONMENT_H
+#define LL_FLOATERFIXEDENVIRONMENT_H
+
+#include "llfloater.h"
+#include "llsettingsbase.h"
+
+class LLTabContainer;
+class LLButton;
+class LLLineEditor;
+
+/**
+ * Floater container for creating and editing fixed environment settings.
+ */
+class LLFloaterFixedEnvironment : public LLFloater
+{
+    LOG_CLASS(LLFloaterFixedEnvironment);
+
+public:
+                            LLFloaterFixedEnvironment(const LLSD &key);
+
+    virtual BOOL	        postBuild()         override;
+
+    virtual void            onFocusReceived()   override;
+    virtual void            onFocusLost()       override;
+
+    void                    setEditSettings(LLSettingsBase::ptr_t &settings)    { mSettings = settings; syncronizeTabs(); }
+    LLSettingsBase::ptr_t   getEditSettings()   const                           { return mSettings; }
+
+protected:
+    virtual void            updateEditEnvironment() = 0;
+    virtual void            refresh();
+
+    virtual void            syncronizeTabs();
+
+    LLTabContainer *        mTab;
+    LLLineEditor *          mTxtName;
+
+    LLSettingsBase::ptr_t   mSettings;
+
+
+private:
+    void onNameChanged(const std::string &name);
+
+#if 0
+
+	/*virtual*/	BOOL	postBuild();
+	/*virtual*/ void	onOpen(const LLSD& key);
+	/*virtual*/ void	onClose(bool app_quitting);
+	/*virtual*/ void	draw();
+
+
+	//-- WL stuff begins ------------------------------------------------------
+
+	void syncControls(); /// sync up sliders with parameters
+
+	void setColorSwatch(const std::string& name, const WLColorControl& from_ctrl, F32 k);
+
+	// general purpose callbacks for dealing with color controllers
+	void onColorControlMoved(LLUICtrl* ctrl, WLColorControl* color_ctrl);
+	void onColorControlRMoved(LLUICtrl* ctrl, void* userdata);
+	void onColorControlGMoved(LLUICtrl* ctrl, void* userdata);
+	void onColorControlBMoved(LLUICtrl* ctrl, void* userdata);
+	void onFloatControlMoved(LLUICtrl* ctrl, void* userdata);
+
+    void adjustIntensity(WLColorControl *ctrl, F32 color, F32 scale);
+
+	// lighting callbacks for glow
+	void onGlowRMoved(LLUICtrl* ctrl, void* userdata);
+	void onGlowBMoved(LLUICtrl* ctrl, void* userdata);
+
+	// lighting callbacks for sun
+	void onSunMoved(LLUICtrl* ctrl, void* userdata);
+	void onTimeChanged();
+
+    void onSunRotationChanged();
+    void onMoonRotationChanged();
+
+	// for handling when the star slider is moved to adjust the alpha
+	void onStarAlphaMoved(LLUICtrl* ctrl);
+
+	// handle cloud scrolling
+	void onCloudScrollXMoved(LLUICtrl* ctrl);
+	void onCloudScrollYMoved(LLUICtrl* ctrl);
+
+	//-- WL stuff ends --------------------------------------------------------
+
+	void reset(); /// reset the floater to its initial state
+	bool isNewPreset() const;
+	void refreshSkyPresetsList();
+	void enableEditing(bool enable);
+	void saveRegionSky();
+	std::string getSelectedPresetName() const;
+
+	void onSkyPresetNameEdited();
+	void onSkyPresetSelected();
+	bool onSaveAnswer(const LLSD& notification, const LLSD& response);
+	void onSaveConfirmed();
+
+	void onBtnSave();
+	void onBtnCancel();
+
+	void onSkyPresetListChange();
+	void onRegionSettingsChange();
+	void onRegionInfoUpdate();
+
+    LLSettingsSky::ptr_t mEditSettings;
+
+	LLLineEditor*	mSkyPresetNameEditor;
+	LLComboBox*		mSkyPresetCombo;
+	LLCheckBoxCtrl*	mMakeDefaultCheckBox;
+	LLButton*		mSaveButton;
+    LLSkySettingsAdapterPtr mSkyAdapter;
+#endif
+};
+
+class LLFloaterFixedEnvironmentWater : public LLFloaterFixedEnvironment
+{
+    LOG_CLASS(LLFloaterFixedEnvironmentWater);
+
+public:
+    LLFloaterFixedEnvironmentWater(const LLSD &key);
+
+    BOOL	        postBuild() override;
+
+protected:    
+    virtual void    updateEditEnvironment() override;
+
+private:
+};
+
+class LLSettingsEditPanel : public LLPanel
+{
+public:
+    virtual void setSettings(LLSettingsBase::ptr_t &) = 0;
+
+    virtual void refresh() = 0;
+
+protected:
+    LLSettingsEditPanel() :
+        LLPanel()
+    {}
+
+};
+
+#endif // LL_FLOATERFIXEDENVIRONMENT_H
diff --git a/indra/newview/llpaneleditwater.cpp b/indra/newview/llpaneleditwater.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..08ba198894c89cdd8d7b0ffb36c9b0b61c1c505c
--- /dev/null
+++ b/indra/newview/llpaneleditwater.cpp
@@ -0,0 +1,212 @@
+/**
+* @file llpaneleditwater.cpp
+* @brief Floaters to create and edit fixed settings for sky and water.
+*
+* $LicenseInfo:firstyear=2011&license=viewerlgpl$
+* Second Life Viewer Source Code
+* Copyright (C) 2011, Linden Research, Inc.
+*
+* This library is free software; you can redistribute it and/or
+* modify it under the terms of the GNU Lesser General Public
+* License as published by the Free Software Foundation;
+* version 2.1 of the License only.
+*
+* This library is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this library; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+*
+* Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
+* $/LicenseInfo$
+*/
+
+#include "llviewerprecompiledheaders.h"
+
+#include "llpaneleditwater.h"
+
+#include "llslider.h"
+#include "lltexturectrl.h"
+#include "llcolorswatch.h"
+
+namespace
+{
+    const std::string   FIELD_WATER_FOG_COLOR("water_fog_color");
+    const std::string   FIELD_WATER_FOG_DENSITY("water_fog_density");
+    const std::string   FIELD_WATER_UNDERWATER_MOD("water_underwater_mod");
+    const std::string   FIELD_WATER_NORMAL_MAP("water_normal_map");
+
+    const std::string   FIELD_WATER_WAVE1_X("water_wave1_x");
+    const std::string   FIELD_WATER_WAVE1_Y("water_wave1_y");
+
+    const std::string   FIELD_WATER_WAVE2_X("water_wave2_x");
+    const std::string   FIELD_WATER_WAVE2_Y("water_wave2_y");
+
+    const std::string   FIELD_WATER_NORMAL_SCALE_X("water_normal_scale_x");
+    const std::string   FIELD_WATER_NORMAL_SCALE_Y("water_normal_scale_y");
+    const std::string   FIELD_WATER_NORMAL_SCALE_Z("water_normal_scale_z");
+
+    const std::string   FIELD_WATER_FRESNEL_SCALE("water_fresnel_scale");
+    const std::string   FIELD_WATER_FRESNEL_OFFSET("water_fresnel_offset");
+
+    const std::string   FIELD_WATER_SCALE_ABOVE("water_scale_above");
+    const std::string   FIELD_WATER_SCALE_BELOW("water_scale_below");
+    const std::string   FIELD_WATER_BLUR_MULTIP("water_blur_multip");
+}
+
+//==========================================================================
+LLPanelSettingsWater::LLPanelSettingsWater() :
+    LLSettingsEditPanel(),
+    mWaterSettings()
+{
+
+}
+
+
+//==========================================================================
+LLPanelSettingsWaterMainTab::LLPanelSettingsWaterMainTab():
+    LLPanelSettingsWater(),
+    mClrFogColor(nullptr),
+    mTxtNormalMap(nullptr)
+{
+}
+
+
+BOOL LLPanelSettingsWaterMainTab::postBuild()
+{
+    mClrFogColor = getChild<LLColorSwatchCtrl>(FIELD_WATER_FOG_COLOR);
+    mTxtNormalMap = getChild<LLTextureCtrl>(FIELD_WATER_NORMAL_MAP);
+
+
+    mClrFogColor->setCommitCallback([this](LLUICtrl *, const LLSD &) { onFogColorChanged(); });
+    getChild<LLUICtrl>(FIELD_WATER_FOG_DENSITY)->setCommitCallback([this](LLUICtrl *, const LLSD &) { onFogDensityChanged(); });
+//    getChild<LLUICtrl>(FIELD_WATER_FOG_DENSITY)->setCommitCallback([this](LLUICtrl *, const LLSD &) { onFogDensityChanged(getChild<LLUICtrl>(FIELD_WATER_FOG_DENSITY)->getValue().asReal()); });
+    getChild<LLUICtrl>(FIELD_WATER_UNDERWATER_MOD)->setCommitCallback([this](LLUICtrl *, const LLSD &) { onFogUnderWaterChanged(); });
+    mTxtNormalMap->setCommitCallback([this](LLUICtrl *, const LLSD &) { onNormalMapChanged(); });
+
+    getChild<LLUICtrl>(FIELD_WATER_WAVE1_X)->setCommitCallback([this](LLUICtrl *, const LLSD &) { onLargeWaveChanged(); });
+    getChild<LLUICtrl>(FIELD_WATER_WAVE1_Y)->setCommitCallback([this](LLUICtrl *, const LLSD &) { onLargeWaveChanged(); });
+
+    getChild<LLUICtrl>(FIELD_WATER_WAVE2_X)->setCommitCallback([this](LLUICtrl *, const LLSD &) { onSmallWaveChanged(); });
+    getChild<LLUICtrl>(FIELD_WATER_WAVE2_Y)->setCommitCallback([this](LLUICtrl *, const LLSD &) { onSmallWaveChanged(); });
+
+    getChild<LLUICtrl>(FIELD_WATER_NORMAL_SCALE_X)->setCommitCallback([this](LLUICtrl *, const LLSD &) { onNormalScaleChanged(); });
+    getChild<LLUICtrl>(FIELD_WATER_NORMAL_SCALE_Y)->setCommitCallback([this](LLUICtrl *, const LLSD &) { onNormalScaleChanged(); });
+    getChild<LLUICtrl>(FIELD_WATER_NORMAL_SCALE_Z)->setCommitCallback([this](LLUICtrl *, const LLSD &) { onNormalScaleChanged(); });
+
+    getChild<LLUICtrl>(FIELD_WATER_FRESNEL_SCALE)->setCommitCallback([this](LLUICtrl *, const LLSD &) { onFresnelScaleChanged(); });
+    getChild<LLUICtrl>(FIELD_WATER_FRESNEL_OFFSET)->setCommitCallback([this](LLUICtrl *, const LLSD &) { onFresnelOffsetChanged(); });
+    getChild<LLUICtrl>(FIELD_WATER_SCALE_ABOVE)->setCommitCallback([this](LLUICtrl *, const LLSD &) { onScaleAboveChanged(); });
+    getChild<LLUICtrl>(FIELD_WATER_SCALE_BELOW)->setCommitCallback([this](LLUICtrl *, const LLSD &) { onScaleBelowChanged(); });
+    getChild<LLUICtrl>(FIELD_WATER_BLUR_MULTIP)->setCommitCallback([this](LLUICtrl *, const LLSD &) { onBlurMultipChanged(); });
+
+    refresh();
+
+    return TRUE;
+}
+
+//==========================================================================
+void LLPanelSettingsWaterMainTab::refresh()
+{
+    if (!mWaterSettings)
+    {
+        setAllChildrenEnabled(FALSE);
+        setEnabled(FALSE);
+        return;
+    }
+
+    setEnabled(TRUE);
+    setAllChildrenEnabled(TRUE);
+    mClrFogColor->set(mWaterSettings->getFogColor());
+    getChild<LLUICtrl>(FIELD_WATER_FOG_DENSITY)->setValue(mWaterSettings->getFogDensity());
+    getChild<LLUICtrl>(FIELD_WATER_UNDERWATER_MOD)->setValue(mWaterSettings->getFogMod());
+    mTxtNormalMap->setValue(mWaterSettings->getNormalMapID());
+    LLVector2 vect2 = mWaterSettings->getWave1Dir();
+    getChild<LLUICtrl>(FIELD_WATER_WAVE1_X)->setValue(vect2[0]);
+    getChild<LLUICtrl>(FIELD_WATER_WAVE1_Y)->setValue(vect2[1]);
+    vect2 = mWaterSettings->getWave2Dir();
+    getChild<LLUICtrl>(FIELD_WATER_WAVE2_X)->setValue(vect2[0]);
+    getChild<LLUICtrl>(FIELD_WATER_WAVE2_Y)->setValue(vect2[1]);
+    LLVector3 vect3 = mWaterSettings->getNormalScale();
+    getChild<LLUICtrl>(FIELD_WATER_NORMAL_SCALE_X)->setValue(vect3[0]);
+    getChild<LLUICtrl>(FIELD_WATER_NORMAL_SCALE_Y)->setValue(vect3[1]);
+    getChild<LLUICtrl>(FIELD_WATER_NORMAL_SCALE_Z)->setValue(vect3[2]);
+    getChild<LLUICtrl>(FIELD_WATER_FRESNEL_SCALE)->setValue(mWaterSettings->getFresnelOffset());
+    getChild<LLUICtrl>(FIELD_WATER_FRESNEL_OFFSET)->setValue(mWaterSettings->getFresnelOffset());
+    getChild<LLUICtrl>(FIELD_WATER_SCALE_ABOVE)->setValue(mWaterSettings->getScaleAbove());
+    getChild<LLUICtrl>(FIELD_WATER_SCALE_BELOW)->setValue(mWaterSettings->getScaleBelow());
+    getChild<LLUICtrl>(FIELD_WATER_BLUR_MULTIP)->setValue(mWaterSettings->getBlurMultiplier());
+}
+
+//==========================================================================
+
+void LLPanelSettingsWaterMainTab::onFogColorChanged()
+{
+    mWaterSettings->setFogColor(LLColor3(mClrFogColor->get()));
+}
+
+void LLPanelSettingsWaterMainTab::onFogDensityChanged()
+{
+    mWaterSettings->setFogDensity(getChild<LLUICtrl>(FIELD_WATER_FOG_DENSITY)->getValue().asReal());
+}
+
+void LLPanelSettingsWaterMainTab::onFogUnderWaterChanged()
+{
+    mWaterSettings->setFogMod(getChild<LLUICtrl>(FIELD_WATER_UNDERWATER_MOD)->getValue().asReal());
+}
+
+void LLPanelSettingsWaterMainTab::onNormalMapChanged()
+{
+    mWaterSettings->setNormalMapID(mTxtNormalMap->getImageAssetID());
+}
+
+
+void LLPanelSettingsWaterMainTab::onLargeWaveChanged()
+{
+    LLVector2 vect(getChild<LLUICtrl>(FIELD_WATER_WAVE1_X)->getValue().asReal(), getChild<LLUICtrl>(FIELD_WATER_WAVE1_Y)->getValue().asReal());
+    LL_WARNS("LAPRAS") << "Changing Large Wave from " << mWaterSettings->getWave1Dir() << " -> " << vect << LL_ENDL;
+    mWaterSettings->setWave1Dir(vect);
+}
+
+void LLPanelSettingsWaterMainTab::onSmallWaveChanged()
+{
+    LLVector2 vect(getChild<LLUICtrl>(FIELD_WATER_WAVE2_X)->getValue().asReal(), getChild<LLUICtrl>(FIELD_WATER_WAVE2_Y)->getValue().asReal());
+    LL_WARNS("LAPRAS") << "Changing Small Wave from " << mWaterSettings->getWave2Dir() << " -> " << vect << LL_ENDL;
+    mWaterSettings->setWave2Dir(vect);
+}
+
+
+void LLPanelSettingsWaterMainTab::onNormalScaleChanged()
+{
+    LLVector3 vect(getChild<LLUICtrl>(FIELD_WATER_NORMAL_SCALE_X)->getValue().asReal(), getChild<LLUICtrl>(FIELD_WATER_NORMAL_SCALE_Y)->getValue().asReal(), getChild<LLUICtrl>(FIELD_WATER_NORMAL_SCALE_Z)->getValue().asReal());
+    LL_WARNS("LAPRAS") << "Changing normal scale from " << mWaterSettings->getNormalScale() << " -> " << vect << LL_ENDL;
+    mWaterSettings->setNormalScale(vect);
+}
+
+void LLPanelSettingsWaterMainTab::onFresnelScaleChanged()
+{
+    mWaterSettings->setFresnelScale(getChild<LLUICtrl>(FIELD_WATER_FRESNEL_SCALE)->getValue().asReal());
+}
+
+void LLPanelSettingsWaterMainTab::onFresnelOffsetChanged()
+{
+    mWaterSettings->setFresnelOffset(getChild<LLUICtrl>(FIELD_WATER_FRESNEL_OFFSET)->getValue().asReal());
+}
+
+void LLPanelSettingsWaterMainTab::onScaleAboveChanged()
+{
+    mWaterSettings->setScaleAbove(getChild<LLUICtrl>(FIELD_WATER_SCALE_ABOVE)->getValue().asReal());
+}
+
+void LLPanelSettingsWaterMainTab::onScaleBelowChanged()
+{
+    mWaterSettings->setScaleBelow(getChild<LLUICtrl>(FIELD_WATER_SCALE_BELOW)->getValue().asReal());
+}
+
+void LLPanelSettingsWaterMainTab::onBlurMultipChanged()
+{
+    mWaterSettings->setBlurMultiplier(getChild<LLUICtrl>(FIELD_WATER_BLUR_MULTIP)->getValue().asReal());
+}
diff --git a/indra/newview/llpaneleditwater.h b/indra/newview/llpaneleditwater.h
new file mode 100644
index 0000000000000000000000000000000000000000..5c700c72313abce93ac14c8a268d4564de4c2b24
--- /dev/null
+++ b/indra/newview/llpaneleditwater.h
@@ -0,0 +1,113 @@
+/**
+* @file llpaneleditwater.h
+* @brief Panels for water settings
+*
+* $LicenseInfo:firstyear=2011&license=viewerlgpl$
+* Second Life Viewer Source Code
+* Copyright (C) 2011, Linden Research, Inc.
+*
+* This library is free software; you can redistribute it and/or
+* modify it under the terms of the GNU Lesser General Public
+* License as published by the Free Software Foundation;
+* version 2.1 of the License only.
+*
+* This library is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this library; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+*
+* Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
+* $/LicenseInfo$
+*/
+
+#ifndef LLPANEL_EDIT_WATER_H
+#define LLPANEL_EDIT_WATER_H
+
+#include "llpanel.h"
+#include "llsettingswater.h"
+
+#include "llfloaterfixedenvironment.h"
+
+//=========================================================================
+class LLSlider;
+class LLColorSwatchCtrl;
+class LLTextureCtrl;
+
+//=========================================================================
+class LLPanelSettingsWater : public LLSettingsEditPanel
+{
+    LOG_CLASS(LLPanelSettingsWater);
+
+public:
+                            LLPanelSettingsWater();
+
+    virtual void            setSettings(LLSettingsBase::ptr_t &settings) override   { setWater(std::static_pointer_cast<LLSettingsWater>(settings)); }
+
+    LLSettingsWater::ptr_t  getWater() const                                        { return mWaterSettings; }
+    void                    setWater(const LLSettingsWater::ptr_t &water)           { mWaterSettings = water; refresh(); }
+
+protected:
+    LLSettingsWater::ptr_t  mWaterSettings;
+};
+
+// *RIDER* In this case this split is unecessary since there is only a single 
+// tab page for water settings at this point.  However more may be added in the 
+// future and I want to reinforce the pattern used for sky/atmosphere tabs.
+class LLPanelSettingsWaterMainTab : public LLPanelSettingsWater
+{
+    LOG_CLASS(LLPanelSettingsWaterMainTab);
+
+public:
+                            LLPanelSettingsWaterMainTab();
+
+    virtual BOOL	        postBuild() override;
+
+protected:
+    virtual void            refresh() override;
+
+private:
+
+    LLColorSwatchCtrl *     mClrFogColor;
+    LLSlider *              mSldFogDensity;
+    LLSlider *              mSldUnderWaterMod;
+    LLTextureCtrl *         mTxtNormalMap;
+
+    // Temp until XY control
+    LLSlider *              mSldWave1X;
+    LLSlider *              mSldWave1Y;
+
+    // Temp until XY control
+    LLSlider *              mSldWave2X;
+    LLSlider *              mSldWave2Y;
+
+    LLSlider *              mSldNormalScaleX;
+    LLSlider *              mSldNormalScaleY;
+    LLSlider *              mSldNormalScaleZ;
+    LLSlider *              mSldFresnelScale;
+    LLSlider *              mSldFresnelOffset;
+    LLSlider *              mSldScaleAbove;
+    LLSlider *              mSldScaleBelow;
+    LLSlider *              mSldBlurMultip;
+
+    void                    onFogColorChanged();
+    void                    onFogDensityChanged();
+    void                    onFogUnderWaterChanged();
+    void                    onNormalMapChanged();
+
+    void                    onLargeWaveChanged();
+    void                    onSmallWaveChanged();
+
+    void                    onNormalScaleChanged();
+    void                    onFresnelScaleChanged();
+    void                    onFresnelOffsetChanged();
+    void                    onScaleAboveChanged();
+    void                    onScaleBelowChanged();
+    void                    onBlurMultipChanged();
+};
+
+
+#endif // LLPANEL_EDIT_WATER_H
diff --git a/indra/newview/llviewerfloaterreg.cpp b/indra/newview/llviewerfloaterreg.cpp
index 63166fe4a8f6b5ca95ab14f6b4193313f96a7cdb..1af6ecb8b65f11760a1778465524db1444aa9218 100644
--- a/indra/newview/llviewerfloaterreg.cpp
+++ b/indra/newview/llviewerfloaterreg.cpp
@@ -67,6 +67,7 @@
 #include "llfloaterexperiencepicker.h"
 #include "llfloaterevent.h"
 #include "llfloaterfacebook.h"
+#include "llfloaterfixedenvironment.h"
 #include "llfloaterflickr.h"
 #include "llfloaterfonttest.h"
 #include "llfloatergesture.h"
@@ -226,6 +227,9 @@ void LLViewerFloaterReg::registerFloaters()
 	LLFloaterReg::add("env_edit_water", "floater_edit_water_preset.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterEditWater>);
 	LLFloaterReg::add("env_edit_day_cycle", "floater_edit_day_cycle.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterEditDayCycle>);
 
+    LLFloaterReg::add("env_fixed_environmentent_water", "floater_fixedenvironment.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterFixedEnvironmentWater>);
+    //LLFloaterReg::add("env_fixed_environmentent", "floater_fixedenvironment.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterFixedEnvironment>);
+
     LLFloaterReg::add("env_edit_extdaycycle", "floater_edit_ext_day_cycle.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterEditExtDayCycle>);
 
 
diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp
index 456c080f8ad399faad0821dbaedee7b4eb2878dc..9f258909179a58f61c3e9a8aba5cf3ff3e3462ab 100644
--- a/indra/newview/llviewermenu.cpp
+++ b/indra/newview/llviewermenu.cpp
@@ -8476,12 +8476,14 @@ class LLWorldEnvPreset : public view_listener_t
 
 		if (item == "new_water")
 		{
-			LLFloaterReg::showInstance("env_edit_water", "new");
+			//LLFloaterReg::showInstance("env_edit_water", "new");
+            LLFloaterReg::showInstance("env_fixed_environmentent_water", "new");
 		}
 		else if (item == "edit_water")
 		{
-			LLFloaterReg::showInstance("env_edit_water", "edit");
-		}
+			//LLFloaterReg::showInstance("env_edit_water", "edit");
+            LLFloaterReg::showInstance("env_fixed_environmentent_water", "edit");
+        }
 		else if (item == "new_sky")
 		{
 			LLFloaterReg::showInstance("env_edit_sky", "new");
diff --git a/indra/newview/skins/default/xui/en/floater_fixedenvironment.xml b/indra/newview/skins/default/xui/en/floater_fixedenvironment.xml
new file mode 100644
index 0000000000000000000000000000000000000000..03bbc05dadfef48f50ede214c709a5df9940a757
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/floater_fixedenvironment.xml
@@ -0,0 +1,114 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<floater
+        can_minimize="false"
+        can_tear_off="false"
+        can_resize="true"
+        can_drag_on_left="false"
+        can_close="true"
+        can_dock="true"
+        bevel_style="in"
+        height="500"
+        layout="topleft"
+        name="Fixed Environment"
+        save_rect="true"
+        title="Fixed Environment"
+        save_dock_state="true"
+        save_visibility="true"
+        single_instance="true" 
+        width="650">
+    <layout_stack name="floater_stack"
+            left="5"
+            top="5"
+            right="-5"
+            bottom="-5"
+            follows="left|top|right|bottom"
+            orientation="vertical">
+        <layout_panel name="info_panel"
+                auto_resize="false"
+                user_resize="false"
+                bg_alpha_color="blue"
+                min_height="60">
+            <text
+                    follows="left|top"
+                    top_delta="30"
+                    left_delta="10"
+                    width="35"
+                    height="20"
+                    font="SansSerif">
+            Name:
+            </text>
+            <line_editor
+                    follows="left|top"
+                    top_delta="-2"
+                    left_delta="45"
+                    width="250"
+                    name="settings_name"
+                    max_length_chars="32"
+                    height="20"/>
+            <button
+                    height="23"
+                    label="Load"
+                    follows="left|top"
+                    left_delta="260"
+                    font="SansSerif"
+                    top_delta="-2"
+                    name="btn_load"
+                    tool_tip="Load a settings from inventory" 
+                    width="96" />
+            <button
+                    height="23"
+                    label="Import"
+                    follows="right|top"
+                    right="-10"
+                    font="SansSerif"
+                    top_delta="0"
+                    name="btn_import"
+                    tool_tip="Import legacy settings from disk." 
+                    width="96" />
+        </layout_panel>
+        <layout_panel name="tab_area"
+                auto_resize="true"
+                user_resize="true"
+                height="11"
+                min_height="0"
+                visible="true">
+            <tab_container
+                    follows="all"
+                    halign="left"
+                    layout="topleft"
+                    left="0"
+                    name="tab_settings"
+                    tab_position="top"
+                    tab_width="120"
+                    tab_padding_right="3">
+                <!-- move to own file -->
+            </tab_container>
+        </layout_panel>
+        <layout_panel name="button_panel"
+                follows="left|top|right|bottom"
+                auto_resize="false"
+                user_resize="false"
+                height="40"
+                visible="true">
+            <button
+                    height="23"
+                    label="Save"
+                    follows="left|top"
+                    font="SansSerif"
+                    name="btn_commit"
+                    tool_tip="Load a settings from inventory" 
+                    width="96" />
+            <button
+                    height="23"
+                    label="Cancel"
+                    follows="right|top"
+                    right="-10"
+                    top_delta="0"
+                    font="SansSerif"
+                    name="btn_cancel"
+                    tool_tip="Load a settings from inventory" 
+                    width="96" />
+
+        </layout_panel>
+    </layout_stack>
+</floater>
diff --git a/indra/newview/skins/default/xui/en/panel_settings_water.xml b/indra/newview/skins/default/xui/en/panel_settings_water.xml
new file mode 100644
index 0000000000000000000000000000000000000000..fe088d98cf84c0d576c6f42ce20c55a903018c66
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/panel_settings_water.xml
@@ -0,0 +1,399 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<panel
+        border="true"
+        follows="all"
+        label="Water"
+        layout="topleft"
+        left="0"
+        help_topic="land_general_tab"
+        name="panel_settings_water"
+        top="0">
+    <layout_stack name="water_stack1"
+            left="5"
+            top="5"
+            right="-5"
+            bottom="-5"
+            follows="left|top|right|bottom"
+            orientation="vertical">
+        <layout_panel
+                border="true"
+                bevel_style="in"
+                auto_resize="false"
+                user_resize="false"
+                visible="true"
+                height="105">
+            <text
+                    follows="left|top"
+                    height="20"
+                    font="SansSerif"
+                    layout="topleft"
+                    left="5"
+                    top="5"
+                    width="215">
+                Water Fog:
+            </text>
+            <text
+                    follows="left|top"
+                    height="10"
+                    layout="left|top"
+                    left_delta="15"
+                    top_delta="0"
+                    width="60">
+                Color:
+            </text>
+            <color_swatch
+                    can_apply_immediately="true"
+                    follows="left|top"
+                    height="37"
+                    label_height="0"
+                    layout="topleft"
+                    left_delta="0"
+                    name="water_fog_color"
+                    top_pad="5"
+                    width="60" />
+            <text
+                    follows="left|top"
+                    height="10"
+                    top_delta="-15"
+                    left_delta="80"
+                    width="200">
+                Density Exponent:
+            </text>
+            <slider
+                    decimal_digits="1"
+                    follows="left|top|right"
+                    height="10"
+                    initial_value="0"
+                    layout="top"
+                    left_delta="15"
+                    max_val="10"
+                    name="water_fog_density"
+                    top_delta="5"
+                    width="200"/>
+            <text
+                    follows="left|top"
+                    height="10"
+                    top_delta="25"
+                    left_delta="-15"
+                    width="200">
+                Underwater Modifier:</text>
+            <slider
+                    decimal_digits="1"
+                    follows="left|top|right"
+                    height="10"
+                    initial_value="0"
+                    layout="top"
+                    left_delta="15"
+                    max_val="10"
+                    name="water_underwater_mod"
+                    top_delta="20"
+                    width="200"/>
+        </layout_panel>
+        <layout_panel
+                auto_resize="true"
+                user_resize="true"
+                visible="true">
+            <layout_stack name="water_stack2"
+                    left="5"
+                    top="5"
+                    right="-5"
+                    bottom="-5"
+                    follows="left|top|right|bottom"
+                    orientation="horizontal">
+                <layout_panel
+                        border="true"
+                        bevel_style="in"
+                        auto_resize="true"
+                        user_resize="true"
+                        visible="true"
+                        min_width="375"
+                        width="50">
+                    <text
+                            follows="left|top"
+                            height="20"
+                            font="SansSerif"
+                            layout="topleft"
+                            left="5"
+                            top="5"
+                            width="215">
+                        Waves:
+                    </text>
+                    <text
+                            follows="left|top|right"
+                            height="16"
+                            layout="topleft"
+                            left="15"
+                            top_delta="20"
+                            width="215">
+                        Normal Map
+                    </text>
+                    <texture_picker
+                            height="100"
+                            layout="topleft"
+                            left_delta="0"
+                            name="water_normal_map"
+                            top_pad="5"
+                            width="100"/>
+
+                    <text
+                            follows="left|top"
+                            height="16"
+                            layout="topleft"
+                            top_delta="-20"
+                            left_delta="120">
+                        Large Wave Speed
+                    </text>
+                    <panel
+                            follows="left|top"
+                            border="true"
+                            bg_alpha_color="red"
+                            background_visible="true"
+                            width="100"
+                            height="100"
+                            left_delta="0"
+                            top_delta="21">
+                        <text>
+                            placeholder
+                        </text>
+                        <slider
+                                decimal_digits="1"
+                                follows="left|top"
+                                initial_value="0"
+                                layout="topleft"
+                                label="X:"
+                                left_delta="10"
+                                max_val="4"
+                                min_val="-4"
+                                name="water_wave1_x"
+                                top_pad="5"
+                                width="100"/>
+                        <slider
+                                decimal_digits="1"
+                                follows="left|top"
+                                initial_value="0"
+                                layout="topleft"
+                                label="Y:"
+                                left_delta="0"
+                                max_val="4"
+                                min_val="-4"
+                                name="water_wave1_y"
+                                top_pad="5"
+                                orientation="vertical" 
+                                height="70"/>
+                    </panel>
+                    <text
+                            follows="left|top"
+                            height="16"
+                            layout="topleft"
+                            top_delta="-20"
+                            left_delta="120">
+                        Small Wave Speed
+                    </text>
+                    <panel
+                            follows="left|top"
+                            border="true"
+                            bg_alpha_color="red"
+                            background_visible="true"
+                            width="100"
+                            height="100"
+                            left_delta="0"
+                            top_delta="21"
+                            >
+                        <text>
+                            placeholder
+                        </text>
+                        <slider
+                                decimal_digits="1"
+                                follows="left|top"
+                                initial_value="0"
+                                layout="topleft"
+                                label="X:"
+                                left_delta="10"
+                                max_val="4"
+                                min_val="-4"
+                                name="water_wave2_x"
+                                top_pad="5"
+                                width="100"/>
+                        <slider
+                                decimal_digits="1"
+                                follows="left|top"
+                                initial_value="0"
+                                layout="topleft"
+                                label="Y:"
+                                left_delta="0"
+                                max_val="4"
+                                min_val="-4"
+                                name="water_wave2_y"
+                                top_pad="5"
+                                orientation="vertical" 
+                                height="70"/>
+                    </panel>
+
+                    <text
+                            follows="left|top|right"
+                            height="16"
+                            layout="topleft"
+                            left="15"
+                            top_pad="10"
+                            width="215">
+                        Reflection Wavelet Scale
+                    </text>
+                    <slider
+                            decimal_digits="1"
+                            follows="left|top"
+                            initial_value="0.7"
+                            layout="topleft"
+                            label="X:"
+                            left_delta="10"
+                            max_val="10"
+                            name="water_normal_scale_x"
+                            top_pad="5"
+                            width="150"/>
+                    <slider
+                            decimal_digits="1"
+                            follows="left|top"
+                            initial_value="0.7"
+                            layout="topleft"
+                            max_val="10"
+                            name="water_normal_scale_y"
+                            top_pad="6"
+                            label="Y:"
+                            width="150"/>
+                    <slider
+                            decimal_digits="1"
+                            follows="left|top"
+                            initial_value="0.7"
+                            layout="topleft"
+                            max_val="10"
+                            name="water_normal_scale_z"
+                            top_pad="6"
+                            label="Z:"
+                            width="150"/>
+
+                    <text
+                            follows="left|top|right"
+                            height="16"
+                            layout="topleft"
+                            left_delta="175"
+                            top_delta="-52"
+                            width="150">
+                        Fresnel Scale:
+                    </text>
+                    <slider
+                            decimal_digits="2"
+                            follows="left|top"
+                            height="10"
+                            increment="0.01"
+                            initial_value="0.7"
+                            layout="topleft"
+                            left_delta="5"
+                            name="water_fresnel_scale"
+                            top_pad="5"
+                            width="150"/>
+                    <text
+                            follows="left|top|right"
+                            layout="topleft"
+                            left_delta="-5"
+                            name="FresnelOffsetText"
+                            top_pad="10"
+                            width="150">
+                        Fresnel Offset:
+                    </text>
+                    <slider
+                            decimal_digits="2"
+                            follows="left|top|right"
+                            increment="0.01"
+                            initial_value="0.7"
+                            layout="topleft"
+                            left_delta="5"
+                            name="water_fresnel_offset"
+                            top_pad="5"
+                            width="150"/>
+                </layout_panel>
+                <layout_panel
+                        border="true"
+                        bevel_style="in"
+                        auto_resize="true"
+                        user_resize="true"
+                        width="50"
+                        visible="true">
+                    <text
+                            follows="left|top"
+                            height="20"
+                            font="SansSerif"
+                            layout="topleft"
+                            left="5"
+                            top="5"
+                            width="215">
+                        Refraction And Blur:
+                    </text>
+                    <text
+                            follows="left|top|right"
+                            height="16"
+                            layout="topleft"
+                            top_delta="25"
+                            left_delta="5"
+                            width="215">
+                        Refraction Scale (Above)
+                    </text>
+                    <slider
+                            control_name="water_scale_above"
+                            decimal_digits="2"
+                            follows="left|top"
+                            increment="0.01"
+                            initial_value="0.1"
+                            layout="topleft"
+                            left_delta="5"
+                            name="water_scale_above"
+                            top_pad="5"
+                            width="200" />
+                    <text
+                            type="string"
+                            length="1"
+                            follows="left|top|right"
+                            height="16"
+                            layout="topleft"
+                            left_delta="-5"
+                            top_pad="15"
+                            width="215">
+                        Refraction Scale (Below)
+                    </text>
+                    <slider
+                            control_name="water_scale_below"
+                            decimal_digits="2"
+                            follows="left|top"
+                            height="10"
+                            increment="0.01"
+                            initial_value="0"
+                            layout="topleft"
+                            left_delta="5"
+                            name="water_scale_below"
+                            top_pad="5"
+                            width="200"/>
+                    <text
+                            follows="left|top|right"
+                            font="SansSerif"
+                            height="16"
+                            layout="topleft"
+                            left_delta="-5"
+                            top_pad="5"
+                            width="215">
+                        Blur Multiplier
+                    </text>
+                    <slider
+                            control_name="water_blur_multip"
+                            follows="left|top"
+                            height="10"
+                            increment="0.001"
+                            initial_value="0"
+                            layout="topleft"
+                            left_delta="5"
+                            max_val="0.16"
+                            name="water_blur_multip"
+                            top_pad="5"
+                            width="200"/>
+                </layout_panel>
+            </layout_stack>
+        </layout_panel>
+    </layout_stack>
+</panel>