diff -urN original/com/inzyme/exception/.nbattrs src/com/inzyme/exception/.nbattrs
--- original/com/inzyme/exception/.nbattrs	1969-12-31 18:00:00.000000000 -0600
+++ src/com/inzyme/exception/.nbattrs	2005-03-08 15:02:22.094686400 -0600
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE attributes PUBLIC "-//NetBeans//DTD DefaultAttributes 1.0//EN" "http://www.netbeans.org/dtds/attributes-1_0.dtd">
+<attributes version="1.0">
+    <fileobject name="ChainedException.java">
+        <attr name="class_dependency_com.inzyme.exception.IChainedThrowable" stringvalue="ChainedException"/>
+        <attr name="class_dependency_java.lang.Exception" stringvalue="ChainedException"/>
+    </fileobject>
+    <fileobject name="IChainedThrowable.java">
+        <attr name="EA-OpenIDE-Connection" serialvalue="aced0005737200146a6176612e7574696c2e4c696e6b65644c6973740c29535d4a60882203000078707704000000017372002a6f72672e6f70656e6964652e6c6f61646572732e436f6e6e656374696f6e537570706f72742450616972055f8af6f04a3bd80200024c00047479706574002b4c6f72672f6f70656e6964652f636f6f6b6965732f436f6e6e656374696f6e436f6f6b696524547970653b4c000576616c75657400124c6a6176612f6c616e672f4f626a6563743b78707372002e6f72672e6e65746265616e732e6d6f64756c65732e6a6176612e4a617661436f6e6e656374696f6e732454797065a83dd01001306d7402000149000666696c746572787000000050737200436f72672e6e65746265616e732e6d6f64756c65732e6a6176612e4a617661446174614f626a6563742450657273697374656e74436f6e6e656374696f6e48616e646c65ba16f1d2dd4c1cb60200014c000e646174614e6f646548616e646c6574001f4c6f72672f6f70656e6964652f6e6f6465732f4e6f64652448616e646c653b7870737200296f72672e6f70656e6964652e6c6f61646572732e446174614e6f6465244f626a65637448616e646c655bd0f82e01811d2e0200025a0005636c6f6e654c00036f626a7400244c6f72672f6f70656e6964652f66696c6573797374656d732f46696c654f626a6563743b787000737200326f72672e6f70656e6964652e66696c6573797374656d732e416273747261637446696c654f626a656374245265706c616365896fa1bce4b5219f0200024c000866696c654e616d657400124c6a6176612f6c616e672f537472696e673b4c000666734e616d6571007e000f787074002a636f6d2f696e7a796d652f657863657074696f6e2f436861696e6564457863657074696f6e2e6a617661740014633a2f6a6176612f6a656d706c6f64652f73726378"/>
+    </fileobject>
+</attributes>
diff -urN original/com/inzyme/exception/ChainedException.java src/com/inzyme/exception/ChainedException.java
--- original/com/inzyme/exception/ChainedException.java	2003-12-13 10:37:58.000000000 -0600
+++ src/com/inzyme/exception/ChainedException.java	2005-03-08 15:02:21.684096000 -0600
@@ -7,7 +7,7 @@
  * 
  * @author Mike Schrag
  */
