diff --git a/workflow_fields.install b/workflow_fields.install
index 0d1036c..2d371a7 100644
--- a/workflow_fields.install
+++ b/workflow_fields.install
@@ -76,11 +76,23 @@ function workflow_fields_update_6004() {
   return $ret;
 }
 
+function workflow_fields_update_7100() {
+  $ret = array();
+
+  $schema = drupal_get_schema('workflow_fields');
+  $entity_field = $schema['fields']['entity'];
+  $entity_field['initial'] = 'node';
+  db_add_field('workflow_fields', 'entity', $entity_field);
+
+  return $ret;
+}
+
 function workflow_fields_schema() {
   $schema['workflow_fields'] = array(
     'fields' => array(
       'sid' => array('type' => 'int', 'not null' => TRUE, 'default' => 0),
       'name' => array('type' => 'varchar', 'length' => 100, 'not null' => TRUE),
+      'entity' => array('type' => 'varchar', 'length' => 100, 'not null' => TRUE),
       'type' => array('type' => 'varchar', 'length' => 100, 'not null' => TRUE),
       'visible_roles' => array('type' => 'text', 'not null' => FALSE),
       'editable_roles' => array('type' => 'text', 'not null' => FALSE),
diff --git a/workflow_fields.module b/workflow_fields.module
index d6f5404..dc15815 100644
--- a/workflow_fields.module
+++ b/workflow_fields.module
@@ -37,7 +37,7 @@ function workflow_fields_permission() {
  */
 function workflow_fields_form_workflow_admin_ui_form($form, &$form_state, $workflow, $sid) {
   $wid = $workflow->wid;
-  $state = workflow_get_workflow_states_by_sid($sid);
+  $state = workflow_state_load($sid);
 
   // Make sure the state actually belongs to the workflow.
   if ($state && $state->wid == $workflow->wid) {
@@ -47,7 +47,29 @@ function workflow_fields_form_workflow_admin_ui_form($form, &$form_state, $workf
     drupal_set_title(t('Fields in state:') . ' ' . $state->state);
 
     // Get all types that are mapped to this workflow.
-    $types = workflow_get_workflow_type_map_by_wid($wid);
+    if (module_exists('workflownode')) {
+      //$types = $workflow->getTypeMap();
+      $types = workflow_get_workflow_type_map_by_wid($wid);
+      foreach ($types as $key => $value) {
+        $types[$key]->entity = 'node';
+      }
+    }
+    elseif (module_exists('workflowfield')){
+      $workflow_fields = _workflow_info_fields();
+      foreach ($workflow_fields as $field_name => $field_info) {
+        if ($field_info['settings']['wid'] == $wid) {
+          foreach ($field_info['bundles'] as $entity => $bundles) {
+            foreach ($bundles as $bundle) {
+              $type = new stdClass();
+              $type->entity = $entity;
+              $type->type = $bundle;
+              $types[] = $type;
+            }
+          }
+        }
+      }
+    }
+
     if (empty($types)) {
       drupal_set_message(t('To set fields visibility you have to map the workflow to at least a content type.'));
       $form['description'] = array(
@@ -73,47 +95,57 @@ function workflow_fields_form_workflow_admin_ui_form($form, &$form_state, $workf
     $userrefs = array();
 
     $results = db_query(
-      "SELECT type, name, visible_roles, editable_roles
+      "SELECT entity, type, name, visible_roles, editable_roles
       FROM {workflow_fields} WHERE sid = :sid",
       array(':sid' => $sid)
     );
     $permissions = array();
     foreach ($results as $row) {
-      $permissions[$row->type][$row->name] = array(
+      $permissions[$row->entity][$row->type][$row->name] = array(
         'visible_roles' => explode(',', $row->visible_roles),
         'editable_roles' => explode(',', $row->editable_roles),
       );
     }
-
     // For each type, find out all the fields.
     foreach ($types as $values) {
       $type = $values->type;
+      $entity = $values->entity;
       $form['fields']['#types']['#value'][] = $type;
 
       // For each field, add checkboxes for visible and editable for all roles.
-      $fields = _workflow_fields_get_fields($type);
+      $fields = _workflow_fields_get_fields($type, FALSE, $entity);
       uasort($fields, "_workflow_fields_sort_fields_by_widget_weight");
       foreach ($fields as $field_name => $field) {
-        if (!isset($permissions[$type][$field_name])) {
+
+        // skip workflow fields;
+        if ((module_exists('workflowfield')) && (isset($workflow_fields[$field_name]))) {
+          continue;
+        }
+
+        if (!isset($permissions[$entity][$type][$field_name])) {
           $perms = array(
             'visible_roles' => array(WORKFLOW_FIELDS_AUTHOR_ROLE),
             'editable_roles' => array(WORKFLOW_FIELDS_AUTHOR_ROLE),
           );
         }
         else {
-          $perms = $permissions[$type][$field_name];
+          $perms = $permissions[$entity][$type][$field_name];
         }
 
-        $form['fields'][$type][$field_name] = array(
+        // if (!isset($form['fields'][$entity]) {
+        //   $form['fields'][$entity]['#tree'] = TRUE;
+        // }
+
+        $form['fields'][$entity][$type][$field_name] = array(
           '#field_label' => $field['label'],
           '#weight' => isset($field['weight']) ? $field['weight'] : -100,
         );
-        $form['fields'][$type][$field_name]['visible'] = array(
+        $form['fields'][$entity][$type][$field_name]['visible'] = array(
           '#type' => 'checkboxes',
           '#options' => $rids,
           '#default_value' => $perms['visible_roles'],
         );
-        $form['fields'][$type][$field_name]['editable'] = array(
+        $form['fields'][$entity][$type][$field_name]['editable'] = array(
           '#type' => 'checkboxes',
           '#options' => $rids,
           '#default_value' => $perms['editable_roles'],
@@ -146,7 +178,7 @@ function workflow_fields_form_workflow_admin_ui_form($form, &$form_state, $workf
           'title' => t('editable'),
           'href' => "javascript:Drupal.workflowFields.select('toggle', '$editable_group');",
         );
-        $form['fields'][$type][$field['field_name']]['shortcuts'] = array(
+        $form['fields'][$entity][$type][$field['field_name']]['shortcuts'] = array(
           '#type' => 'value',
           '#value' => $type_shortcuts,
           '#theme' => 'workflow_fields_shortcuts',
@@ -214,22 +246,25 @@ function workflow_fields_form_workflow_admin_ui_form_submit($form, &$form_state)
 
     db_delete('workflow_fields')->condition('sid', $sid)->execute();
     $insert = db_insert('workflow_fields')
-      ->fields(array('sid', 'name', 'type', 'visible_roles', 'editable_roles'));
-    foreach ($form_state['values']['fields'] as $type => $fields) {
-      foreach ($fields as $name => $field) {
-        $visible = array_filter($field['visible']);
-        $editable = array_filter($field['editable']);
-        $insert->values(array(
-          'sid' => $sid,
-          'name' => $name,
-          'type' => $type,
-          'visible_roles' => implode(',', $visible),
-          'editable_roles' => implode(',', $editable),
-        ));
+      ->fields(array('sid', 'name', 'type', 'entity', 'visible_roles', 'editable_roles'));
+    foreach ($form_state['values']['fields'] as $entity => $types) {
+      foreach ($types as $type => $fields) {
+        foreach ($fields as $name => $field) {
+          $visible = array_filter($field['visible']);
+          $editable = array_filter($field['editable']);
+          $insert->values(array(
+            'sid' => $sid,
+            'name' => $name,
+            'type' => $type,
+            'entity' => $entity,
+            'visible_roles' => implode(',', $visible),
+            'editable_roles' => implode(',', $editable),
+          ));
+        }
       }
     }
     $insert->execute();
-    $state = workflow_get_workflow_states_by_sid($sid);
+    $state = workflow_state_load($sid);
     drupal_set_message(t('Changes on fields for the state <em>@state</em> made successfully.', array('@state' => $state->state)));
   }
 
@@ -268,19 +303,29 @@ function workflow_fields_theme() {
  */
 function theme_workflow_fields_state($vars) {
   $element =& $vars['element'];
-  $header = array(t('Content type'), t('Field name'), t('Visible'), t('Editable'), t('Select'));
+  $header = array(t('Entity'), t('Bundle'), t('Field name'), t('Visible'), t('Editable'), t('Select'));
   $rows = array();
-  foreach (element_children($element) as $type) {
-    $type_info = node_type_get_type($type);
-    foreach (element_children($element[$type]) as $field_name) {
-      $field_label = $element[$type][$field_name]['#field_label'];
-      $rows[] = array(
-        $type_info->name . '<br/>(' . $type . ')',
-        $field_label . '<br/>(' . $field_name . ')',
-        drupal_render($element[$type][$field_name]['visible']),
-        drupal_render($element[$type][$field_name]['editable']),
-        drupal_render($element[$type][$field_name]['shortcuts']),
-      );
+  foreach (element_children($element) as $entity) {
+    $entity_info = entity_get_info($entity);
+    foreach (element_children($element[$entity]) as $type) {
+      if ($entity == 'node'){
+        $type_info = node_type_get_type($type);
+        $type_name = $type_info->name;
+      }
+      else {
+        $type_name = $entity_info['bundles'][$type]['label'];
+      }
+      foreach (element_children($element[$entity][$type]) as $field_name) {
+        $field_label = $element[$entity][$type][$field_name]['#field_label'];
+        $rows[] = array(
+          $entity_info['label'] . '<br/>(' . $entity . ')',
+          $type_name . '<br/>(' . $type . ')',
+          $field_label . '<br/>(' . $field_name . ')',
+          drupal_render($element[$entity][$type][$field_name]['visible']),
+          drupal_render($element[$entity][$type][$field_name]['editable']),
+          drupal_render($element[$entity][$type][$field_name]['shortcuts']),
+        );
+      }
     }
   }
   $attributes = array('class' => array('workflow-fields-table'));
@@ -414,29 +459,31 @@ function _workflow_fields_show_title(&$form, $field, $path, $node, $visible, $ed
 /**
  * Implements hook_workflow_fields().
  */
-function workflow_fields_workflow_fields($type) {
-  $content = node_type_get_type($type);
+function workflow_fields_workflow_fields($type, $entity_type = 'node') {
   $fields = array();
-  if ($content->has_title) {
-    $fields['title'] = array(
-      'label' => $content->title_label,
-      'process' => '_workflow_fields_show_title',
-    );
+  if($entity_type == 'node') {
+    $content = node_type_get_type($type);
+    if ($content->has_title) {
+      $fields['title'] = array(
+        'label' => $content->title_label,
+        'process' => '_workflow_fields_show_title',
+      );
+    }
   }
   return $fields;
 }
 
-function _workflow_fields_get_fields($type, $reset = FALSE) {
+function _workflow_fields_get_fields($type, $reset = FALSE, $entity_type = 'node') {
   static $fields = array();
   if (!isset($fields[$type]) || $reset) {
-    $fields[$type] = module_invoke_all('workflow_fields', $type);
+    $fields[$type] = module_invoke_all('workflow_fields', $type, $entity_type);
     foreach ($fields[$type] as $key => $field) {
       $fields[$type][$key]['field_name'] = $key;
       $fields[$type][$key]['widget']['label'] = $field['label'];
       $fields[$type][$key]['extra'] = TRUE;
     }
     drupal_alter('workflow_fields', $fields, $type);
-    $fields[$type] += field_info_instances('node', $type);
+    $fields[$type] += field_info_instances($entity_type, $type);
   }
   return $fields[$type];
 }
@@ -498,29 +545,30 @@ function workflow_fields_settings() {
 }
 
 /**
- * Return an array of rids for the current user, given a node.
+ * Return an array of rids for the current user, given a entity.
  *
  * Include WORKFLOW_FIELDS_AUTHOR_ROLE if the current user is the node author.
  */
-function _workflow_fields_compute_groups($node = NULL) {
+function _workflow_fields_compute_groups($entity = NULL) {
   global $user;
   $groups = array_keys($user->roles);
-  if (isset($node) && isset($node->uid)) {
-    if ($user->uid == $node->uid) {
+  if (isset($node) && isset($entity->uid)) {
+    if ($user->uid == $entity->uid) {
       $groups[] = WORKFLOW_FIELDS_AUTHOR_ROLE;
     }
   }
   return $groups;
 }
 
-function _workflow_fields_compute_permissions($sid, $type, $node, $op) {
+function _workflow_fields_compute_permissions($sid, $type, $node, $op, $entity_type = 'node') {
   $visibles = array();
   $editables = array();
   $groups = _workflow_fields_compute_groups($node);
+
   $result = db_query(
     "SELECT name, visible_roles, editable_roles
-    FROM {workflow_fields} WHERE sid = :sid AND type = :type",
-    array(':sid' => $sid, ':type' => $type)
+    FROM {workflow_fields} WHERE sid = :sid AND type = :type AND entity = :entity",
+    array(':sid' => $sid, ':type' => $type, ':entity' => $entity_type)
   );
 
   foreach ($result as $row) {
@@ -528,6 +576,7 @@ function _workflow_fields_compute_permissions($sid, $type, $node, $op) {
     $editable_roles = explode(',', $row->editable_roles);
     $visibles[$row->name] = user_access('bypass field restrictions') || (bool) array_intersect($groups, $visible_roles);
     $editables[$row->name] = user_access('bypass field restrictions') || (bool) array_intersect($groups, $editable_roles);
+
     if ($op == 'edit') {
       if (variable_get('workflow_fields_hide_read_only_when_editing', FALSE) && !$editables[$row->name]) {
         $visibles[$row->name] = FALSE;
@@ -584,24 +633,27 @@ function _workflow_fields_array_path_exists($array, $path) {
 /**
  * Implements hook_field_access().
  */
-function workflow_fields_field_access($op, $field, $entity_type, $node, $account) {
-  if ($entity_type == 'node' || !$node) {
+function workflow_fields_field_access($op, $field, $entity_type, $entity, $account) {
+
+  if ($entity) {
     $sid = NULL;
     $workflow_fields = array('');
 
     // Workflow 2+
     if (function_exists('_workflow_info_fields')) {
-      $workflow_fields = _workflow_info_fields($node, $entity_type);
-      if (0 === count($workflow_fields)) {
+      $workflow_fields = _workflow_info_fields($entity, $entity_type);
+      if ((isset($workflow_fields[$field['field_name']])) || (0 === count($workflow_fields))) {
         return TRUE;
       }
     }
-
     // If there is one workflow that gives access to the field, access is granted
     foreach ($workflow_fields as $workflow_field_name => $workflow_field_info) {
-      $sid = workflow_node_current_state($node, 'node', $workflow_field_name);
+      $sid = workflow_node_current_state($entity, $entity_type, $workflow_field_name);
       if (FALSE === $sid) {
-        $type_map = workflow_get_workflow_type_map_by_type($node->type);
+        $type_map = workflow_get_workflow_type_map_by_type($entity->type);
         if (!$type_map) {
           return;
         }
@@ -617,7 +669,8 @@ function workflow_fields_field_access($op, $field, $entity_type, $node, $account
       }
 
       // Check for visible/editable flags.
-      list($visibles, $editables) = _workflow_fields_compute_permissions($sid, $node->type, $node, $op);
+      list($visibles, $editables) = _workflow_fields_compute_permissions($sid, $entity->type, $entity, $op, $entity_type);
+
       if (isset($visibles[$field['field_name']])) {
         $is_accessible = ($op == 'view') ? $visibles[$field['field_name']] : ($visibles[$field['field_name']] && $editables[$field['field_name']]);
         if ($is_accessible) {
