diff --git a/mediaelement.module b/mediaelement.module
index 7c3cdd2..00eded9 100644
--- a/mediaelement.module
+++ b/mediaelement.module
@@ -73,6 +73,8 @@ function mediaelement_field_formatter_info() {
       'controls' => variable_get('mediaelement_video_default_controls', TRUE),
       'width' => variable_get('mediaelement_video_default_width', '640'),
       'height' => variable_get('mediaelement_video_default_height', '385'),
+      'autoplay' => variable_get('mediaelement_video_autoplay', FALSE),
+      'loop' => variable_get('mediaelement_video_loop', FALSE),
       'download_link' => variable_get('mediaelement_video_default_download_link', FALSE),
       'download_text' => variable_get('mediaelement_video_default_download_text', t('Download')),
     ),
@@ -85,6 +87,8 @@ function mediaelement_field_formatter_info() {
       'controls' => variable_get('mediaelement_audio_default_controls', TRUE),
       'width' => variable_get('mediaelement_audio_default_width', '300'),
       'height' => variable_get('mediaelement_audio_default_height', '30'),
+      'autoplay' => variable_get('mediaelement_audio_autoplay', FALSE),
+      'loop' => variable_get('mediaelement_audio_loop', FALSE),
       'download_link' => variable_get('mediaelement_audio_default_download_link', FALSE),
       'download_text' => variable_get('mediaelement_audio_default_download_text', t('Download')),
     ),
@@ -103,6 +107,9 @@ function mediaelement_field_formatter_view($entity_type, $entity, $field, $insta
   $element = array();
   $path = drupal_get_path('module', 'mediaelement');
   foreach ($items as $delta => $item) {
+    // Support the link field type which stores it's data in 'url'.
+    $src = ($field['type'] == 'link_field') ? $item['url'] : $item['uri'];
+
     $settings = $display['settings'];
     $js_settings = array();
     $js_settings['opts'] = array();
@@ -119,7 +126,7 @@ function mediaelement_field_formatter_view($entity_type, $entity, $field, $insta
     $class = 'mediaelement-formatter-identifier-' . time() . '-' . $id++;
     $element[$delta] = array(
       '#attributes' => array(
-        'src' => file_create_url($item['uri']),
+        'src' => file_create_url($src),
         'class' => $class,
       ),
       '#settings' => $settings,
@@ -131,7 +138,7 @@ function mediaelement_field_formatter_view($entity_type, $entity, $field, $insta
         ),
       ),
     );
-    if ($settings['controls']) {
+    if (isset($settings['controls']) && $settings['controls']) {
       $element[$delta]['#attributes']['controls'] = 'controls';
     }
 
@@ -139,9 +146,21 @@ function mediaelement_field_formatter_view($entity_type, $entity, $field, $insta
       $element[$delta]['#theme'] = 'mediaelement_video';
       $element[$delta]['#attributes']['height'] = $display['settings']['height'];
       $element[$delta]['#attributes']['width'] = $display['settings']['width'];
+      if (isset($display['settings']['autoplay']) && $display['settings']['autoplay']) {
+        $element[$delta]['#attributes']['autoplay'] = 'autoplay'; //autoplay is boolean attribute, i.e. it only needs to be present. http://www.w3.org/TR/html5/media-elements.html#attr-media-autoplay
+      }
+      if (isset($display['settings']['loop']) && $display['settings']['loop']) {
+        $element[$delta]['#attributes']['loop'] = 'loop';
+      }
     }
     elseif ($display['type'] == 'mediaelement_audio') {
       $element[$delta]['#theme'] = 'mediaelement_audio';
+      if (isset($display['settings']['autoplay']) && $display['settings']['autoplay']) {
+        $element[$delta]['#attributes']['autoplay'] = '';
+      }
+      if (isset($display['settings']['loop']) && $display['settings']['loop']) {
+        $element[$delta]['#attributes']['loop'] = '';
+      }
     }
   }
   return $element;
@@ -187,39 +206,51 @@ function theme_mediaelement_audio($variables) {
 function mediaelement_field_formatter_settings_form($field, $instance, $view_mode, $form, &$form_state) {
   $display = $instance['display'][$view_mode];
   $settings = $display['settings'];
+  $element = array();
 
-  $form['controls'] = array(
+  $element['controls'] = array(
     '#title' => t('Controls'),
     '#type' => 'checkbox',
     '#default_value' => $settings['controls'],
   );
 
-  $form['width'] = array(
+  $element['width'] = array(
     '#title' => t('Width'),
     '#type' => 'textfield',
     '#default_value' => $settings['width'],
-    '#options' => $link_types,
   );
 
-  $form['height'] = array(
+  $element['height'] = array(
     '#title' => t('Height'),
     '#type' => 'textfield',
     '#default_value' => $settings['height'],
   );
 
-  $form['download_link'] = array(
+  $element['autoplay'] = array(
+    '#title' => t('Autoplay'),
+    '#type' => 'checkbox',
+    '#default_value' => $settings['autoplay'],
+  );
+
+  $element['loop'] = array(
+    '#title' => t('Loop'),
+    '#type' => 'checkbox',
+    '#default_value' => $settings['loop'],
+  );
+
+  $element['download_link'] = array(
     '#title' => t('Download Link'),
     '#type' => 'checkbox',
     '#default_value' => $settings['download_link'],
   );
 
-  $form['download_text'] = array(
+  $element['download_text'] = array(
     '#title' => t('Download Link Text'),
     '#type' => 'textfield',
     '#default_value' => $settings['download_text'],
   );
 
-  return $form;
+  return $element;
 }
 
 /**
@@ -228,5 +259,7 @@ function mediaelement_field_formatter_settings_form($field, $instance, $view_mod
 function mediaelement_field_formatter_settings_summary($field, $instance, $view_mode) {
   $display = $instance['display'][$view_mode];
   $settings = $display['settings'];
-  return t('Width: @width px, Height: @height px', array('@width' => $settings['width'], '@height' => $settings['height']));
+  $autoplay = (isset($settings['autoplay']) && $settings['autoplay']) ? t('Yes') : t('No');;
+  $loop = (isset($settings['loop']) && $settings['loop']) ? t('Yes') : t('No');;
+  return t('Width: @width px, Height: @height px, Autoplay: @autoplay, Loop: @loop', array('@width' => $settings['width'], '@height' => $settings['height'], '@autoplay' => $autoplay, '@loop' => $loop));
 }
