diff -N -wup --recursive audio-dev-original//contrib/feeds/audio_feeds.info audio-dev/contrib/feeds/audio_feeds.info
--- audio-dev-original//contrib/feeds/audio_feeds.info	2012-02-16 11:24:05.825267001 -0500
+++ audio-dev/contrib/feeds/audio_feeds.info	2012-02-16 11:28:00.505267002 -0500
@@ -1,5 +1,5 @@
 name = Audio Feeds
-description = Provide XSPF, M3U, and PLS feeds for attached audio nodes.
+description = Provide XSPF, M3U, and PLS feeds for audio nodes referenced by Node Reference fields.
 package = "Audio"
 core = 6.x
 dependencies[] = audio
diff -N -wup --recursive audio-dev-original//contrib/feeds/audio_feeds_player.info audio-dev/contrib/feeds/audio_feeds_player.info
--- audio-dev-original//contrib/feeds/audio_feeds_player.info	1969-12-31 19:00:00.000000000 -0500
+++ audio-dev/contrib/feeds/audio_feeds_player.info	2012-02-16 11:27:17.461267002 -0500
@@ -0,0 +1,7 @@
+; $Id$
+name = Audio Feeds Player
+description = Provide CCK formatters for displaying players for audio feeds.
+package = "Audio"
+core = 6.x
+dependencies[] = audio_feeds
+
diff -N -wup --recursive audio-dev-original//contrib/feeds/audio_feeds_player.module audio-dev/contrib/feeds/audio_feeds_player.module
--- audio-dev-original//contrib/feeds/audio_feeds_player.module	1969-12-31 19:00:00.000000000 -0500
+++ audio-dev/contrib/feeds/audio_feeds_player.module	2012-02-16 11:27:17.461267002 -0500
@@ -0,0 +1,60 @@
+<?php
+// $Id$
+
+/**
+ * @file
+ * This module provides CCK formatters for displaying players for audio feeds.
+ */
+
+/**
+ * Implementation of hook_help().
+ */
+function audio_feeds_player_help($section, $arg) {
+  switch ($section) {
+    case 'admin/help#audio_feeds_player':
+      return t('This module provides CCK formatters for displaying players for audio feeds. Supports XSPF audio feeds only.');
+  }
+}
+
+/**
+ * Implementation of hook_field_formatter_info().
+ */
+function audio_feeds_player_field_formatter_info() {
+  $formatters = array();
+  foreach (audio_get_players('names') as $key => $player) {
+    if (isset($player['theme_xspf'])) {
+      $formatters[$key] = array(
+        'label' => $player['title'],
+        'field types' => array('nodereference'),
+        'multiple values' => CONTENT_HANDLE_MODULE,
+      );
+    }
+  }
+  return $formatters;
+}
+
+/**
+ * Implementation of hook_theme().
+ */
+function audio_feeds_player_theme() {
+  $entries = array();
+  foreach (audio_get_players('names') as $key => $player) {
+    if (isset($player['theme_xspf'])) {
+      $entries['audio_feeds_player_formatter_'. $key] = array(
+        'arguments' => array(
+          'element' => NULL,
+          'theme_xspf' => $player['theme_xspf'],
+          'options' => isset($player['options']) ? $player['options'] : array(),
+        ),
+        // Note: This would probably make more sense as a theme function rather
+        // than a template file. However, while theme() passes arguments from
+        // the hook's definition to template files as variables, those arguments
+        // are not passed when the hook is implemented as a function. Perhaps
+        // http://drupal.org/node/579776#comment-2054254 is needed?
+        'template' => 'audio-feeds-player',
+      );
+    }
+  }
+  return $entries;
+}
+
diff -N -wup --recursive audio-dev-original//contrib/feeds/audio-feeds-player.tpl.php audio-dev/contrib/feeds/audio-feeds-player.tpl.php
--- audio-dev-original//contrib/feeds/audio-feeds-player.tpl.php	1969-12-31 19:00:00.000000000 -0500
+++ audio-dev/contrib/feeds/audio-feeds-player.tpl.php	2012-02-16 11:27:17.461267002 -0500
@@ -0,0 +1,5 @@
+<?php
+
+  // TODO: Check if the node really has a corresponding XSPF playlist.
+
+  print theme($theme_xspf, url('node/'. $element['#node']->nid .'/xspf'), $options);
