diff --git a/modules/fields/atom_reference/atom_reference.css b/modules/fields/atom_reference/atom_reference.css
index 4fef707..9024275 100644
--- a/modules/fields/atom_reference/atom_reference.css
+++ b/modules/fields/atom_reference/atom_reference.css
@@ -7,3 +7,8 @@
   border: #ccc 2px dashed;
   padding: 2px;
 }
+
+.atom_reference_operations .buttons ul {
+  margin: 0;
+  padding: 0;
+}
diff --git a/modules/fields/atom_reference/atom_reference.js b/modules/fields/atom_reference/atom_reference.js
index 2fe8be6..3eb81e4 100644
--- a/modules/fields/atom_reference/atom_reference.js
+++ b/modules/fields/atom_reference/atom_reference.js
@@ -3,15 +3,57 @@
  *   Provides the JavaScript behaviors for the Atom Reference field.
  */
 (function($) {
+
+  var $edit_link_model = $('<a target="_blank">')
+    .html(Drupal.t('Edit'))
+    .addClass('ctools-use-modal ctools-modal-custom-style atom-reference-edit');
+  var $view_link_model = $('<a target="_blank">')
+    .html(Drupal.t('View'))
+    .addClass('atom-reference-view');
+
 Drupal.behaviors.atom_reference = {
-  attach: function(context) {
-    $("div.atom_reference_drop_zone:not(.atom_reference_processed)").each(function() {
+  attach: function(context, settings) {
+    var this_behavior_attach = this;
+
+    // Record if the edit target link modal frame is updated
+    $('.ctools-modal-content form').bind('formUpdated', function() {
+      this_behavior_attach['update_atom_reference_drop_zone'] = true;
+    });
+
+    // Update drop zone (especially when returning from the edit modal frame).
+    if (typeof(this.update_atom_reference_drop_zone) !== 'undefined') {
+      $('div.atom_reference_drop_zone.atom_reference_processed').each(function() {
+        var $this = $(this);
+        var rendering_context = $this.attr('data-rendering-context');
+        var match_atom_id = /<!-- scald=(\d+):.*-->/g.exec($this.html());
+        if (match_atom_id) {
+          var atom_id = match_atom_id[1];
+          delete Drupal.dnd.Atoms[atom_id]; // to force reload
+          Drupal.dnd.fetchAtom(rendering_context, atom_id, function() {
+            $this
+              .empty()
+              .append(Drupal.dnd.Atoms[atom_id].contexts[rendering_context]);
+          });
+        }
+      });
+    }
+
+    $("div.atom_reference_drop_zone:not(.atom_reference_processed)", context).each(function() {
       var $this = $(this);
-      var $reset = $("<input type='button' />")
-        .val(Drupal.t('Delete'))
-        .click(function() {
-          $(this)
-            .hide()
+
+      // Build operations (remove reference, edit and view) structure.
+      var $operation_wrapper = $('<div class="atom_reference_operations">');
+      var $operation_buttons = $('<div id="ctools-button-0" class="buttons ctools-no-js ctools-button">')
+        .append('<div class="ctools-link"><a href="#" class="ctools-twisty ctools-text">' + Drupal.t('Operation') + '</a></div>')
+        .append('<div class="ctools-content"><ul><li class="remove"><li class="edit"><li class="view"></ul></div>')
+        .prependTo($operation_wrapper);
+
+      // Add the remove link
+      $('<a href="#" />')
+        .html(Drupal.t('Remove'))
+        .click(function(e) {
+          e.preventDefault();
+          $operation_buttons
             .closest('div.form-item')
             .find('input:text')
             .val('')
@@ -19,33 +61,109 @@ Drupal.behaviors.atom_reference = {
             .find('div.atom_reference_drop_zone')
             .empty()
             .append(Drupal.t('Drop a resource here'))
+            .end()
+            .find('div.atom_reference_operations')
+            .hide();
+        })
+        .appendTo($operation_buttons.find('li.remove'));
+
+      var match_atom_id = /<!-- scald=(\d+):.*-->/g.exec($this.html());
+      if (match_atom_id) {
+        var atom_id = match_atom_id[1];
+
+        Drupal.dnd.fetchAtom('', atom_id, function() {
+
+          // Add the edit link
+          if ($.grep(Drupal.dnd.Atoms[atom_id].actions, function(e){ return e == 'edit'; }).length > 0) {
+            // Permission granted for edit
+
+            $edit_link_model.clone()
+              .attr('href', settings.basePath + 'atom/' + atom_id + '/edit/nojs')
+              .appendTo($operation_buttons.find('li.edit'));
+            Drupal.behaviors.ZZCToolsModal.attach($operation_buttons);
+            $operation_buttons.addClass('ctools-dropbutton');
+          }
+
+          // Add the view link
+          if ($.grep(Drupal.dnd.Atoms[atom_id].actions, function(e){ return e == 'view'; }).length > 0) {
+            // Permission granted for view
+
+            $view_link_model.clone()
+              .attr('href', settings.basePath + 'atom/' + atom_id)
+              .appendTo($operation_buttons.find('li.view'));
+            $operation_buttons.addClass('ctools-dropbutton');
+          }
+
+          Drupal.attachBehaviors($operation_buttons);
         });
-      // If the element doesn't have a value yet, hide the Delete button
+      }
+
+      // If the element doesn't have a value yet, hide the operations wrapper
       // by default
       if (!$this.closest('div.form-item').find('input:text').val()) {
-        $reset.css('display', 'none');
+        $operation_wrapper.css('display', 'none');
       }
       $this
         .addClass('atom_reference_processed')
         .bind('dragover', function(e) {e.preventDefault();})
         .bind('dragenter', function(e) {e.preventDefault();})
         .bind('drop', function(e) {
-          var dt = Drupal.dnd.currentAtom.replace(/^\[scald=(\d+).*$/, '$1');
-          var ret = Drupal.atom_reference.droppable(dt, this);
+          var ressource_id = e.originalEvent.dataTransfer.getData('Text').replace(/^\[scald=(\d+).*$/, '$1');
+          var ret = Drupal.atom_reference.droppable(ressource_id, this);
           var $this = $(this);
+
           if (ret.found && ret.keepgoing) {
-            var context = $this.closest('div.form-item').find('input:text').data('dnd-context');
-            Drupal.dnd.fetchAtom(context, dt, function() {
+            var rendering_context = $this.attr('data-rendering-context');
+
+            // Display and set id of dropped atom
+            Drupal.dnd.fetchAtom(rendering_context, ressource_id, function() {
               $this
                 .empty()
-                .append(Drupal.dnd.Atoms[dt].contexts[context])
+                .append(Drupal.dnd.Atoms[ressource_id].contexts[rendering_context])
                 .closest('div.form-item')
                 .find('input:text')
-                .val(dt)
+                .val(ressource_id)
                 .end()
-                .find('input:button')
+                .find('.atom_reference_operations')
                 .show();
             });
+
+            // Process atom's operation links (edit and view) rendering
+            var $operation_buttons = $this.closest('.form-item')
+              .find('.atom_reference_operations').show()
+              .find('.buttons');
+            $operation_buttons
+              .removeClass('ctools-dropbutton')
+              .removeClass('ctools-dropbutton-processed')
+              .removeClass('ctools-button-processed')
+              .find('li.edit, li.view').empty();
+
+            Drupal.dnd.fetchAtom('', ressource_id, function() {
+              // Process Edit link
+              if ($.grep(Drupal.dnd.Atoms[ressource_id].actions, function(e){ return e == 'edit'; }).length > 0) {
+                // Permission granted for edit
+
+                var atom_edit_link = Drupal.settings.basePath + 'atom/' + ressource_id + '/edit/nojs';
+                $edit_link_model.clone()
+                  .attr('href', atom_edit_link)
+                  .appendTo($operation_buttons.find('li.edit'));
+                Drupal.behaviors.ZZCToolsModal.attach($operation_buttons);
+                $operation_buttons.addClass('ctools-dropbutton');
+              }
+
+              // Process View link
+              if ($.grep(Drupal.dnd.Atoms[ressource_id].actions, function(e){ return e == 'view'; }).length > 0) {
+                // Permission granted for view
+
+                var atom_view_link = Drupal.settings.basePath + 'atom/' + ressource_id;
+                $view_link_model.clone()
+                  .attr('href', atom_view_link)
+                  .appendTo($operation_buttons.find('li.view'));
+                $operation_buttons.addClass('ctools-dropbutton')
+              }
+
+              Drupal.attachBehaviors($operation_buttons);
+            });
           }
           else {
             var placeholder = Drupal.t("You can't drop a resource of type %type in this field", {'%type': ret.type});
@@ -53,13 +171,14 @@ Drupal.behaviors.atom_reference = {
           }
           e.stopPropagation();
           e.preventDefault();
+
           return false;
         })
         .closest('div.form-item')
         .find('input')
         .css('display', 'none')
         .end()
-        .append($reset);
+        .append($operation_wrapper);
     });
   }
 }
diff --git a/modules/fields/atom_reference/atom_reference.module b/modules/fields/atom_reference/atom_reference.module
index 27effec..7c3fefc 100644
--- a/modules/fields/atom_reference/atom_reference.module
+++ b/modules/fields/atom_reference/atom_reference.module
@@ -16,9 +16,12 @@ function atom_reference_library() {
     'version' => '1.x',
     'js' => array(
       $path . '/atom_reference.js' => array(),
+      drupal_get_path('module', 'ctools') . '/js/dropbutton.js' => array(),
     ),
     'css' => array(
       $path . '/atom_reference.css' => array(),
+      drupal_get_path('module', 'ctools') . '/css/dropbutton.css' => array(),
+      drupal_get_path('module', 'ctools') . '/css/button.css' => array(),
     ),
   );
 
@@ -58,9 +61,27 @@ function atom_reference_field_instance_settings_form($field, $instance) {
     '#title' => t('Atom types that can be referenced'),
     '#multiple' => TRUE,
     '#options' => $options,
-    '#default_value' => $instance['settings']['referencable_types']
+    '#default_value' => $instance['settings']['referencable_types'],
   );
 
+  $rendering_context = isset($instance['settings']['rendering_context']) ? $instance['settings']['rendering_context'] : variable_get('dnd_context_default', 'sdl_editor_representation');
+  $form['rendering_context'] = array(
+    '#type' => 'select',
+    '#title' => t('Rendering context'),
+    '#options' => array(),
+    '#default_value' => $rendering_context,
+    '#description' => t('Scald rendering context to be displayed in the edit form.'),
+  );
+
+  $contexts = scald_contexts();
+  foreach ($contexts as $name => $context) {
+    if (empty($context['hidden']) && $name !== 'sdl_library_item') {
+      $form['rendering_context']['#options'][$name] = $context['title'];
+    }
+  }
+
+
+
   return $form;
 }
 
@@ -282,18 +303,24 @@ function atom_reference_field_referenceable_types($instance) {
  * on the fly, depending on the field being filled.
  */
 function atom_reference_field_widget_form_process(&$element) {
-  // Get the default value, and format the placeholder accordingly.
+  // Get the default value, rendering context and format the placeholder accordingly.
+  $info = field_info_instances($element['#entity_type'], $element['#bundle']);
+  $rendering_context = variable_get('dnd_context_default', 'sdl_editor_representation');
+  if (isset($info[$element['#field_name']]['settings']['rendering_context'])) {
+    $rendering_context = $info[$element['#field_name']]['settings']['rendering_context'];
+  }
+
   $default = $element['#value'];
   if ($default) {
-    $prefix = '<div class="atom_reference_drop_zone">' . scald_render($default, $element['#preview_context']) .'</div>';
+    $prefix = '<div class="atom_reference_drop_zone" data-rendering-context="' . $rendering_context . '">' . scald_render($default, $rendering_context) . '</div>';
   }
   else {
     $placeholder = t('Drop a resource from Scald media library here.');
-    $prefix = '<div class="atom_reference_drop_zone"><em>' . $placeholder . '</em></div>';
+    $prefix = '<div class="atom_reference_drop_zone" data-rendering-context="' . $rendering_context . '"><em>' . $placeholder . '</em></div>';
   }
   $element['#field_prefix'] = $prefix;
-  return $element;
 
+  return $element;
 }
 
 /**
