Index: branches/release-33/lib/MT/ConfigMgr.pm
===================================================================
--- branches/release-33/lib/MT/ConfigMgr.pm (revision 1174)
+++ branches/release-33/lib/MT/ConfigMgr.pm (revision 1769)
@@ -17,5 +17,5 @@
 
 sub new {
-    my $mgr = bless { __var => { }, __dbvar => { }, __paths => [] }, $_[0];
+    my $mgr = bless { __var => { }, __dbvar => { }, __paths => [], __dirty => 0 }, $_[0];
     $mgr->init;
     $mgr;
@@ -162,4 +162,5 @@
         $mgr->{$set}{$var} = $val;
     }
+    $mgr->set_dirty() if defined($_[2]) && $_[2];
 }
 
@@ -186,7 +187,26 @@
 }
 
+sub set_dirty {
+    my $mgr = shift;
+    $mgr = $mgr->instance unless ref($mgr);
+    $mgr->{__dirty} = 1;
+}
+
+sub clear_dirty {
+    my $mgr = shift;
+    $mgr = $mgr->instance unless ref($mgr);
+    $mgr->{__dirty} = 0;
+}
+
+sub is_dirty {
+    my $mgr = shift;
+    $mgr = $mgr->instance unless ref($mgr);
+    $mgr->{__dirty};
+}
+
 sub save_config {
     my $class = shift;
     my $mgr = $class->instance;
+    return 0 unless $mgr->is_dirty();
     my $data = '';
     my $settings = $mgr->{__dbvar};
@@ -220,4 +240,6 @@
     $config->data($data);
     $config->save or die $config->errstr;
+    $mgr->clear_dirty;
+    1;
 }
 
Index: branches/release-33/lib/MT/ObjectDriver/Driver/DBD/mysql.pm
===================================================================
--- branches/release-33/lib/MT/ObjectDriver/Driver/DBD/mysql.pm (revision 1174)
+++ branches/release-33/lib/MT/ObjectDriver/Driver/DBD/mysql.pm (revision 1769)
@@ -77,5 +77,4 @@
                 # 'SET NAMES' command, so it's safe to SET NAMES in the future.
                 $cfg->SQLSetNames(1, 1);
-                $cfg->save_config;
             }
         } else {
@@ -83,5 +82,4 @@
             # assign SQLSetNames to 0 to prevent further errors.
             $cfg->SQLSetNames(0, 1);
-            $cfg->save_config;
             return 0;
         }
Index: branches/release-33/lib/MT/ObjectDriver/Driver/DBD/Pg.pm
===================================================================
--- branches/release-33/lib/MT/ObjectDriver/Driver/DBD/Pg.pm (revision 1174)
+++ branches/release-33/lib/MT/ObjectDriver/Driver/DBD/Pg.pm (revision 1769)
@@ -107,8 +107,7 @@
         local $@;
         if (!$dbh->do("SET NAMES '" . $c . "'")) {
-            # 'set names' command isn't working for this verison of mysql,
+            # 'set names' command isn't working for this verison of PostgreSQL,
             # assign SQLSetNames to 0 to prevent further errors.
             $cfg->SQLSetNames(0, 1);
-            $cfg->save_config;
             return 0;
         } else {
@@ -117,5 +116,4 @@
                 # 'SET NAMES' command, so it's safe to SET NAMES in the future.
                 $cfg->SQLSetNames(1, 1);
-                $cfg->save_config;
             }
         }
Index: branches/release-33/lib/MT/App.pm
===================================================================
--- branches/release-33/lib/MT/App.pm (revision 1719)
+++ branches/release-33/lib/MT/App.pm (revision 1769)
@@ -2387,4 +2387,7 @@
     }
 
+    # save_config here so not to miss any dirty config change to persist
+    $app->config->save_config();
+
     $app->request->finish;
     delete $app->{request};
@@ -3066,4 +3069,5 @@
     MT::Request->finish();
     undef $MT::Object::DRIVER;
+    undef $MT::Object::DBI_DRIVER;
     undef $MT::ConfigMgr::cfg;
 }
