diff --git a/indra/newview/llfloatermediasettings.cpp b/indra/newview/llfloatermediasettings.cpp
index 44e68d77455df757c92a665c13c395fc9fa465f3..f7ce826a396b1d0efb583840da927d23a5674c42 100644
--- a/indra/newview/llfloatermediasettings.cpp
+++ b/indra/newview/llfloatermediasettings.cpp
@@ -41,6 +41,7 @@
 #include "lluictrlfactory.h"
 #include "llbutton.h"
 #include "llselectmgr.h"
+#include "llsdutil.h"
 
 LLFloaterMediaSettings* LLFloaterMediaSettings::sInstance = NULL;
 
@@ -145,15 +146,15 @@ LLFloaterMediaSettings* LLFloaterMediaSettings::getInstance()
 //static 
 void LLFloaterMediaSettings::apply()
 {
-    LLSD settings;
+	LLSD settings;
 	sInstance->mPanelMediaSettingsGeneral->preApply();
-    sInstance->mPanelMediaSettingsGeneral->getValues( settings );
+	sInstance->mPanelMediaSettingsGeneral->getValues( settings );
 	sInstance->mPanelMediaSettingsSecurity->preApply();
 	sInstance->mPanelMediaSettingsSecurity->getValues( settings );
 	sInstance->mPanelMediaSettingsPermissions->preApply();
-    sInstance->mPanelMediaSettingsPermissions->getValues( settings );
+	sInstance->mPanelMediaSettingsPermissions->getValues( settings );
 	LLSelectMgr::getInstance()->selectionSetMedia( LLTextureEntry::MF_HAS_MEDIA );
-    LLSelectMgr::getInstance()->selectionSetMediaData(settings);
+	LLSelectMgr::getInstance()->selectionSetMediaData(settings);
 	sInstance->mPanelMediaSettingsGeneral->postApply();
 	sInstance->mPanelMediaSettingsSecurity->postApply();
 	sInstance->mPanelMediaSettingsPermissions->postApply();
@@ -183,7 +184,12 @@ void LLFloaterMediaSettings::initValues( const LLSD& media_settings, bool editab
 
 	sInstance->mPanelMediaSettingsPermissions->
 		initValues( sInstance->mPanelMediaSettingsPermissions, media_settings, editable );
-
+	
+	// Squirrel away initial values 
+	sInstance->mInitialValues.clear();
+	sInstance->mPanelMediaSettingsGeneral->getValues( sInstance->mInitialValues );
+	sInstance->mPanelMediaSettingsSecurity->getValues( sInstance->mInitialValues );
+	sInstance->mPanelMediaSettingsPermissions->getValues( sInstance->mInitialValues );
 }
 
 ////////////////////////////////////////////////////////////////////////////////
@@ -206,7 +212,7 @@ void LLFloaterMediaSettings::clearValues( bool editable)
 {
 	// clean up all panels before updating
 	sInstance->mPanelMediaSettingsGeneral	 ->clearValues(sInstance->mPanelMediaSettingsGeneral,  editable);
-	sInstance->mPanelMediaSettingsSecurity	 ->clearValues(sInstance->mPanelMediaSettingsSecurity,  editable);
+	sInstance->mPanelMediaSettingsSecurity	 ->clearValues(sInstance->mPanelMediaSettingsSecurity,	editable);
 	sInstance->mPanelMediaSettingsPermissions->clearValues(sInstance->mPanelMediaSettingsPermissions,  editable);	
 }
 
@@ -235,7 +241,7 @@ void LLFloaterMediaSettings::onBtnApply( void* userdata )
 // static
 void LLFloaterMediaSettings::onBtnCancel( void* userdata )
 {
- 	sInstance->closeFloater(); 
+	sInstance->closeFloater(); 
 }
 
 ////////////////////////////////////////////////////////////////////////////////
@@ -250,7 +256,6 @@ void LLFloaterMediaSettings::onTabChanged(void* user_data, bool from_click)
 //
 void LLFloaterMediaSettings::enableOkApplyBtns( bool enable )
 {
-	setCtrlsEnabled( enable );
 	childSetEnabled( "OK", enable );
 	childSetEnabled( "Apply", enable );
 }
@@ -265,7 +270,6 @@ const std::string LLFloaterMediaSettings::getHomeUrl()
 		return std::string( "" );
 }
 
