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 ca6876b..23bb7ea 100644
--- a/modules/fields/atom_reference/atom_reference.js
+++ b/modules/fields/atom_reference/atom_reference.js
@@ -3,15 +3,56 @@
  *   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 atom_reference_attach = this;
+
+    // Record if the edit target link modal frame is updated
+    $('.ctools-modal-content form').bind('formUpdated', function() {
+      atom_reference_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 dnd_context = $this.attr('data-dnd-context');
+        var match_atom_id = /<!-- scald=(\d+):.*-->/g.exec($this.html());
+        if (match_atom_id) {
+          var atom_id = match_atom_id[1];
+          Drupal.dnd.fetchAtom(dnd_context, atom_id, function() {
+            $this
+              .empty()
+              .append(Drupal.dnd.Atoms[atom_id].contexts[dnd_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 Remove button and Edit/View links structure
+      var $operation_wrapper = $('<div class="atom_reference_operations">');
+      var $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);
+
+      // Remove button
+      $('<a href="#" />')
+        .html(Drupal.t('Remove'))
+        .click(function(e) {
+          e.preventDefault();
+          $buttons
             .closest('div.form-item')
             .find('input:text')
             .val('')
@@ -19,11 +60,45 @@ 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($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() {
+
+          // 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($buttons.find('li.edit'));
+            Drupal.behaviors.ZZCToolsModal.attach($buttons);
+            $buttons.addClass('ctools-dropbutton');
+          }
+
+          // 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($buttons.find('li.view'));
+            $buttons.addClass('ctools-dropbutton');
+          }
         });
-      // 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')
@@ -34,15 +109,18 @@ Drupal.behaviors.atom_reference = {
           var ret = Drupal.atom_reference.droppable(dt, this);
           var $this = $(this);
           if (ret.found && ret.keepgoing) {
-            $this
-              .empty()
-              .append(Drupal.dnd.Atoms[dt].editor)
-              .closest('div.form-item')
-              .find('input:text')
-              .val(dt)
-              .end()
-              .find('input:button')
-              .show();
+            var dnd_context = $this.attr('data-dnd-context');
+            Drupal.dnd.fetchAtom(dnd_context, dt, function() {
+              $this
+                .empty()
+                .append(Drupal.dnd.Atoms[dt].contexts[dnd_context])
+                .closest('div.form-item')
+                .find('input:text')
+                .val(dt)
+                .end()
+                .find('input:button')
+                .show();
+            });
           }
           else {
             var placeholder = Drupal.t("You can't drop a resource of type %type in this field", {'%type': ret.type});
@@ -56,7 +134,7 @@ Drupal.behaviors.atom_reference = {
         .find('input')
         .css('display', 'none')
         .end()
-        .append($reset);
+        .append($operation_wrapper);
     });
   }
 }
@@ -71,6 +149,34 @@ if (!Drupal.atom_reference) {
       if (jQuery.inArray(type, accept) == -1) {
         retVal.keepgoing = false;
       }
+
+      // Process atom's operation links
+      var $buttons = $(field).closest('.form-item').find('.buttons');
+      $buttons.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($buttons.find('li.edit'));
+          Drupal.behaviors.ZZCToolsModal.attach($buttons);
+        }
+
+        // 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($buttons.find('li.view'));
+        }
+      });
+
       retVal.type = type;
     }
     else {
diff --git a/modules/fields/atom_reference/atom_reference.module b/modules/fields/atom_reference/atom_reference.module
index b175a07..df786a5 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(),
     ),
   );
 
@@ -187,7 +190,6 @@ function atom_reference_field_widget_form(&$form, &$form_state, $field, $instanc
   $element['#process'][] = 'atom_reference_field_widget_form_process';
 
   // Attach our JS and CSS to the element
-  $path = drupal_get_path('module', 'atom_reference');
   $element['#attached'] = array('library' => array(array('atom_reference', 'library')));
 
   return array('sid' => $element);
@@ -216,13 +218,16 @@ function atom_reference_field_referenceable_types($instance) {
  */
 function atom_reference_field_widget_form_process(&$element) {
   // Get the default value, and format the placeholder accordingly.
+  $info = field_info_instances($element['#entity_type'], $element['#bundle']);
+  $context = $info[$element['#field_name']]['display']['default']['type'];
+
   $default = $element['#value'];
   if ($default) {
-    $prefix = '<div class="atom_reference_drop_zone">' . scald_render($default, variable_get('dnd_context_default', 'sdl_editor_representation')) .'</div>';
+    $prefix = '<div class="atom_reference_drop_zone" data-dnd-context="' . $context . '">' . scald_render($default, $context) . '</div>';
   }
   else {
     $placeholder = t('Drop a resource here');
-    $prefix = '<div class="atom_reference_drop_zone"><em>' . $placeholder . '</em></div>';
+    $prefix = '<div class="atom_reference_drop_zone" data-dnd-context="' . $context . '"><em>' . $placeholder . '</em></div>';
   }
   $element['#field_prefix'] = $prefix;
   return $element;
