diff -u gst/wavparse.orig/gstriff.c gst/wavparse/gstriff.c
--- gst/wavparse.orig/gstriff.c	2002-12-07 12:45:41.000000000 -0600
+++ gst/wavparse/gstriff.c	2002-12-07 12:57:09.000000000 -0600
@@ -69,9 +69,13 @@
     g_return_val_if_fail(chunk != NULL,0);
     chunk->offset = riff->nextlikely+8;	/* point to the actual data */
     chunk->id = words[0];
+#ifdef __BIG_ENDIAN__
+    chunk->size = GST_RIFF_SWAB32(words[1]);
+#else
     chunk->size = words[1];
+#endif
 /*    g_print("chunk id is 0x%08x '%s' and is 0x%08x long\n",words[0], */
-/*            gst_riff_id_to_fourcc(words[0]),words[1]); */
+/*            gst_riff_id_to_fourcc(words[0]),chunk->size); */
     riff->nextlikely += 8 + chunk->size;	/* doesn't include hdr */
     riff->chunks = g_list_prepend(riff->chunks,chunk);
   }
@@ -83,8 +87,13 @@
 gulong gst_riff_fourcc_to_id(gchar *fourcc) {
   g_return_val_if_fail(fourcc != NULL,0);
 
+#ifdef __BIG_ENDIAN__
+  return (fourcc[3] << 0) | (fourcc[2] << 8) |
+         (fourcc[1] << 16) | (fourcc[0] << 24);
+#else
   return (fourcc[0] << 0) | (fourcc[1] << 8) |
          (fourcc[2] << 16) | (fourcc[3] << 24);
+#endif
 }
 
 gchar *gst_riff_id_to_fourcc(gulong id) {
@@ -92,11 +101,19 @@
 
   g_return_val_if_fail(fourcc != NULL, NULL);
 
+#ifdef __BIG_ENDIAN__
+  fourcc[3] = (id >> 0) & 0xff;
+  fourcc[2] = (id >> 8) & 0xff;
+  fourcc[1] = (id >> 16) & 0xff;
+  fourcc[0] = (id >> 24) & 0xff;
+  fourcc[4] = 0;
+#else
   fourcc[0] = (id >> 0) & 0xff;
   fourcc[1] = (id >> 8) & 0xff;
   fourcc[2] = (id >> 16) & 0xff;
   fourcc[3] = (id >> 24) & 0xff;
   fourcc[4] = 0;
+#endif
 
   return fourcc;
 }
diff -u gst/wavparse.orig/gstriff.h gst/wavparse/gstriff.h
--- gst/wavparse.orig/gstriff.h	2002-12-07 12:45:41.000000000 -0600
+++ gst/wavparse/gstriff.h	2002-12-07 12:58:16.000000000 -0600
@@ -25,6 +25,8 @@
 #include <gst/gstbuffer.h>
 #include <gst/gstplugin.h>
 
+#define GST_RIFF_SWAB16(a) ( (((a) >> 8) & 0x00FF) | (((a) << 8) & 0xFF00) ) 
+#define GST_RIFF_SWAB32(a) ( (GST_RIFF_SWAB16((a) & 0xFFFF) << 16) | (GST_RIFF_SWAB16(((a) >> 16) & 0xFFFF)) )
 
 #define GST_RIFF_ENOTRIFF -1		/* not a RIFF file */
 
diff -u gst/wavparse.orig/gstwavparse.c gst/wavparse/gstwavparse.c
--- gst/wavparse.orig/gstwavparse.c	2002-12-07 12:45:41.000000000 -0600
+++ gst/wavparse/gstwavparse.c	2002-12-07 12:57:58.000000000 -0600
@@ -262,6 +262,18 @@
       /* we can gather format information now */
       format = (GstWavParseFormat *)((guchar *) GST_BUFFER_DATA (buf) + fmt->offset);
 
+#ifdef __BIG_ENDIAN__
+      wavparse->bps      = GST_RIFF_SWAB16(format->wBlockAlign);
+      wavparse->rate     = GST_RIFF_SWAB32(format->dwSamplesPerSec);
+      wavparse->channels = GST_RIFF_SWAB16(format->wChannels);
+      wavparse->width    = GST_RIFF_SWAB16(format->wBitsPerSample);
+#else
+      wavparse->bps      = format->wBlockAlign;
+      wavparse->rate     = format->dwSamplesPerSec;
+      wavparse->channels = format->wChannels;
+      wavparse->width    = format->wBitsPerSample;
+#endif
+      
       /* set the caps on the src pad */
       caps = GST_CAPS_NEW (
 			"parsewav_src",
@@ -269,11 +281,11 @@
 			"format",	GST_PROPS_STRING ("int"),
 			  "law",	GST_PROPS_INT (0),		/*FIXME */
 			  "endianness",	GST_PROPS_INT (G_BYTE_ORDER),
-        		  "signed",     GST_PROPS_BOOLEAN (TRUE), /*FIXME */
-			  "width",	GST_PROPS_INT (format->wBitsPerSample),
-			  "depth",	GST_PROPS_INT (format->wBitsPerSample),
-			  "rate",	GST_PROPS_INT (format->dwSamplesPerSec),
-			  "channels",	GST_PROPS_INT (format->wChannels)
+        		  "signed",     GST_PROPS_BOOLEAN ((wavparse->width > 8) ? TRUE : FALSE),
+			  "width",	GST_PROPS_INT (wavparse->width),
+			  "depth",	GST_PROPS_INT (wavparse->width),
+			  "rate",	GST_PROPS_INT (wavparse->rate),
+			  "channels",	GST_PROPS_INT (wavparse->channels)
 		      );
 
       if (gst_pad_try_set_caps (wavparse->srcpad, caps) <= 0) {
@@ -281,13 +293,8 @@
         return;
       }
 
-      wavparse->bps = format->wBlockAlign;
-      wavparse->rate = format->dwSamplesPerSec;
-      wavparse->channels = format->wChannels;
-      wavparse->width = format->wBitsPerSample;
-      
       GST_DEBUG (0, "frequency %d, channels %d",
-		 format->dwSamplesPerSec, format->wChannels); 
+		 wavparse->rate, wavparse->channels); 
 
       /* we're now looking for the data chunk */
       wavparse->state = GST_WAVPARSE_CHUNK_DATA;
