diff --git a/less.module b/less.module
index 4556e6f..a628fdf 100644
--- a/less.module
+++ b/less.module
@@ -71,6 +71,16 @@ function _less_pre_render($styles) {
     }
   }
 
+  global $theme_info, $theme;
+  $theme_less = array();
+  if (isset($theme_info->info['less'])) {
+    $theme_less = $theme_info->info['less'];
+    if (!theme_get_setting('less_use_default', $theme)) {
+      $saved_settings = theme_get_setting('less', $theme);
+      $theme_less = array_merge($theme_less, $saved_settings);
+    }
+  }
+
   foreach ($styles['#items'] as $key => $info) {
     $input_file = $info['data'];
     if (drupal_substr($input_file, -5) == '.less') {
@@ -96,9 +106,18 @@ function _less_pre_render($styles) {
 
       if (!file_exists($output_file)) {
         require_once($lessphp_include);
-
         $less = new lessc();
 
+        // Add support for custom PHP functions (added in version v0.3.1)
+        if (method_exists($less, 'registerFunction')) {
+          $registerFunction = module_invoke_all("less_register_function");
+          if (is_array($registerFunction) && !empty($registerFunction)) {
+            foreach ($registerFunction as $funcion => $callback) {
+              $less->registerFunction($funcion, $callback);
+            }
+          }
+        }
+
         $contents = drupal_load_stylesheet($input_file, FALSE);
 
         // Build the base URL of this CSS file: start with the full URL.
@@ -116,7 +135,12 @@ function _less_pre_render($styles) {
         $data = preg_replace_callback('/url\(\s*[\'"]?(?![a-z]+:|\/+)([^\'")]+)[\'"]?\s*\)/i', '_drupal_build_css_path', $contents);
 
         try {
-          $output_data = $less->parse($data);
+          if (!empty($theme_less)) {
+            $output_data = $less->parse($data, $theme_less);
+          }
+          else {
+            $output_data = $less->parse($data);
+          }
           file_unmanaged_save_data($output_data, $output_file, FILE_EXISTS_REPLACE);
         }
         catch (Exception $e) {
@@ -184,3 +208,72 @@ function less_requirements($phase) {
 function less_element_info_alter(&$type) {
   array_unshift($type['styles']['#pre_render'], '_less_pre_render');
 }
+
+/**
+ * Implements hook_form_alter().
+ */
+function less_form_system_theme_settings_alter(&$form, &$form_state) {
+  if (isset($form_state['build_info']['args'][0]) && ($theme_key = $form_state['build_info']['args'][0])) {
+    $themes = list_themes();
+    if (isset($themes[$theme_key]->info['less'])) {
+      array_unshift($form['#submit'], 'less_form_system_theme_settings_submit');
+
+      $theme_less = $themes[$theme_key]->info['less'];
+      $saved_settings = theme_get_setting('less', $theme_key);
+
+      $form['less_fs'] = array(
+        '#type' => 'fieldset',
+        '#title' => t('Less overrides'),
+        '#weight' => -1,
+        '#tree' => TRUE,
+      );
+      $form['less_fs']['less_use_default'] = array(
+        '#type' => 'checkbox',
+        '#title' => t('Use the default settings'),
+        '#default_value' => theme_get_setting('less_use_default', $theme_key),
+      );
+      $form['less_fs']['less'] = array(
+        '#type' => 'container',
+        '#states' => array(
+          'invisible' => array(
+            'input[name="less_fs[less_use_default]"]' => array('checked' => TRUE),
+          ),
+        ),
+      );
+      foreach ($theme_less as $key => $value) {
+        if (strpos($value, '#') === FALSE) {
+          $form['less_fs']['less'][$key] = array(
+            '#type' => 'textfield',
+            '#title' => $key,
+            '#default_value' => isset($saved_settings[$key]) ? $saved_settings[$key] : $value,
+          );
+        }
+        else {
+          $form_state['less_hexcolors'][] = $key;
+          $form['less_fs']['less'][$key] = array(
+            '#type' => module_exists('jquery_colorpicker') ? 'jquery_colorpicker' : 'textfield',
+            '#title' => $key,
+            '#default_value' => str_replace('#', '', isset($saved_settings[$key]) ? $saved_settings[$key] : $value),
+          );
+        }
+      }
+    }
+  }
+}
+
+/**
+ * Save settings, alter structure first().
+ */
+function less_form_system_theme_settings_submit($form, &$form_state) {
+  less_flush_caches();
+
+  $form_state['values'] += $form_state['values']['less_fs'];
+  unset($form_state['values']['less_fs']);
+  if (isset($form_state['less_hexcolors']) && is_array($form_state['less_hexcolors'])) {
+    foreach ($form_state['less_hexcolors'] as $key) {
+      if (strpos($form_state['values']['less'][$key], '#') === FALSE) {
+        $form_state['values']['less'][$key] = '#' . $form_state['values']['less'][$key];
+      }
+    }
+  }
+}
\ No newline at end of file
