diff --git a/indra/newview/llagentcamera.cpp b/indra/newview/llagentcamera.cpp
index d1da132587635ff2840a9e5488a592bbb564797d..f1d8bf3cf181c427878f436fe5dfd2a67ecb1735 100644
--- a/indra/newview/llagentcamera.cpp
+++ b/indra/newview/llagentcamera.cpp
@@ -1987,8 +1987,7 @@ LLVector3d LLAgentCamera::calcCameraPositionTargetGlobal(BOOL *hit_limit)
 
 LLVector3 LLAgentCamera::getCurrentCameraOffset()
 {
-	LLVector3 camera_offset = (LLViewerCamera::getInstance()->getOrigin() - getAvatarRootPosition() - mThirdPersonHeadOffset) * ~getCurrentAvatarRotation();
-	return  camera_offset / mCameraZoomFraction / gSavedSettings.getF32("CameraOffsetScale");
+	return (LLViewerCamera::getInstance()->getOrigin() - getAvatarRootPosition() - mThirdPersonHeadOffset) * ~getCurrentAvatarRotation();
 }
 
 LLVector3d LLAgentCamera::getCurrentFocusOffset()
@@ -2829,6 +2828,11 @@ BOOL LLAgentCamera::setPointAt(EPointAtType target_type, LLViewerObject *object,
 	return mPointAt->setPointAt(target_type, object, position);
 }
 
+void LLAgentCamera::resetCameraZoomFraction()
+{ 
+	mCameraZoomFraction = INITIAL_ZOOM_FRACTION; 
+}
+
 ELookAtType LLAgentCamera::getLookAtType()
 {
 	if (mLookAt) 
diff --git a/indra/newview/llagentcamera.h b/indra/newview/llagentcamera.h
index 357dd5e12a4eb9839bfc556a83a4f2b9d412205d..420cc0b601abc76081c6776e0971ebf76793a866 100644
--- a/indra/newview/llagentcamera.h
+++ b/indra/newview/llagentcamera.h
@@ -282,6 +282,9 @@ class LLAgentCamera
 	F32				calcCameraFOVZoomFactor();
 	F32				getAgentHUDTargetZoom();
 
+	void			resetCameraZoomFraction();
+	F32				getCurrentCameraZoomFraction() { return mCameraZoomFraction; }
+
 	//--------------------------------------------------------------------
 	// Pan
 	//--------------------------------------------------------------------
diff --git a/indra/newview/llfloatercamera.cpp b/indra/newview/llfloatercamera.cpp
index cc02862868a9d8e17aa558300df1baf4fa65b14e..e1e7ee8445a94252bef6971c7f86d44bfb64d277 100644
--- a/indra/newview/llfloatercamera.cpp
+++ b/indra/newview/llfloatercamera.cpp
@@ -565,7 +565,8 @@ void LLFloaterCamera::switchToPreset(const std::string& name)
 	{
 		LLPresetsManager::getInstance()->loadPreset(PRESETS_CAMERA, name);
 	}
-	gAgentCamera.setCameraZoomFraction(gSavedSettings.getF32("CameraZoomFraction"));
+
+	gAgentCamera.resetCameraZoomFraction();
 
 	LLFloaterCamera* camera_floater = LLFloaterCamera::findInstance();
 	if (camera_floater)
diff --git a/indra/newview/llfloatersavecamerapreset.cpp b/indra/newview/llfloatersavecamerapreset.cpp
index 34aefdf1c17183210d609b96e9ce4a2b02c79985..e2bd2e6d6a86c8385e8acf603c1d7f1e461245c6 100644
--- a/indra/newview/llfloatersavecamerapreset.cpp
+++ b/indra/newview/llfloatersavecamerapreset.cpp
@@ -107,6 +107,12 @@ void LLFloaterSaveCameraPreset::onBtnSave()
 			gSavedSettings.setVector3("CameraOffsetRearView", gAgentCamera.getCurrentCameraOffset());
 			gSavedSettings.setVector3d("FocusOffsetRearView", gAgentCamera.getCurrentFocusOffset());
 		}
+		else
+		{
+			LLVector3 camera_offset = gSavedSettings.getVector3("CameraOffsetRearView") * gAgentCamera.getCurrentCameraZoomFraction();
+			gSavedSettings.setVector3("CameraOffsetRearView", camera_offset);
+			gAgentCamera.resetCameraZoomFraction();
+		}
 		if (is_saving_new)
 		{
 			std::list<std::string> preset_names;
diff --git a/indra/newview/llpresetsmanager.cpp b/indra/newview/llpresetsmanager.cpp
index fd89a1fcb6ae5e8b958ddebd0d1fefa0d6bb4a95..129187ccbd1d3867b8ad2fa8c4c957e842e1646e 100644
--- a/indra/newview/llpresetsmanager.cpp
+++ b/indra/newview/llpresetsmanager.cpp
@@ -309,9 +309,6 @@ bool LLPresetsManager::savePreset(const std::string& subdirectory, std::string n
 		name_list.clear();
 		getControlNames(name_list);
 		name_list.push_back("PresetCameraActive");
-
-		gSavedSettings.setF32("CameraZoomFraction", gAgentCamera.getCameraZoomFraction(true));
-		name_list.push_back("CameraZoomFraction");
 	}
 	else
 	{