diff --git a/meld/ui/historyentry.py b/meld/ui/historyentry.py
index d3c4eb6..9ee84e2 100644
--- a/meld/ui/historyentry.py
+++ b/meld/ui/historyentry.py
@@ -18,6 +18,7 @@
 import os
 import sys
 
+import glib
 import gio
 import gtk
 import gobject
@@ -286,7 +287,9 @@ class HistoryEntry(gtk.ComboBoxEntry, HistoryWidget):
 
 try:
     import gconf
-except ImportError:
+    # Verify that gconf is actually working (bgo#666136)
+    gconf.client_get_default().set_string('/apps/gnome-settings/meld/gconf-test', 'WORKS')
+except (ImportError, glib.GError):
     do_nothing = lambda *args: None
     for m in ('_save_history', '_load_history', '_get_gconf_client'):
         setattr(HistoryWidget, m, do_nothing)
diff --git a/meld/util/prefs.py b/meld/util/prefs.py
index 9867e47..fc851f8 100644
--- a/meld/util/prefs.py
+++ b/meld/util/prefs.py
@@ -269,11 +269,19 @@ class ConfigParserPreferences(object):
         return "\n".join(prefs_entries)
 
 
-# Prefer gconf, falling back to configparser
-try:
-    import gconf
-    Preferences = GConfPreferences
-except ImportError:
+# Prefer gconf (unless meldrc.ini exists), and fall back to configparser
+Preferences = None
+
+if sys.platform != "win32" and not os.path.exists(os.path.join(glib.get_user_config_dir(), "meld", "meldrc.ini")):
+    try:
+        import gconf
+        # Verify that gconf is actually working (bgo#666136)
+        gconf.client_get_default().set_string('/apps/gnome-settings/meld/gconf-test', 'WORKS')
+        Preferences = GConfPreferences
+    except (ImportError, glib.GError):
+        pass
+
+if Preferences == None:
     try:
         import configparser
     except ImportError:
