diff -ur WebKit-r37056-old/WebCore/page/Settings.cpp WebKit-r37056/WebCore/page/Settings.cpp
--- WebKit-r37056-old/WebCore/page/Settings.cpp	2008-09-12 23:20:44.000000000 +0200
+++ WebKit-r37056/WebCore/page/Settings.cpp	2008-10-05 21:29:20.000000000 +0200
@@ -226,6 +226,11 @@
     setNeedsReapplyStylesInAllFrames(m_page);
 }
 
+void Settings::setUserAgent(const String& userAgent)
+{
+    m_userAgent = userAgent;
+}
+
 void Settings::setShouldPrintBackgrounds(bool shouldPrintBackgrounds)
 {
     m_shouldPrintBackgrounds = shouldPrintBackgrounds;
diff -ur WebKit-r37056-old/WebCore/page/Settings.h WebKit-r37056/WebCore/page/Settings.h
--- WebKit-r37056-old/WebCore/page/Settings.h	2008-09-12 23:20:44.000000000 +0200
+++ WebKit-r37056/WebCore/page/Settings.h	2008-10-05 21:32:07.000000000 +0200
@@ -101,6 +101,9 @@
         void setUserStyleSheetLocation(const KURL&);
         const KURL& userStyleSheetLocation() const { return m_userStyleSheetLocation; }
 
+        void setUserAgent(const String&);
+        const String& userAgent() const { return m_userAgent; }
+
         void setShouldPrintBackgrounds(bool);
         bool shouldPrintBackgrounds() const { return m_shouldPrintBackgrounds; }
 
@@ -188,6 +191,7 @@
         String m_ftpDirectoryTemplatePath;
         String m_localStorageDatabasePath;
         KURL m_userStyleSheetLocation;
+        String m_userAgent;
         AtomicString m_standardFontFamily;
         AtomicString m_fixedFontFamily;
         AtomicString m_serifFontFamily;
diff -ur WebKit-r37056-old/WebKit/gtk/WebCoreSupport/FrameLoaderClientGtk.cpp WebKit-r37056/WebKit/gtk/WebCoreSupport/FrameLoaderClientGtk.cpp
--- WebKit-r37056-old/WebKit/gtk/WebCoreSupport/FrameLoaderClientGtk.cpp	2008-09-28 04:37:04.000000000 +0200
+++ WebKit-r37056/WebKit/gtk/WebCoreSupport/FrameLoaderClientGtk.cpp	2008-10-05 21:35:32.000000000 +0200
@@ -141,7 +141,12 @@
 
 String FrameLoaderClient::userAgent(const KURL&)
 {
-    if (m_userAgent.isEmpty())
+    Frame* coreFrame = core(webFrame());
+    ASSERT(coreFrame);
+    Settings* settings = coreFrame->settings();
+    if (settings && !settings->userAgent().isEmpty()) {
+        m_userAgent = settings->userAgent();
+    } else if (m_userAgent.isEmpty() || settings->userAgent().isEmpty())
         m_userAgent = composeUserAgent();
 
     return m_userAgent;
diff -ur WebKit-r37056-old/WebKit/gtk/webkit/webkitwebsettings.cpp WebKit-r37056/WebKit/gtk/webkit/webkitwebsettings.cpp
--- WebKit-r37056-old/WebKit/gtk/webkit/webkitwebsettings.cpp	2008-06-14 01:23:50.000000000 +0200
+++ WebKit-r37056/WebKit/gtk/webkit/webkitwebsettings.cpp	2008-10-05 21:11:16.000000000 +0200
@@ -48,6 +48,7 @@
     gboolean resizable_text_areas;
     gchar* user_stylesheet_uri;
     gfloat zoom_step;
+    gchar* user_agent;
 };
 
 #define WEBKIT_WEB_SETTINGS_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE((obj), WEBKIT_TYPE_WEB_SETTINGS, WebKitWebSettingsPrivate))
@@ -73,7 +74,8 @@
     PROP_ENABLE_PLUGINS,
     PROP_RESIZABLE_TEXT_AREAS,
     PROP_USER_STYLESHEET_URI,
-    PROP_ZOOM_STEP
+    PROP_ZOOM_STEP,
+    PROP_USER_AGENT
 };
 
 static void webkit_web_settings_finalize(GObject* object);
@@ -268,6 +270,16 @@
                                     0.0f, G_MAXFLOAT, 0.1f,
                                     flags));
 
