diff --git a/fullcalendar.install b/fullcalendar.install
index a272de9..fe0c78b 100644
--- a/fullcalendar.install
+++ b/fullcalendar.install
@@ -46,6 +46,7 @@ function fullcalendar_requirements($phase) {
 function fullcalendar_uninstall() {
   variable_del('fullcalendar_path');
   variable_del('fullcalendar_compression_type');
+  variable_del('fullcalendar_tpl_render');
 }
 
 /**
diff --git a/includes/fullcalendar.admin.inc b/includes/fullcalendar.admin.inc
index eac168b..2fc5876 100644
--- a/includes/fullcalendar.admin.inc
+++ b/includes/fullcalendar.admin.inc
@@ -9,12 +9,10 @@
  * General configuration form for controlling the FullCalendar behaviour.
  */
 function fullcalendar_admin_settings() {
-  $fullcalendar_path = variable_get('fullcalendar_path', FULLCALENDAR_PATH);
-
   $form['fullcalendar_path'] = array(
     '#type' => 'textfield',
     '#title' => t('Path to FullCalendar'),
-    '#default_value' => $fullcalendar_path,
+    '#default_value' => variable_get('fullcalendar_path', FULLCALENDAR_PATH),
     '#description' => t('Enter the path relative to Drupal root where the FullCalendar plugin directory is located.'),
   );
   $form['fullcalendar_compression_type'] = array(
@@ -26,6 +24,13 @@ function fullcalendar_admin_settings() {
     ),
     '#default_value' => variable_get('fullcalendar_compression_type', 'min'),
   );
+  // @todo Switch the default value to FALSE before stable.
+  $form['fullcalendar_tpl_render'] = array(
+    '#type' => 'checkbox',
+    '#title' => t('Allow old-style fullcalendar.tpl.php files'),
+    '#default_value' => variable_get('fullcalendar_tpl_render', TRUE),
+    '#description' => t('FullCalendar no longer uses template files by default, add extra processing to enable them. Disabling this will improve performance.'),
+  );
 
   return system_settings_form($form);
 }
diff --git a/theme/theme.inc b/theme/theme.inc
index c97489c..394ef40 100644
--- a/theme/theme.inc
+++ b/theme/theme.inc
@@ -50,6 +50,17 @@ function template_preprocess_fullcalendar(&$variables) {
   else {
     $variables['element']['content']['events'] = $events;
   }
+
+  // Older fullcalendar.tpl.php files expect $rows to contain arrays of content.
+  // At a minimum, provide an empty array, or individually render each event.
+  // @todo Switch the default value to FALSE before stable.
+  $variables['items'] = $variables['rows'];
+  $variables['rows'] = array();
+  if (variable_get('fullcalendar_tpl_render', TRUE)) {
+    foreach ($events as $event) {
+      $variables['rows'][] = drupal_render($event);
+    }
+  }
 }
 
 /**
