diff --git a/fullcalendar_colors/fullcalendar_colors.module b/fullcalendar_colors/fullcalendar_colors.module
index 8592cf4..7603dce 100644
--- a/fullcalendar_colors/fullcalendar_colors.module
+++ b/fullcalendar_colors/fullcalendar_colors.module
@@ -20,35 +20,11 @@ function fullcalendar_colors_menu() {
 
   $items['admin/config/user-interface/fullcalendar/colors'] = array(
     'title' => 'Colors',
-    'description' => 'Adjust FullCalendar color settings for entities.',
-    'page arguments' => array('fullcalendar_colors_admin_node_type_settings'),
+    'page arguments' => array('fullcalendar_colors_admin_settings'),
     'type' => MENU_LOCAL_TASK,
     'weight' => 1,
   ) + $base;
 
-  $items['admin/config/user-interface/fullcalendar/colors/node'] = array(
-    'title' => 'Node type',
-    'page arguments' => array('fullcalendar_colors_admin_node_type_settings'),
-    'type' => MENU_DEFAULT_LOCAL_TASK,
-    'weight' => -10,
-  ) + $base;
-
-  if (module_exists('taxonomy')) {
-    $items['admin/config/user-interface/fullcalendar/colors/taxonomy'] = array(
-      'title' => 'Taxonomy',
-      'page arguments' => array('fullcalendar_colors_admin_taxonomy_settings'),
-      'type' => MENU_LOCAL_TASK,
-      'weight' => -8,
-    ) + $base;
-  }
-
-  $items['admin/config/user-interface/fullcalendar/colors/user'] = array(
-    'title' => 'User role',
-    'page arguments' => array('fullcalendar_colors_admin_user_role_settings'),
-    'type' => MENU_LOCAL_TASK,
-    'weight' => -6,
-  ) + $base;
-
   if (module_exists('og')) {
     $items['admin/config/user-interface/fullcalendar/colors/og'] = array(
       'title' => 'Organic groups',
@@ -80,6 +56,18 @@ function fullcalendar_colors_help($path, $arg) {
 }
 
 /**
+ * Process FullCalendar Colors after the structure is built.
+ */
+function fullcalendar_colors_preprocess_fullcalendar(&$variables) {
+  ctools_include('css');
+  $filename = ctools_css_retrieve('colors');
+  if (!$filename) {
+    $filename = fullcalendar_colors_create_css_file();
+  }
+  $variables['element']['#attached']['css'][] = $filename;
+}
+
+/**
  * Includes all FullCalendar Colors API plugins.
  */
 function fullcalendar_colors_include_api() {
@@ -234,30 +222,6 @@ function fullcalendar_colors_theme() {
   );
 }
 
-if (!function_exists('user_fullcalendar_colors_api')) {
-  function user_fullcalendar_colors_api() {
-    return fullcalendar_colors_fullcalendar_colors_api();
-  }
-}
-
-if (!function_exists('node_fullcalendar_colors_api')) {
-  function node_fullcalendar_colors_api() {
-    return fullcalendar_colors_fullcalendar_colors_api();
-  }
-}
-
-if (!function_exists('taxonomy_fullcalendar_colors_api')) {
-  function taxonomy_fullcalendar_colors_api() {
-    return fullcalendar_colors_fullcalendar_colors_api();
-  }
-}
-
-if (!function_exists('og_fullcalendar_colors_api')) {
-  function og_fullcalendar_colors_api() {
-    return fullcalendar_colors_fullcalendar_colors_api();
-  }
-}
-
 /**
  * Inserts or updates a FullCalendar color configuration.
  *
@@ -279,5 +243,28 @@ function fullcalendar_colors_set_color($classes, $background = '#000000', $borde
     'border' => $border,
     'text' => $text,
   );
-  colors_set_colors($classes, $colors, 'fullcalendar_colors');
+  $old = serialize(colors_get_colors($classes, 'fullcalendar_colors'));
+  $new = serialize($colors);
+  if ($old != $new) {
+    colors_set_colors($classes, $colors, 'fullcalendar_colors');
+    ctools_include('css');
+    ctools_css_clear('colors');
+  }
+}
+
+function fullcalendar_colors_create_css_file($default_colors = array()) {
+  ctools_include('css');
+  colors_include_api();
+  $css = '';
+  foreach (module_implements('colors_info') as $module) {
+    foreach (colors_get_module_colors($module) as $selector => $colors) {
+      $css .= colors_build_css($selector, $colors, 'fullcalendar_colors', $default_colors);
+    }
+  }
+  return ctools_css_store('colors', $css);
+}
+
+function fullcalendar_colors_fullcalendar_classes($entity) {
+  colors_include_api();
+  return module_invoke_all('colors_classes', $entity);
 }
diff --git a/fullcalendar_colors/includes/fullcalendar_colors.admin.inc b/fullcalendar_colors/includes/fullcalendar_colors.admin.inc
index 646a824..71a111a 100644
--- a/fullcalendar_colors/includes/fullcalendar_colors.admin.inc
+++ b/fullcalendar_colors/includes/fullcalendar_colors.admin.inc
@@ -6,291 +6,6 @@
  */
 
 /**
- * Configuration form for coloring node types.
- */
-function fullcalendar_colors_admin_node_type_settings() {
-  // CSS for our custom form.
-  ctools_add_css('fullcalendar_colors.admin', 'fullcalendar_colors');
-  $form = colors_load_colorpicker();
-
-  $form['node_type_colors'] = array(
-    '#type' => 'item',
-    '#title' => t('Node type colors'),
-    '#description' => t('Colors for node types. If enabled, you may set colors for each node type below.'),
-  );
-  $form['fieldset'] = array(
-    '#type' => 'fieldset',
-    '#title' => t('Node type colors'),
-    '#collapsible' => TRUE,
-    '#collapsed' => !variable_get('fullcalendar_colors_node_types_enabled', FALSE),
-  );
-  $form['fieldset']['fullcalendar_colors_node_types_enabled'] = array(
-    '#type' => 'checkbox',
-    '#title' => t('Enable colors for node types'),
-    '#default_value' => variable_get('fullcalendar_colors_node_types_enabled', FALSE),
-  );
-  foreach (node_type_get_names() as $type => $name) {
-    $class = 'fullcalendar_colors_node_type_' . $type;
-    $colors = colors_get_colors($class, 'fullcalendar_colors');
-
-    $form['fieldset'][$class] = array(
-      '#title' => t($name),
-      '#type' => 'textfield',
-      '#attributes' => array('class' => array('colorpicker-input')),
-      '#default_value' => $colors['background'],
-      '#size' => 7,
-      '#maxlength' => 7,
-      '#states' => array(
-        'visible' => array(
-          ':input[name="fullcalendar_colors_node_types_enabled"]' => array('checked' => TRUE),
-        ),
-      ),
-    );
-  }
-
-  $form['actions']['#type'] = 'actions';
-  $form['actions']['submit'] = array(
-    '#type' => 'submit',
-    '#value' => t('Save configuration'),
-  );
-  $form['#submit'][] = 'fullcalendar_colors_admin_node_type_settings_submit';
-
-  return $form;
-}
-
-/**
- * Submit handler for fullcalendar_colors_admin_node_type_settings.
- */
-function fullcalendar_colors_admin_node_type_settings_submit($form, &$form_state) {
-  $values = $form_state['values'];
-
-  variable_set('fullcalendar_colors_node_types_enabled', $values['fullcalendar_colors_node_types_enabled']);
-
-  // Save the node colors.
-  foreach (node_type_get_names() as $type => $name) {
-    $class = 'fullcalendar_colors_node_type_' . $type;
-    fullcalendar_colors_set_color($class, $values[$class]);
-  }
-
-  drupal_set_message(t('The configuration options have been saved.'));
-}
-
-/**
- * Configuration form for coloring taxonomy.
- */
-function fullcalendar_colors_admin_taxonomy_settings() {
-  // CSS for our custom form.
-  ctools_add_css('fullcalendar_colors.admin', 'fullcalendar_colors');
-  $form = colors_load_colorpicker();
-
-  $form['taxonomy_colors'] = array(
-    '#type' => 'item',
-    '#title' => t('Taxonomy colors'),
-    '#description' => t('Colors on a per-taxonomy basis. After enabling a vocabulary, you can set colors for individual taxonomy terms below.'),
-  );
-  foreach (taxonomy_get_vocabularies() as $vid => $vocab) {
-    $form[$vid] = array(
-      '#type' => 'fieldset',
-      '#title' => $vocab->name,
-      '#collapsible' => TRUE,
-      '#collapsed' => !variable_get('fullcalendar_colors_taxo_' . $vid . '_enabled', FALSE),
-    );
-    $form[$vid]['fullcalendar_colors_taxo_' . $vid . '_enabled'] = array(
-      '#type' => 'checkbox',
-      '#title' => t('Enable this vocabulary'),
-      '#default_value' => variable_get('fullcalendar_colors_taxo_' . $vid . '_enabled', FALSE),
-    );
-
-    if (variable_get('fullcalendar_colors_taxo_' . $vid . '_enabled')) {
-      // If enabled, get all the terms in the taxonomy.
-      $term_ids = taxonomy_get_tree($vid);
-      // Print textfield for each term so user can add a hex value for a color.
-      foreach ($term_ids as $term) {
-        $class = 'fullcalendar_colors_taxo_term_' . $term->tid;
-        $colors = colors_get_colors($class, 'fullcalendar_colors');
-        $form[$vid][$class] = array(
-          '#title' => t($term->name),
-          '#type' => 'textfield',
-          '#attributes' => array('class' => array('colorpicker-input')),
-          '#default_value' => $colors['background'],
-          '#size' => 7,
-          '#maxlength' => 7,
-        );
-      }
-    }
-  }
-
-  $form['actions']['#type'] = 'actions';
-  $form['actions']['submit'] = array(
-    '#type' => 'submit',
-    '#value' => t('Save configuration'),
-  );
-  $form['#submit'][] = 'fullcalendar_colors_admin_taxonomy_settings_submit';
-
-  return $form;
-}
-
-/**
- * Submit handler for fullcalendar_colors_admin_taxonomy_settings.
- */
-function fullcalendar_colors_admin_taxonomy_settings_submit($form, &$form_state) {
-  $values = $form_state['values'];
-
-  foreach (taxonomy_get_vocabularies() as $vid => $vocab) {
-    if (variable_get('fullcalendar_colors_taxo_' . $vid . '_enabled')) {
-      $term_ids = taxonomy_get_tree($vid);
-      foreach ($term_ids as $term) {
-        $class = 'fullcalendar_colors_taxo_term_' . $term->tid;
-        fullcalendar_colors_set_color($class, $values[$class]);
-      }
-    }
-    variable_set('fullcalendar_colors_taxo_' . $vid . '_enabled', $values['fullcalendar_colors_taxo_' . $vid . '_enabled']);
-  }
-
-  drupal_set_message(t('The configuration options have been saved.'));
-}
-
-/**
- * Configuration form for coloring organic groups (og).
- */
-function fullcalendar_colors_admin_og_settings() {
-  // CSS for our custom form.
-  ctools_add_css('fullcalendar_colors.admin', 'fullcalendar_colors');
-  $form = colors_load_colorpicker();
-
-  if (module_exists('og')) {
-    $form['og_colors'] = array(
-      '#type' => 'item',
-      '#title' => t('Group colors'),
-      '#description' => t('Colors for organic groups. If enabled, you may set colors for each group below.'),
-    );
-    $form['fieldset'] = array(
-      '#type' => 'fieldset',
-      '#title' => t('Group colors'),
-      '#collapsible' => TRUE,
-      '#collapsed' => !variable_get('fullcalendar_colors_groups_enabled', FALSE),
-    );
-    $form['fieldset']['fullcalendar_colors_groups_enabled'] = array(
-      '#type' => 'checkbox',
-      '#title' => t('Enable colors for groups'),
-      '#default_value' => variable_get('fullcalendar_colors_groups_enabled', FALSE),
-    );
-    foreach (og_get_all_group() as $gid) {
-      $class = 'fullcalendar_color_group_' . $gid;
-      $colors = colors_get_colors($class, 'fullcalendar_colors');
-
-      $form['fieldset'][$class] = array(
-        '#title' => og_label($gid),
-        '#type' => 'textfield',
-        '#attributes' => array('class' => array('colorpicker-input')),
-        '#default_value' => $colors['background'],
-        '#size' => 7,
-        '#maxlength' => 7,
-        '#states' => array(
-          'visible' => array(
-            ':input[name="fullcalendar_color_groups_enabled"]' => array('checked' => TRUE),
-          ),
-        ),
-      );
-    }
-  }
-
-  $form['actions']['#type'] = 'actions';
-  $form['actions']['submit'] = array(
-    '#type' => 'submit',
-    '#value' => t('Save configuration'),
-  );
-  $form['#submit'][] = 'fullcalendar_colors_admin_og_settings_submit';
-
-  return $form;
-}
-
-/**
- * Submit handler for fullcalendar_colors_admin_og_settings.
- */
-function fullcalendar_colors_admin_og_settings_submit($form, &$form_state) {
-  $values = $form_state['values'];
-  variable_set('fullcalendar_colors_groups_enabled', $values['fullcalendar_colors_groups_enabled']);
-
-  // Save the node colors.
-  foreach (og_get_all_group() as $gid) {
-    $class = 'fullcalendar_color_group_' . $gid;
-    fullcalendar_colors_set_color($class, $values[$class]);
-  }
-
-  drupal_set_message(t('The configuration options have been saved.'));
-}
-
-/**
- * Configuration form for coloring user roles.
- */
-function fullcalendar_colors_admin_user_role_settings() {
-  // CSS for our custom form.
-  ctools_add_css('fullcalendar_colors.admin', 'fullcalendar_colors');
-  $form = colors_load_colorpicker();
-
-  $form['user_role_colors'] = array(
-    '#type' => 'item',
-    '#title' => t('User role colors'),
-    '#description' => t('Colors for user roles. If enabled, you may set colors for each user role below.'),
-  );
-  $form['fieldset'] = array(
-    '#type' => 'fieldset',
-    '#title' => t('User roles colors'),
-    '#collapsible' => TRUE,
-    '#collapsed' => !variable_get('fullcalendar_colors_user_roles_enabled', FALSE),
-  );
-  $form['fieldset']['fullcalendar_colors_user_roles_enabled'] = array(
-    '#type' => 'checkbox',
-    '#title' => t('Enable colors for user roles'),
-    '#default_value' => variable_get('fullcalendar_colors_user_roles_enabled', FALSE),
-  );
-  foreach (user_roles() as $role_id => $role) {
-    $class = 'fullcalendar_colors_user_role_' . $role_id;
-    $colors = colors_get_colors($class, 'fullcalendar_colors');
-
-    $form['fieldset'][$class] = array(
-      '#title' => t($role),
-      '#type' => 'textfield',
-      '#attributes' => array('class' => array('colorpicker-input')),
-      '#default_value' => $colors['background'],
-      '#size' => 7,
-      '#maxlength' => 7,
-      '#states' => array(
-        'visible' => array(
-          ':input[name="fullcalendar_colors_user_roles_enabled"]' => array('checked' => TRUE),
-        ),
-      ),
-    );
-  }
-
-  $form['actions']['#type'] = 'actions';
-  $form['actions']['submit'] = array(
-    '#type' => 'submit',
-    '#value' => t('Save configuration'),
-  );
-  $form['#submit'][] = 'fullcalendar_colors_admin_user_role_settings_submit';
-
-  return $form;
-}
-
-/**
- * Submit handler for fullcalendar_colors_admin_node_type_settings.
- */
-function fullcalendar_colors_admin_user_role_settings_submit($form, &$form_state) {
-  $values = $form_state['values'];
-  variable_set('fullcalendar_colors_user_roles_enabled', $values['fullcalendar_colors_user_roles_enabled']);
-
-  // Save the user roles colors.
-  foreach (user_roles() as $role_id => $role) {
-    $class = 'fullcalendar_colors_user_role_' . $role_id;
-    fullcalendar_colors_set_color($class, $values[$class]);
-  }
-
-  drupal_set_message(t('The configuration options have been saved.'));
-}
-
-/**
  * Configuration form for color settings.
  */
 function fullcalendar_colors_admin_settings() {
@@ -384,12 +99,19 @@ function fullcalendar_colors_admin_settings() {
 function fullcalendar_colors_admin_settings_submit($form, &$form_state) {
   fullcalendar_colors_set_color('fullcalendar_colors_default', $form_state['values']['default_color']['input']);
   variable_set('fullcalendar_colors_process_order_enabled', $form_state['values']['process_order']['enabled']);
+  $change = FALSE;
 
   foreach ($form_state['values']['modules'] as $module => $weight) {
     if ($form['modules'][$module]['#weight'] != $weight['weight']) {
+      $change = TRUE;
       variable_set('fullcalendar_colors_weight_' . $module, $weight['weight']);
     }
   }
+
+  if ($change) {
+    ctools_include('css');
+    ctools_css_clear('colors');
+  }
 }
 
 /**
diff --git a/fullcalendar_colors/modules/node.fullcalendar_colors.inc b/fullcalendar_colors/modules/node.fullcalendar_colors.inc
deleted file mode 100644
index 8687991..0000000
--- a/fullcalendar_colors/modules/node.fullcalendar_colors.inc
+++ /dev/null
@@ -1,21 +0,0 @@
-<?php
-
-/**
- * @file
- * Implements FullCalendar Colors hooks for node.module.
- */
-
-/**
- * Implements hook_fullcalendar_classes().
- *
- * Provide colors per node type.
- */
-function node_fullcalendar_classes($entity) {
-  $class_names = array();
-  if (variable_get('fullcalendar_colors_node_types_enabled', FALSE)) {
-    if ($entity->entity_type == 'node') {
-      $class_names[] = 'fullcalendar_colors_node_type_' . $entity->type;
-    }
-  }
-  return $class_names;
-}
diff --git a/fullcalendar_colors/modules/taxonomy.fullcalendar_colors.inc b/fullcalendar_colors/modules/taxonomy.fullcalendar_colors.inc
deleted file mode 100644
index 3e36e27..0000000
--- a/fullcalendar_colors/modules/taxonomy.fullcalendar_colors.inc
+++ /dev/null
@@ -1,49 +0,0 @@
-<?php
-
-/**
- * @file
- * Implements FullCalendar Colors hooks for taxonomy.module.
- */
-
-/**
- * Implements hook_fullcalendar_classes().
- */
-function taxonomy_fullcalendar_classes($entity) {
-  $filtered_entity = array_intersect_key((array) $entity, field_info_instances($entity->entity_type, $entity->bundle));
-  $tids = _fullcalendar_colors_filter_term_ids($filtered_entity);
-  $class_names = array();
-  foreach (taxonomy_get_vocabularies() as $vid => $vocab) {
-    if (variable_get('fullcalendar_colors_taxo_' . $vid . '_enabled', FALSE)) {
-      // If enabled, get all the terms in the taxonomy.
-      foreach (taxonomy_get_tree($vid) as $term) {
-        if (in_array($term->tid, $tids)) {
-          $class_names[] = 'fullcalendar_colors_taxo_term_' . $term->tid;
-        }
-      }
-    }
-  }
-  return $class_names;
-}
-
-/**
- * Filters all the term ids found in an array of fields.
- *
- * @param array $fields
- *   An array filled with fields.
- *
- * @return array
- *   List of the term ids found in the given fields.
- */
-function _fullcalendar_colors_filter_term_ids($fields) {
-  $term_ids = array();
-  foreach ($fields as $key => $value) {
-    foreach ($value as $language => $term) {
-      foreach ($term as $content) {
-        if (isset($content['tid'])) {
-          $term_ids[] = $content['tid'];
-        }
-      }
-    }
-  }
-  return $term_ids;
-}
diff --git a/fullcalendar_colors/modules/user.fullcalendar_colors.inc b/fullcalendar_colors/modules/user.fullcalendar_colors.inc
deleted file mode 100644
index aa24d0b..0000000
--- a/fullcalendar_colors/modules/user.fullcalendar_colors.inc
+++ /dev/null
@@ -1,23 +0,0 @@
-<?php
-
-/**
- * @file
- * Implements FullCalendar Colors hooks for user.module.
- */
-
-/**
- * Implements hook_fullcalendar_classes().
- *
- * Provide colors per user role.
- */
-function user_fullcalendar_classes($entity) {
-  $class_names = array();
-  if (variable_get('fullcalendar_colors_user_roles_enabled', FALSE)) {
-    if ($entity->entity_type == 'user') {
-      foreach ($entity->roles as $role_id => $role) {
-        $class_names[] = 'fullcalendar_colors_user_role_' . $role_id;
-      }
-    }
-  }
-  return $class_names;
-}
diff --git a/fullcalendar_legend/theme/theme.inc b/fullcalendar_legend/theme/theme.inc
index 1515e3a..7b62a1b 100644
--- a/fullcalendar_legend/theme/theme.inc
+++ b/fullcalendar_legend/theme/theme.inc
@@ -70,9 +70,9 @@ function _fullcalendar_legend_get_classes($type) {
   $entity->bundle = $entity->type = $type['bundle'];
   $entity->entity_type = $type['entity_type'];
 
-  // Enable FullCalendar Colors API if needed.
-  if (module_exists('fullcalendar_colors')) {
-    fullcalendar_colors_include_api();
+  // Enable Colors API if needed.
+  if (module_exists('colors')) {
+    colors_include_api();
   }
 
   $classes = module_invoke_all('fullcalendar_classes', $entity);
diff --git a/theme/theme.inc b/theme/theme.inc
index e68bd55..50b52a7 100644
--- a/theme/theme.inc
+++ b/theme/theme.inc
@@ -71,15 +71,6 @@ function template_preprocess_fullcalendar(&$variables) {
 }
 
 /**
- * Process FullCalendar Colors after the structure is built.
- */
-function template_process_fullcalendar(&$variables) {
-  if (module_exists('fullcalendar_colors')) {
-    fullcalendar_colors_process_selectors(array(), TRUE);
-  }
-}
-
-/**
  * Render the FullCalendar.
  */
 function theme_fullcalendar($variables) {
@@ -198,14 +189,13 @@ function fullcalendar_prepare_events($view, $rows, $options) {
       $entity->editable = $editable;
     }
 
-    // Enable FullCalendar Colors API if needed.
-    if (module_exists('fullcalendar_colors')) {
-      fullcalendar_colors_include_api();
+    // Enable Colors API if needed.
+    if (module_exists('colors')) {
+      colors_include_api();
     }
 
      // Create a string of class names.
     $classes = array();
-    $colors = array();
     foreach (module_implements('fullcalendar_classes') as $module) {
       // Fetch all the class names.
       $function = $module . '_fullcalendar_classes';
@@ -213,13 +203,6 @@ function fullcalendar_prepare_events($view, $rows, $options) {
 
       // Merge for normal classes.
       $classes = array_merge($classes, $class_names);
-
-      // Prepare an array for the FullCalendar Colors module.
-      if (module_exists('fullcalendar_colors')) {
-        foreach ($class_names as $class_name) {
-          $colors[$module][$class_name] = $class_name;
-        }
-      }
     }
 
     // Alter the classes array if needed.
@@ -228,11 +211,6 @@ function fullcalendar_prepare_events($view, $rows, $options) {
     // Add classes to the FullCalendar event.
     $entity->class = implode(' ', array_unique($classes));
 
-    // Call FullCalendar Colors when needed.
-    if (module_exists('fullcalendar_colors')) {
-      fullcalendar_colors_generate_css($entity, $colors);
-    }
-
     // Default URL.
     $uri = entity_uri($entity_type, $entity);
     $entity->url = $uri['path'];
