diff --git a/menu_icons.module b/menu_icons.module
index addefc0..b5111a0 100755
--- a/menu_icons.module
+++ b/menu_icons.module
@@ -48,7 +48,12 @@ function menu_icons_form_alter(&$form, $form_state, $form_id) {
     if (!isset($options) || !isset($options['menu_icon'])) {
       $options = array('menu_icon' => array('enable' => NULL, 'image_style' => NULL));
     }
-
+    if (!isset($options['menu_icon']['image_style'])) {
+      $options['menu_icon']['image_style'] = NULL;
+    }
+    if (!isset($options['menu_icon']['image_style_hover'])) {
+      $options['menu_icon']['image_style_hover'] = NULL;
+    }
     $form['icon'] = array(
       '#type' => 'fieldset',
       '#weight' => 5,
@@ -72,6 +77,11 @@ function menu_icons_form_alter(&$form, $form_state, $form_id) {
       '#default_value' => $options['menu_icon']['image_style'],
       '#description' => t('The preview image will be shown while editing the content.'),
       '#required' => FALSE,
+      '#states' => array(
+        'visible' => array (
+          ':input[name="use_icon_logo"]' => array('checked' => TRUE),
+        ),
+      ),
     );
 
     $form['icon']['icon_path'] = array(
@@ -79,10 +89,10 @@ function menu_icons_form_alter(&$form, $form_state, $form_id) {
       '#title' => t('Path to the icon'),
       '#default_value' => (isset($options['menu_icon']['path']) ? $options['menu_icon']['path'] : variable_get('menu_icons_default_icon', drupal_get_path('module', 'menu_icons') . '/images/default_icon.png')),
       '#description' => t('The path to the image you would like to use as a background image for this menu item.'),
-    );
-    $form['icon']['icon_path']['#states'] = array(
+      '#states' => array(
         'visible' => array (
-        ':input[name="use_icon_logo"]' => array('checked' => TRUE),
+          ':input[name="use_icon_logo"]' => array('checked' => TRUE),
+        ),
       ),
     );
 
@@ -91,10 +101,49 @@ function menu_icons_form_alter(&$form, $form_state, $form_id) {
       '#title' => t('Upload a new icon image'),
       '#maxlength' => 40,
       '#description' => t("If you don't have direct file access to the server, use this field to upload your icon."),
+      '#states' => array(
+        'visible' => array (
+          ':input[name="use_icon_logo"]' => array('checked' => TRUE),
+        ),
+      ),
     );
-    $form['icon']['icon_upload']['#states'] = array(
+
+    $form['icon']['image_style_hover'] = array(
+      '#title' => t('Image style for the hover icon'),
+      '#type' => 'select',
+      '#options' => image_style_options(FALSE),
+      '#empty_option' => '<' . t('Menu Icons default') . '>',
+      '#default_value' => $options['menu_icon']['image_style_hover'],
+      '#description' => t('The preview image will be shown while editing the content.'),
+      '#required' => FALSE,
+      '#states' => array(
         'visible' => array (
-        ':input[name="use_icon_logo"]' => array('checked' => TRUE),
+          ':input[name="use_icon_logo"]' => array('checked' => TRUE),
+        ),
+      ),
+    );
+
+    $form['icon']['icon_hover_path'] = array(
+      '#type' => 'textfield',
+      '#title' => t('Path to the hover icon'),
+      '#default_value' => (isset($options['menu_icon']['path_hover']) ? $options['menu_icon']['path_hover'] : variable_get('menu_icons_default_icon_hover', drupal_get_path('module', 'menu_icons') . '/images/default_icon.png')),
+      '#description' => t('The path to the image you would like to use as a background image for this menu item when hovering.'),
+      '#states' => array(
+        'visible' => array (
+          ':input[name="use_icon_logo"]' => array('checked' => TRUE),
+        ),
+      ),
+    );
+
+    $form['icon']['icon_hover_upload'] = array(
+      '#type' => 'file',
+      '#title' => t('Upload a new icon image'),
+      '#maxlength' => 40,
+      '#description' => t("If you don't have direct file access to the server, use this field to upload your hover icon."),
+      '#states' => array(
+        'visible' => array (
+          ':input[name="use_icon_logo"]' => array('checked' => TRUE),
+        ),
       ),
     );
 
@@ -193,6 +242,7 @@ function menu_icons_form_submit($form, &$form_state) {
 
   // Store the current icon path
   $path = $form_state['values']['icon_path'];
+  $path_hover = $form_state['values']['icon_hover_path'];
 
   // Define the validation settings
   $validate = array(
@@ -211,11 +261,25 @@ function menu_icons_form_submit($form, &$form_state) {
     $path = $filename;
   }
 
+// Check for a new uploaded hover icon, and use that instead.
+  if ($file_hover = file_save_upload('icon_hover_upload', $validate)) {
+    $parts_hover = pathinfo($file_hover->filename);
+    $filename_hover = $directory_path . '/menu_icon_hover_' . $form_state['values']['mlid'] . '.' . $parts_hover['extension'];
+    file_unmanaged_copy($file_hover->uri, $filename_hover, FILE_EXISTS_REPLACE);
+
+    // Flush image style generated images
+    image_path_flush($filename_hover);
+
+    $path_hover = $filename_hover;
+  }
+
   $options = unserialize(db_query('SELECT options FROM {menu_links} WHERE mlid = :mlid', array(':mlid' => $form_state['values']['mlid']))->fetchField());
   $options['menu_icon'] = array(
     'enable' => $form_state['values']['use_icon_logo'],
     'path' => $path,
+    'path_hover' => $path_hover,
     'image_style' => $form_state['values']['image_style'],
+    'image_style_hover' => $form_state['values']['image_style_hover'],
   );
 
   // Use default image style if not explicitly set.
@@ -223,6 +287,11 @@ function menu_icons_form_submit($form, &$form_state) {
     $options['menu_icon']['image_style'] = variable_get('menu_icons_image_style_default', 'menu_icon');
   }
 
+  // Use default image style if not explicitly set.
+  if (empty($options['menu_icon']['image_style_hover'])) {
+    $options['menu_icon']['image_style_hover'] = variable_get('menu_icons_image_style_default', 'menu_icon');
+  }
+
   if (!isset($options['attributes'])) {
     $options['attributes'] = array();
   }
@@ -411,10 +480,7 @@ function menu_icons_admin_settings($form, &$form_state) {
     '#required' => FALSE,
   );
 
-  $options = array();
-  foreach (image_styles() as $pid => $preset) {
-    $options[$preset['name']] = $preset['name'];
-  }
+  $options = image_style_options();
 
   if (!empty($options)) {
     $form['menu_icons_image_style_default'] = array(
@@ -425,6 +491,15 @@ function menu_icons_admin_settings($form, &$form_state) {
       '#required' => FALSE,
       '#options' => $options,
     );
+
+    $form['menu_icons_imagecache_default_hover'] = array(
+      '#type' => 'select',
+      '#title' => t('Image default hover style'),
+      '#default_value' => variable_get('menu_icons_imagecache_default_hover', 'menu_icon'),
+      '#description' => t('Choose a default !link to be used for hover menu icons. This setting can be overwritten per menu item.', array('!link' => l(t('Image style'), 'admin/config/media/image-styles'))),
+      '#required' => FALSE,
+      '#options' => $options,
+    );
   }
 
   $form['menu_icons_image_folder'] = array(
@@ -489,7 +564,7 @@ function menu_icons_image_default_styles() {
 function menu_icons_css_generate() {
 
   $css = "";
-  $result = db_query("SELECT mlid, options FROM {menu_links}");
+  $result = db_query("SELECT mlid, options FROM {menu_links}")->fetchAll();
   $pos = variable_get('menu_icons_position', 'left');
   $absolute = variable_get('menu_icons_absolute_links', FALSE);
 
@@ -524,6 +599,27 @@ function menu_icons_css_generate() {
       $size = $pos == 'right' || $pos == 'left' ? $info['width'] : $info['height'];
       // Support private filesystem
       $css .= theme('menu_icons_css_item', array('mlid' => $item->mlid, 'path' => $image_url, 'size' => $size, 'height' => $info['height'], 'pos' => $pos, 'source' => $source_uri));
+
+      // Add a hover image when specified
+      if (!empty($options['menu_icon']['path_hover']) && file_exists($options['menu_icon']['path_hover'])) {
+        $image_path_hover = $options['menu_icon']['path_hover'];
+        $image_style_hover = (isset($options['menu_icon']['image_style_hover']) && !empty($options['menu_icon']['image_style_hover'])) ? $options['menu_icon']['image_style_hover'] : NULL;
+
+        if ($image_style_hover) {
+          $source_uri_hover = $image_path_hover;
+          $image_path_hover = image_style_path($image_style_hover, $source_uri_hover);
+            if (!file_exists($image_path_hover)) {
+              image_style_create_derivative(image_style_load($image_style_hover), $source_uri_hover, $image_path_hover);
+            }
+        }
+
+        // Retrieve the image dimensions
+        $info_hover = image_get_info($image_path_hover);
+        $image_url_hover = '/' . $wrapper->getDirectoryPath() . '/' . file_uri_target($image_path_hover);
+
+        // Support private filesystem
+        $css .= theme('menu_icons_css_item_hover', array('mlid' => $item->mlid, 'path' => $image_url_hover, 'size' => $info_hover['width'], 'pos' => $pos));
+      }
     }
   }
   $csspath = 'public://css';
@@ -546,6 +642,10 @@ function menu_icons_theme() {
       'variables' => array('mlid' => NULL, 'path' => NULL, 'size' => NULL, 'height' => NULL, 'pos' => NULL, 'source' => NULL),
       'template' => 'menu_icons_css_item',
     ),
+    'menu_icons_css_item_hover' => array(
+      'variables' => array('mlid' => NULL, 'path' => NULL, 'size' => NULL, 'pos' => NULL),
+      'template' => 'menu_icons_css_item_hover',
+    ),
   );
 }
 
diff --git a/menu_icons_css_item.tpl.php b/menu_icons_css_item.tpl.php
index bafaafc..5026ce5 100755
--- a/menu_icons_css_item.tpl.php
+++ b/menu_icons_css_item.tpl.php
@@ -19,4 +19,3 @@ a.menu-<?php print $mlid ?>, ul.links li.menu-<?php print $mlid ?> a {
   background-position: <?php print $pos?>;
   height: <?php print $height?>px;
 }
-
diff --git a/menu_icons_css_item_hover.tpl.php b/menu_icons_css_item_hover.tpl.php
new file mode 100644
index 0000000..f44e347
--- /dev/null
+++ b/menu_icons_css_item_hover.tpl.php
@@ -0,0 +1,26 @@
+<?php
+// $Id$
+
+/**
+* @file
+*
+* Template file for generating the CSS file used for the menu-items
+*/
+
+/**
+* Variables:
+* $mlid
+* $path
+*
+* @author dylan@opensourcery.com
+*/
+?>
+a:hover.menu-<?php print $mlid ?>,
+ul.links li.menu-<?php print $mlid ?> a:hover,
+a.active.menu-<?php print $mlid ?>,
+ul.links li.active.menu-<?php print $mlid ?> a,
+a.active-trail.menu-<?php print $mlid ?>,
+ul.links li.active-trail.menu-<?php print $mlid ?> a
+{
+  background-image: url(<?php print $path ?>);
+}
