diff --git a/indra/newview/llenvironment.cpp b/indra/newview/llenvironment.cpp
index 6bc7b8bf25b60028a48bc737207cc417da1ef2f9..530dc79fe9011e433ba3de7edab2f1dfbadef66d 100644
--- a/indra/newview/llenvironment.cpp
+++ b/indra/newview/llenvironment.cpp
@@ -973,7 +973,7 @@ void LLEnvironment::updateShaderUniforms(LLGLSLShader *shader)
     }    
 }
 
-void LLEnvironment::recordEnvironment(S32 parcel_id, LLEnvironment::EnvironmentInfo::ptr_t envinfo)
+void LLEnvironment::recordEnvironment(S32 parcel_id, LLEnvironment::EnvironmentInfo::ptr_t envinfo, LLSettingsBase::Seconds transition)
 {
     if (envinfo->mParcelId == INVALID_PARCEL_ID)
     {
@@ -1027,8 +1027,8 @@ void LLEnvironment::recordEnvironment(S32 parcel_id, LLEnvironment::EnvironmentI
             setEnvironment(ENV_PARCEL, envinfo->mDayCycle, envinfo->mDayLength, envinfo->mDayOffset);
         }
     }
-    
-    updateEnvironment();
+
+    updateEnvironment(transition);
 }
 
 //=========================================================================
@@ -1078,9 +1078,10 @@ void LLEnvironment::requestParcel(S32 parcel_id, environment_apply_fn cb)
         {
             if (!cb)
             {
-                cb = [this](S32 pid, EnvironmentInfo::ptr_t envinfo)
+                LLSettingsBase::Seconds transition = LLViewerParcelMgr::getInstance()->getTeleportInProgress() ? TRANSITION_FAST : TRANSITION_DEFAULT;
+                cb = [this, transition](S32 pid, EnvironmentInfo::ptr_t envinfo)
                 {
-                    recordEnvironment(pid, envinfo);
+                    recordEnvironment(pid, envinfo, transition);
                 };
             }
 
@@ -1093,7 +1094,8 @@ void LLEnvironment::requestParcel(S32 parcel_id, environment_apply_fn cb)
 
     if (!cb)
     {
-        cb = [this](S32 pid, EnvironmentInfo::ptr_t envinfo) { recordEnvironment(pid, envinfo); };
+        LLSettingsBase::Seconds transition = LLViewerParcelMgr::getInstance()->getTeleportInProgress() ? TRANSITION_FAST : TRANSITION_DEFAULT;
+        cb = [this, transition](S32 pid, EnvironmentInfo::ptr_t envinfo) { recordEnvironment(pid, envinfo, transition); };
     }
 
     std::string coroname =
diff --git a/indra/newview/llenvironment.h b/indra/newview/llenvironment.h
index 9e943cce00d6bf2a1188fd2eff0732d96fa2ba49..a72a08c68ee5585f251d5fce706e61e85f2b536f 100644
--- a/indra/newview/llenvironment.h
+++ b/indra/newview/llenvironment.h
@@ -360,7 +360,7 @@ class LLEnvironment : public LLSingleton<LLEnvironment>
     void                        coroUpdateEnvironment(S32 parcel_id, S32 track_no, UpdateInfo::ptr_t updates, environment_apply_fn apply);
     void                        coroResetEnvironment(S32 parcel_id, S32 track_no, environment_apply_fn apply);
 
-    void                        recordEnvironment(S32 parcel_id, EnvironmentInfo::ptr_t environment);
+    void                        recordEnvironment(S32 parcel_id, EnvironmentInfo::ptr_t environment, LLSettingsBase::Seconds transition);
 
     void                        onAgentPositionHasChanged(const LLVector3 &localpos);
 
diff --git a/indra/newview/llviewerparcelmgr.cpp b/indra/newview/llviewerparcelmgr.cpp
index 0d077161a6adbbf8fe68f7c75c95e06c81d72c4a..cca02544ee79fcf142aace80b76fa68aad25d003 100644
--- a/indra/newview/llviewerparcelmgr.cpp
+++ b/indra/newview/llviewerparcelmgr.cpp
@@ -1659,7 +1659,6 @@ void LLViewerParcelMgr::processParcelProperties(LLMessageSystem *msg, void **use
 
 			if (instance->mTeleportInProgress)
 			{
-				instance->mTeleportInProgress = FALSE;
 				if(instance->mTeleportInProgressPosition.isNull())
 				{
 					//initial update
@@ -1674,6 +1673,7 @@ void LLViewerParcelMgr::processParcelProperties(LLMessageSystem *msg, void **use
             LL_WARNS("LAPRAS") << "Parcel environment version is " << parcel->getParcelEnvironmentVersion() << LL_ENDL;
             // Notify anything that wants to know when the agent changes parcels
             gAgent.changeParcels();
+            instance->mTeleportInProgress = FALSE;
         }
         else if (agent_parcel_update)
         {
@@ -2576,3 +2576,9 @@ void LLViewerParcelMgr::onTeleportFailed()
 {
 	mTeleportFailedSignal();
 }
+
+bool  LLViewerParcelMgr::getTeleportInProgress()
+{
+    return mTeleportInProgress // case where parcel data arrives after teleport
+        || gAgent.getTeleportState() > LLAgent::TELEPORT_NONE; // For LOCAL, no mTeleportInProgress
+}
diff --git a/indra/newview/llviewerparcelmgr.h b/indra/newview/llviewerparcelmgr.h
index 336a3ea228e2def1fb871c89722bfac51ba8b70d..ec8dde7d4045f394e9247ffe9c91f56ceabd90b6 100644
--- a/indra/newview/llviewerparcelmgr.h
+++ b/indra/newview/llviewerparcelmgr.h
@@ -287,6 +287,7 @@ class LLViewerParcelMgr : public LLSingleton<LLViewerParcelMgr>
 	boost::signals2::connection setTeleportFailedCallback(teleport_failed_callback_t cb);
 	void onTeleportFinished(bool local, const LLVector3d& new_pos);
 	void onTeleportFailed();
+	bool getTeleportInProgress();
 
 	static BOOL isParcelOwnedByAgent(const LLParcel* parcelp, U64 group_proxy_power);
 	static BOOL isParcelModifiableByAgent(const LLParcel* parcelp, U64 group_proxy_power);