-
 ////////////////////////////////////////////////////////////////////////////////
 //
 bool LLFloaterMediaSettings::passesWhiteList( const std::string& test_url )
@@ -279,3 +283,36 @@ bool LLFloaterMediaSettings::passesWhiteList( const std::string& test_url )
 		// this is all we can do
 		return false;
 }
+
+////////////////////////////////////////////////////////////////////////////////
+// virtual 
+void LLFloaterMediaSettings::draw()
+{
+	// *NOTE: The code below is very inefficient.  Better to do this
+	// only when data change.
+	// Every frame, check to see what the values are.  If they are not
+	// the same as the default media data, enable the OK/Apply buttons
+	LLSD settings;
+	sInstance->mPanelMediaSettingsGeneral->getValues( settings );
+	sInstance->mPanelMediaSettingsSecurity->getValues( settings );
+	sInstance->mPanelMediaSettingsPermissions->getValues( settings );
+
+	bool values_changed = false;
+	
+	LLSD::map_const_iterator iter = settings.beginMap();
+	LLSD::map_const_iterator end = settings.endMap();
+	for ( ; iter != end; ++iter )
+	{
+		const std::string &current_key = iter->first;
+		const LLSD &current_value = iter->second;
+		if ( ! llsd_equals(current_value, mInitialValues[current_key]))
+		{
+			values_changed = true;
+			break;
+		}
+	}
+	
+	enableOkApplyBtns(values_changed);
+	
+	LLFloater::draw();
+}
diff --git a/indra/newview/llfloatermediasettings.h b/indra/newview/llfloatermediasettings.h
index 17a47cb0f5a4b04cd3846574261f251a9855fac8..e2af1705bf7de7223c6370f2360a28f448192b48 100644
--- a/indra/newview/llfloatermediasettings.h
+++ b/indra/newview/llfloatermediasettings.h
@@ -54,11 +54,13 @@ class LLFloaterMediaSettings :
 	static void apply();
 	static void initValues( const LLSD& media_settings , bool editable);
 	static void clearValues( bool editable);
-	void enableOkApplyBtns( bool enable );
-	LLPanelMediaSettingsSecurity* getPanelSecurity(){return mPanelMediaSettingsSecurity;};
-	const std::string getHomeUrl();
+
+	LLPanelMediaSettingsSecurity* getPanelSecurity(){return mPanelMediaSettingsSecurity;};	
+	const std::string getHomeUrl();	
 	bool passesWhiteList( const std::string& test_url );
 
+	virtual void	draw();
+
 	bool mIdenticalHasMediaInfo;
 	bool mMultipleMedia;
 	bool mMultipleValidMedia;
@@ -83,6 +85,10 @@ class LLFloaterMediaSettings :
 	static LLFloaterMediaSettings* sInstance;
 
 private:
+
+	void enableOkApplyBtns( bool enable );
+	
+	LLSD mInitialValues;
 	bool mWaitingToClose;
 };
 
