diff -urN availability_calendars(ori)/availability_calendar.field.inc availability_calendars/availability_calendar.field.inc
--- availability_calendars(ori)/availability_calendar.field.inc	2012-06-20 19:00:25.000000000 +0530
+++ availability_calendars/availability_calendar.field.inc	2012-06-30 10:01:12.709625886 +0530
@@ -163,6 +163,7 @@
     'show_week_number' => 0,
     'show_only_first_letter' => 0,
     'show_split_day' => 0,
+    'allow_one_day_of_week' => variable_get('allow_one_day_of_week'),
   );
   $viewport_settings = $settings + array('viewport' => array(
     'cols' => 3,
@@ -252,6 +253,7 @@
     'show_week_number' => 0,
     'show_only_first_letter' => 0,
     'show_split_day' => 1,
+    'allow_one_day_of_week' => variable_get('allow_one_day_of_week'),
     'selectable' => module_exists('availability_calendar_booking_formlet'),
   );
   $viewport_settings = $settings + array('viewport' => array(
@@ -348,6 +350,22 @@
     '#description' => t('Check this option if you want to show bookings from pm to am next morning.'),
     '#default_value' => $settings['show_split_day'],
   );
+  $element['allow_one_day_of_week'] = array(
+    '#type' => 'select',
+    '#title' => t('Allow only one day of week'),
+    '#default_value' => $settings['allow_one_day_of_week'],
+    // Use ISO-8601 week day numbers.
+    '#options' => array(
+      1 => t('Monday'),
+      2 => t('Tuesday'),
+      3 => t('Wednesday'),
+      4 => t('Thursday'),
+      5 => t('Friday'),
+      6 => t('Saturday'),
+      7 => t('Sunday'),
+      8 => t('Allow all days'),
+    ),
+  );
   if (!$widget) {
     $element['selectable'] = array(
       '#type' => 'checkbox',
@@ -355,6 +373,23 @@
       '#description' => t('Check this option if you want to let users interact with the calendar by clicking on available dates.'),
       '#default_value' => $settings['selectable'],
     );
+    $element['allow_one_day_of_week'] = array(
+      '#type' => 'select',
+      '#title' => t('Allow only one day of week'),
+      '#default_value' => $settings['allow_one_day_of_week'],
+      // Use ISO-8601 week day numbers.
+      '#options' => array(
+        1 => t('Monday'),
+        2 => t('Tuesday'),
+        3 => t('Wednesday'),
+        4 => t('Thursday'),
+        5 => t('Friday'),
+        6 => t('Saturday'),
+        7 => t('Sunday'),
+        8 => t('Allow all days'),
+    ),
+  );
+
   }
   if ($type == 'availability_calendar_viewport') {
     $element['viewport'] = array(
diff -urN availability_calendars(ori)/availability_calendar.theme.inc availability_calendars/availability_calendar.theme.inc
--- availability_calendars(ori)/availability_calendar.theme.inc	2012-06-20 19:00:25.000000000 +0530
+++ availability_calendars/availability_calendar.theme.inc	2012-06-30 16:50:38.221461433 +0530
@@ -255,6 +255,8 @@
   }
 
   // We are going to create an array with all days we want to show.
+  $allowed_day = $settings['allow_one_day_of_week'];
+
   $states = availability_calendar_get_states();
   $total_days = $days_to_prepend + $days_in_month + $days_to_append;
   $today_iso = date(AC_ISODATE);
@@ -265,6 +267,8 @@
   for($i = 0; $i < $total_days; $i++) {
     $day_iso = $day->format(AC_ISODATE);
     $classes = array();
+
+
     if (empty($availability[$day_iso]) || (int) $day->format('n') != $month) {
       $classes[] = 'cal-other';
     }
@@ -272,23 +276,47 @@
       $classes[] = 'cal-pastdate';
     }
     else {
-      // Special state for today and don't show yesterday's state as that is a past date.
-      if ($day_iso == $today_iso) {
-        $classes[] = 'cal-today';
-        if ($settings['show_split_day']) {
-          $classes[] = 'cal-pastdate-am';
+      if ($allowed_day != 8) {
+        if ($day->format('N') !== $allowed_day) {
+          $classes[] = 'cal-other';
+        } else {
+          // Special state for today and don't show yesterday's state as that is a past date.
+          if ($day_iso == $today_iso) {
+            $classes[] = 'cal-today';
+            if ($settings['show_split_day']) {
+              $classes[] = 'cal-pastdate-am';
+            }
+          }
+          else if ($settings['show_split_day'] && isset($availability[$previous_day_iso])) {
+            $classes[] = $states[$availability[$previous_day_iso]]['css_class'] . '-am';
+          }
+
+          $state = $states[$availability[$day_iso]]['css_class'];
+          if ($settings['show_split_day']) {
+            $state .= '-pm';
+          }
+          $classes[] = $state;
+        }
+      } else {
+          // Special state for today and don't show yesterday's state as that is a past date.
+          if ($day_iso == $today_iso) {
+            $classes[] = 'cal-today';
+            if ($settings['show_split_day']) {
+              $classes[] = 'cal-pastdate-am';
+            }
+          }
+          else if ($settings['show_split_day'] && isset($availability[$previous_day_iso])) {
+            $classes[] = $states[$availability[$previous_day_iso]]['css_class'] . '-am';
+          }
+
+          $state = $states[$availability[$day_iso]]['css_class'];
+          if ($settings['show_split_day']) {
+            $state .= '-pm';
+          }
+          $classes[] = $state;
         }
-      }
-      else if ($settings['show_split_day'] && isset($availability[$previous_day_iso])) {
-        $classes[] = $states[$availability[$previous_day_iso]]['css_class'] . '-am';
-      }
-
-      $state = $states[$availability[$day_iso]]['css_class'];
-      if ($settings['show_split_day']) {
-        $state .= '-pm';
-      }
-      $classes[] = $state;
     }
+
     $cell_contents = availability_calendar_theme_day((int) $day->format('j'), $settings);
     $cells[$day_iso] = array('data' => $cell_contents, 'class' => $classes);
     $day->modify('+1 day');
diff -urN availability_calendars(ori)/booking_formlet/availability_calendar_booking_formlet.js availability_calendars/booking_formlet/availability_calendar_booking_formlet.js
--- availability_calendars(ori)/booking_formlet/availability_calendar_booking_formlet.js	2012-06-20 19:00:25.000000000 +0530
+++ availability_calendars/booking_formlet/availability_calendar_booking_formlet.js	2012-06-30 17:50:36.413437344 +0530
@@ -51,41 +51,11 @@
       $('input[name="calendar_label"]', instanceId).val(calendarLabel);
     }
 
-    if (from === null) {
-      from = date;
-    }
-    else {
-      var shiftTo = true;
-      if (to !== null) {
-        Drupal.availabilityCalendar.get(cid).restoreRangeState(from, to);
-        if (date < from) {
-          from = date;
-          shiftTo = false;
-        }
-        else {
-          to = date;
-        }
-      }
-      else {
-        if (date >= from) {
-          to = date;
-        }
-        else {
-          to = from;
-          from = date;
-        }
-      }
-
-      if (Drupal.availabilityCalendar.get(cid).isSplitDay() && shiftTo) {
-        // Split day: to date = departure date = am only: store as "from" to "to - 1 day".
-        to.setDate(to.getDate() - 1);
-        if (to < from) {
-          // In the split day situation, clicking twice on the same day results
-          // in an empty period: refuse.
-          to = null;
-        }
-      }
+    if (from !== null) {
+      resetBoth();
     }
+    from = date;
+    to = date;
     show();
   };
 
