diff --git editablefields.module editablefields.module
index 101a794..93b074b 100755
--- editablefields.module
+++ editablefields.module
@@ -80,7 +80,6 @@ function editablefields_field_formatter_info() {
  * Theme the editable field.
  */
 function theme_editablefields_formatter_editable($element) {
-  static $js_ready;
 
   $field_name = $element['#field_name'];
   $field = content_fields($field_name);
@@ -105,20 +104,9 @@ function theme_editablefields_formatter_editable($element) {
   else {
     $formatter_name = 'default';
     if ($formatter = _content_get_formatter($formatter_name, $field['type'])) {
-      if (!isset($js_ready)) {
-        $js_ready = TRUE;
-        drupal_add_js('misc/jquery.form.js');
-        drupal_add_js(drupal_get_path('module', 'editablefields') . '/editablefields.js');
-        drupal_add_css(drupal_get_path('module', 'editablefields') . '/editablefields.css');
-
-        $settings = array(
-          'url_html' => url('editablefields_html', array('absolute' => TRUE)),
-          'url_submit' => url('editablefields_submit', array('absolute' => TRUE)),
-          'url_view' => url('editablefields_view', array('absolute' => TRUE)),
-          'clicktoedit_message' => '<div class="editablefields_clicktoedit_message">'. t('[edit]') .'</div>',
-        );
-        drupal_add_js(array('editablefields' => $settings), 'setting');
-      }
+
+      editablefields_load_js();
+
       $theme = $formatter['module'] . '_formatter_' . $formatter_name;
       $class = "editablefields";
       if ($element['#formatter'] == 'clicktoedit') {
@@ -167,6 +155,13 @@ function editablefields_forms() {
  * Form builder callback.
  */
 function editablefields_form_builder(&$form_state, $node, $field_name, $delta) {
+  // If it is not CCK field.
+  if (strpos($field_name, 'field_') !== 0) {
+    // If it is not CCK field try to load appropriative plugin.
+    if ($function = editablefields_plugin_get_callback($field_name, 'editablefields_form_builder')) {
+      return $function($form_state, $node);
+    }
+  }
   $field = content_fields($field_name);
   $form = array('#node' => $node);
 //  $form_state = array('values' => array($field['field_name'] => $default_value));
@@ -205,8 +200,20 @@ function editablefields_view() {
   $nid = arg(1);
   $field_name = arg(2);
   $delta = arg(3);
-  $node = node_load($nid);
+
   drupal_set_header('Content-Type: text; charset=utf-8');
+
+  // If it is not CCK field.
+  if (strpos($field_name, 'field_') !== 0) {
+    if ($function = editablefields_plugin_get_callback($field_name, 'editablefields_view')) {
+      $object = new stdClass();
+      $object->content = $function($nid);
+      drupal_json($object);
+      exit();
+    }
+  }
+
+  $node = node_load($nid);
 //  $html = node_view($node, FALSE, FALSE, FALSE);
   // this required traversing the entire node to get the field (and doesn't work
   // for checkboxes anyway)
@@ -221,8 +228,8 @@ function editablefields_view() {
   // or we can simply use the 'defualt' formatter - which wont have the click to
   // edit inside it  - and is hard coded into this module (for now) anyway!
   $field['display_settings']['full']['format']='default';
-  $html=content_view_field($field,$node);
-  
+  $html=content_view_field($field, $node);
+
   $messages = drupal_get_messages('status', TRUE);
   if (count($messages) > 0) {
     foreach ($messages as $type => $messages) {
@@ -233,7 +240,7 @@ function editablefields_view() {
   }
 
   $object = new stdClass();
-  $object->content = $output . $html.drupal_render($node->content[$field_name]);
+  $object->content = $output . $html . drupal_render($node->content[$field_name]);
   drupal_json($object);
   exit();
 }
@@ -272,11 +279,22 @@ function editablefields_submit() {
   $field_name = $_POST['field'];
   $delta = $_POST['delta'];
 
+  // If it is not CCK field try to load appropriative plugin.
+  if (strpos($field_name, 'field_') !== 0) {
+    // Load plugin funciton, run it and exit.
+    if ($function = editablefields_plugin_get_callback($field_name, 'editablefields_submit')) {
+      $function($nid, $_POST[$field_name]);
+
+      drupal_set_header('Content-Type: text; charset=utf-8');
+      exit();
+    }
+  }
+
   $node = node_load($nid);
 
   $node_options = variable_get('node_options_'. $node->type, array('status', 'promote'));
   $node->revision = in_array('revision', $node_options);
-  if($node->revision) {
+  if ($node->revision) {
     $node->log = t('%field_name updated by editablefields.', array('%field_name' => $field_name));
   }
 
@@ -371,3 +389,49 @@ function editablefields_submit() {
   }
   exit();
 }
+
+/**
+ * Load required javascripts.
+ */
+function editablefields_load_js() {
+  static $js_ready;
+
+  if (!isset($js_ready)) {
+    $js_ready = TRUE;
+    drupal_add_js('misc/jquery.form.js');
+    drupal_add_js(drupal_get_path('module', 'editablefields') . '/editablefields.js');
+    drupal_add_css(drupal_get_path('module', 'editablefields') . '/editablefields.css');
+
+    $settings = array(
+      'url_html' => url('editablefields_html', array('absolute' => TRUE)),
+      'url_submit' => url('editablefields_submit', array('absolute' => TRUE)),
+      'url_view' => url('editablefields_view', array('absolute' => TRUE)),
+      'clicktoedit_message' => '<div class="editablefields_clicktoedit_message">'. t('[edit]') .'</div>',
+    );
+    drupal_add_js(array('editablefields' => $settings), 'setting');
+  }
+}
+
+/**
+ * Load plugin and return callback.
+ *
+ * @param <type> $field
+ */
+function editablefields_plugin_get_callback($field, $callback) {
+  if (!module_exists('ctools')) {
+    return;
+  }
+
+  $plugin = editablefields_get_plugin($field);
+  $result = ctools_plugin_get_function($plugin, $callback);
+  return $result;
+}
+
+
+/**
+ * Shortcut function to get a plugin.
+ */
+function editablefields_get_plugin($field) {
+  ctools_include('plugins');
+  return ctools_get_plugins('editablefields', 'fields', $field);
+}
