diff --git a/charts.module b/charts.module
index cff82b70fb75b1b5d345b6a8a6b6f5533b82e545..44c3f78f3049f6343b26c252fb0a5b471c316c20 100644
--- a/charts.module
+++ b/charts.module
@@ -23,13 +23,42 @@ function charts_chart(&$data) {
   // Get the previously saved data from Data Base
   $settings = variable_get('charts_settings', array());
 
+  $options = array('pie2D' => TRUE, 'pie3D' => TRUE);
+  if (!empty($data['#type'])) {
+    if (!empty($options[$data['#type']])) {
+      $color_palette = TRUE;
+    }
+  }
+  elseif (!empty($settings['#type'])) {
+    if (!empty($options[$settings['#type']])) {
+      $color_palette = TRUE;
+    }
+  }
+
   // Merge all series option to the main data array,
-  // like color
-  foreach (element_children($settings) as $series) {
-    if (!empty($data[$series])) {
+  foreach (element_children($data) as $series) {
+    if (!empty($settings[$series])) {
       $data[$series] = array_merge($settings[$series], $data[$series]);
     }
     unset($settings[$series]);
+
+    // Color Palette
+    if (empty($color_palette) and empty($data[$series]['#color'])) {
+      $data[$series]['#color'] = trim($settings['#color_palette'][$series]);
+    }
+    elseif (!empty($color_palette)) {
+      foreach (element_children($data[$series]) as $values) {
+        if (!is_array($data[$series][$values])) {
+          $data[$series][$values] = array(
+            '#value' => $data[$series][$values],
+            '#color' => trim($settings['#color_palette'][$values])
+          );
+        }
+        elseif (empty($data[$series][$values]['#color'])) {
+          $data[$series][$values]['#color'] = trim($settings['#color_palette'][$values]);
+        }
+      }
+    }
   }
 
   // Now, merge all the rest of the options saved by default