diff --git a/modules/rooms_availability/includes/rooms_availability.booking_event.inc b/modules/rooms_availability/includes/rooms_availability.booking_event.inc
index c5e49ab..565fb53 100644
--- a/modules/rooms_availability/includes/rooms_availability.booking_event.inc
+++ b/modules/rooms_availability/includes/rooms_availability.booking_event.inc
@@ -240,6 +240,12 @@ class BookingEvent {
         $event['color'] = variable_get('rooms_on_request_color', '#C5C5C5');//'#C5C5C5';
         $event['title'] = 'ON-REQ';
         break;
+	  case ROOMS_MINIMUM_STAY:
+        $event['color'] = '#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 0f7b5dd..afca8d6 100644
--- a/modules/rooms_availability/rooms_availability.module
+++ b/modules/rooms_availability/rooms_availability.module
@@ -590,6 +590,7 @@ function rooms_availability_update_status_form($form, &$form_state, $month, $yea
     '-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',
   );
@@ -875,6 +876,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'
     ),
@@ -1023,6 +1025,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',
   );
@@ -1119,6 +1122,7 @@ function rooms_availability_event_manager_form($form, $form_state, $unit_id, $ev
     '-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',
   );
diff --git a/modules/rooms_booking/includes/rooms_booking.availability_agent.inc b/modules/rooms_booking/includes/rooms_booking.availability_agent.inc
index 790f7ae..b5a4f50 100644
--- a/modules/rooms_booking/includes/rooms_booking.availability_agent.inc
+++ b/modules/rooms_booking/includes/rooms_booking.availability_agent.inc
@@ -93,7 +93,6 @@ class AvailabilityAgent {
         return ROOMS_NO_ROOMS;
       }
     }
-    
     // If BUs = 1 then we want rooms that can sleep as big as the group size
     elseif ($this->booking_units == 1) {
       $query = new EntityFieldQuery();
@@ -115,7 +114,6 @@ class AvailabilityAgent {
       }
     }
     
-    
     // Of the rooms that fit the criteria lets see what availability we have
     if (count($results) > 0) {
       foreach ($results['rooms_unit'] as $unit) {
@@ -150,7 +148,16 @@ class AvailabilityAgent {
           $units[$unit->type][$full_price][$unit->unit_id]['price'] = $full_price;
           $units[$unit->type][$full_price][$unit->unit_id]['booking_price'] = $price['booking_price'];
           if (in_array(ROOMS_ON_REQUEST, $states)) {
-            $units[$unit->type][$full_price][$unit->unit_id]['state'] = ROOMS_ON_REQUEST;  
+            $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;  
@@ -212,7 +219,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;  
       }
     }
@@ -224,5 +239,4 @@ class AvailabilityAgent {
      return $units; 
     }
   }
-  
 }
diff --git a/modules/rooms_booking_manager/rooms_booking_manager.module b/modules/rooms_booking_manager/rooms_booking_manager.module
index 8c0e36c..64eea03 100644
--- a/modules/rooms_booking_manager/rooms_booking_manager.module
+++ b/modules/rooms_booking_manager/rooms_booking_manager.module
@@ -15,6 +15,8 @@ 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);
 define ('FIRST_NIGHT_PAYMENT', 12);
@@ -127,7 +129,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 +227,27 @@ function rooms_booking_manager_present_individual_rooms($units_per_type, $conten
 
     foreach ($price_level as $price => $units) {
       foreach ($units as $unit_id => $unit) {
-        // 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']);
+		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. Try ' . variable_get('rooms_minimum_stay_length', 5) . ' 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']);
+		}
       }
     }            
   }
@@ -333,9 +343,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 inimum 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(
@@ -592,6 +603,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>',
@@ -618,6 +636,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. Try ' . variable_get('rooms_minimum_stay_length', 5) . ' Nights.'),
+          '#suffix' => '</td><td></td><td></td><tr>'
+        );
+	  }
 
       // Element to display price
       $form[$type . ':' . $price][$type . ':' . $price . ':price'] = array(
@@ -634,18 +659,26 @@ 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;
-      }
-      $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($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>',
+        );
+	  }
+		
+	
       if ($index == 0) {
         $form[$type . ':' . $price]['submit'] = array(
           '#prefix' => '<td style="width:15%;" class="room_placebooking"><div id="rooms_booking_button">',
@@ -686,17 +719,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'));
+  }
 }
 
 /**
@@ -731,11 +772,10 @@ function book_units_per_type_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), $group_size);
-  $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();
   
-  
   // We are going to check that this is still true - but let us try and service the order
   foreach ($order as $type => $price_serving) {
     foreach ($price_serving as $price_level => $unit_order) {
@@ -743,14 +783,17 @@ function book_units_per_type_form_submit(&$form, &$form_state) {
         $available_units = $units_per_type[$type][$price_level];
         for ($i = 1; $i <= $unit_order['quantity']; $i++) {
           $unit = array_pop($available_units);
-
-          // 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);
-          }
+		  if($unit['state'] !== ROOMS_MINIMUM_STAY_NOT_MET){
+			// 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);
+            }
+		  } else {
+			drupal_set_message("Could not adding booking to cart, minimum stay not met.");
+		  }
         }
       }
     }
diff --git a/modules/rooms_unit/rooms_unit.info b/modules/rooms_unit/rooms_unit.info
index 8168768..01735f8 100644
--- a/modules/rooms_unit/rooms_unit.info
+++ b/modules/rooms_unit/rooms_unit.info
@@ -21,4 +21,4 @@ files[] = views/rooms_unit_handler_edit_link_field.inc
 files[] = views/rooms_unit_handler_unit_operations_field.inc
 files[] = views/rooms_unit_handler_unit_type_field.inc
 
-files[] = test/rooms_unit_test.test
\ No newline at end of file
+files[] = test/rooms_unit_test.test
diff --git a/modules/rooms_unit/rooms_unit.module b/modules/rooms_unit/rooms_unit.module
index 39fd080..b3c551f 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 d234afe..7cded17 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', 7),
+  );
   
   return system_settings_form($form);
 }
\ No newline at end of file
