diff -dupr jack.0/drivers/alsa/usx2y.c jack.1/drivers/alsa/usx2y.c
--- jack.0/drivers/alsa/usx2y.c	2006-11-29 19:38:20.000000000 +0000
+++ jack.1/drivers/alsa/usx2y.c	2006-11-29 19:39:29.000000000 +0000
@@ -208,16 +208,19 @@ usx2y_driver_get_channel_addresses_captu
 static int
 usx2y_driver_start (alsa_driver_t *driver)
 {
-	int err;
+	int err, i;
 	snd_pcm_uframes_t poffset, pavail;
 
 	usx2y_t *h = (usx2y_t *) driver->hw->private;
 
-	if (driver->capture_nchannels == 4) {
+	for (i = 0; i < driver->capture_nchannels; i++)
 		// US428 channels 3+4 are on a seperate 2 channel stream.
-		// ALSA thinks its 1 stream with 4 channels, so we have to hack here.
-		driver->capture_interleave_skip = 2 * driver->capture_sample_bytes;
-	}
+		// ALSA thinks its 1 stream with 4 channels.
+		driver->capture_interleave_skip[i] = 2 * driver->capture_sample_bytes;
+
+
+	driver->playback_interleave_skip[0] = 2 * driver->playback_sample_bytes;
+	driver->playback_interleave_skip[1] = 2 * driver->playback_sample_bytes;
 
 	driver->poll_last = 0;
 	driver->poll_next = 0;

