Index: gstreamer0.10-0.10.29.2/gst/gstregistry.c
===================================================================
--- gstreamer0.10-0.10.29.2.orig/gst/gstregistry.c	2010-06-24 13:54:02.000000000 +0200
+++ gstreamer0.10-0.10.29.2/gst/gstregistry.c	2010-06-26 20:16:38.536178010 +0200
@@ -121,6 +121,10 @@
 #include <stdio.h>
 #include <string.h>
 
+#ifdef HAVE_SYS_UTSNAME_H
+#include <sys/utsname.h>
+#endif
+
 /* For g_stat () */
 #include <glib/gstdio.h>
 
@@ -1478,6 +1482,10 @@
    * path, and the plugins installed in the user's home directory */
   plugin_path = g_getenv ("GST_PLUGIN_SYSTEM_PATH");
   if (plugin_path == NULL) {
+#if defined(__linux__) && defined (__i386__)
+    struct utsname uts;
+#endif
+    char *plugindir = PLUGINDIR;
     char *home_plugins;
 
     GST_DEBUG ("GST_PLUGIN_SYSTEM_PATH not set");
@@ -1491,8 +1499,14 @@
     g_free (home_plugins);
 
     /* add the main (installed) library path */
-    GST_DEBUG ("scanning main plugins %s", PLUGINDIR);
-    changed |= gst_registry_scan_path_internal (&context, PLUGINDIR);
+#if defined(__linux__) && defined (__i386__)
+    uname(&uts);
+    if (!strcmp("x86_64", uts.machine)
+         && !access("/usr/lib32/gstreamer-0.10", R_OK|X_OK))
+       plugindir = "/usr/lib32/gstreamer-0.10";
+#endif
+    GST_DEBUG ("scanning main plugins %s", plugindir);
+    changed |= gst_registry_scan_path_internal (&context, plugindir);
 
 #ifdef G_OS_WIN32
     {
