diff --git a/indra/newview/llfloaterpreference.cpp b/indra/newview/llfloaterpreference.cpp
index df21bec0bc1be7f56023b569f332b0c48a3b8478..0a717cc834995b1e907490e96e25fe8e3cf0df77 100644
--- a/indra/newview/llfloaterpreference.cpp
+++ b/indra/newview/llfloaterpreference.cpp
@@ -2643,11 +2643,7 @@ void LLPanelPreferenceView::setPresetText()
 	{
 		if (presetsMgr->isCameraDirty() && !preset_camera_active.empty())
 		{
-			gSavedSettings.setString("PresetCameraActive", "");
 			preset_camera_active.clear();
-			// This doesn't seem to cause an infinite recursion.  This trigger is needed to cause the pulldown
-			// panel to update.
-			LLPresetsManager::getInstance()->triggerChangeCameraSignal();
 		}
 	}
 
diff --git a/indra/newview/llpanelpresetscamerapulldown.cpp b/indra/newview/llpanelpresetscamerapulldown.cpp
index ffdfc445ceaa7126eb14005c16187ada8bd9afe1..e2b9c080fb8de6ebfbe74ce0d353aff543a36b5e 100644
--- a/indra/newview/llpanelpresetscamerapulldown.cpp
+++ b/indra/newview/llpanelpresetscamerapulldown.cpp
@@ -63,11 +63,12 @@ BOOL LLPanelPresetsCameraPulldown::postBuild()
 	LLPresetsManager* presetsMgr = LLPresetsManager::getInstance();
 	if (presetsMgr)
 	{
-		presetsMgr->setPresetListChangeCameraCallback(boost::bind(&LLPanelPresetsCameraPulldown::populatePanel, this));
 		// Make sure there is a default preference file
 		presetsMgr->createMissingDefault(PRESETS_CAMERA);
 
 		presetsMgr->startWatching(PRESETS_CAMERA);
+
+		presetsMgr->setPresetListChangeCameraCallback(boost::bind(&LLPanelPresetsCameraPulldown::populatePanel, this));
 	}
 
 	populatePanel();
diff --git a/indra/newview/llpresetsmanager.cpp b/indra/newview/llpresetsmanager.cpp
index d4535c69c8f144bc957dbbe627e4bb21ad6703a9..7368615365a45aca0c9a5bc56ee337c49fa7c1aa 100644
--- a/indra/newview/llpresetsmanager.cpp
+++ b/indra/newview/llpresetsmanager.cpp
@@ -208,6 +208,12 @@ bool LLPresetsManager::isCameraDirty()
 void LLPresetsManager::settingChanged()
 {
 	setCameraDirty(true);
+
+	gSavedSettings.setString("PresetCameraActive", "");
+
+// Hack call because this is a static routine
+	LLPresetsManager::getInstance()->triggerChangeCameraSignal();
+
 }
 
 void LLPresetsManager::getControlNames(std::vector<std::string>& names)