diff --git a/indra/newview/llpanelmediasettingsgeneral.cpp b/indra/newview/llpanelmediasettingsgeneral.cpp
index 5bb266a01d6f287a20dfefd8383f5fbc81e2e31b..b1e7dd3d502846bb71d713e695bf8476f5eb4c3e 100644
--- a/indra/newview/llpanelmediasettingsgeneral.cpp
+++ b/indra/newview/llpanelmediasettingsgeneral.cpp
@@ -392,19 +392,19 @@ void LLPanelMediaSettingsGeneral::preApply()
 //
 void LLPanelMediaSettingsGeneral::getValues( LLSD &fill_me_in )
 {
-	fill_me_in[LLMediaEntry::AUTO_LOOP_KEY] = mAutoLoop->getValue();
-	fill_me_in[LLMediaEntry::AUTO_PLAY_KEY] = mAutoPlay->getValue();
-	fill_me_in[LLMediaEntry::AUTO_SCALE_KEY] = mAutoScale->getValue();
-	fill_me_in[LLMediaEntry::AUTO_ZOOM_KEY] = mAutoZoom->getValue();
-	fill_me_in[LLMediaEntry::CONTROLS_KEY] = mControls->getCurrentIndex();
+	fill_me_in[LLMediaEntry::AUTO_LOOP_KEY] = (LLSD::Boolean)mAutoLoop->getValue();
+	fill_me_in[LLMediaEntry::AUTO_PLAY_KEY] = (LLSD::Boolean)mAutoPlay->getValue();
+	fill_me_in[LLMediaEntry::AUTO_SCALE_KEY] = (LLSD::Boolean)mAutoScale->getValue();
+	fill_me_in[LLMediaEntry::AUTO_ZOOM_KEY] = (LLSD::Boolean)mAutoZoom->getValue();
+	fill_me_in[LLMediaEntry::CONTROLS_KEY] = (LLSD::Integer)mControls->getCurrentIndex();
 	//Don't fill in current URL: this is only supposed to get changed via navigate
 	// fill_me_in[LLMediaEntry::CURRENT_URL_KEY] = mCurrentURL->getValue();
-	fill_me_in[LLMediaEntry::HEIGHT_PIXELS_KEY] = mHeightPixels->getValue();
+	fill_me_in[LLMediaEntry::HEIGHT_PIXELS_KEY] = (LLSD::Integer)mHeightPixels->getValue();
 	// Don't fill in the home URL if it is the special "Multiple Media" string!
 	if (LLTrans::getString("Multiple Media") != mHomeURL->getValue())
-		fill_me_in[LLMediaEntry::HOME_URL_KEY] = mHomeURL->getValue();
-	fill_me_in[LLMediaEntry::FIRST_CLICK_INTERACT_KEY] = mFirstClick->getValue();
-	fill_me_in[LLMediaEntry::WIDTH_PIXELS_KEY] = mWidthPixels->getValue();
+		fill_me_in[LLMediaEntry::HOME_URL_KEY] = (LLSD::String)mHomeURL->getValue();
+	fill_me_in[LLMediaEntry::FIRST_CLICK_INTERACT_KEY] = (LLSD::Boolean)mFirstClick->getValue();
+	fill_me_in[LLMediaEntry::WIDTH_PIXELS_KEY] = (LLSD::Integer)mWidthPixels->getValue();
 }
 
 ////////////////////////////////////////////////////////////////////////////////
diff --git a/indra/newview/llpanelmediasettingssecurity.cpp b/indra/newview/llpanelmediasettingssecurity.cpp
index 94e137b0f4fba20634650eb96c723404a8d601d2..7ec53ed57a800ed92b77f477b6ec89c39d226392 100644
--- a/indra/newview/llpanelmediasettingssecurity.cpp
+++ b/indra/newview/llpanelmediasettingssecurity.cpp
@@ -213,7 +213,7 @@ void LLPanelMediaSettingsSecurity::preApply()
 //
 void LLPanelMediaSettingsSecurity::getValues( LLSD &fill_me_in )
 {
-    fill_me_in[LLMediaEntry::WHITELIST_ENABLE_KEY] = mEnableWhiteList->getValue();
+    fill_me_in[LLMediaEntry::WHITELIST_ENABLE_KEY] = (LLSD::Boolean)mEnableWhiteList->getValue();
 
     // iterate over white list and extract items
     std::vector< LLScrollListItem* > white_list_items = mWhiteListList->getAllData();
diff --git a/indra/newview/skins/default/xui/en/panel_media_settings_general.xml b/indra/newview/skins/default/xui/en/panel_media_settings_general.xml
index e00f654750cc6218378442a001a7c7e41821efe4..89f1fe35ca0cbb797085e9009cd2b925c93e9d88 100644
--- a/indra/newview/skins/default/xui/en/panel_media_settings_general.xml
+++ b/indra/newview/skins/default/xui/en/panel_media_settings_general.xml
@@ -221,12 +221,23 @@
    width="50" />
    
   <text bottom_delta="0" follows="top|left" height="15" left_delta="60" name="X_label">
-    X
+	X
   </text>
-  <spinner bottom_delta="0"
-	     decimal_digits="0" enabled="true" follows="left|top" height="16"
-	     increment="1" initial_val="256" label="" label_width="0"
-	     left_delta="20" max_val="2048" min_val="0" mouse_opaque="true"
-	     name="height_pixels" width="50" />
+  <spinner 
+	  bottom_delta="0"
+	  decimal_digits="0"
+	  enabled="true"
+	  follows="left|top" 
+	  height="16"
+	  increment="1"
+	  initial_val="256" 
+	  label=""
+	  label_width="0"
+	  left_delta="20" 
+	  max_val="2048" 
+	  min_val="0"
+	  mouse_opaque="true"
+	  name="height_pixels"
+	  width="50" />
  
 </panel>