diff --git a/availability_calendar.field.inc b/availability_calendar.field.inc
index eb0794f..971393e 100644
--- a/availability_calendar.field.inc
+++ b/availability_calendar.field.inc
@@ -177,6 +177,7 @@ function availability_calendar_field_widget_info() {
   $settings = array(
     'show_number_of_months' => 18,
     // 6 = saturday = default change over day.
+    'allow_editing_past' => 0,
     'first_day_of_week' => variable_get('date_first_day', 6),
     'show_week_number' => 0,
     'show_only_first_letter' => 0,
@@ -260,6 +261,7 @@ function availability_calendar_field_formatter_info() {
   $settings = array(
     'show_number_of_months' => 12,
     // 6 = saturday = default change over day.
+    'allow_editing_past' => 0,
     'first_day_of_week' => variable_get('date_first_day', 6),
     'show_week_number' => 0,
     'show_only_first_letter' => 0,
@@ -344,6 +346,11 @@ function availability_calendar_field_widget_and_formatter_settings_form($field,
     '#required' => TRUE,
     '#element_validate' => array('element_validate_integer_positive'),
   );
+  $element['allow_editing_past'] = array(
+      '#type' => 'checkbox',
+      '#title' => $widget ? t('Allow editing past days') : t('Show state on past days'),
+      '#default_value' => $settings['allow_editing_past'],
+    );
   if ($widget) {
     $element['show_number_of_months']['#description'] = t('The number of months to show when the calendar is being edited. Setting this larger than the number of months shown to normal visitors, allows editors to enter information into future calendar months before it is made publicly available.');
   }
diff --git a/availability_calendar.theme.inc b/availability_calendar.theme.inc
index 62e66cc..6a90e53 100644
--- a/availability_calendar.theme.inc
+++ b/availability_calendar.theme.inc
@@ -327,16 +327,19 @@ function availability_calendar_month_cells($year, $month, $availability, $settin
     if (empty($availability[$day_iso]) || (int) $day->format('n') != $month) {
       $classes[] = 'cal-other';
     }
-    else if ($day_iso < $today_iso) {
+    else if ($day_iso < $today_iso && !$settings['allow_editing_past']) {
       $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 ($showSplitDays) {
+        if ($showSplitDays && !$settings['allow_editing_past']) {
           $classes[] = 'cal-pastdate-am';
         }
+        else if ($showSplitDays && isset($availability[$previous_day_iso])) {
+          $classes[] = $states[$availability[$previous_day_iso]]['css_class'] . '-am';
+        }
       }
       else if ($showSplitDays && isset($availability[$previous_day_iso])) {
         $classes[] = $states[$availability[$previous_day_iso]]['css_class'] . '-am';
diff --git a/availability_calendar.widget.inc b/availability_calendar.widget.inc
index 03a74ee..231da06 100644
--- a/availability_calendar.widget.inc
+++ b/availability_calendar.widget.inc
@@ -215,7 +215,8 @@ function availability_calendar_field_widget_month_form_validate_line($line, $ele
   $year = date('Y');
   $month = date('m');
   if (!checkdate(substr($parts[3], 5, 2), substr($parts[3], 8, 2), substr($parts[3], 0, 4))
-    || $parts[3] < date(AC_ISODATE, mktime(0, 0, 0, $month, 1, $year))) {
+    || ($parts[3] < date(AC_ISODATE, mktime(0, 0, 0, $month, 1, $year))
+    && !$element['availability_calendar']['#settings']['allow_editing_past'])) {
     return FALSE;
   }
   $months = $element['availability_calendar']['#settings']['show_number_of_months'];
