diff --git a/filefield_sources.js b/filefield_sources.js
index 88b9626..3f52fa8 100644
--- a/filefield_sources.js
+++ b/filefield_sources.js
@@ -1,5 +1,7 @@
 (function ($) {
 
+var noPlaceholder = !('placeholder' in document.createElement('input'));
+
 /**
  * Behavior to add source options to configured fields.
  */
@@ -28,7 +30,9 @@ Drupal.behaviors.fileFieldSources.attach = function(context, settings) {
 
       // Add the active class.
       $(this).addClass('active');
-      Drupal.fileFieldSources.updateHintText($fileFieldElement.get(0));
+      if (noPlaceholder) {
+        Drupal.fileFieldSources.updateHintText($fileFieldElement.get(0));
+      }
     });
 
     // Clipboard support.
@@ -39,10 +43,10 @@ Drupal.behaviors.fileFieldSources.attach = function(context, settings) {
 
     // Hide all the other upload mechanisms on page load.
     $fileFieldElement.find('div.filefield-source', this).css('display', 'none');
-    $(this).find('a:first').addClass('active');
+    $(this).find('a:first').click();
   });
 
-  if (context === document) {
+  if (context === document && noPlaceholder) {
     $('form').submit(function() {
       Drupal.fileFieldSources.removeHintText();
     });
diff --git a/filefield_sources.module b/filefield_sources.module
index 4ca5796..59bffd3 100644
--- a/filefield_sources.module
+++ b/filefield_sources.module
@@ -126,21 +126,30 @@ function filefield_sources_field_process($element, &$form_state, $form) {
     return $element;
   }
 
+  // Load sources & upload.
+  $sources = filefield_sources_info(TRUE);
+  $enabled_sources = array_filter($instance['widget']['settings']['filefield_sources']['filefield_sources']) + array('upload' => 1);
+  $element['#fieldfield_sources'] = array_intersect_key($sources, $enabled_sources);
+
+  // Don't do anything else if only Upload is active.
+  if (array_keys($element['#fieldfield_sources']) == array('upload')) {
+    return $element;
+  }
+
   // Do all processing as needed by each source.
-  $sources = filefield_sources_info();
-  $enabled_sources = $instance['widget']['settings']['filefield_sources']['filefield_sources'];
-  foreach ($sources as $source_name => $source) {
-    if (empty($enabled_sources[$source_name])) {
-      unset($sources[$source_name]);
-    }
-    elseif (isset($source['process'])) {
-      $function = $source['process'];
-      $element = $function($element, $form_state, $form);
+  foreach ($element['#fieldfield_sources'] as $source_name => $source) {
+    if (isset($source['process'])) {
+      // This isset() might look like overkill, but that's what you get when you have a processor process
+      // itself. With this check you can have one processor unset another and the other won't process.
+      if (isset($element['#fieldfield_sources'][$source_name])) {
+        $function = $source['process'];
+        $element = $function($element, $form_state, $form);
+      }
     }
   }
 
-  // Exit out if not adding any sources.
-  if (empty($sources)) {
+  // Don't do anything else if no custom sources are left.
+  if (empty($element['#fieldfield_sources']) || array_keys($element['#fieldfield_sources']) == array('upload')) {
     return $element;
   }
 
@@ -182,7 +191,7 @@ function filefield_sources_field_process($element, &$form_state, $form) {
   if (empty($element['fid']['#value'])) {
     $element['filefield_sources_list'] = array(
       '#type' => 'markup',
-      '#markup' => theme('filefield_sources_list', array('element' => $element, 'sources' => $sources)),
+      '#markup' => theme('filefield_sources_list', array('element' => $element)),
       '#weight' => -20,
     );
   }
@@ -298,9 +307,19 @@ function filefield_sources_invoke_all($method, &$params) {
 /**
  * Load hook_filefield_sources_info() data from all modules.
  */
-function filefield_sources_info() {
+function filefield_sources_info($include_default = FALSE) {
   $info = module_invoke_all('filefield_sources_info');
+
+  if ($include_default) {
+    $upload = array(
+      'label' => t('Upload'),
+      'description' => t('Upload a file from your computer.'),
+      'weight' => -1,
+    );
+    $info = array('upload' => $upload) + $info;
+  }
   drupal_alter('filefield_sources_info', $info);
+
   uasort($info, '_filefield_sources_sort');
   return $info;
 }
@@ -529,20 +548,38 @@ function filefield_sources_clean_filename($filepath, $extensions) {
  */
 function theme_filefield_sources_list($variables) {
   $element = $variables['element'];
-  $sources = $variables['sources'];
+  $sources = $element['#fieldfield_sources'];
 
-  $links = array();
+  // Don't show links if there's only 1 source.
+  if (count($sources) <= 1) {
+    $source_name = key($sources);
 
-  // Add the default "Upload" since it's not in our list.
-  $default['upload'] = array(
-    'label' => t('Upload'),
-    'description' => t('Upload a file from your computer.'),
-  );
-  $sources = array_merge($default, $sources);
+    // Don't show anything if it's the default Upload source.
+    if (isset($sources['upload'])) {
+      return '';
+    }
+
+    // Show the description if it's a custom source.
+    if (isset($sources[$source_name]['description'])) {
+      return '<div class="filefield-sources-single-description description">' . check_plain($sources[$source_name]['description']) . '</div>';
+    }
+
+    return '';
+  }
 
+  $links = array();
   foreach ($sources as $name => $source) {
-    $links[] = '<a href="#" onclick="return false;" title="' . $source['description'] . '" id="' . $element['#id'] . '-' . $name . '-source" class="filefield-source filefield-source-' . $name . '">' . $source['label'] . '</a>';
+    // This allows for other sources to have attributes and to be extended by other modules. It
+    // also takes care of html encoding.
+    $attributes = isset($source['attributes']) ? $source['attributes'] : array();
+    $attributes['href'] = '#';
+    $attributes['onclick'] = 'return false';
+    $attributes['title'] = $source['description'];
+    $attributes['id'] = $element['#id'] . '-' . $name . '-source';
+    $attributes['class'] = array('filefield-source', 'filefield-source-' . $name);
+    $links[] = '<a' . drupal_attributes($attributes) . '>' . $source['label'] . '</a>';
   }
+
   return '<div class="filefield-sources-list">' . implode(' | ', $links) . '</div>';
 }
 
diff --git a/sources/reference.inc b/sources/reference.inc
index b01de1e..9c589a2 100644
--- a/sources/reference.inc
+++ b/sources/reference.inc
@@ -109,6 +109,9 @@ function filefield_source_reference_process($element, &$form_state, $form) {
     '#type' => 'textfield',
     '#autocomplete_path' => 'file/reference/' . $element['#entity_type'] . '/' . $element['#bundle'] . '/' . $element['#field_name'],
     '#description' => filefield_sources_element_validation_help($element['#upload_validators']),
+    '#attributes' => array(
+      'placeholder' => FILEFIELD_SOURCE_REFERENCE_HINT_TEXT,
+    ),
   );
 
   $element['filefield_reference']['select'] = array(
diff --git a/sources/remote.inc b/sources/remote.inc
index 0818553..4756c0d 100644
--- a/sources/remote.inc
+++ b/sources/remote.inc
@@ -81,6 +81,9 @@ function filefield_source_remote_process($element, &$form_state, $form) {
   $element['filefield_remote']['url'] = array(
     '#type' => 'textfield',
     '#description' => filefield_sources_element_validation_help($element['#upload_validators']),
+    '#attributes' => array(
+      'placeholder' => FILEFIELD_SOURCE_REMOTE_HINT_TEXT,
+    ),
     '#maxlength' => NULL,
   );
 
