diff --git a/modules/rooms_availability/includes/rooms_availability.booking_event.inc b/modules/rooms_availability/includes/rooms_availability.booking_event.inc
index c5e49ab..8965e99 100644
--- a/modules/rooms_availability/includes/rooms_availability.booking_event.inc
+++ b/modules/rooms_availability/includes/rooms_availability.booking_event.inc
@@ -238,8 +238,15 @@ class BookingEvent {
         break;
       case ROOMS_ON_REQUEST:
         $event['color'] = variable_get('rooms_on_request_color', '#C5C5C5');//'#C5C5C5';
+        //$event['backgroundColor'] = 'grey';
         $event['title'] = 'ON-REQ';
         break;
+      case ROOMS_MINIMUM_STAY:
+        $event['color'] = variable_get('rooms_minimum_stay_color', '#C000C0');//'#C000C0';
+        $event['borderColor'] = '#04711B';
+        //$event['backgroundColor'] = 'purple';
+        $event['title'] = 'MIN';
+        break;
       case ($this->id < 0):
         $event['color'] = variable_get('rooms_unconfirmed_booking_color', '#8CBF62');//'#8CBF62';
         break;
diff --git a/modules/rooms_availability/rooms_availability.module b/modules/rooms_availability/rooms_availability.module
index 2fe8580..ba3ccaa 100644
--- a/modules/rooms_availability/rooms_availability.module
+++ b/modules/rooms_availability/rooms_availability.module
@@ -589,15 +589,16 @@ function rooms_availability_update_status_form($form, &$form_state, $month, $yea
   );
 
   $form['rooms_availability_update']['rooms_date_range'] = rooms_availability_date_range_fields($year, $month);
-  
+
   $state_options = array(
     '-1' => 'Choose a new status',
     ROOMS_NOT_AVAILABLE => 'Unavailable',
     ROOMS_AVAILABLE => 'Available',
+    ROOMS_MINIMUM_STAY => 'Available with Minimum Stay',
     ROOMS_ON_REQUEST => 'On Request',
     ROOMS_ANON_BOOKED => 'Anonymous Booking',
   );
-  
+
   $form['rooms_availability_update']['change_event_status'] = array(
     '#title' => t("Bookable Unit State"),
     '#type' => 'select',
@@ -879,6 +880,7 @@ function update_availability_calendar_form($form, &$form_state, $unit_id, $year,
     '#options' => array(
       ROOMS_NOT_AVAILABLE => 'Unavailable',
       ROOMS_AVAILABLE => 'Available',
+      ROOMS_MINIMUM_STAY => 'Available with Minimum Stay',
       ROOMS_ON_REQUEST => 'Available on Request',
       ROOMS_ANON_BOOKED => 'Anonymous Booking'
     ),
@@ -1027,6 +1029,7 @@ function rooms_availability_event_manager_page($unit, $event_id = NULL, $start_d
   $state_options = array(
     ROOMS_NOT_AVAILABLE => 'Unavailable',
     ROOMS_AVAILABLE => 'Available',
+    ROOMS_MINIMUM_STAY => 'Available with Minimum Stay',
     ROOMS_ON_REQUEST => 'On Request',
     ROOMS_ANON_BOOKED => 'Anonymous Booking',
   );
@@ -1299,11 +1302,32 @@ function rooms_availability_form_alter(&$form, &$form_state, $form_id) {
       '#size' => 10,
       '#maxlength' => 7,
       '#default_value' => variable_get('rooms_on_request_color', '#C5C5C5'),
-      '#element_validate' => array('rooms_availability_validate_hex_color'), 
-      '#dependency' => array('edit-row-options-colors-legend' => array('type')), 
-      '#prefix' => '<div class="rooms-colorpicker-wrapper">', 
-      '#suffix' => '<div class="rooms-colorpicker"></div></div>', 
-      '#attributes' => array('class' => array('rooms-edit-colorpicker')), 
+      '#element_validate' => array('rooms_availability_validate_hex_color'),
+      '#dependency' => array('edit-row-options-colors-legend' => array('type')),
+      '#prefix' => '<div class="rooms-colorpicker-wrapper">',
+      '#suffix' => '<div class="rooms-colorpicker"></div></div>',
+      '#attributes' => array('class' => array('rooms-edit-colorpicker')),
+      '#attached' => array(
+        // Add Farbtastic color picker.
+        'library' => array(
+          array('system', 'farbtastic'),
+        ),
+        // Add javascript to trigger the colorpicker.
+        'js' => array(drupal_get_path('module', 'rooms_availability') . '/js/rooms_color.js'),
+      ),
+    );
+
+    $form['color_statuses']['rooms_minimum_stay_color'] = array(
+      '#type' => 'textfield',
+      '#title' => t('Room available with mimimum stay'),
+      '#size' => 10,
+      '#maxlength' => 7,
+      '#default_value' => variable_get('rooms_minimum_stay_color', '#C000C0'),
+      '#element_validate' => array('rooms_availability_validate_hex_color'),
+      '#dependency' => array('edit-row-options-colors-legend' => array('type')),
+      '#prefix' => '<div class="rooms-colorpicker-wrapper">',
+      '#suffix' => '<div class="rooms-colorpicker"></div></div>',
+      '#attributes' => array('class' => array('rooms-edit-colorpicker')),
       '#attached' => array(
         // Add Farbtastic color picker.
         'library' => array(
@@ -1314,7 +1338,7 @@ function rooms_availability_form_alter(&$form, &$form_state, $form_id) {
       ),
     );
 
-    $form['color_statuses']['rooms_anon_booking_color'] = array(
+	  $form['color_statuses']['rooms_anon_booking_color'] = array(
       '#type' => 'textfield',
       '#title' => t('Anonymous booking'),
       '#size' => 10,
@@ -1341,22 +1365,21 @@ function rooms_availability_form_alter(&$form, &$form_state, $form_id) {
       '#size' => 10,
       '#maxlength' => 7,
       '#default_value' => variable_get('rooms_unconfirmed_booking_color', '#481600'),
-      '#element_validate' => array('rooms_availability_validate_hex_color'), 
-      '#dependency' => array('edit-row-options-colors-legend' => array('type')), 
-      '#prefix' => '<div class="rooms-colorpicker-wrapper">', 
-      '#suffix' => '<div class="rooms-colorpicker"></div></div>', 
-      '#attributes' => array('class' => array('rooms-edit-colorpicker')), 
+      '#element_validate' => array('rooms_availability_validate_hex_color'),
+      '#dependency' => array('edit-row-options-colors-legend' => array('type')),
+      '#prefix' => '<div class="rooms-colorpicker-wrapper">',
+      '#suffix' => '<div class="rooms-colorpicker"></div></div>',
+      '#attributes' => array('class' => array('rooms-edit-colorpicker')),
       '#attached' => array(
         // Add Farbtastic color picker.
         'library' => array(
           array('system', 'farbtastic'),
         ),
-        // Add javascript to trigger the colorpicker. 
+        // Add javascript to trigger the colorpicker.
         'js' => array(drupal_get_path('module', 'rooms_availability') . '/js/rooms_color.js'),
       ),
     );
 
-
   }
 }
 
diff --git a/modules/rooms_booking/includes/rooms_booking.availability_agent.inc b/modules/rooms_booking/includes/rooms_booking.availability_agent.inc
index b67cea3..5032c25 100644
--- a/modules/rooms_booking/includes/rooms_booking.availability_agent.inc
+++ b/modules/rooms_booking/includes/rooms_booking.availability_agent.inc
@@ -179,6 +179,15 @@ class AvailabilityAgent {
           if (in_array(ROOMS_ON_REQUEST, $states)) {
             $units[$unit->type][$full_price][$unit->unit_id]['state'] = ROOMS_ON_REQUEST;
           }
+          elseif (in_array(ROOMS_MINIMUM_STAY, $states)) {
+            $diff = $this->end_date->format('U') - $this->start_date->format('U');
+            $diff_days = $diff / 86400;
+            if($diff_days <  (variable_get('rooms_minimum_stay_length', 5) - 1)){
+              $units[$unit->type][$full_price][$unit->unit_id]['state'] = ROOMS_MINIMUM_STAY_NOT_MET;
+            } else {
+              $units[$unit->type][$full_price][$unit->unit_id]['state'] = ROOMS_AVAILABLE; 
+            }
+          }
           else {
             $units[$unit->type][$full_price][$unit->unit_id]['state'] = ROOMS_AVAILABLE;
           }
@@ -238,7 +247,15 @@ class AvailabilityAgent {
       if (in_array(ROOMS_ON_REQUEST, $states)) {
         $units[$unit->unit_id]['state'] = ROOMS_ON_REQUEST;
       }
-      else {
+      elseif (in_array(ROOMS_MINIMUM_STAY, $states)) {
+        $diff = $this->end_date->format('U') - $this->start_date->format('U');
+        $diff_days = $diff / 86400;
+        if($diff_days <  (variable_get('rooms_minimum_stay_length', 5) - 1)){
+          $units[$unit->unit_id]['state'] = ROOMS_MINIMUM_STAY_NOT_MET;
+        } else {
+          $units[$unit->unit_id]['state'] = ROOMS_AVAILABLE;
+        }
+      } else {
         $units[$unit->unit_id]['state'] = ROOMS_AVAILABLE;
       }
     }
diff --git a/modules/rooms_booking_manager/rooms_booking_manager.module b/modules/rooms_booking_manager/rooms_booking_manager.module
index d68b960..1e6b36f 100644
--- a/modules/rooms_booking_manager/rooms_booking_manager.module
+++ b/modules/rooms_booking_manager/rooms_booking_manager.module
@@ -14,6 +14,7 @@ define ('ROOMS_AVAILABILITY_FAILURE', 1);
 define ('ROOMS_NO_ROOMS', 2);
 define ('ROOMS_PER_TYPE', 'rooms_per_type');
 define ('ROOMS_INDIVIDUAL', 'rooms_individual');
+define ('ROOMS_MINIMUM_STAY_NOT_MET', 5);
 
 define ('FULL_PAYMENT', 10);
 define ('PERCENT_PAYMENT', 11);
@@ -127,7 +128,7 @@ function rooms_booking_manager_results_page($start_date = 0, $end_date = 0, $gro
     // Get all the units - note: we instantiate the Availability Agent using the date form set by the user
     $date_format = str_replace('-', '/', variable_get('rooms_date_format', 'd-m-Y'));
     $agent = new AvailabilityAgent($start_date->format($date_format), $end_date->format($date_format), $group_size, $b_units);
-    $agent->setValidStates(variable_get('rooms_valid_availability_states', array(ROOMS_AVAILABLE, ROOMS_ON_REQUEST, ROOMS_UNCONFIRMED_BOOKINGS)));
+    $agent->setValidStates(variable_get('rooms_valid_availability_states', array(ROOMS_AVAILABLE, ROOMS_ON_REQUEST, ROOMS_UNCONFIRMED_BOOKINGS, ROOMS_MINIMUM_STAY)));
 
     $units_per_type = $agent->checkAvailability();
     if (($units_per_type == ROOMS_NO_ROOMS) || ($units_per_type == ROOMS_SIZE_FAILURE)) {
@@ -225,19 +226,27 @@ function rooms_booking_manager_present_individual_rooms($units_per_type, $conten
 
     foreach ($price_level as $price => $units) {
       foreach ($units as $unit_id => $unit) {
+        if ($unit['state'] == ROOMS_MINIMUM_STAY_NOT_MET) {
+          $content['units_per_type'][$type][$price][$unit_id] = array(
+            '#prefix' => '<div class="minimum_stay_not_met" style="font-weight:bold">',
+            '#markup' =>  t('This unit requires a minimum booking length, which you have not met. Please re-try your search with a stay of at least ' . variable_get('rooms_minimum_stay_length') . ' nights.'),
+            '#suffix' => '</div>'
+            );
+        } else {
         // Load the unit and render
         $unit_obj = rooms_unit_load($unit_id);
-        $controller = entity_get_controller('rooms_unit');
-        $unit_content = $controller->view(array($unit_id => $unit_obj));
-        $content['units_per_type'][$type][$price][$unit_id]['unit'] = $unit_content;
-        $content['units_per_type'][$type][$price][$unit_id]['price'] = array(
-          '#prefix' => '<div class="unit_price" style="font-weight:bold">',
-          '#markup' =>  t('Cost:') . ' ' . $unit['price'] . ' ' . $currency_symbol,
-          '#suffix' => '</div>'
-        );
-        // Add purchase forms - passing through hook_forms to handle multiple forms on the page
-        $form = 'book_unit_form_' . $unit_id;
-        $content['units_per_type'][$type][$price][$unit_id]['book_unit_form'] = drupal_get_form($form, $unit_obj, $start_date, $end_date, $unit['state']);
+          $controller = entity_get_controller('rooms_unit');
+          $unit_content = $controller->view(array($unit_id => $unit_obj));
+          $content['units_per_type'][$type][$price][$unit_id]['unit'] = $unit_content;
+          $content['units_per_type'][$type][$price][$unit_id]['price'] = array(
+            '#prefix' => '<div class="unit_price" style="font-weight:bold">',
+            '#markup' =>  t('Cost:') . ' ' . $unit['price'] . ' ' . $currency_symbol,
+            '#suffix' => '</div>'
+          );
+          // Add purchase forms - passing through hook_forms to handle multiple forms on the page
+          $form = 'book_unit_form_' . $unit_id;
+          $content['units_per_type'][$type][$price][$unit_id]['book_unit_form'] = drupal_get_form($form, $unit_obj, $start_date, $end_date, $unit['state']);
+        }
       }
     }
   }
@@ -333,9 +342,10 @@ function rooms_booking_manager_form_alter(&$form, &$form_state, $form_id) {
       '#options' => array(
         ROOMS_AVAILABLE => t('Rooms marked as available.'),
         ROOMS_ON_REQUEST => t('Rooms marked as available on request.'),
-        //ROOMS_UNCONFIRMED_BOOKINGS => t('Unconfirmed Bookings'),
+        ROOMS_UNCONFIRMED_BOOKINGS => t('Unconfirmed Bookings'),
+        ROOMS_MINIMUM_STAY => t('Rooms marked as available with minimum stay'),
       ),
-      '#default_value' => variable_get('rooms_valid_availability_states', array(ROOMS_AVAILABLE, ROOMS_ON_REQUEST)),
+      '#default_value' => variable_get('rooms_valid_availability_states', array(ROOMS_AVAILABLE, ROOMS_ON_REQUEST, ROOMS_UNCONFIRMED_BOOKINGS, ROOMS_MINIMUM_STAY)),
     );
 
     $form['rooms_payment_options'] = array(
@@ -509,7 +519,7 @@ function book_unit_form_submit(&$form, &$form_state) {
   // Let us get the available rooms again and match the order against actual rooms
   $date_format = str_replace('-', '/', variable_get('rooms_date_format', 'd-m-Y'));
   $agent = new AvailabilityAgent($sd->format($date_format), $ed->format($date_format));
-  $agent->setValidStates(variable_get('rooms_valid_availability_states', array(ROOMS_AVAILABLE, ROOMS_ON_REQUEST)));
+  $agent->setValidStates(variable_get('rooms_valid_availability_states', array(ROOMS_AVAILABLE, ROOMS_ON_REQUEST, ROOMS_MINIMUM_STAY)));
 
   // Let us make sure our bookable unit is still available
   $available_units = $agent->checkAvailabilityForUnit($unit_id);
@@ -599,6 +609,13 @@ function book_units_per_type_form($form, $form_state, $units_per_type, $start_da
     );
 
     foreach ($units_per_price as $price => $units) {
+      $unit_count = count($units);
+
+      foreach ($units as $unit) {
+        if ($unit['state'] == ROOMS_MINIMUM_STAY_NOT_MET) {
+          $unit_count--;
+        }
+      }
 
       $form[$type . ':' . $price][$type . ':' . $price . ':open-markup'] = array(
         '#markup' => '<table>',
@@ -625,6 +642,13 @@ function book_units_per_type_form($form, $form_state, $units_per_type, $start_da
           '#suffix' => '</td><td></td><td></td></tr>',
         );
       }
+      if ($unit_count === 0) {
+        $form[$type . ':' . $price][$type . ':' . $price . ':minimum_stay_not_met'] = array(
+          '#prefix' => '<tr><td class="minimum_stay_not_met" style="font-weight:bold">',
+          '#markup' =>  t('This unit requires a minimum booking length, which you have not met. Please re-try your search with a stay of at least ' . variable_get('rooms_minimum_stay_length') . ' nights.'),
+          '#suffix' => '</td><td></td><td></td><tr>'
+        );
+      }
 
       // Element to display price
       $form[$type . ':' . $price][$type . ':' . $price . ':price'] = array(
@@ -641,17 +665,24 @@ function book_units_per_type_form($form, $form_state, $units_per_type, $start_da
       );
 
       // Dropdown to select quantity
-      $options = array();
-      for ($i = 0; $i <= count($units); $i++) {
-        $options[$i] = $i;
+      if ($unit_count !== 0) {
+        $options = array();
+        for ($i = 0; $i <= $unit_count; $i++) {
+          $options[$i] = $i;
+        }
+        $form[$type . ':' . $price][$type . ':' . $price . ':quantity'] = array(
+          '#prefix' => '<td style="width:15%;" class="room_units">',
+          '#title' => t('Units'),
+          '#type' => 'select',
+          '#options' => $options,
+          '#suffix' => '</td>',
+        );
+      } else {
+        $form[$type . ':' . $price][$type . ':' . $price . ':quantity'] = array(
+          '#prefix' => '<td style="width:15%;" class="room_units">',
+          '#suffix' => '</td>',
+        );
       }
-      $form[$type . ':' . $price][$type . ':' . $price . ':quantity'] = array(
-        '#prefix' => '<td style="width:15%;" class="room_units">',
-        '#title' => t('Units'),
-        '#type' => 'select',
-        '#options' => $options,
-        '#suffix' => '</td>',
-      );
 
       if ($index == 0) {
         $form[$type . ':' . $price]['submit'] = array(
@@ -661,7 +692,6 @@ function book_units_per_type_form($form, $form_state, $units_per_type, $start_da
           '#submit' => $submit + array('book_units_per_type_form_submit'),
           '#suffix' => '</div></td></tr>',
         );
-
         $index++;
       }
       else {
@@ -693,17 +723,25 @@ function book_units_per_type_form($form, $form_state, $units_per_type, $start_da
 
 
 function book_units_per_type_form_validate(&$form, &$form_state) {
+  $minimum = false;
   foreach ($form_state['complete form'] as $key => $value) {
     if (isset($value['submit'])) {
       if (isset($value[$key . ':quantity']) && is_array($value)) {
-        if ($value[$key . ':quantity']['#value'] != 0) {
-          return;
+        if (isset($value[$key . ':quantity']['#value'])) {
+          if ($value[$key . ':quantity']['#value'] != 0) {
+            return;
+          }
+        } else {
+          $minimum = true;
         }
       }
     }
   }
-
-  form_set_error('', t('Please select a unit in order to continue with booking'));
+  if ($minimum) {
+    form_set_error('', t('No rooms are available for booking'));
+  } else {
+    form_set_error('', t('Please select a unit in order to continue with booking'));
+  }
 }
 
 /**
@@ -744,19 +782,22 @@ function book_units_per_type_form_submit(&$form, &$form_state) {
       if ($unit_order['quantity'] > 0) {
         for ($i = 1; $i <= $unit_order['quantity']; $i++) {
           $agent = new AvailabilityAgent($sd->format($date_format), $ed->format($date_format), 1, 1, array(), array($type));
-          $agent->setValidStates(variable_get('rooms_valid_availability_states', array(ROOMS_AVAILABLE, ROOMS_ON_REQUEST)));
+          $agent->setValidStates(variable_get('rooms_valid_availability_states', array(ROOMS_AVAILABLE, ROOMS_ON_REQUEST, ROOMS_MINIMUM_STAY)));
 
           $units_per_type = $agent->checkAvailability();
           $available_units = $units_per_type[$type][$price_level];
 
           $unit = array_pop($available_units);
+          if ($unit['state'] !== ROOMS_MINIMUM_STAY_NOT_MET) {
+            // Create line item
+            $line_item = rooms_create_line_item($unit, $agent);
 
-          // Create line item
-          $line_item = rooms_create_line_item($unit, $agent);
-
-          // Add line item to cart
-          if (!empty($line_item)) {
-            $line_item = commerce_cart_product_add($user->uid, $line_item, FALSE);
+            // Add line item to cart
+            if (!empty($line_item)) {
+              $line_item = commerce_cart_product_add($user->uid, $line_item, FALSE);
+            }
+          } else {
+            drupal_set_message("Could not adding booking to cart, minimum stay not met.");
           }
         }
       }
diff --git a/modules/rooms_unit/rooms_unit.module b/modules/rooms_unit/rooms_unit.module
index d51a5c4..ac19354 100644
--- a/modules/rooms_unit/rooms_unit.module
+++ b/modules/rooms_unit/rooms_unit.module
@@ -14,6 +14,7 @@ define ('ROOMS_NOT_AVAILABLE', 0);
 define ('ROOMS_AVAILABLE', 1);
 define ('ROOMS_ON_REQUEST', 2);
 define ('ROOMS_ANON_BOOKED', 3);
+define ('ROOMS_MINIMUM_STAY', 4);
 
 define ('ROOMS_UNCONFIRMED_BOOKINGS', -1);
 
diff --git a/rooms_ui.module b/rooms_ui.module
index c08f828..cda0d70 100644
--- a/rooms_ui.module
+++ b/rooms_ui.module
@@ -62,6 +62,20 @@ function rooms_booking_settings(){
     ),
     '#default_value' => variable_get('rooms_booking_start_date', 1),
   );
-  
+
+  $form['rooms_booking_settings']['rooms_minimum_stay_length'] = array(
+    '#type' => 'select',
+    '#title' => t('How long is the minimum stay.'),
+    '#options' => array(
+      '1' => t('1 night '),
+      '2' => t('2 nights'),
+      '3' => t('3 nights'),
+      '4' => t('4 nights'),
+      '5' => t('5 nights'),
+      '6' => t('6 nights'),
+      '7' => t('7 nights'),
+    ),
+    '#default_value' => variable_get('rooms_minimum_stay_length', 1),
+  );
   return system_settings_form($form);
 }