-public class ChainedException extends Exception implements IChainedThrowable {
+public class ChainedException extends java.lang.Exception implements IChainedThrowable {
 	private Throwable myParent;
 	
 	/**
diff -urN original/com/inzyme/filesystem/.nbattrs src/com/inzyme/filesystem/.nbattrs
--- original/com/inzyme/filesystem/.nbattrs	1969-12-31 18:00:00.000000000 -0600
+++ src/com/inzyme/filesystem/.nbattrs	2005-03-04 18:41:06.235875200 -0600
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE attributes PUBLIC "-//NetBeans//DTD DefaultAttributes 1.0//EN" "http://www.netbeans.org/dtds/attributes-1_0.dtd">
+<attributes version="1.0">
+    <fileobject name="IImportFile.java">
+        <attr name="EA-OpenIDE-Connection" serialvalue="aced0005737200146a6176612e7574696c2e4c696e6b65644c6973740c29535d4a60882203000078707704000000017372002a6f72672e6f70656e6964652e6c6f61646572732e436f6e6e656374696f6e537570706f72742450616972055f8af6f04a3bd80200024c00047479706574002b4c6f72672f6f70656e6964652f636f6f6b6965732f436f6e6e656374696f6e436f6f6b696524547970653b4c000576616c75657400124c6a6176612f6c616e672f4f626a6563743b78707372002e6f72672e6e65746265616e732e6d6f64756c65732e6a6176612e4a617661436f6e6e656374696f6e732454797065a83dd01001306d7402000149000666696c746572787000000050737200436f72672e6e65746265616e732e6d6f64756c65732e6a6176612e4a617661446174614f626a6563742450657273697374656e74436f6e6e656374696f6e48616e646c65ba16f1d2dd4c1cb60200014c000e646174614e6f646548616e646c6574001f4c6f72672f6f70656e6964652f6e6f6465732f4e6f64652448616e646c653b7870737200296f72672e6f70656e6964652e6c6f61646572732e446174614e6f6465244f626a65637448616e646c655bd0f82e01811d2e0200025a0005636c6f6e654c00036f626a7400244c6f72672f6f70656e6964652f66696c6573797374656d732f46696c654f626a6563743b787000737200326f72672e6f70656e6964652e66696c6573797374656d732e416273747261637446696c654f626a656374245265706c616365896fa1bce4b5219f0200024c000866696c654e616d657400124c6a6176612f6c616e672f537472696e673b4c000666734e616d6571007e000f787074002a6f72672f6a656d7065672f6e6f646573746f72652f52656d6f7465496d706f727446696c652e6a617661740014633a2f6a6176612f6a656d706c6f64652f73726378"/>
+    </fileobject>
+</attributes>
diff -urN original/com/inzyme/io/.nbattrs src/com/inzyme/io/.nbattrs
--- original/com/inzyme/io/.nbattrs	1969-12-31 18:00:00.000000000 -0600
+++ src/com/inzyme/io/.nbattrs	2005-03-04 18:43:08.842174400 -0600
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE attributes PUBLIC "-//NetBeans//DTD DefaultAttributes 1.0//EN" "http://www.netbeans.org/dtds/attributes-1_0.dtd">
+<attributes version="1.0">
+    <fileobject name="SeekableInputStream.java">
+        <attr name="EA-OpenIDE-Connection" serialvalue="aced0005737200146a6176612e7574696c2e4c696e6b65644c6973740c29535d4a60882203000078707704000000017372002a6f72672e6f70656e6964652e6c6f61646572732e436f6e6e656374696f6e537570706f72742450616972055f8af6f04a3bd80200024c00047479706574002b4c6f72672f6f70656e6964652f636f6f6b6965732f436f6e6e656374696f6e436f6f6b696524547970653b4c000576616c75657400124c6a6176612f6c616e672f4f626a6563743b78707372002e6f72672e6e65746265616e732e6d6f64756c65732e6a6176612e4a617661436f6e6e656374696f6e732454797065a83dd01001306d7402000149000666696c746572787000000050737200436f72672e6e65746265616e732e6d6f64756c65732e6a6176612e4a617661446174614f626a6563742450657273697374656e74436f6e6e656374696f6e48616e646c65ba16f1d2dd4c1cb60200014c000e646174614e6f646548616e646c6574001f4c6f72672f6f70656e6964652f6e6f6465732f4e6f64652448616e646c653b7870737200296f72672e6f70656e6964652e6c6f61646572732e446174614e6f6465244f626a65637448616e646c655bd0f82e01811d2e0200025a0005636c6f6e654c00036f626a7400244c6f72672f6f70656e6964652f66696c6573797374656d732f46696c654f626a6563743b787000737200326f72672e6f70656e6964652e66696c6573797374656d732e416273747261637446696c654f626a656374245265706c616365896fa1bce4b5219f0200024c000866696c654e616d657400124c6a6176612f6c616e672f537472696e673b4c000666734e616d6571007e000f78707400276f72672f6a656d7065672f70726f746f636f6c2f464944496e70757453747265616d2e6a617661740014633a2f6a6176612f6a656d706c6f64652f73726378"/>
+    </fileobject>
+</attributes>
diff -urN original/net/n3/nanoxml/NonValidator.java src/net/n3/nanoxml/NonValidator.java
--- original/net/n3/nanoxml/NonValidator.java	2003-12-01 07:43:32.000000000 -0600
+++ src/net/n3/nanoxml/NonValidator.java	2005-02-13 15:32:39.373792000 -0600
@@ -586,10 +586,10 @@
                                           int        lineNr)
    {
       Properties props = (Properties) this.currentElements.pop();
-      Enumeration enum = props.keys();
+      Enumeration enum2 = props.keys();
 
-      while (enum.hasMoreElements()) {
-         String key = (String) enum.nextElement();
+      while (enum2.hasMoreElements()) {
+         String key = (String) enum2.nextElement();
          extraAttributes.put(key, props.get(key));
       }
    }
diff -urN original/net/n3/nanoxml/StdXMLParser.java src/net/n3/nanoxml/StdXMLParser.java
--- original/net/n3/nanoxml/StdXMLParser.java	2003-12-01 07:43:32.000000000 -0600
+++ src/net/n3/nanoxml/StdXMLParser.java	2005-02-13 15:32:41.707147200 -0600
@@ -490,10 +490,10 @@
                                                 extraAttributes,
                                                 this.reader.getSystemID(),
                                                 this.reader.getLineNr());
-      Enumeration enum = extraAttributes.keys();
+      Enumeration enum2 = extraAttributes.keys();
 
-      while (enum.hasMoreElements()) {
-         String key = (String) enum.nextElement();
+      while (enum2.hasMoreElements()) {
+         String key = (String) enum2.nextElement();
          String value = extraAttributes.getProperty(key);
          attrNames.addElement(key);
          attrValues.addElement(value);
diff -urN original/net/n3/nanoxml/XMLElement.java src/net/n3/nanoxml/XMLElement.java
--- original/net/n3/nanoxml/XMLElement.java	2004-08-02 10:05:28.000000000 -0500
+++ src/net/n3/nanoxml/XMLElement.java	2005-02-13 15:33:51.597644800 -0600
@@ -483,9 +483,9 @@
      * @return the child element, or null if no such child was found.
      */
     public IXMLElement getFirstChildNamed(String name) {
-        Enumeration enum = this.children.elements();
-        while (enum.hasMoreElements()) {
-            IXMLElement child = (IXMLElement) enum.nextElement();
+        Enumeration enum2 = this.children.elements();
+        while (enum2.hasMoreElements()) {
+            IXMLElement child = (IXMLElement) enum2.nextElement();
             String childName = child.getFullName();
             if ((childName != null) && childName.equals(name)) {
                 return child;
@@ -505,9 +505,9 @@
      */
     public IXMLElement getFirstChildNamed(String name,
                                           String namespace) {
-        Enumeration enum = this.children.elements();
-        while (enum.hasMoreElements()) {
-            IXMLElement child = (IXMLElement) enum.nextElement();
+        Enumeration enum2 = this.children.elements();
+        while (enum2.hasMoreElements()) {
+            IXMLElement child = (IXMLElement) enum2.nextElement();
             String str = child.getName();
             boolean found = (str != null) && (str.equals(name));
             str = child.getNamespace();
@@ -533,9 +533,9 @@
      */
     public Vector getChildrenNamed(String name) {
         Vector result = new Vector(this.children.size());
-        Enumeration enum = this.children.elements();
-        while (enum.hasMoreElements()) {
-            IXMLElement child = (IXMLElement) enum.nextElement();
+        Enumeration enum2 = this.children.elements();
+        while (enum2.hasMoreElements()) {
+            IXMLElement child = (IXMLElement) enum2.nextElement();
             String childName = child.getFullName();
             if ((childName != null) && childName.equals(name)) {
                 result.addElement(child);
@@ -556,9 +556,9 @@
     public Vector getChildrenNamed(String name,
                                    String namespace) {
         Vector result = new Vector(this.children.size());
-        Enumeration enum = this.children.elements();
-        while (enum.hasMoreElements()) {
-            IXMLElement child = (IXMLElement) enum.nextElement();
+        Enumeration enum2 = this.children.elements();
+        while (enum2.hasMoreElements()) {
+            IXMLElement child = (IXMLElement) enum2.nextElement();
             String str = child.getName();
             boolean found = (str != null) && (str.equals(name));
             str = child.getNamespace();
@@ -584,9 +584,9 @@
      * @return the attribute, or null if the attribute does not exist.
      */
     private XMLAttribute findAttribute(String fullName) {
-        Enumeration enum = this.attributes.elements();
-        while (enum.hasMoreElements()) {
-            XMLAttribute attr = (XMLAttribute) enum.nextElement();
+        Enumeration enum2 = this.attributes.elements();
+        while (enum2.hasMoreElements()) {
+            XMLAttribute attr = (XMLAttribute) enum2.nextElement();
             if (attr.getFullName().equals(fullName)) {
                 return attr;
             }
@@ -605,9 +605,9 @@
      */
     private XMLAttribute findAttribute(String name,
                                        String namespace) {
-        Enumeration enum = this.attributes.elements();
-        while (enum.hasMoreElements()) {
-            XMLAttribute attr = (XMLAttribute) enum.nextElement();
+        Enumeration enum2 = this.attributes.elements();
+        while (enum2.hasMoreElements()) {
+            XMLAttribute attr = (XMLAttribute) enum2.nextElement();
             boolean found = attr.getName().equals(name);
             if (namespace == null) {
                 found &= (attr.getNamespace() == null);
@@ -859,9 +859,9 @@
      */
     public Enumeration enumerateAttributeNames() {
         Vector result = new Vector();
-        Enumeration enum = this.attributes.elements();
-        while (enum.hasMoreElements()) {
-            XMLAttribute attr = (XMLAttribute) enum.nextElement();
+        Enumeration enum2 = this.attributes.elements();
+        while (enum2.hasMoreElements()) {
+            XMLAttribute attr = (XMLAttribute) enum2.nextElement();
             result.addElement(attr.getFullName());
         }
         return result.elements();
@@ -896,9 +896,9 @@
      */
     public Properties getAttributes() {
         Properties result = new Properties();
-        Enumeration enum = this.attributes.elements();
-        while (enum.hasMoreElements()) {
-            XMLAttribute attr = (XMLAttribute) enum.nextElement();
+        Enumeration enum2 = this.attributes.elements();
+        while (enum2.hasMoreElements()) {
+            XMLAttribute attr = (XMLAttribute) enum2.nextElement();
             result.put(attr.getFullName(), attr.getValue());
         }
         return result;
@@ -914,9 +914,9 @@
      */
     public Properties getAttributesInNamespace(String namespace) {
         Properties result = new Properties();
-        Enumeration enum = this.attributes.elements();
-        while (enum.hasMoreElements()) {
-            XMLAttribute attr = (XMLAttribute) enum.nextElement();
+        Enumeration enum2 = this.attributes.elements();
+        while (enum2.hasMoreElements()) {
+            XMLAttribute attr = (XMLAttribute) enum2.nextElement();
             if (namespace == null) {
                 if (attr.getNamespace() == null) {
                     result.put(attr.getName(), attr.getValue());
@@ -1006,9 +1006,9 @@
         if (this.attributes.size() != elt.getAttributeCount()) {
             return false;
         }
-        Enumeration enum = this.attributes.elements();
-        while (enum.hasMoreElements()) {
-            XMLAttribute attr = (XMLAttribute) enum.nextElement();
+        Enumeration enum2 = this.attributes.elements();
+        while (enum2.hasMoreElements()) {
+            XMLAttribute attr = (XMLAttribute) enum2.nextElement();
             if (! elt.hasAttribute(attr.getName(), attr.getNamespace())) {
                 return false;
             }
diff -urN original/net/n3/nanoxml/XMLWriter.java src/net/n3/nanoxml/XMLWriter.java
--- original/net/n3/nanoxml/XMLWriter.java	2003-12-01 07:43:32.000000000 -0600
+++ src/net/n3/nanoxml/XMLWriter.java	2005-02-13 15:34:47.107464000 -0600
@@ -182,10 +182,10 @@
             }
          }
 
-         Enumeration enum = xml.enumerateAttributeNames();
+         Enumeration enum2 = xml.enumerateAttributeNames();
 
-         while (enum.hasMoreElements()) {
-            String key = (String) enum.nextElement();
+         while (enum2.hasMoreElements()) {
+            String key = (String) enum2.nextElement();
             int index = key.indexOf(':');
 
             if (index >= 0) {
@@ -203,10 +203,10 @@
             }
          }
 
-         enum = xml.enumerateAttributeNames();
+         enum2 = xml.enumerateAttributeNames();
 
-         while (enum.hasMoreElements()) {
-            String key = (String) enum.nextElement();
+         while (enum2.hasMoreElements()) {
+            String key = (String) enum2.nextElement();
             String value = xml.getAttribute(key, null);
             this.writer.print(" " + key + "=\"");
             this.writeEncoded(value);
@@ -229,10 +229,10 @@
                writer.println();
             }
 
-            enum = xml.enumerateChildren();
+            enum2 = xml.enumerateChildren();
 
-            while (enum.hasMoreElements()) {
-               IXMLElement child = (IXMLElement) enum.nextElement();
+            while (enum2.hasMoreElements()) {
+               IXMLElement child = (IXMLElement) enum2.nextElement();
                this.write(child, prettyPrint, indent + 4,
                           collapseEmptyElements);
             }
diff -urN original/org/jempeg/JEmplodeProperties.java src/org/jempeg/JEmplodeProperties.java
--- original/org/jempeg/JEmplodeProperties.java	2004-09-25 01:49:56.000000000 -0500
+++ src/org/jempeg/JEmplodeProperties.java	2005-03-04 18:07:17.558780800 -0600
@@ -77,6 +77,12 @@
   public static final String DOWNLOAD_FULL_PATH_PROPERTY = "jempeg.downloadFullPath";
 
   /**
+   * The property name of whether or not the low bit rate files (for portables) should be downloaded.
+   *      Available only on the Central.
+   */
+  public static final String DOWNLOAD_LOW_BIT_RATE_PROPERTY = "jempeg.downloadLowBitRate";
+
+  /**
    * The property name of whether or not fast connections should be used.
    */
   public static final String USE_FAST_CONNECTIONS_PROPERTY = "jempeg.useFastConnection";
@@ -188,6 +194,7 @@
     defaults.setProperty(JEmplodeProperties.FILENAME_FORMAT_SOUP_PLAYLIST_KEY, "{title}");
     defaults.setProperty(JEmplodeProperties.FILENAME_FORMAT_SOUP_TAXI_KEY, "{title}");
     defaults.setBooleanProperty(JEmplodeProperties.DOWNLOAD_FULL_PATH_PROPERTY, false);
+    defaults.setBooleanProperty(JEmplodeProperties.DOWNLOAD_LOW_BIT_RATE_PROPERTY, false);
     defaults.setProperty(JEmplodeProperties.DOWNLOAD_DIRECTORY_PROPERTY, "");
     defaults.setBooleanProperty(JEmplodeProperties.USE_FAST_CONNECTIONS_PROPERTY, true);
     defaults.setBooleanProperty(JEmplodeProperties.ALLOW_UNKNOWN_TYPES_PROPERTY, false);
diff -urN original/org/jempeg/empeg/manager/dialog/.nbattrs src/org/jempeg/empeg/manager/dialog/.nbattrs
--- original/org/jempeg/empeg/manager/dialog/.nbattrs	1969-12-31 18:00:00.000000000 -0600
+++ src/org/jempeg/empeg/manager/dialog/.nbattrs	2005-03-04 12:32:52.120081600 -0600
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE attributes PUBLIC "-//NetBeans//DTD DefaultAttributes 1.0//EN" "http://www.netbeans.org/dtds/attributes-1_0.dtd">
+<attributes version="1.0">
+    <fileobject name="AbstractChangeablePanel.java">
+        <attr name="EA-OpenIDE-Connection" serialvalue="aced0005737200146a6176612e7574696c2e4c696e6b65644c6973740c29535d4a60882203000078707704000000017372002a6f72672e6f70656e6964652e6c6f61646572732e436f6e6e656374696f6e537570706f72742450616972055f8af6f04a3bd80200024c00047479706574002b4c6f72672f6f70656e6964652f636f6f6b6965732f436f6e6e656374696f6e436f6f6b696524547970653b4c000576616c75657400124c6a6176612f6c616e672f4f626a6563743b78707372002e6f72672e6e65746265616e732e6d6f64756c65732e6a6176612e4a617661436f6e6e656374696f6e732454797065a83dd01001306d7402000149000666696c746572787000000050737200436f72672e6e65746265616e732e6d6f64756c65732e6a6176612e4a617661446174614f626a6563742450657273697374656e74436f6e6e656374696f6e48616e646c65ba16f1d2dd4c1cb60200014c000e646174614e6f646548616e646c6574001f4c6f72672f6f70656e6964652f6e6f6465732f4e6f64652448616e646c653b7870737200296f72672e6f70656e6964652e6c6f61646572732e446174614e6f6465244f626a65637448616e646c655bd0f82e01811d2e0200025a0005636c6f6e654c00036f626a7400244c6f72672f6f70656e6964652f66696c6573797374656d732f46696c654f626a6563743b787000737200326f72672e6f70656e6964652e66696c6573797374656d732e416273747261637446696c654f626a656374245265706c616365896fa1bce4b5219f0200024c000866696c654e616d657400124c6a6176612f6c616e672f537472696e673b4c000666734e616d6571007e000f78707400316f72672f6a656d7065672f656d7065672f6d616e616765722f6469616c6f672f4f7074696f6e7350616e656c2e6a617661740014633a2f6a6176612f6a656d706c6f64652f73726378"/>
+    </fileobject>
+</attributes>
diff -urN original/org/jempeg/empeg/manager/dialog/OptionsPanel.java src/org/jempeg/empeg/manager/dialog/OptionsPanel.java
--- original/org/jempeg/empeg/manager/dialog/OptionsPanel.java	2004-09-25 01:56:08.000000000 -0500
+++ src/org/jempeg/empeg/manager/dialog/OptionsPanel.java	2005-02-25 20:18:28.795110400 -0600
@@ -64,6 +64,7 @@
   private JTextField mySoupFilenameFormatTF;
   private JTextField myDownloadDirTF;
   private JCheckBox myDownloadFullPathCB;
+  private JCheckBox myDownloadLowBitRateCB;
   private JCheckBox myAutoUpdateJEmplodeCB;
   private JCheckBox myPromptBeforeJEmplodeUpdateCB;
   private JTextField myDoNotBroadcastToTF;
@@ -122,6 +123,10 @@
     downloadFullPathLabel.setToolTipText("If you want downloads to be saved with their full Empeg playlist path, check this.");
     myDownloadFullPathCB = new JCheckBox();
 
+    JLabel downloadLowBitRateLabel = new JLabel("Download Low Bit Rate Files:");
+    downloadLowBitRateLabel.setToolTipText("If you want to download low bit rate files from your Central, check this.");
+    myDownloadLowBitRateCB = new JCheckBox();
+    
     JLabel writeID3v2Label = new JLabel("Write ID3v2 Tags to Downloaded Files:");
     writeID3v2Label.setToolTipText("Check this box to write Empeg database information to ID3v2 tags in downloaded tracks.");
     myWriteID3v2CB = new JCheckBox();
@@ -256,6 +261,7 @@
     DialogUtils.addRow(soupFilenameFormatLabel, mySoupFilenameFormatTF, gridBagLayout, fieldsPanel);
     DialogUtils.addRow(downloadDirLabel, myDownloadDirTF, gridBagLayout, fieldsPanel);
     DialogUtils.addRow(downloadFullPathLabel, myDownloadFullPathCB, gridBagLayout, fieldsPanel);
+    DialogUtils.addRow(downloadLowBitRateLabel, myDownloadLowBitRateCB, gridBagLayout, fieldsPanel);
     DialogUtils.addRow(writeID3v2Label, myWriteID3v2CB, gridBagLayout, fieldsPanel);
     DialogUtils.addRow(preserveID3v2Label, myPreserveID3v2CB, gridBagLayout, fieldsPanel);
     DialogUtils.addRow(removeID3v1Label, myRemoveID3v1CB, gridBagLayout, fieldsPanel);
@@ -300,6 +306,7 @@
     fillInTextField(propertiesManager, mySoupFilenameFormatTF, JEmplodeProperties.FILENAME_FORMAT_SOUP_TUNE_KEY);
     fillInTextField(propertiesManager, myDownloadDirTF, JEmplodeProperties.DOWNLOAD_DIRECTORY_PROPERTY);
     fillInCheckBox(propertiesManager, myDownloadFullPathCB, JEmplodeProperties.DOWNLOAD_FULL_PATH_PROPERTY);
+    fillInCheckBox(propertiesManager, myDownloadLowBitRateCB, JEmplodeProperties.DOWNLOAD_LOW_BIT_RATE_PROPERTY);    
     fillInCheckBox(propertiesManager, myWriteID3v2CB, JEmplodeProperties.WRITE_ID3v2_PROPERTY);
     fillInCheckBox(propertiesManager, myPreserveID3v2CB, JEmplodeProperties.PRESERVE_ID3v2_PROPERTY);
     fillInCheckBox(propertiesManager, myRemoveID3v1CB, JEmplodeProperties.REMOVE_ID3v1_PROPERTY);
@@ -353,6 +360,7 @@
 
     propertiesManager.setProperty(JEmplodeProperties.DOWNLOAD_DIRECTORY_PROPERTY, myDownloadDirTF.getText());
     propertiesManager.setBooleanProperty(JEmplodeProperties.DOWNLOAD_FULL_PATH_PROPERTY, myDownloadFullPathCB.isSelected());
+    propertiesManager.setBooleanProperty(JEmplodeProperties.DOWNLOAD_LOW_BIT_RATE_PROPERTY, myDownloadLowBitRateCB.isSelected());
 
     propertiesManager.setBooleanProperty(JEmplodeProperties.WRITE_ID3v2_PROPERTY, myWriteID3v2CB.isSelected());
     propertiesManager.setBooleanProperty(JEmplodeProperties.PRESERVE_ID3v2_PROPERTY, myPreserveID3v2CB.isSelected());
diff -urN original/org/jempeg/manager/SynchronizeUI.java src/org/jempeg/manager/SynchronizeUI.java
--- original/org/jempeg/manager/SynchronizeUI.java	2004-01-17 23:10:24.000000000 -0600
+++ src/org/jempeg/manager/SynchronizeUI.java	2005-03-06 13:47:08.272302400 -0600
@@ -213,7 +213,7 @@
 	* @param _targetDir the directory to write to
 	* @throws IOException if the read files
 	*/
-	public void downloadFiles(TreePath _path, IFIDNode[] _nodes, File _targetDir, boolean _useHijack, IProgressListener _progressListener) throws IOException, ProtocolException {
+	public void downloadFiles(TreePath _path, IFIDNode[] _nodes, File _targetDir, boolean _useHijack, boolean _lowBitRate, IProgressListener _progressListener) throws IOException, ProtocolException {
 		synchronized (mySynchronizeClient) {
 			IProtocolClient protocolClient = mySynchronizeClient.getProtocolClient(_progressListener);
 			IConnection conn = protocolClient.getConnection();
@@ -227,7 +227,7 @@
 			try {
 				FIDPlaylist parentPlaylist = (FIDPlaylist) _path.getLastPathComponent();
 				for (int i = 0; i < _nodes.length; i++) {
-					SynchronizeUtils.downloadFile(_path, _nodes[i], parentPlaylist.getIndexOf(_nodes[i]), protocolClient, _targetDir, changeSet, packetSize, _useHijack, _progressListener);
+					SynchronizeUtils.downloadFile(_path, _nodes[i], parentPlaylist.getIndexOf(_nodes[i]), protocolClient, _targetDir, changeSet, packetSize, _useHijack, _lowBitRate, _progressListener);
 				}
 			}
 			finally {
@@ -243,11 +243,11 @@
 	/**
 	* Downloads files from the Empeg in the background 
 	*/
-	public void downloadFilesInBackground(final TreePath _path, final IFIDNode[] _nodes, final File _targetDir, final boolean _useHijack, final IProgressListener _progressListener) {
+	public void downloadFilesInBackground(final TreePath _path, final IFIDNode[] _nodes, final File _targetDir, final boolean _useHijack, final boolean _lowBitRate, final IProgressListener _progressListener) {
 		Thread t = new Thread(new Runnable() {
 			public void run() {
 				try {
-					downloadFiles(_path, _nodes, _targetDir, _useHijack, _progressListener);
+					downloadFiles(_path, _nodes, _targetDir, _useHijack, _lowBitRate, _progressListener);
 				}
 				catch (Exception e) {
 					Debug.handleError(myFrame, e, false);
diff -urN original/org/jempeg/manager/action/.nbattrs src/org/jempeg/manager/action/.nbattrs
--- original/org/jempeg/manager/action/.nbattrs	1969-12-31 18:00:00.000000000 -0600
+++ src/org/jempeg/manager/action/.nbattrs	2005-03-04 18:25:49.277353600 -0600
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE attributes PUBLIC "-//NetBeans//DTD DefaultAttributes 1.0//EN" "http://www.netbeans.org/dtds/attributes-1_0.dtd">
+<attributes version="1.0">
+    <fileobject name="DownloadAction.java">
+        <attr name="class_dependency_javax.swing.AbstractAction" stringvalue="DownloadAction"/>
+    </fileobject>
+</attributes>
diff -urN original/org/jempeg/manager/action/DownloadAction.java src/org/jempeg/manager/action/DownloadAction.java
--- original/org/jempeg/manager/action/DownloadAction.java	2004-02-01 09:30:38.000000000 -0600
+++ src/org/jempeg/manager/action/DownloadAction.java	2005-03-07 17:04:00.411654800 -0600
@@ -76,7 +76,8 @@
 		File downloadDir = null;
 
 		String downloadDirStr = myPropertiesManager.getProperty(JEmplodeProperties.DOWNLOAD_DIRECTORY_PROPERTY);
-		if (downloadDirStr != null && downloadDirStr.trim().length() > 0) {
+		boolean downloadLowBitRateBool = myPropertiesManager.getBooleanProperty(JEmplodeProperties.DOWNLOAD_LOW_BIT_RATE_PROPERTY);
+                if (downloadDirStr != null && downloadDirStr.trim().length() > 0) {
 			downloadDir = new File(downloadDirStr.trim());
 		} else {
 			File curDir;
@@ -115,7 +116,11 @@
 			}
 			TreePath path = new TreePath(new Object[] { playlist });
 			ISynchronizeClient synchronizeClient = myContext.getSynchronizeClient();
-			new SynchronizeUI(myContext.getPlayerDatabase(), synchronizeClient, myContext.getFrame()).downloadFilesInBackground(path, nodes, downloadDir, shouldUseHijack(synchronizeClient.getProtocolClient(new SilentProgressListener()).getConnection()), myContext.getDownloadFilesProgressListener());
+			new SynchronizeUI(myContext.getPlayerDatabase(), synchronizeClient, myContext.getFrame()
+                                          ).downloadFilesInBackground(path, nodes, downloadDir, 
+                                              shouldUseHijack(synchronizeClient.getProtocolClient(new SilentProgressListener()).getConnection()),
+                                              downloadLowBitRateBool,
+                                              myContext.getDownloadFilesProgressListener());
 		}
 	}
 
diff -urN original/org/jempeg/nodestore/.nbattrs src/org/jempeg/nodestore/.nbattrs
--- original/org/jempeg/nodestore/.nbattrs	1969-12-31 18:00:00.000000000 -0600
+++ src/org/jempeg/nodestore/.nbattrs	2005-03-04 19:06:45.879774400 -0600
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE attributes PUBLIC "-//NetBeans//DTD DefaultAttributes 1.0//EN" "http://www.netbeans.org/dtds/attributes-1_0.dtd">
+<attributes version="1.0">
+    <fileobject name="AbstractFIDNode.java">
+        <attr name="EA-OpenIDE-Connection" serialvalue="aced0005737200146a6176612e7574696c2e4c696e6b65644c6973740c29535d4a60882203000078707704000000017372002a6f72672e6f70656e6964652e6c6f61646572732e436f6e6e656374696f6e537570706f72742450616972055f8af6f04a3bd80200024c00047479706574002b4c6f72672f6f70656e6964652f636f6f6b6965732f436f6e6e656374696f6e436f6f6b696524547970653b4c000576616c75657400124c6a6176612f6c616e672f4f626a6563743b78707372002e6f72672e6e65746265616e732e6d6f64756c65732e6a6176612e4a617661436f6e6e656374696f6e732454797065a83dd01001306d7402000149000666696c746572787000000050737200436f72672e6e65746265616e732e6d6f64756c65732e6a6176612e4a617661446174614f626a6563742450657273697374656e74436f6e6e656374696f6e48616e646c65ba16f1d2dd4c1cb60200014c000e646174614e6f646548616e646c6574001f4c6f72672f6f70656e6964652f6e6f6465732f4e6f64652448616e646c653b7870737200296f72672e6f70656e6964652e6c6f61646572732e446174614e6f6465244f626a65637448616e646c655bd0f82e01811d2e0200025a0005636c6f6e654c00036f626a7400244c6f72672f6f70656e6964652f66696c6573797374656d732f46696c654f626a6563743b787000737200326f72672e6f70656e6964652e66696c6573797374656d732e416273747261637446696c654f626a656374245265706c616365896fa1bce4b5219f0200024c000866696c654e616d657400124c6a6176612f6c616e672f537472696e673b4c000666734e616d6571007e000f78707400276f72672f6a656d7065672f6e6f646573746f72652f46494452656d6f746554756e652e6a617661740014633a2f6a6176612f6a656d706c6f64652f73726378"/>
+        <attr name="class_dependency_java.io.Serializable" stringvalue="AbstractFIDNode"/>
+        <attr name="class_dependency_org.jempeg.nodestore.IFIDNode" stringvalue="AbstractFIDNode"/>
+        <attr name="class_dependency_org.jempeg.nodestore.event.INodeTagListener" stringvalue="AbstractFIDNode"/>
+    </fileobject>
+    <fileobject name="FIDRemoteTune.java">
+        <attr name="class_dependency_org.jempeg.nodestore.AbstractFIDNode" stringvalue="FIDRemoteTune"/>
+    </fileobject>
+    <fileobject name="IFIDNode.java">
+        <attr name="EA-OpenIDE-Connection" serialvalue="aced0005737200146a6176612e7574696c2e4c696e6b65644c6973740c29535d4a60882203000078707704000000017372002a6f72672e6f70656e6964652e6c6f61646572732e436f6e6e656374696f6e537570706f72742450616972055f8af6f04a3bd80200024c00047479706574002b4c6f72672f6f70656e6964652f636f6f6b6965732f436f6e6e656374696f6e436f6f6b696524547970653b4c000576616c75657400124c6a6176612f6c616e672f4f626a6563743b78707372002e6f72672e6e65746265616e732e6d6f64756c65732e6a6176612e4a617661436f6e6e656374696f6e732454797065a83dd01001306d7402000149000666696c746572787000000050737200436f72672e6e65746265616e732e6d6f64756c65732e6a6176612e4a617661446174614f626a6563742450657273697374656e74436f6e6e656374696f6e48616e646c65ba16f1d2dd4c1cb60200014c000e646174614e6f646548616e646c6574001f4c6f72672f6f70656e6964652f6e6f6465732f4e6f64652448616e646c653b7870737200296f72672e6f70656e6964652e6c6f61646572732e446174614e6f6465244f626a65637448616e646c655bd0f82e01811d2e0200025a0005636c6f6e654c00036f626a7400244c6f72672f6f70656e6964652f66696c6573797374656d732f46696c654f626a6563743b787000737200326f72672e6f70656e6964652e66696c6573797374656d732e416273747261637446696c654f626a656374245265706c616365896fa1bce4b5219f0200024c000866696c654e616d657400124c6a6176612f6c616e672f537472696e673b4c000666734e616d6571007e000f78707400296f72672f6a656d7065672f6e6f646573746f72652f41627374726163744649444e6f64652e6a617661740014633a2f6a6176612f6a656d706c6f64652f73726378"/>
+    </fileobject>
+    <fileobject name="RemoteImportFile.java">
+        <attr name="class_dependency_com.inzyme.filesystem.IImportFile" stringvalue="RemoteImportFile"/>
+    </fileobject>
+</attributes>
diff -urN original/org/jempeg/nodestore/FIDRemoteTune.java src/org/jempeg/nodestore/FIDRemoteTune.java
--- original/org/jempeg/nodestore/FIDRemoteTune.java	2004-09-18 19:13:58.000000000 -0500
+++ src/org/jempeg/nodestore/FIDRemoteTune.java	2005-03-04 19:25:37.053934400 -0600
@@ -24,7 +24,8 @@
 * @version $Revision: 1.4 $
 */
 public class FIDRemoteTune extends AbstractFIDNode {
-	static final long serialVersionUID = 434770252703075610L;
+	static final long serialVersionUID = 434770252703075610L;  
+        private boolean myLowBitRate;
 	
 	public FIDRemoteTune(PlayerDatabase _db, long _fid, NodeTags _tags) {
 		super(_db, _fid, _tags);
@@ -54,4 +55,8 @@
 		return true;
 	}
 
+  public long getLowBitRateFID(){
+      return super.getFID() + 2;
+  }  
+        
 }
diff -urN original/org/jempeg/nodestore/FIDStub.java src/org/jempeg/nodestore/FIDStub.java
--- original/org/jempeg/nodestore/FIDStub.java	2004-09-20 02:09:56.000000000 -0500
+++ src/org/jempeg/nodestore/FIDStub.java	2005-02-13 20:29:24.956963200 -0600
@@ -35,6 +35,10 @@
   public long getFID() {
     return myFID;
   }
+  
+  public void setLowBr() {
+      return;
+  }
 
   public int getGeneration() {
     return 0;
diff -urN original/org/jempeg/nodestore/RemoteImportFile.java src/org/jempeg/nodestore/RemoteImportFile.java
--- original/org/jempeg/nodestore/RemoteImportFile.java	2004-09-18 19:13:58.000000000 -0500
+++ src/org/jempeg/nodestore/RemoteImportFile.java	2005-03-07 19:46:46.540736000 -0600
@@ -1,33 +1,33 @@
 /**
-* Copyright (c) 2001, Mike Schrag & Daniel Zimmerman
-* All rights reserved.
-*
-* Redistribution and use in source and binary forms, with or without
-* modification, are permitted provided that the following conditions are met:
-*
-* Redistributions of source code must retain the above copyright notice,
-* this list of conditions and the following disclaimer.
-*
-* Redistributions in binary form must reproduce the above copyright notice,
-* this list of conditions and the following disclaimer in the documentation
-* and/or other materials provided with the distribution.
-*
-* Neither the name of Mike Schrag, Daniel Zimmerman, nor the names of any
-* other contributors may be used to endorse or promote products derived from
-* this software without specific prior written permission.
-*
-* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
-* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
-* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-* POSSIBILITY OF SUCH DAMAGE.
-*/
+ * Copyright (c) 2001, Mike Schrag & Daniel Zimmerman
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ *
+ * Neither the name of Mike Schrag, Daniel Zimmerman, nor the names of any
+ * other contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
 package org.jempeg.nodestore;
 
 import java.io.BufferedInputStream;
@@ -53,165 +53,165 @@
  * interface on an FID from a remote Empeg.  This will
  * actually provide a stream directly to an FID on the
  * Empeg.
- * 
+ *
  * @author Mike Schrag
  * @version $Revision: 1.4 $
  */
 public class RemoteImportFile implements IImportFile {
-	private String myID;
-	private IFIDNode myRemoteNode;
-	private IProtocolClient myProtocolClient;
-
-  public static RemoteImportFile createInstance(IFIDNode _remoteNode, IProtocolClient _protocolClient) {
-    RemoteImportFile remoteImportFile; 
-    if (_remoteNode instanceof FIDPlaylist) {
-      remoteImportFile = new RemoteImportFolder((FIDPlaylist)_remoteNode, _protocolClient); 
-    }
-    else {
-      remoteImportFile = new RemoteImportFile(_remoteNode, _protocolClient); 
-    }
-    return remoteImportFile;
-  }
-  
-	protected RemoteImportFile(IFIDNode _remoteNode, IProtocolClient _protocolClient) {
-		myRemoteNode = _remoteNode;
-		myProtocolClient = _protocolClient;
-	}
-  
-  public IProtocolClient getProtocolClient() {
-    return myProtocolClient;
-  }
-  
-  public Properties getTags() throws IOException {
-    return myRemoteNode.getTags().toProperties();
-  }
-
-	public synchronized Object getID() {
-		if (myID == null) {
-			myID = String.valueOf(myRemoteNode.getFID());
-		}
-		return myID;
-	}
-
-	public String getName() {
-		IFIDNode fidNode = getNode();
-		StringBuffer sb = new StringBuffer();
-		sb.append(fidNode.getTitle());
-		sb.append(TagValueRetriever.getValue(fidNode, DatabaseTags.EXTENSION_TAG));
-		return sb.toString();
-	}
-
-	public String getLocation() {
-		return null; // ??
-	}
-
-	public long getLength() {
-		IFIDNode fidNode = getNode();
-		int length = fidNode.getLength();
-		return length;
-	}
-
-	/**
-	* Returns an InputStream onto this RemoteFile.  This defaults to
-	* not using HiJack to return the stream.
-	*
-	* @returns an InputStream onto this RemoteFile
-	* @throws IOException if a suitable stream cannot be returned
-	*/
-	public InputStream getInputStream() throws IOException {
-		return getInputStream(false);
-	}
-
-	/**
-	* Returns an InputStream onto this RemoteFile.
-	*
-	* @param _useHijack whether or not to use HTTP w/ HiJack to download the file
-	* @returns an InputStream onto this RemoteFile
-	* @throws IOException if a suitable stream cannot be returned
-	*/
-	public InputStream getInputStream(boolean _useHijack) throws IOException {
-		try {
-			InputStream is;
-			IFIDNode remoteNode = getNode();
-			if (remoteNode instanceof FIDLocalFile) {
-				is = ((FIDLocalFile) remoteNode).getFile().getInputStream();
-			}
-			else {
-				if (_useHijack) {
-					InetAddress address = ((SocketConnection)myProtocolClient.getConnection()).getAddress();
-					String hostAddress = address.getHostAddress();
-
-					long fid = remoteNode.getFID();
-					String empegAddress = "http://" + hostAddress + "/empeg/fids" + remoteNode.getTags().getValue(DatabaseTags.DRIVE_TAG) + "/";
-					
-					try {
-						String fullHexString = StringUtils.pad(fid, 8, 16).toLowerCase();
-						URL u = new URL(empegAddress + "_" + fullHexString.substring(0, 5) + "/" + fullHexString.substring(5));
-						is = u.openStream();
-					}
-					catch (FileNotFoundException e) {
-						URL u = new URL(empegAddress + Long.toHexString(fid));
-						is = u.openStream();
-					}
-				}
-				else {
-					FIDInputStream fidInputStream = new FIDInputStream(myProtocolClient, myRemoteNode.getFID());
-					is = new BufferedInputStream(fidInputStream, myProtocolClient.getConnection().getPacketSize());
-				}
-			}
-			return is;
-		}
-		catch (Exception e) {
-			throw new ChainedIOException("Unable to get an input stream onto the requested FID.", e);
-		}
-	}
-
-	public SeekableInputStream getSeekableInputStream() throws IOException {
-		try {
-			FIDInputStream fidInputStream = new FIDInputStream(myProtocolClient, myRemoteNode.getFID());
-			return fidInputStream;
-		}
-		catch (Exception e) {
-			throw new ChainedIOException("Unable to get an input stream onto the requested FID.", e);
-		}
-	}
-
-	public IFIDNode getNode() {
-		return myRemoteNode;
-	}
-
-	public boolean isContainer() {
-		IFIDNode fidNode = getNode();
-		boolean container = (fidNode instanceof FIDPlaylist);
-		return container;
-	}
-
-	public int getSize() {
-		int size;
-		if (isContainer()) {
-			FIDPlaylist playlist = (FIDPlaylist) getNode();
-			size = playlist.size();
-		}
-		else {
-			size = 0;
-		}
-		return size;
-	}
-
-	public Object getValueAt(int _index) {
-		Object value;
-		if (isContainer()) {
-			FIDPlaylist playlist = (FIDPlaylist) getNode();
-			value = playlist.getNodeAt(_index);
-		}
-		else {
-			value = null;
-		}
-		return value;
-	}
-
-	public String toString() {
-		String toString = getName();
-		return toString;
-	}
+    private String myID;
+    private IFIDNode myRemoteNode;
+    private IProtocolClient myProtocolClient;
+    
+    public static RemoteImportFile createInstance(IFIDNode _remoteNode, IProtocolClient _protocolClient) {
+        RemoteImportFile remoteImportFile;
+        if (_remoteNode instanceof FIDPlaylist) {
+            remoteImportFile = new RemoteImportFolder((FIDPlaylist)_remoteNode, _protocolClient);
+        } else {
+            remoteImportFile = new RemoteImportFile(_remoteNode, _protocolClient);
+        }
+        return remoteImportFile;
+    }
+    
+    protected RemoteImportFile(IFIDNode _remoteNode, IProtocolClient _protocolClient) {
+        myRemoteNode = _remoteNode;
+        myProtocolClient = _protocolClient;
+    }
+    
+    public IProtocolClient getProtocolClient() {
+        return myProtocolClient;
+    }
+    
+    public Properties getTags() throws IOException {
+        return myRemoteNode.getTags().toProperties();
+    }
+    
+    public synchronized Object getID() {
+        if (myID == null) {
+            myID = String.valueOf(myRemoteNode.getFID());
+        }
+        return myID;
+    }
+    
+    public String getName() {
+        IFIDNode fidNode = getNode();
+        StringBuffer sb = new StringBuffer();
+        sb.append(fidNode.getTitle());
+        sb.append(TagValueRetriever.getValue(fidNode, DatabaseTags.EXTENSION_TAG));
+        return sb.toString();
+    }
+    
+    public String getLocation() {
+        return null; // ??
+    }
+    
+    public long getLength() {
+        IFIDNode fidNode = getNode();
+        int length = fidNode.getLength();
+        return length;
+    }
+    
+    /**
+     * Returns an InputStream onto this RemoteFile.  This defaults to
+     * not using HiJack to return the stream and to download high bit rate files.
+     *
+     * @returns an InputStream onto this RemoteFile
+     * @throws IOException if a suitable stream cannot be returned
+     */
+    public InputStream getInputStream() throws IOException {
+        return getInputStream(false, false);
+    }
+    
+    /**
+     * Returns an InputStream onto this RemoteFile.
+     *
+     * @param _useHijack whether or not to use HTTP w/ HiJack to download the file
+     * @returns an InputStream onto this RemoteFile
+     * @throws IOException if a suitable stream cannot be returned
+     */
+    public InputStream getInputStream(boolean _useHijack, boolean _lowBitRate) throws IOException {
+        try {
+            InputStream is;
+            IFIDNode remoteNode = getNode();
+            if (remoteNode instanceof FIDLocalFile) {
+                is = ((FIDLocalFile) remoteNode).getFile().getInputStream();
+            } else {
+                if (_useHijack) {
+                    InetAddress address = ((SocketConnection)myProtocolClient.getConnection()).getAddress();
+                    String hostAddress = address.getHostAddress();
+                    
+                    long fid = remoteNode.getFID();
+                    String empegAddress = "http://" + hostAddress + "/empeg/fids" + remoteNode.getTags().getValue(DatabaseTags.DRIVE_TAG) + "/";
+                    
+                    try {
+                        String fullHexString = StringUtils.pad(fid, 8, 16).toLowerCase();
+                        URL u = new URL(empegAddress + "_" + fullHexString.substring(0, 5) + "/" + fullHexString.substring(5));
+                        System.out.println(u.toString());
+                        is = u.openStream();
+                    } catch (FileNotFoundException e) {
+                        URL u = new URL(empegAddress + Long.toHexString(fid));
+                        is = u.openStream();
+                    }
+                } else {
+                    FIDInputStream fidInputStream; 
+                    if(_lowBitRate && (myRemoteNode instanceof FIDRemoteTune) ){
+                        fidInputStream = new FIDInputStream(myProtocolClient, 
+                           ((FIDRemoteTune)myRemoteNode).getLowBitRateFID());
+                    }
+                    else{
+                        fidInputStream = new FIDInputStream(myProtocolClient, myRemoteNode.getFID());
+                    }
+                    is = new BufferedInputStream(fidInputStream, myProtocolClient.getConnection().getPacketSize());
+                }
+            }
+            return is;
+        } catch (Exception e) {
+            throw new ChainedIOException("Unable to get an input stream onto the requested FID.", e);
+        }
+    }
+    
+    public SeekableInputStream getSeekableInputStream() throws IOException {
+        try {
+            FIDInputStream fidInputStream = new FIDInputStream(myProtocolClient, myRemoteNode.getFID());
+            return fidInputStream;
+        } catch (Exception e) {
+            throw new ChainedIOException("Unable to get an input stream onto the requested FID.", e);
+        }
+    }
+    
+    public IFIDNode getNode() {
+        return myRemoteNode;
+    }
+    
+    public boolean isContainer() {
+        IFIDNode fidNode = getNode();
+        boolean container = (fidNode instanceof FIDPlaylist);
+        return container;
+    }
+    
+    public int getSize() {
+        int size;
+        if (isContainer()) {
+            FIDPlaylist playlist = (FIDPlaylist) getNode();
+            size = playlist.size();
+        } else {
+            size = 0;
+        }
+        return size;
+    }
+    
+    public Object getValueAt(int _index) {
+        Object value;
+        if (isContainer()) {
+            FIDPlaylist playlist = (FIDPlaylist) getNode();
+            value = playlist.getNodeAt(_index);
+        } else {
+            value = null;
+        }
+        return value;
+    }
+    
+    public String toString() {
+        String toString = getName();
+        return toString;
+    }
 }
diff -urN original/org/jempeg/nodestore/event/.nbattrs src/org/jempeg/nodestore/event/.nbattrs
--- original/org/jempeg/nodestore/event/.nbattrs	1969-12-31 18:00:00.000000000 -0600
+++ src/org/jempeg/nodestore/event/.nbattrs	2005-03-04 18:59:06.999937600 -0600
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE attributes PUBLIC "-//NetBeans//DTD DefaultAttributes 1.0//EN" "http://www.netbeans.org/dtds/attributes-1_0.dtd">
+<attributes version="1.0">
+    <fileobject name="INodeTagListener.java">
+        <attr name="EA-OpenIDE-Connection" serialvalue="aced0005737200146a6176612e7574696c2e4c696e6b65644c6973740c29535d4a60882203000078707704000000017372002a6f72672e6f70656e6964652e6c6f61646572732e436f6e6e656374696f6e537570706f72742450616972055f8af6f04a3bd80200024c00047479706574002b4c6f72672f6f70656e6964652f636f6f6b6965732f436f6e6e656374696f6e436f6f6b696524547970653b4c000576616c75657400124c6a6176612f6c616e672f4f626a6563743b78707372002e6f72672e6e65746265616e732e6d6f64756c65732e6a6176612e4a617661436f6e6e656374696f6e732454797065a83dd01001306d7402000149000666696c746572787000000050737200436f72672e6e65746265616e732e6d6f64756c65732e6a6176612e4a617661446174614f626a6563742450657273697374656e74436f6e6e656374696f6e48616e646c65ba16f1d2dd4c1cb60200014c000e646174614e6f646548616e646c6574001f4c6f72672f6f70656e6964652f6e6f6465732f4e6f64652448616e646c653b7870737200296f72672e6f70656e6964652e6c6f61646572732e446174614e6f6465244f626a65637448616e646c655bd0f82e01811d2e0200025a0005636c6f6e654c00036f626a7400244c6f72672f6f70656e6964652f66696c6573797374656d732f46696c654f626a6563743b787000737200326f72672e6f70656e6964652e66696c6573797374656d732e416273747261637446696c654f626a656374245265706c616365896fa1bce4b5219f0200024c000866696c654e616d657400124c6a6176612f6c616e672f537472696e673b4c000666734e616d6571007e000f78707400296f72672f6a656d7065672f6e6f646573746f72652f41627374726163744649444e6f64652e6a617661740014633a2f6a6176612f6a656d706c6f64652f73726378"/>
+    </fileobject>
+</attributes>
diff -urN original/org/jempeg/nodestore/model/AbstractFIDPlaylistModel.java src/org/jempeg/nodestore/model/AbstractFIDPlaylistModel.java
--- original/org/jempeg/nodestore/model/AbstractFIDPlaylistModel.java	2004-09-20 10:03:38.000000000 -0500
+++ src/org/jempeg/nodestore/model/AbstractFIDPlaylistModel.java	2005-02-13 15:35:06.445270400 -0600
@@ -39,8 +39,8 @@
    */
   public synchronized Enumeration children() {
     ensureChildrenLoaded();
-    Enumeration enum = myChildren.elements();
-    return enum;
+    Enumeration enum2 = myChildren.elements();
+    return enum2;
   }
 
   public int getPlaylistIndexOf(Object _obj) {
diff -urN original/org/jempeg/nodestore/model/FIDPlaylistTreeNode.java src/org/jempeg/nodestore/model/FIDPlaylistTreeNode.java
--- original/org/jempeg/nodestore/model/FIDPlaylistTreeNode.java	2003-12-01 07:43:32.000000000 -0600
+++ src/org/jempeg/nodestore/model/FIDPlaylistTreeNode.java	2005-02-13 15:35:13.335177600 -0600
@@ -66,8 +66,8 @@
 	 */
 	public synchronized Enumeration children() {
 		ensureChildrenLoaded();
-		Enumeration enum = getChildrenVector().elements();
-		return enum;
+		Enumeration enum2 = getChildrenVector().elements();
+		return enum2;
 	}
 	
 	/**
diff -urN original/org/jempeg/protocol/.nbattrs src/org/jempeg/protocol/.nbattrs
--- original/org/jempeg/protocol/.nbattrs	1969-12-31 18:00:00.000000000 -0600
+++ src/org/jempeg/protocol/.nbattrs	2005-03-04 18:43:08.802116800 -0600
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE attributes PUBLIC "-//NetBeans//DTD DefaultAttributes 1.0//EN" "http://www.netbeans.org/dtds/attributes-1_0.dtd">
+<attributes version="1.0">
+    <fileobject name="FIDInputStream.java">
+        <attr name="class_dependency_com.inzyme.io.SeekableInputStream" stringvalue="FIDInputStream"/>
+    </fileobject>
+</attributes>
diff -urN original/org/jempeg/protocol/SynchronizeUtils.java src/org/jempeg/protocol/SynchronizeUtils.java
--- original/org/jempeg/protocol/SynchronizeUtils.java	2004-09-09 10:58:54.000000000 -0500
+++ src/org/jempeg/protocol/SynchronizeUtils.java	2005-03-06 13:42:25.896265600 -0600
@@ -48,7 +48,7 @@
    * @param _progressListener the progress listener to report download status to
    * @throws IOException if the download files
    */
-  public static void downloadFile(TreePath _path, IFIDNode _node, int _index, IProtocolClient _protocolClient, File _baseDir, FIDChangeSet _changeSet, int _packetSize, boolean _useHijack, IProgressListener _progressListener) throws IOException {
+  public static void downloadFile(TreePath _path, IFIDNode _node, int _index, IProtocolClient _protocolClient, File _baseDir, FIDChangeSet _changeSet, int _packetSize, boolean _useHijack, boolean _lowBitRate, IProgressListener _progressListener) throws IOException {
     if (!_progressListener.isStopRequested()) {
       PropertiesManager propertiesManager = PropertiesManager.getInstance();
       try {
@@ -88,7 +88,7 @@
           for (int i = 0; i < size; i ++ ) {
             IFIDNode node = playlist.getNodeAt(i);
             File newDir = (downloadFullPath) ? _baseDir : targetFile;
-            downloadFile(_path.pathByAddingChild(playlist), node, i, _protocolClient, newDir, _changeSet, _packetSize, _useHijack, _progressListener);
+            downloadFile(_path.pathByAddingChild(playlist), node, i, _protocolClient, newDir, _changeSet, _packetSize, _useHijack, _lowBitRate, _progressListener);
             _progressListener.operationStarted(ResourceBundleUtils.getUIString("download.downloadFile.operation", new Object[] {
               parsedName
             }));
@@ -119,7 +119,7 @@
                 parsedName
               }));
               RemoteImportFile remoteFile = RemoteImportFile.createInstance(_node, _protocolClient);
-              InputStream is = remoteFile.getInputStream(_useHijack);
+              InputStream is = remoteFile.getInputStream(_useHijack, _lowBitRate);
               try {
                 StreamUtils.copy(is, os, _packetSize, _node.getLength(), _progressListener);
               }
diff -urN original/org/jempeg/protocol/discovery/CompoundDiscoverer.java src/org/jempeg/protocol/discovery/CompoundDiscoverer.java
--- original/org/jempeg/protocol/discovery/CompoundDiscoverer.java	2004-06-28 13:05:48.000000000 -0500
+++ src/org/jempeg/protocol/discovery/CompoundDiscoverer.java	2005-02-13 15:35:25.092083200 -0600
@@ -38,10 +38,10 @@
 	
 	protected void startDiscovery0() {
 		Vector threadsVec = new Vector();
-		Enumeration enum = myDiscovererVec.elements();
-		while (isRunning() && enum.hasMoreElements()) {
+		Enumeration enum2 = myDiscovererVec.elements();
+		while (isRunning() && enum2.hasMoreElements()) {
 			try {
-				final IDiscoverer discoverer = (IDiscoverer) enum.nextElement();
+				final IDiscoverer discoverer = (IDiscoverer) enum2.nextElement();
 				Thread t = new Thread(new Runnable() {
 					public void run() {
 						discoverer.startDiscovery();
