diff --git a/indra/newview/llenvironment.cpp b/indra/newview/llenvironment.cpp
index 3d8222a3719db2667b13d728c386015f357f139c..1b38fceef76d17ff072b0f1a2c9786b08071dea4 100644
--- a/indra/newview/llenvironment.cpp
+++ b/indra/newview/llenvironment.cpp
@@ -976,10 +976,28 @@ void LLEnvironment::updateShaderUniforms(LLGLSLShader *shader)
 void LLEnvironment::recordEnvironment(S32 parcel_id, LLEnvironment::EnvironmentInfo::ptr_t envinfo)
 {
     if (envinfo->mParcelId == INVALID_PARCEL_ID)
-    {   // the returned info applies to an entire region.
-        LL_WARNS("LAPRAS") << "Setting Region environment" << LL_ENDL;
-        setEnvironment(ENV_REGION, envinfo->mDayCycle, envinfo->mDayLength, envinfo->mDayOffset);
-        mTrackAltitudes = envinfo->mAltitudes;
+    {
+        // the returned info applies to an entire region.
+        if (!envinfo->mDayCycle)
+        {
+            clearEnvironment(ENV_PARCEL);
+            setEnvironment(ENV_REGION, LLSettingsDay::GetDefaultAssetId(), LLSettingsDay::DEFAULT_DAYLENGTH, LLSettingsDay::DEFAULT_DAYOFFSET);
+            updateEnvironment();
+        }
+        else if (envinfo->mDayCycle->isTrackEmpty(LLSettingsDay::TRACK_WATER)
+                 || envinfo->mDayCycle->isTrackEmpty(LLSettingsDay::TRACK_GROUND_LEVEL))
+        {
+            LL_WARNS("LAPRAS") << "Invalid day cycle for region" << LL_ENDL;
+            clearEnvironment(ENV_PARCEL);
+            setEnvironment(ENV_REGION, LLSettingsDay::GetDefaultAssetId(), LLSettingsDay::DEFAULT_DAYLENGTH, LLSettingsDay::DEFAULT_DAYOFFSET);
+            updateEnvironment();
+        }
+        else
+        {
+            LL_INFOS("LAPRAS") << "Setting Region environment" << LL_ENDL;
+            setEnvironment(ENV_REGION, envinfo->mDayCycle, envinfo->mDayLength, envinfo->mDayOffset);
+            mTrackAltitudes = envinfo->mAltitudes;
+        }
 
         LL_WARNS("LAPRAS") << "Altitudes set to {" << mTrackAltitudes[0] << ", "<< mTrackAltitudes[1] << ", " << mTrackAltitudes[2] << ", " << mTrackAltitudes[3] << LL_ENDL;
     }
@@ -998,6 +1016,12 @@ void LLEnvironment::recordEnvironment(S32 parcel_id, LLEnvironment::EnvironmentI
             LL_WARNS("LAPRAS") << "Clearing environment on parcel #" << parcel_id << LL_ENDL;
             clearEnvironment(ENV_PARCEL);
         }
+        else if (envinfo->mDayCycle->isTrackEmpty(LLSettingsDay::TRACK_WATER)
+                 || envinfo->mDayCycle->isTrackEmpty(LLSettingsDay::TRACK_GROUND_LEVEL))
+        {
+            LL_WARNS("LAPRAS") << "Invalid day cycle for parcel #" << parcel_id << LL_ENDL;
+            clearEnvironment(ENV_PARCEL);
+        }
         else
         {
             setEnvironment(ENV_PARCEL, envinfo->mDayCycle, envinfo->mDayLength, envinfo->mDayOffset);
@@ -1056,13 +1080,7 @@ void LLEnvironment::requestParcel(S32 parcel_id, environment_apply_fn cb)
             {
                 cb = [this](S32 pid, EnvironmentInfo::ptr_t envinfo)
                 {
-                    if (envinfo->mDayCycle) recordEnvironment(pid, envinfo);
-                    else
-                    {
-                        clearEnvironment(ENV_PARCEL);
-                        setEnvironment(ENV_REGION, LLSettingsDay::GetDefaultAssetId(), LLSettingsDay::DEFAULT_DAYLENGTH, LLSettingsDay::DEFAULT_DAYOFFSET);
-                        updateEnvironment();
-                    }
+                    recordEnvironment(pid, envinfo);
                 };
             }
 
diff --git a/indra/newview/llfloatereditextdaycycle.cpp b/indra/newview/llfloatereditextdaycycle.cpp
index 3531e9c4e8af16d6bd7ca037e3f17ca9f80d8b63..5b083e85031db8b3a25049caac4ecaad6abb92a5 100644
--- a/indra/newview/llfloatereditextdaycycle.cpp
+++ b/indra/newview/llfloatereditextdaycycle.cpp
@@ -437,6 +437,19 @@ void LLFloaterEditExtDayCycle::refresh()
 void LLFloaterEditExtDayCycle::setEditDayCycle(const LLSettingsDay::ptr_t &pday)
 {
     mEditDay = pday->buildDeepCloneAndUncompress();
+
+    if (mEditDay->isTrackEmpty(LLSettingsDay::TRACK_WATER))
+    {
+        LL_WARNS("ENVDAYEDIT") << "No water frames found, generating replacement" << LL_ENDL;
+        mEditDay->setWaterAtKeyframe(LLSettingsVOWater::buildDefaultWater(), .5f);
+    }
+
+    if (mEditDay->isTrackEmpty(LLSettingsDay::TRACK_GROUND_LEVEL))
+    {
+        LL_WARNS("ENVDAYEDIT") << "No sky frames found, generating replacement" << LL_ENDL;
+        mEditDay->setSkyAtKeyframe(LLSettingsVOSky::buildDefaultSky(), .5f, LLSettingsDay::TRACK_GROUND_LEVEL);
+    }
+
     updateEditEnvironment();
     LLEnvironment::instance().setSelectedEnvironment(LLEnvironment::ENV_EDIT, LLEnvironment::TRANSITION_INSTANT);
     LLEnvironment::instance().updateEnvironment(LLEnvironment::TRANSITION_INSTANT);