diff --git editablefields.module editablefields.module
index 7305c13..4d4f170 100755
--- editablefields.module
+++ editablefields.module
@@ -98,7 +98,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);
@@ -130,21 +129,8 @@ 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' => theme('editablefields_clicktoedit_message'),
-          'clicktoedit_message_empty' => theme('editablefields_clicktoedit_message_empty'),
-        );
-        drupal_add_js(array('editablefields' => $settings), 'setting');
-      }
+
+      editablefields_load_js();
 
       // [andreiashu] not sure how this works exactly but it does...
       if (content_handle('widget', 'multiple values', $field) != CONTENT_HANDLE_CORE) {
@@ -215,6 +201,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));
@@ -258,8 +251,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)
@@ -274,8 +279,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) {
@@ -286,7 +291,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();
 }
@@ -325,11 +330,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));
   }
 
@@ -491,3 +507,49 @@ function editablefields_file_insert($file) {
     node_save($node);
   }
 }
+
+/**
+ * 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);
+}
