diff --git a/bundles/org.eclipse.swt/Eclipse SWT Mozilla/win32/org/eclipse/swt/browser/MozillaDelegate.java b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/win32/org/eclipse/swt/browser/MozillaDelegate.java
index 4c639d5..9eb0169 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT Mozilla/win32/org/eclipse/swt/browser/MozillaDelegate.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/win32/org/eclipse/swt/browser/MozillaDelegate.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2008 IBM Corporation and others.
+ * Copyright (c) 2005, 2009 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -11,11 +11,15 @@
 package org.eclipse.swt.browser;
 
 import org.eclipse.swt.browser.Browser;
-import org.eclipse.swt.internal.win32.OS;
+import org.eclipse.swt.internal.Callback;
+import org.eclipse.swt.internal.mozilla.*;
+import org.eclipse.swt.internal.win32.*;
 import org.eclipse.swt.widgets.*;
 
 class MozillaDelegate {
 	Browser browser;
+	static int /*long*/ MozillaProc;
+	static Callback SubclassProc;
 	
 MozillaDelegate (Browser browser) {
 	super ();
@@ -54,10 +58,38 @@
 	return bytes;
 }
 
+static int /*long*/ windowProc (int /*long*/ hwnd, int /*long*/ msg, int /*long*/ wParam, int /*long*/ lParam) {
+	switch ((int)/*64*/msg) {
+		case OS.WM_ERASEBKGND:
+			RECT rect = new RECT ();
+			OS.GetClientRect (hwnd, rect);
+			OS.FillRect (wParam, rect, OS.GetSysColorBrush (OS.COLOR_WINDOW));
+			break;
+	}
+	return OS.CallWindowProc (MozillaProc, hwnd, (int)/*64*/msg, wParam, lParam);
+}
+
+void addWindowSubclass () {
+	int /*long*/ hwndChild = OS.GetWindow (browser.handle, OS.GW_CHILD);
+	if (SubclassProc == null) {
+		SubclassProc = new Callback (MozillaDelegate.class, "windowProc", 4); //$NON-NLS-1$
+		MozillaProc = OS.GetWindowLongPtr (hwndChild, OS.GWL_WNDPROC);
+	}
+	OS.SetWindowLongPtr (hwndChild, OS.GWL_WNDPROC, SubclassProc.getAddress ());
+}
+
+int createBaseWindow (nsIBaseWindow baseWindow) {
+	return baseWindow.Create ();
+}
+
 int /*long*/ getHandle () {
 	return browser.handle;
 }
 
+String getJSLibraryName () {
+	return "js3250.dll"; //$NON-NLS-1$
+}
+
 String getLibraryName () {
 	return "xpcom.dll"; //$NON-NLS-1$
 }
@@ -84,10 +116,16 @@
 }
 
 void onDispose (int /*long*/ embedHandle) {
+	removeWindowSubclass ();
 	browser = null;
 }
 
+void removeWindowSubclass () {
+	if (SubclassProc == null) return;
+	int /*long*/ hwndChild = OS.GetWindow (browser.handle, OS.GW_CHILD);
+	OS.SetWindowLongPtr (hwndChild, OS.GWL_WNDPROC, MozillaProc);
+}
+
 void setSize (int /*long*/ embedHandle, int width, int height) {
 }
-
 }
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/Platform.java b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/Platform.java
index 594c2ef..d7d2f14 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/Platform.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/Platform.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2007 IBM Corporation and others.
+ * Copyright (c) 2000, 2009 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -13,5 +13,5 @@
 public class Platform {
 	
 public static final String PLATFORM = "win32"; //$NON-NLS-1$
-
+public static final Lock lock = new Lock ();
 }
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/common/library/swt.h b/bundles/org.eclipse.swt/Eclipse SWT/common/library/swt.h
index 5404f57..e6667f9 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT/common/library/swt.h
+++ b/bundles/org.eclipse.swt/Eclipse SWT/common/library/swt.h
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2005 IBM Corporation and others.
+ * Copyright (c) 2000, 2009 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -61,6 +61,38 @@
 
 #endif
 
+#ifdef __APPLE__
+#define CALLING_CONVENTION
+#define LOAD_FUNCTION(var, name) \
+		static int initialized = 0; \
+		static void *var = NULL; \
+		if (!initialized) { \
+			CFBundleRef bundle = CFBundleGetBundleWithIdentifier(CFSTR(name##_LIB)); \
+			if (bundle) var = CFBundleGetFunctionPointerForName(bundle, CFSTR(#name)); \
+			initialized = 1; \
+		} 
+#elif defined (_WIN32) || defined (_WIN32_WCE)
+#define CALLING_CONVENTION CALLBACK
+#define LOAD_FUNCTION(var, name) \
+		static int initialized = 0; \
+		static FARPROC var = NULL; \
+		if (!initialized) { \
+			HMODULE hm = LoadLibrary(name##_LIB); \
+			if (hm) var = GetProcAddress(hm, #name); \
+			initialized = 1; \
+		}
+#else
+#define CALLING_CONVENTION
+#define LOAD_FUNCTION(var, name) \
+		static int initialized = 0; \
+		static void *var = NULL; \
+		if (!initialized) { \
+			void* handle = dlopen(name##_LIB, RTLD_LAZY); \
+			if (handle) var = dlsym(handle, #name); \
+			initialized = 1; \
+		}
+#endif
+
 void throwOutOfMemory(JNIEnv *env);
 
 #define CHECK_NULL_VOID(ptr) \