+
+    g_object_class_install_property(gobject_class,
+                                    PROP_CURSIVE_FONT_FAMILY,
+                                    g_param_spec_string(
+                                    "user-agent",
+                                    "User Agent",
+                                    "The default User Agent used by the Browser.",
+                                    0,
+                                    flags));
+
     g_type_class_add_private(klass, sizeof(WebKitWebSettingsPrivate));
 }
 
@@ -289,6 +301,7 @@
     g_free(priv->sans_serif_font_family);
     g_free(priv->serif_font_family);
     g_free(priv->user_stylesheet_uri);
+    g_free(priv->user_agent);
 
     G_OBJECT_CLASS(webkit_web_settings_parent_class)->finalize(object);
 }
@@ -364,6 +377,10 @@
     case PROP_ZOOM_STEP:
         priv->zoom_step = g_value_get_float(value);
         break;
+    case PROP_USER_AGENT:
+        g_free(priv->user_agent);
+        priv->user_agent = g_strdup(g_value_get_string(value));
+        break;
     default:
         G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
         break;
@@ -436,6 +453,9 @@
     default:
         G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
         break;
+    case PROP_USER_AGENT:
+        g_value_set_string(value, priv->user_agent);
+        break;
     }
 }
 
@@ -483,6 +503,7 @@
                  "resizable-text-areas", priv->resizable_text_areas,
                  "user-stylesheet-uri", priv->user_stylesheet_uri,
                  "zoom-step", priv->zoom_step,
+                 "user-agent", priv->user_agent,
                  NULL));
 
     return copy;
diff -ur WebKit-r37056-old/WebKit/gtk/webkit/webkitwebview.cpp WebKit-r37056/WebKit/gtk/webkit/webkitwebview.cpp
--- WebKit-r37056-old/WebKit/gtk/webkit/webkitwebview.cpp	2008-09-29 08:00:25.000000000 +0200
+++ WebKit-r37056/WebKit/gtk/webkit/webkitwebview.cpp	2008-10-05 21:36:55.000000000 +0200
@@ -1295,7 +1295,7 @@
     WebKitWebSettings* webSettings = priv->webSettings;
     Settings* settings = core(webView)->settings();
 
-    gchar* defaultEncoding, *cursiveFontFamily, *defaultFontFamily, *fantasyFontFamily, *monospaceFontFamily, *sansSerifFontFamily, *serifFontFamily, *userStylesheetUri;
+    gchar* defaultEncoding, *cursiveFontFamily, *defaultFontFamily, *fantasyFontFamily, *monospaceFontFamily, *sansSerifFontFamily, *serifFontFamily, *userStylesheetUri, *userAgent;
     gboolean autoLoadImages, autoShrinkImages, printBackgrounds, enableScripts, enablePlugins, resizableTextAreas;
 
     g_object_get(G_OBJECT(webSettings),
@@ -1313,6 +1313,7 @@
                  "enable-plugins", &enablePlugins,
                  "resizable-text-areas", &resizableTextAreas,
                  "user-stylesheet-uri", &userStylesheetUri,
+                 "user-agent", &userAgent,
                  NULL);
 
     settings->setDefaultTextEncodingName(defaultEncoding);
@@ -1329,6 +1330,7 @@
     settings->setPluginsEnabled(enablePlugins);
     settings->setTextAreasAreResizable(resizableTextAreas);
     settings->setUserStyleSheetLocation(KURL(userStylesheetUri));
+    settings->setUserAgent(userAgent);
 
     g_free(defaultEncoding);
     g_free(cursiveFontFamily);
@@ -1338,6 +1340,7 @@
     g_free(sansSerifFontFamily);
     g_free(serifFontFamily);
     g_free(userStylesheetUri);
+    g_free(userAgent);
 
     webkit_web_view_screen_changed(webView, NULL, NULL);
 }
@@ -1387,6 +1390,8 @@
         settings->setTextAreasAreResizable(g_value_get_boolean(&value));
     else if (name == g_intern_string("user-stylesheet-uri"))
         settings->setUserStyleSheetLocation(KURL(g_value_get_string(&value)));
+    else if (name == g_intern_string("user-agent"))
+        settings->setUserAgent(g_value_get_string(&value));
     else if (!g_object_class_find_property(G_OBJECT_GET_CLASS(webSettings), name))
         g_warning("Unexpected setting '%s'", name);
     g_value_unset(&value);

