diff -ru totem-2.24.3.orig/gstreamer/browser-plugin/totemPlugin.cpp totem-2.24.3/gstreamer/browser-plugin/totemPlugin.cpp
--- totem-2.24.3.orig/gstreamer/browser-plugin/totemPlugin.cpp	2008-10-08 17:38:55.000000000 +0100
+++ totem-2.24.3/gstreamer/browser-plugin/totemPlugin.cpp	2008-12-05 16:39:04.000000000 +0000
@@ -1865,16 +1865,18 @@
  	 * error code from the NewStream function.
 	 */
 
+	bool bOK = true;
 	NPError err;
         err = NPN_GetValue (mNPP,
                             NPNVPluginElementNPObject,
                             getter_Retains (mPluginElement));
 	if (err != NPERR_NO_ERROR || mPluginElement.IsNull ()) {
 		D ("Failed to get our DOM Element NPObject");
-		return NPERR_GENERIC_ERROR;
+		bOK = false;
 	}
 
 #if defined(TOTEM_COMPLEX_PLUGIN) && defined(HAVE_NSTARRAY_H)
+    if (bOK) {
         /* FIXMEchpe untested; test this! */
         if (!NPN_GetProperty (mNPP,
                               mPluginElement,
@@ -1882,10 +1884,12 @@
                               getter_Retains (mPluginOwnerDocument)) ||
             mPluginOwnerDocument.IsNull ()) {
 		D ("Failed to get the plugin element's ownerDocument");
-		return NPERR_GENERIC_ERROR;
-	}
+		bOK = false;
+	   }
+     }
 #endif /* TOTEM_COMPLEX_PLUGIN */
 
+    if (bOK) {
 	/* We'd like to get the base URI of our DOM element as a nsIURI,
 	 * but there's no frozen method to do so (nsIContent/nsINode isn't available
 	 * for non-MOZILLA_INTERNAL_API code). nsIDOM3Node isn't frozen either,
@@ -1900,11 +1904,11 @@
                               getter_Copies (baseURI)) ||
             !baseURI.IsString ()) {
           D ("Failed to get the base URI");
-          return NPERR_GENERIC_ERROR;
         }
 
         mBaseURI = g_strdup (baseURI.GetString ());
-	D ("Base URI is '%s'", mBaseURI ? mBaseURI : "");
+	   D ("Base URI is '%s'", mBaseURI ? mBaseURI : "");
+     }
 
 	/* Setup DBus connection handling */
 	GError *error = NULL;
@@ -2178,7 +2182,7 @@
 	}
 #endif /* TOTEM_GMP_PLUGIN */
 #if defined(TOTEM_NARROWSPACE_PLUGIN) || defined (TOTEM_BASIC_PLUGIN)
-	if (height <= 16 && !mControllerHidden) {
+	if (height != -1 && height <= 16 && !mControllerHidden) {
 		mAudioOnly = true;
 	}
 #endif /* TOTEM_NARROWSPACE_PLUGIN || TOTEM_BASIC_PLUGIN */
diff -ru totem-2.24.3.orig/gstreamer/browser-plugin/totemPluginGlue.cpp totem-2.24.3/gstreamer/browser-plugin/totemPluginGlue.cpp
--- totem-2.24.3.orig/gstreamer/browser-plugin/totemPluginGlue.cpp	2008-09-01 11:32:53.000000000 +0100
+++ totem-2.24.3/gstreamer/browser-plugin/totemPluginGlue.cpp	2008-12-08 12:32:57.000000000 +0000
@@ -405,17 +405,20 @@
 	if ((aMozillaVTable->version >> 8) > NP_VERSION_MAJOR)
 		return NPERR_INCOMPATIBLE_VERSION_ERROR;
 
-	if (aMozillaVTable->size < sizeof (NPNetscapeFuncs))
+	// Offset of highest used function we can't live without
+	if (aMozillaVTable->size < offsetof(NPNetscapeFuncs, forceredraw) + sizeof(void*))
 		return NPERR_INVALID_FUNCTABLE_ERROR;
+
 	if (aPluginVTable->size < sizeof (NPPluginFuncs))
 		return NPERR_INVALID_FUNCTABLE_ERROR;
 
-        /* Copy the function table. We can use memcpy here since we've already
-         * established that the aMozillaVTable is at least as big as the compile-
-         * time NPNetscapeFuncs.
-         */
-        memcpy (&NPNFuncs, aMozillaVTable, sizeof (NPNetscapeFuncs));
-        NPNFuncs.size = sizeof (NPNetscapeFuncs);
+	/* Copy the function table.
+	*/
+	uint16 size = aMozillaVTable->size < sizeof (NPNetscapeFuncs) ?
+	aMozillaVTable->size : sizeof (NPNetscapeFuncs);
+	memset (&NPNFuncs, 0, sizeof (NPNetscapeFuncs));
+	memcpy (&NPNFuncs, aMozillaVTable, size);
+	NPNFuncs.size = size;
 #if 0 // FIXMEchpe
 	/* Do we support XEMBED? */
 	NPError err;
