diff --git includes/event-organiser-archives.php includes/event-organiser-archives.php
index 39f95d8..d408b80 100644
--- includes/event-organiser-archives.php
+++ includes/event-organiser-archives.php
@@ -79,7 +79,7 @@ function eventorganiser_pre_get_posts( $query ) {
 				$query->set('ondate',false);
 			}
 		}
-	
+
 		$query->set( 'post_type', 'event' );
 		$query->set( 'event_start_before', $ondate_end );
 		$query->set( 'event_end_after', $ondate_start );
@@ -93,10 +93,10 @@ function eventorganiser_pre_get_posts( $query ) {
 	//@see https://github.com/stephenharris/Event-Organiser/issues/30
 	if( $query->is_main_query() ){
 		if( eo_is_event_archive( 'day' ) || eo_is_event_archive( 'month' ) || eo_is_event_archive( 'year' ) ){
-			$query->set( 'showpastevents', true );  
+			$query->set( 'showpastevents', true );
 		}
-	}   
-		
+	}
+
 	$blog_now = new DateTime(null, eo_get_blog_timezone());
 
 	//Determine whether or not to show past events and each occurrence. //If not set, use options
@@ -277,9 +277,9 @@ function wp17853_eventorganiser_workaround( $limit ){
  */
 function eventorganiser_event_fields( $select, $query ){
 	global $wpdb;
-	
+
 	$q_fields = $query->get( 'fields' );
-	
+
 	if( eventorganiser_is_event_query( $query, true ) && 'ids' != $q_fields && 'id=>parent' != $q_fields ){
 		$et =$wpdb->eo_events;
 		$select .= ", {$et}.event_id, {$et}.event_id AS occurrence_id, {$et}.StartDate, {$et}.StartTime, {$et}.EndDate, {$et}.FinishTime, {$et}.event_occurrence ";
@@ -336,8 +336,8 @@ function eventorganiser_join_tables( $join, $query ){
 
 	if( eventorganiser_is_event_query( $query, true ) ){
 		if( 'series'== $query->get('group_events_by') ) {
-			$join .= " LEFT JOIN 
-						( SELECT * FROM {$wpdb->eo_events} ORDER BY {$wpdb->eo_events}.StartDate ASC, {$wpdb->eo_events}.StartTime ASC ) 
+			$join .= " LEFT JOIN
+						( SELECT * FROM {$wpdb->eo_events} ORDER BY {$wpdb->eo_events}.StartDate ASC, {$wpdb->eo_events}.StartTime ASC )
 						AS {$wpdb->eo_events} ON $wpdb->posts.id = {$wpdb->eo_events}.post_id ";
 
 		}else{
@@ -355,29 +355,29 @@ function eventorganiser_join_tables( $join, $query ){
  * @return bool True if the query is an event query. False otherwise.
  */
 function eventorganiser_is_event_query( $query, $exclusive = false ){
-		
+
 	$post_types = $query->get( 'post_type' );
 
 	if( 'any' == $post_types ){
 		$post_types = get_post_types( array('exclude_from_search' => false) );
-	}	
-	
+	}
+
 	if( 'event' == $post_types || array( 'event' ) == $post_types ){
 		$bool = true;
-	
+
 	}elseif( ( $query && $query->is_feed( 'eo-events' ) ) || is_feed( 'eo-events' ) ){
 		$bool = true;
-		
+
 	}elseif( empty( $post_types ) && eo_is_event_taxonomy( $query ) ){
-		
+
 		//Querying by taxonomy - check if 'event' is the only post type
 		$post_types = array();
 		$taxonomies = wp_list_pluck( $query->tax_query->queries, 'taxonomy' );
-		
+
 		foreach ( get_post_types() as $pt ) {
-			
+
 			$object_taxonomies = ( $pt === 'attachment' ? get_taxonomies_for_attachments() : get_object_taxonomies( $pt ) );
-			
+
 			if ( array_intersect( $taxonomies, $object_taxonomies ) ) {
 				$post_types[] = $pt;
 			}
@@ -397,27 +397,27 @@ function eventorganiser_is_event_query( $query, $exclusive = false ){
 		}
 	}elseif( $exclusive ){
 		$bool = false;
-		
+
 	}elseif( ( is_array( $post_types ) && in_array( 'event', $post_types ) ) ){
-		
+
 		$bool = true;
-		
+
 	}else{
 		$bool = false;
-		
+
 	}
 
 	/**
 	 * Filters whether the query is an event query.
-	 * 
-	 * This should be `true` if the query is for events, `false` otherwise. The 
-	 * third parameter, `$exclusive` qualifies if this means 'query exclusively 
-	 * for events' or not. If `true` then this filter should return `true` only 
+	 *
+	 * This should be `true` if the query is for events, `false` otherwise. The
+	 * third parameter, `$exclusive` qualifies if this means 'query exclusively
+	 * for events' or not. If `true` then this filter should return `true` only
 	 * if the query is exclusively for events.
-	 * 
+	 *
 	 * @param bool     $bool      Whether the query is an event query.
 	 * @param WP_Query $query     The WP_Query instance to check.
-	 * @param bool     $exclusive Whether the check if for queries exclusively for events. 
+	 * @param bool     $exclusive Whether the check if for queries exclusively for events.
 	 */
 	return apply_filters( 'eventorganiser_is_event_query', $bool, $query, $exclusive );
 }
@@ -452,20 +452,20 @@ function eventorganiser_events_where( $where, $query ){
 			$occurrence_id =$query->query_vars['event_occurrence_id'];
 			$where .= $wpdb->prepare(" AND {$wpdb->eo_events}.event_id=%d ",$occurrence_id);
 		endif;
-		
+
 		//https://core.trac.wordpress.org/ticket/16471
 		if( isset( $query->query_vars['event_occurrence__not_in'] ) ):
 			$occurrence__not_in = implode(', ', array_map( 'intval', $query->query_vars['event_occurrence__not_in'] ) );
 			$where .= " AND {$wpdb->eo_events}.event_id NOT IN({$occurrence__not_in}) ";
 		endif;
-		
+
 		//https://core.trac.wordpress.org/ticket/16471
 		if( isset( $query->query_vars['event_occurrence__in'] ) ):
 			$occurrence__in = implode(', ', array_map( 'intval', $query->query_vars['event_occurrence__in'] ) );
 			$where .= " AND {$wpdb->eo_events}.event_id IN({$occurrence__in}) ";
 		endif;
 
-		//Check date ranges were are interested in. 
+		//Check date ranges were are interested in.
 		$date_queries = array(
 			'event_start_after'=>array(
 				'notstrict' =>" AND {$wpdb->eo_events}.StartDate >= %s ",
@@ -493,10 +493,10 @@ function eventorganiser_events_where( $where, $query ){
 				$time = eo_format_date($datetime,'H:i:s');
 				if( $time == '00:00:00' ){
 					$sql = $_sql['notstrict'];
-					$where .= $wpdb->prepare($sql, $date);				
+					$where .= $wpdb->prepare($sql, $date);
 				}else{
 					$sql = $_sql['strict'];
-					$where .= $wpdb->prepare($sql, $date, $date, $time);				
+					$where .= $wpdb->prepare($sql, $date, $date, $time);
 				}
 			}
 		}
@@ -563,7 +563,7 @@ function eo_is_venue(){
 
 
 function _eventorganiser_update_event_dates_cache( $events, $query ){
-	
+
 	// No point in doing all this work if we didn't match any posts.
 	if ( ! $events ) {
 		return $events;
@@ -573,7 +573,7 @@ function _eventorganiser_update_event_dates_cache( $events, $query ){
 	if ( version_compare( PHP_VERSION, '5.3.0' ) < 0 ) {
 		return $events;
 	}
-	
+
 	//TODO do we need to check if $events is an array of WP_Post objects?
 	//TODO allow this to be skipped?
 
@@ -582,25 +582,25 @@ function _eventorganiser_update_event_dates_cache( $events, $query ){
 	}
 
 	$tz = eo_get_blog_timezone();
-	
+
 	foreach ( $events as $event ) {
-		
+
 		$id = $event->ID;
 		$cached_event = wp_cache_get( 'eventorganiser_occurrences_'.$id );
-		
+
 		if ( isset( $cached_event[$event->occurrence_id] ) ) {
 			continue;
 		}
-		
+
 		$cached_event[$event->occurrence_id] = 	array(
 			'start' => new DateTime($event->StartDate.' '.$event->StartTime, $tz ),
 			'end'   => new DateTime($event->EndDate.' '.$event->FinishTime, $tz ),
 		);
-		
+
 		wp_cache_set( 'eventorganiser_occurrences_'.$id, $cached_event );
-		
+
 	}
-	
+
 	return $events;
 }
 
diff --git includes/event.php includes/event.php
index 26b8b70..e721e20 100644
--- includes/event.php
+++ includes/event.php
@@ -5,7 +5,7 @@
  */
 /**
 * This functions updates a post of event type, with data given in the $post_data
-* and event data given in $event_data. Returns the post_id. 
+* and event data given in $event_data. Returns the post_id.
 *
 * Triggers {@see `eventorganiser_save_event`} passing event (post) ID
 *
@@ -17,7 +17,7 @@
 *      * (string) BYMONTHDAY=XX to repeat on XXth day of month, e.g. BYMONTHDAY=01 to repeat on the first of every month.
 *      * (string) BYDAY=ND. N= 1|2|3|4|-1 (first, second, third, fourth, last). D is day of week SU|MO|TU|WE|TH|FR|SA. E.g. BYDAY=2TU (repeat on second tuesday)
 *   * For weekly schedules,
-*      * (array) Days to repeat on: (SU,MO,TU,WE,TH,FR,SA). e.g. set to array('SU','TU') to repeat on Tuesdays & Sundays. 
+*      * (array) Days to repeat on: (SU,MO,TU,WE,TH,FR,SA). e.g. set to array('SU','TU') to repeat on Tuesdays & Sundays.
 *      * Can be left blank to repeat weekly from the start date.
 * * `frequency` => (int) positive integer, sets frequency of recurrence (every 2 days, or every 3 days etc)
 * * `all_day` => 1 if its an all day event, 0 if not
@@ -25,7 +25,7 @@
 * * `end` => end date (of first occurrence)  as a datetime object
 * * `until` =>  **START** date of last occurrence (or upper-bound thereof) as a datetime object
 * * `schedule_last` =>  Alias of until. Deprecated 2.13.0, use until.
-* * `number_occurrences` => Instead of specifying `until` you can specify the number of occurrence a recurring event should have. 
+* * `number_occurrences` => Instead of specifying `until` you can specify the number of occurrence a recurring event should have.
 * This is only used if `until` is not, and for daily, weekly, monthly or yearly recurring events.
 * * `include` => array of datetime objects to include in the schedule
 * * `exclude` => array of datetime objects to exclude in the schedule
@@ -41,9 +41,9 @@
 function eo_update_event( $post_id, $event_data = array(), $post_data = array() ){
 
 	$post_id = (int) $post_id;
-	
+
 	$input = array_merge( $post_data, $event_data );
-	
+
 	//Backwards compat:
 	if( !empty( $input['venue'] ) ){
 		$input['tax_input']['event-venue'] = $input['venue'];
@@ -51,25 +51,25 @@ function eo_update_event( $post_id, $event_data = array(), $post_data = array()
 	if( !empty( $input['category'] ) ){
 		$input['tax_input']['event-category'] = $input['category'];
 	}
-	
-	$event_keys = array_flip( array( 
-		'start', 'end', 'schedule', 'schedule_meta', 'frequency', 
+
+	$event_keys = array_flip( array(
+		'start', 'end', 'schedule', 'schedule_meta', 'frequency',
 		'all_day', 'until', 'schedule_last', 'include', 'exclude', 'occurs_by', 'number_occurrences',
 	) );
-	
+
 	$post_keys = array_flip( array(
-		'post_title','post_content','post_status', 'post_type','post_author','ping_status','post_parent','menu_order', 
+		'post_title','post_content','post_status', 'post_type','post_author','ping_status','post_parent','menu_order',
 		'to_ping', 'pinged', 'post_password', 'guid', 'post_content_filtered', 'post_excerpt', 'import_id', 'tax_input',
 		'comment_status', 'context', 'post_date', 'post_date_gmt',
 	) );
-	
+
 	$event_data = array_intersect_key( $input, $event_keys );
 	$post_data = array_intersect_key( $input, $post_keys ) + $post_data;
-	 
+
 	if( empty( $post_id ) ){
 		return new WP_Error( 'eo_error', 'Empty post ID.' );
 	}
-		
+
 	/**
 	 *@ignore
 	 */
@@ -80,7 +80,7 @@ function eo_update_event( $post_id, $event_data = array(), $post_data = array()
 	$post_data = apply_filters( 'eventorganiser_update_event_post_data', $post_data, $post_id, $post_data, $event_data );
 
 	if( !empty($post_data) ){
-		$post_data['ID'] = $post_id;		
+		$post_data['ID'] = $post_id;
 		wp_update_post( $post_data );
 	}
 
@@ -94,7 +94,7 @@ function eo_update_event( $post_id, $event_data = array(), $post_data = array()
 		}
 		unset( $event_data['schedule_last'] );
 	}
-	
+
 	//Get previous data, parse with data to be updated
 	$prev = eo_get_event_schedule( $post_id );
 	$event_data = wp_parse_args( $event_data, $prev );
@@ -103,7 +103,7 @@ function eo_update_event( $post_id, $event_data = array(), $post_data = array()
 	if( ( empty($event_data['schedule']) || 'once' == $event_data['schedule'] ) && !empty($event_data['include']) ){
 		$event_data['schedule'] = 'custom';
 	}
-	
+
 	$event_data = _eventorganiser_generate_occurrences( $event_data );
 
 	if( is_wp_error( $event_data ) ){
@@ -145,7 +145,7 @@ function eo_update_event( $post_id, $event_data = array(), $post_data = array()
 *      * (string) BYMONTHDAY=XX to repeat on XXth day of month, e.g. BYMONTHDAY=01 to repeat on the first of every month.
 *      * (string) BYDAY=ND. N= 1|2|3|4|-1 (first, second, third, fourth, last). D is day of week SU|MO|TU|WE|TH|FR|SA. E.g. BYDAY=2TU (repeat on second tuesday)
 *   * For weekly schedules,
-*      * (array) Days to repeat on: (SU,MO,TU,WE,TH,FR,SA). e.g. set to array('SU','TU') to repeat on Tuesdays & Sundays. 
+*      * (array) Days to repeat on: (SU,MO,TU,WE,TH,FR,SA). e.g. set to array('SU','TU') to repeat on Tuesdays & Sundays.
 *      * Can be left blank to repeat weekly from the start date.
 * * `frequency` => (int) positive integer, sets frequency of recurrence (every 2 days, or every 3 days etc)
 * * `all_day` => 1 if its an all day event, 0 if not
@@ -153,7 +153,7 @@ function eo_update_event( $post_id, $event_data = array(), $post_data = array()
 * * `end` => end date (of first occurrence)  as a datetime object
 * * `until` =>  **START** date of last occurrence (or upper-bound thereof) as a datetime object
 * * `schedule_last` =>  Alias of until. Deprecated 2.13.0, use until.
-* * `number_occurrences` => Instead of specifying `until` you can specify the number of occurrence a recurring event should have. 
+* * `number_occurrences` => Instead of specifying `until` you can specify the number of occurrence a recurring event should have.
 * This is only used if `until` is not, and for daily, weekly, monthly or yearly recurring events.
 * * `include` => array of datetime objects to include in the schedule
 * * `exclude` => array of datetime objects to exclude in the schedule
@@ -176,13 +176,13 @@ function eo_update_event( $post_id, $event_data = array(), $post_data = array()
 *
 *    $e = eo_insert_event($post_data,$event_data);
 * </code>
-* 
+*
 * ### Tutorial
 * See this <a href="http://www.stephenharris.info/2012/front-end-event-posting/">tutorial</a> or <a href="https://gist.github.com/3867194">this Gist</a> on front-end event posting.
 *
 * @since 1.5
 * @link http://www.stephenharris.info/2012/front-end-event-posting/ Tutorial on front-end event posting
-* @uses wp_insert_post() 
+* @uses wp_insert_post()
 *
 * @param array $post_data array of data to be used by wp_insert_post.
 * @param array $event_data array of event data
@@ -192,7 +192,7 @@ function eo_insert_event( $post_data = array(), $event_data = array() ){
 	global $wpdb;
 
 	$input = array_merge( $post_data, $event_data );
-	
+
 	//Backwards compat:
 	if( !empty( $input['venue'] ) ){
 		$input['tax_input']['event-venue'] = $input['venue'];
@@ -200,26 +200,26 @@ function eo_insert_event( $post_data = array(), $event_data = array() ){
 	if( !empty( $input['category'] ) ){
 		$input['tax_input']['event-category'] = $input['category'];
 	}
-	
+
 	$event_keys = array_flip( array(
-		'start', 'end', 'schedule', 'schedule_meta', 'frequency', 'all_day', 
-		'until', 'schedule_last', 'include', 'exclude', 'occurs_by', 'number_occurrences', 
+		'start', 'end', 'schedule', 'schedule_meta', 'frequency', 'all_day',
+		'until', 'schedule_last', 'include', 'exclude', 'occurs_by', 'number_occurrences',
 	) );
-	
+
 	$post_keys = array_flip( array(
-		'post_title','post_content','post_status', 'post_type','post_author','ping_status','post_parent','menu_order', 
+		'post_title','post_content','post_status', 'post_type','post_author','ping_status','post_parent','menu_order',
 		'to_ping', 'pinged', 'post_password', 'guid', 'post_content_filtered', 'post_excerpt', 'import_id', 'tax_input',
 		'comment_status', 'context',  'post_date', 'post_date_gmt',
 	) );
-	
+
 	$event_data = array_intersect_key( $input, $event_keys ) + $event_data;
 	$post_data = array_intersect_key( $input, $post_keys );
-		
+
 	//If schedule is 'once' and dates are included - set to 'custom':
 	if( ( empty($event_data['schedule']) || 'once' == $event_data['schedule'] ) && !empty($event_data['include']) ){
 		$event_data['schedule'] = 'custom';
 	}
-	
+
 	if( !empty( $event_data['schedule_last'] ) ){
 		if( !isset( $event_data['until'] ) ){
 			$event_data['until'] = clone $event_data['schedule_last'];
@@ -228,7 +228,7 @@ function eo_insert_event( $post_data = array(), $event_data = array() ){
 	}
 
 	$event_data = _eventorganiser_generate_occurrences( $event_data );
-		
+
 	if( is_wp_error( $event_data ) ){
 		return $event_data;
 	}
@@ -237,27 +237,27 @@ function eo_insert_event( $post_data = array(), $event_data = array() ){
 	 *@ignore
 	 */
 	$event_data = apply_filters( 'eventorganiser_insert_event_event_data', $event_data, $post_data, $event_data );
-	
+
 	/**
 	 *@ignore
 	 */
 	$post_data = apply_filters( 'eventorganiser_insert_event_post_data', $post_data, $post_data, $event_data );
-		
+
 	//Finally we create event (first create the post in WP)
-	$post_input = array_merge(array('post_title'=>'untitled event'), $post_data, array('post_type'=>'event'));			
+	$post_input = array_merge(array('post_title'=>'untitled event'), $post_data, array('post_type'=>'event'));
 	$post_id = wp_insert_post($post_input, true);
 
-	//Did the event insert correctly? 
-	if ( is_wp_error( $post_id) ) 
+	//Did the event insert correctly?
+	if ( is_wp_error( $post_id) )
 			return $post_id;
 
 	_eventorganiser_insert_occurrences($post_id, $event_data);
-			
+
 	//Action used to break cache & trigger Pro actions (& by other plug-ins?)
 	/**
 	 * Triggered after an event has been updated.
-	 * 
-	 * @param int $post_id The ID of the event 
+	 *
+	 * @param int $post_id The ID of the event
 	 */
 	do_action( 'eventorganiser_save_event', $post_id );
 
@@ -287,46 +287,46 @@ add_action( 'dp_duplicate_post', '_eventorganiser_maybe_duplicate_post', 50, 2 )
  *
  * This function does not update any of the event schedule details.
  * **Don't call this unless you know what you're doing**.
- * 
+ *
  * @since 1.5
  * @access private
  * @param int $post_id the event's (post) ID to be deleted
  * @param int|array $occurrence_ids Occurrence ID (or array of IDs) for specificaly occurrences to delete. If empty/false, deletes all.
- * 
+ *
  */
 function eo_delete_event_occurrences( $event_id, $occurrence_ids = false ){
 	global $wpdb;
 	//TODO use this in break/remove occurrence
-	
+
 	//Let's just ensure empty is cast as false
 	$occurrence_ids = ( empty( $occurrence_ids ) ? false : $occurrence_ids );
-	
+
 	if( $occurrence_ids !== false ){
 		$occurrence_ids = (array) $occurrence_ids;
 		$occurrence_ids = array_map( 'absint', $occurrence_ids );
 		$occurrence_ids_in = implode( ', ', $occurrence_ids );
-		
+
 		$raw_sql = "DELETE FROM $wpdb->eo_events WHERE post_id=%d AND event_id IN( $occurrence_ids_in )";
 
 	}else{
 		$raw_sql = "DELETE FROM $wpdb->eo_events WHERE post_id=%d";
 	}
-	
+
 	/**
 	 * @ignore
 	 */
 	do_action( 'eventorganiser_delete_event', $event_id, $occurrence_ids ); //Deprecated - do not use!
-	
+
 	/**
 	 * Triggers just before the specified occurrences for the event are deleted.
-	 * 
+	 *
 	 * @param int $event_id The (post) ID of the event of which we're deleting occurrences.
 	 * @param array|false $occurrence_ids An array of occurrences to be delete. If `false`, all occurrences are to be removed.
 	 */
 	do_action( 'eventorganiser_delete_event_occurrences', $event_id, $occurrence_ids );
-	
+
 	$del = $wpdb->get_results( $wpdb->prepare(  $raw_sql, $event_id ) );
-	
+
 }
 add_action( 'delete_post', 'eo_delete_event_occurrences', 10 );
 
@@ -340,7 +340,7 @@ add_action( 'delete_post', 'eo_delete_event_occurrences', 10 );
 * @return int $post_id
 */
 function _eventorganiser_insert_occurrences( $post_id, $event_data ){
-	
+
 	global $wpdb;
 	extract( $event_data );
 	$tz = eo_get_blog_timezone();
@@ -349,7 +349,7 @@ function _eventorganiser_insert_occurrences( $post_id, $event_data ){
 	//Also see https://github.com/stephenharris/Event-Organiser/issues/205
 	//And https://github.com/stephenharris/Event-Organiser/issues/224
 	$duration_str = eo_date_interval( $start, $end, '+%y year +%m month +%d days +%h hours +%i minutes +%s seconds' );
-	
+
 	$event_data['duration_str'] = $duration_str;
 
 	$schedule_last_end = clone $schedule_last;
@@ -358,29 +358,29 @@ function _eventorganiser_insert_occurrences( $post_id, $event_data ){
 	//Get dates to be deleted / added
 	$current_occurrences = eo_get_the_occurrences( $post_id );
 	$current_occurrences = $current_occurrences ? $current_occurrences : array();
-	
+
 	$delete   = array_udiff( $current_occurrences, $occurrences, '_eventorganiser_compare_dates' );
 	$insert   = array_udiff( $occurrences, $current_occurrences, '_eventorganiser_compare_dates' );
 	$update   = array_uintersect( $occurrences, $current_occurrences, '_eventorganiser_compare_dates' );
 	$update_2 = array_uintersect( $current_occurrences, $update, '_eventorganiser_compare_dates' );
 	$keys     = array_keys( $update_2 );
-	
+
 	if( $delete ){
 		$delete_occurrence_ids = array_keys( $delete );
 		eo_delete_event_occurrences( $post_id, $delete_occurrence_ids );
 	}
-	
+
 	$occurrence_cache = array();
 	$occurrence_array = array();
-	
+
 	if( $update ){
 		$update   = array_combine( $keys, $update );
-		
+
 		foreach( $update as $occurrence_id => $occurrence ){
 
 			$occurrence_end = clone $occurrence;
 			$occurrence_end->modify($duration_str);
-			
+
 			$occurrence_input = array(
 				'StartDate'        => $occurrence->format('Y-m-d'),
 				'StartTime'        => $occurrence->format('H:i:s'),
@@ -389,8 +389,8 @@ function _eventorganiser_insert_occurrences( $post_id, $event_data ){
 			);
 
 			$wpdb->update(
-				$wpdb->eo_events, 
-				$occurrence_input,				
+				$wpdb->eo_events,
+				$occurrence_input,
 				array( 'event_id' => $occurrence_id )
 			);
 
@@ -402,7 +402,7 @@ function _eventorganiser_insert_occurrences( $post_id, $event_data ){
 			);
 		}
 	}
-	
+
 	if( $insert ){
 		foreach( $insert as $counter => $occurrence ):
 			$occurrence_end = clone $occurrence;
@@ -418,7 +418,7 @@ function _eventorganiser_insert_occurrences( $post_id, $event_data ){
 			);
 
 			$wpdb->insert( $wpdb->eo_events, $occurrence_input );
-			
+
 			$occurrence_array[$wpdb->insert_id] = $occurrence->format('Y-m-d H:i:s');
 
 			//Add to occurrence cache: TODO use post meta
@@ -429,18 +429,18 @@ function _eventorganiser_insert_occurrences( $post_id, $event_data ){
 
 		endforeach;
 	}
-		
+
 	//Set occurrence cache
 	wp_cache_set( 'eventorganiser_occurrences_'.$post_id, $occurrence_cache );
 	wp_cache_set( 'eventorganiser_all_occurrences_'.$post_id, $occurrence_cache );
 
 	unset( $event_data['occurrences'] );
 	//$event_data['_occurrences'] = $occurrence_array;
-		
+
 	if( !empty($include) ){
 		$event_data['include'] = array_map('eo_format_datetime', $include, array_fill(0, count($include), 'Y-m-d H:i:s') );
 	}
-	
+
 	if( !empty($exclude) ){
 		$event_data['exclude'] = array_map('eo_format_datetime', $exclude, array_fill(0, count($exclude), 'Y-m-d H:i:s') );
 	}
@@ -450,14 +450,14 @@ function _eventorganiser_insert_occurrences( $post_id, $event_data ){
 	unset( $event_data['schedule_start'] );
 	unset( $event_data['schedule_last'] );
 	unset( $event_data['until'] );
-		
+
 	update_post_meta( $post_id, '_eventorganiser_event_schedule', $event_data );
 	update_post_meta( $post_id, '_eventorganiser_schedule_start_start', $start->format('Y-m-d H:i:s') );
 	update_post_meta( $post_id, '_eventorganiser_schedule_start_finish', $end->format('Y-m-d H:i:s') );
 	update_post_meta( $post_id, '_eventorganiser_schedule_until', $until->format('Y-m-d H:i:s') );
 	update_post_meta( $post_id, '_eventorganiser_schedule_last_start', $schedule_last->format('Y-m-d H:i:s') );
 	update_post_meta( $post_id, '_eventorganiser_schedule_last_finish', $schedule_last_end->format('Y-m-d H:i:s') );
-		
+
 	return $post_id;
 }
 
@@ -474,14 +474,14 @@ function _eventorganiser_insert_occurrences( $post_id, $event_data ){
 *      * (string) BYMONTHDAY=XX to repeat on XXth day of month, e.g. BYMONTHDAY=01 to repeat on the first of every month.
 *      * (string) BYDAY=ND. N= 1|2|3|4|-1 (first, second, third, fourth, last). D is day of week SU|MO|TU|WE|TH|FR|SA. E.g. BYDAY=2TU (repeat on second tuesday)
 *   * For weekly schedules,
-*      * (array) Days to repeat on: (SU,MO,TU,WE,TH,FR,SA). e.g. set to array('SU','TU') to repeat on Tuesdays & Sundays. 
+*      * (array) Days to repeat on: (SU,MO,TU,WE,TH,FR,SA). e.g. set to array('SU','TU') to repeat on Tuesdays & Sundays.
 * * `occurs_by` - For use with monthly schedules: how the event recurs: BYDAY or BYMONTHDAY
 * * `frequency` => (int) positive integer, sets frequency of recurrence (every 2 days, or every 3 days etc)
 * * `all_day` => 1 if its an all day event, 0 if not
 * * `start` =>  start date (of first occurrence)  as a datetime object
 * * `end` => end date (of first occurrence)  as a datetime object
 * * `until` => For recurring events, the date they repeat until. Note that this may not be equal to `schedule_last` if
-*              dates are included/excluded. 
+*              dates are included/excluded.
 * * `schedule_last` =>  **START** date of last occurrence as a datetime object
 * * `include` => array of datetime objects to include in the schedule
 * * `exclude` => array of datetime objects to exclude in the schedule
@@ -493,7 +493,7 @@ function eo_get_event_schedule( $post_id = 0 ){
 
 	$post_id = (int) ( empty($post_id) ? get_the_ID() : $post_id);
 
-	if( empty( $post_id ) ){ 
+	if( empty( $post_id ) ){
 		return false;
 	}
 
@@ -519,16 +519,16 @@ function eo_get_event_schedule( $post_id = 0 ){
 	} else {
 		// No start time, so set a default start time to next half-hour
 		$now = new DateTime( 'now', $tz );
-		
+
 		$minute = $now->format( 'i' ) > 30 ? 0 : 30;
-		
+
 		$now->setTime( $now->format( 'G' ), $minute );
-		
+
 		if( 0 === $minute ){
 			$now->modify( '+1 hour' );
 		}
-		
-		$event_details['start'] = $now; 
+
+		$event_details['start'] = $now;
 	}
 
 	// Get end time
@@ -551,7 +551,7 @@ function eo_get_event_schedule( $post_id = 0 ){
 		$event_details['until'] = clone $event_details['schedule_last'];
 		update_post_meta( $post_id, '_eventorganiser_schedule_until', $event_details['until']->format( 'Y-m-d H:i:s' ) );
 	}
-	
+
 	if ( ! empty( $event_details['include'] ) ) {
 		$event_details['include'] = array_map( 'eventorganiser_date_create', $event_details['include'] );
 	}
@@ -570,7 +570,7 @@ function eo_get_event_schedule( $post_id = 0 ){
 
 	/**
 	 * Filters the schedule metadata for an event (as returned by `eo_get_event_schedule()`.
-	 * 
+	 *
 	 * See documentation on `eo_get_event_schedule()` for more details.
 	 *
 	 * @param array $event_details Details of the event's dates and recurrence pattern
@@ -593,36 +593,36 @@ function _eventorganiser_generate_occurrences( $event_data ){
 
 	$event_defaults = array(
 		'start' => '', 'end' => '', 'all_day' => 0,
-		'schedule' => 'once', 'schedule_meta' => '', 'frequency' => 1, 'schedule_last' => '', 
+		'schedule' => 'once', 'schedule_meta' => '', 'frequency' => 1, 'schedule_last' => '',
 		'until' => '', 'number_occurrences' => 0, 'exclude' => array(), 'include' => array(),
 	);
 
 	extract( wp_parse_args( $event_data, $event_defaults ) );
-		
-		$occurrences =array(); //occurrences array	
+
+		$occurrences =array(); //occurrences array
 
 		$exclude = array_filter( (array) $exclude );
 		$include = array_filter( (array) $include );
-		
+
 		$exclude = array_udiff($exclude, $include, '_eventorganiser_compare_datetime');
 		$include = array_udiff($include, $exclude, '_eventorganiser_compare_datetime');
-		
+
 		//White list schedule
 		if( !in_array($schedule, array('once','daily','weekly','monthly','yearly','custom')) )
 			return new WP_Error('eo_error',__('Schedule not recognised.','eventorganiser'));
-		
+
 		//Ensure event frequency is a positive integer. Else set to 1.
 		$frequency = max(absint($frequency),1);
 		$all_day = (int) $all_day;
 		$number_occurrences = absint( $number_occurrences );
-		
+
 		//Check dates are supplied and are valid
 		if( !($start instanceof DateTime) )
 			return new WP_Error('eo_error',__('Start date not provided.','eventorganiser'));
 
 		if( !($end instanceof DateTime) )
 			$end = clone $start;
-		
+
 		//If use 'number_occurrences' to limit recurring event, set dummy 'schedule_last' date.
 		if( !($until instanceof DateTime) && $number_occurrences && in_array( $schedule, array( 'daily','weekly','monthly','yearly' ) ) ){
 			//Set dummy "last occurrance" date.
@@ -637,7 +637,7 @@ function _eventorganiser_generate_occurrences( $event_data ){
 		//Check dates are in chronological order
 		if($end < $start)
 			return new WP_Error('eo_error',__('Start date occurs after end date.','eventorganiser'));
-		
+
 		if($until < $start)
 			return new WP_Error('eo_error',__('Schedule end date is before is before the start date.','eventorganiser'));
 
@@ -652,7 +652,7 @@ function _eventorganiser_generate_occurrences( $event_data ){
 		$start_days =array();
 		$workaround='';
 		$icaldays = array('SU','MO','TU','WE','TH','FR','SA');
-		$weekdays = array('Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday'); 
+		$weekdays = array('Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday');
 		$ical2day = array('SU'=>'Sunday','MO'=>'Monday','TU'=>'Tuesday','WE'=>'Wednesday','TH'=>'Thursday','FR'=>'Friday','SA'=>'Saturday');
 
 		//Set up schedule
@@ -670,7 +670,7 @@ function _eventorganiser_generate_occurrences( $event_data ){
 			case 'daily':
 				$interval = "+".$frequency."day";
 				$start_days[] = clone $start;
-				break;	
+				break;
 
 			case 'weekly':
 				$schedule_meta = ( $schedule_meta ? array_filter($schedule_meta) : array() );
@@ -694,11 +694,11 @@ function _eventorganiser_generate_occurrences( $event_data ){
 				$rule =$rule_value[0];
 				$values = !empty( $rule_value[1] ) ? explode(',',$rule_value[1]) : array();//Should only be one value, but may support more in future
 				$values =  array_filter( $values );
-				
+
 				if( $rule=='BYMONTHDAY' ):
 					$date = (int) $start_days[0]->format('d');
 					$interval = "+".$frequency."month";
-					
+
 					if($date >= 29)
 						$workaround = 'short months';	//This case deals with 29/30/31 of month
 
@@ -727,19 +727,19 @@ function _eventorganiser_generate_occurrences( $event_data ){
 					$day = $weekdays[$day_num];//Full day name from day_num (Sunday -Monday)
 					$schedule_meta = 'BYDAY='.$n.$ical_day; //E.g. BYDAY=2MO
 					$interval = $ordinal[$n].' '.$day.' of +'.$frequency.' month'; //E.g. second monday of +1 month
-					
+
 					//Work around for PHP <5.3
 					if(!function_exists('date_diff')){
 						$workaround = 'php5.2';
 					}
 				endif;
 				break;
-	
+
 			case 'yearly':
 				$start_days[] = clone $start;
 				if( '29-02' == $start_days[0]->format('d-m') )
 					$workaround = 'leap year';
-				
+
 				$interval = "+".$frequency."year";
 				break;
 		endswitch; //End $schedule switch
@@ -749,35 +749,35 @@ function _eventorganiser_generate_occurrences( $event_data ){
 		foreach($start_days as $index => $start_day):
 			$current = clone $start_day;
 			$occurrence_n = 0;
-			
+
 			switch($workaround):
 				//Not really a workaround. Just add the occurrence and finish.
 				case 'once':
 					$current->setTime($H,$i );
 					$occurrences[] = clone $current;
 					break;
-				
+
 				//Loops for monthly events that require php5.3 functionality
 				case 'php5.2':
 					while( $current <= $until || $occurrence_n < $number_occurrences ):
 						$current->setTime($H,$i );
-						$occurrences[] = clone $current;	
+						$occurrences[] = clone $current;
 						$current = _eventorganiser_php52_modify($current,$interval);
 						$occurrence_n++;
-					endwhile; 
+					endwhile;
 					break;
 
 				//Loops for monthly events on the 29th/30th/31st
 				case 'short months':
 					 $day_int =intval($start_day->format('d'));
-	
+
 					//Set the first month
 					$current_month= clone $start_day;
 					$current_month = date_create($current_month->format('Y-m-1'));
-				
+
 					while( $current_month <= $until || $occurrence_n < $number_occurrences ):
-						$month_int = intval($current_month->format('m'));		
-						$year_int = intval($current_month->format('Y'));		
+						$month_int = intval($current_month->format('m'));
+						$year_int = intval($current_month->format('Y'));
 
 						if( checkdate($month_int , $day_int , $year_int) ){
 							$current = new DateTime($day_int.'-'.$month_int.'-'.$year_int, $timezone);
@@ -786,7 +786,7 @@ function _eventorganiser_generate_occurrences( $event_data ){
 							$occurrence_n++;
 						}
 						$current_month->modify($interval);
-					endwhile;	
+					endwhile;
 					break;
 
 				//To be used for yearly events occuring on Feb 29
@@ -794,7 +794,7 @@ function _eventorganiser_generate_occurrences( $event_data ){
 					$current_year = clone $current;
 					$current_year->modify('-1 day');
 
-					while( $current_year <= $until || $occurrence_n < $number_occurrences  ):	
+					while( $current_year <= $until || $occurrence_n < $number_occurrences  ):
 						$is_leap_year = (int) $current_year->format('L');
 
 						if( $is_leap_year ){
@@ -808,11 +808,11 @@ function _eventorganiser_generate_occurrences( $event_data ){
 						$current_year->modify( $interval );
 					endwhile;
 					break;
-			
+
 				default:
 					while( $current <= $until || $occurrence_n < $number_occurrences  ):
 						$current->setTime($H,$i );
-						$occurrences[] = clone $current;	
+						$occurrences[] = clone $current;
 						$current->modify( $interval );
 						$occurrence_n++;
 					endwhile;
@@ -828,7 +828,7 @@ function _eventorganiser_generate_occurrences( $event_data ){
 			$occurrences =  array_slice( $occurrences, 0, $number_occurrences );
 			$until = end( $occurrences );
 		}
-		
+
 		//Cast includes/exclude to timezone
 		$tz = eo_get_blog_timezone();
 		if( $include ){
@@ -841,19 +841,19 @@ function _eventorganiser_generate_occurrences( $event_data ){
 				$excluded_date->setTimezone( $tz );
 			}
 		}
-		
+
 		//Add inclusions, removes exceptions and duplicates
 		if( defined( 'WP_DEBUG' ) && WP_DEBUG ){
 			//Make sure 'included' dates doesn't appear in generate date
 			$include = array_udiff( $include, $occurrences, '_eventorganiser_compare_datetime' );
 		}
-		$occurrences = array_merge($occurrences, $include); 
+		$occurrences = array_merge($occurrences, $include);
 		$occurrences = array_udiff( $occurrences, $exclude, '_eventorganiser_compare_datetime') ;
 		$occurrences = _eventorganiser_remove_duplicates($occurrences);
 
 		//Sort occurrences
 		sort($occurrences);
-		
+
 		if( empty( $occurrences ) || !$occurrences[0] || !( $occurrences[0] instanceof DateTime ) ){
 			return new WP_Error('eo_error',__('Event does not contain any dates.','eventorganiser'));
 		}
@@ -874,13 +874,13 @@ function _eventorganiser_generate_occurrences( $event_data ){
 			'include'        => $include,
 			'occurrences'    => $occurrences,
 		);
-		
+
 		/**
 		 * Filters the event schedule after its dates has been generated by a given schedule.
-		 * 
-		 * The filtered array is an array of occurrences generated from a 
+		 *
+		 * The filtered array is an array of occurrences generated from a
 		 * schedule which may include:
-		 * 
+		 *
 		 * * **start** (DateTime) -  when the event starts
 		 * * **end** (DateTime) - when the event ends
 		 * * **all_day** (Bool) - If the event is all day or no
@@ -894,16 +894,16 @@ function _eventorganiser_generate_occurrences( $event_data ){
 		 * * **exclude** (array) - Array of DateTime objects  to exclude from the schedule
 		 * * **include** (array) - Array of DateTime objects to include in the schedule
 		 * * **occurrences** (array) - Array of DateTime objects generated from the above schedule.
-		 * 
+		 *
 		 * @param array $_event_data The event schedule with generated occurrences.
-		 * @param array $event_data The original event schedule (without occurrences).  
+		 * @param array $event_data The original event schedule (without occurrences).
 		 */
 		$_event_data = apply_filters( 'eventorganiser_generate_occurrences', $_event_data, $event_data );
 		return $_event_data;
 	}
 
 /**
- * Generates the ICS RRULE fromthe event schedule data. 
+ * Generates the ICS RRULE fromthe event schedule data.
  * @access private
  * @ignore
  * @since 1.0.0
@@ -921,7 +921,7 @@ function eventorganiser_generate_ics_rrule($post_id=0){
 			return false;
 
 		extract($rrule);
-		
+
 		$schedule_last->setTimezone( new DateTimeZone('UTC') );
 		$schedule_last = $schedule_last->format( 'Ymd\THis\Z' );
 
@@ -938,37 +938,37 @@ function eventorganiser_generate_ics_rrule($post_id=0){
 				$recurrence_rule .=$schedule_meta.";";
 				$recurrence_rule .= "UNTIL=".$schedule_last;
 				return $recurrence_rule;
-	
+
 			case 'weekly':
-				
+
 				if( !eo_is_all_day( $post_id ) ){
 					//None all day event, setting event timezone to UTC may cause it to shift days.
 					//E.g. a 9pm Monday event in New York will a Tuesday event in UTC.
 					//We may need to correct the BYDAY attribute to be valid for UTC.
-					
+
 					$days_of_week = array( 'SU', 'MO', 'TU', 'WE', 'TH', 'FR', 'SA' );
 					$UTC = new DateTimeZone('UTC');
-					
+
 					//Get day shift upon timezone set to UTC
 					$start = eo_get_schedule_start( DATETIMEOBJ, $post_id );
 					$local_day = (int) $start->format( 'w' );
 					$start->setTimezone( $UTC );
 					$utc_day = (int) $start->format( 'w' );
 					$diff = $utc_day - $local_day + 7; //ensure difference is positive (should be 0, +1 or +6).
-					
+
 					//If there is a shift correct BYDAY
 					if( $diff ){
 						$utc_days = array();
-					
+
 						foreach( $schedule_meta as $day ){
 							$utc_day_index = ( array_search( $day, $days_of_week ) + $diff ) %7;
 							$utc_days[] = $days_of_week[$utc_day_index];
 						}
 						$schedule_meta = $utc_days;
 					}
-					
+
 				}
-				
+
 				return "FREQ=WEEKLY;INTERVAL=".$frequency.";BYDAY=".implode(',',$schedule_meta).";UNTIL=".$schedule_last;
 
 			case 'daily':
@@ -980,30 +980,30 @@ function eventorganiser_generate_ics_rrule($post_id=0){
 }
 
 function eventorganiser_ical_vtimezone( $timezone, $from, $to ) {
-	
+
 	$vtimezone = "BEGIN:VTIMEZONE\r\n";
 	$vtimezone .= sprintf( "TZID:%s\r\n", $timezone->getName() );
-	
+
 	//$timezone->getTransitions() doesn't accept any arguments in php 5.2, and would be ineffecient
 	if ( version_compare( PHP_VERSION, '5.3.0' ) < 0 ) {
 		return '';
 	}
-	
+
 	// get all transitions, and (as an estimate) an early one which we skip
 	$transitions = $timezone->getTransitions( $from - YEAR_IN_SECONDS / 2, $to );
-	
+
 	if ( ! $transitions ) {
 		return '';
 	}
 
 	foreach ( $transitions as $i => $trans ) {
-		
+
 		$pm      = $trans['offset'] >= 0 ? '+' : '-';
  		$hours   = floor( absint( $trans['offset'] ) / HOUR_IN_SECONDS ) % 24;
 		$minutes = ( absint( $trans['offset'] ) - $hours * HOUR_IN_SECONDS ) / MINUTE_IN_SECONDS;
-		
+
 		$tzto = $pm . str_pad( $hours, 2, '0', STR_PAD_LEFT ) . str_pad( $minutes, 2, '0', STR_PAD_LEFT );
-	
+
 		// skip the first entry, we just want it for the TZOFFSETFROM value of the next one
 		if ( $i == 0 ) {
 			$tzfrom = $tzto;
@@ -1011,22 +1011,22 @@ function eventorganiser_ical_vtimezone( $timezone, $from, $to ) {
 				continue;
 			}
 		}
-		
-		$type = $trans['isdst'] ? 'DAYLIGHT' : 'STANDARD';		
+
+		$type = $trans['isdst'] ? 'DAYLIGHT' : 'STANDARD';
 		$dt   = new DateTime( $trans['time'], $timezone );
-			
+
 		$vtimezone .= sprintf( "BEGIN:%s\r\n", $type );
 		$vtimezone .= sprintf( "TZOFFSETFROM:%s\r\n", $tzfrom ); //needs formatting
 		$vtimezone .= sprintf( "TZOFFSETTO:%s\r\n", $tzto ); //needs formatting
 		$vtimezone .= sprintf( "DTSTART:%s\r\n",  $dt->format('Ymd\THis') );
-		$vtimezone .= sprintf( "TZNAME:%s\r\n",  $trans['abbr'] ); 
+		$vtimezone .= sprintf( "TZNAME:%s\r\n",  $trans['abbr'] );
 		$vtimezone .= sprintf( "END:%s\r\n", $type );
-		
-		$tzfrom = $tzto;	
+
+		$tzfrom = $tzto;
 	}
-	
+
 	$vtimezone .= 'END:VTIMEZONE';
-	
+
 	return $vtimezone;
 }
 
@@ -1044,8 +1044,8 @@ function eventorganiser_ical_vtimezone( $timezone, $from, $to ) {
 		global $wpdb;
 
 		$remove = $wpdb->get_row($wpdb->prepare(
-			"SELECT {$wpdb->eo_events}.StartDate, {$wpdb->eo_events}.StartTime  
-			FROM {$wpdb->eo_events} 
+			"SELECT {$wpdb->eo_events}.StartDate, {$wpdb->eo_events}.StartTime
+			FROM {$wpdb->eo_events}
 			WHERE post_id=%d AND event_id=%d",$post_id,$event_id));
 
 		if( !$remove )
@@ -1064,7 +1064,7 @@ function eventorganiser_ical_vtimezone( $timezone, $from, $to ) {
 		}
 
 		//Update post meta and delete date from events table
-		update_post_meta( $post_id,'_eventorganiser_event_schedule',$event_details);		
+		update_post_meta( $post_id,'_eventorganiser_event_schedule',$event_details);
 		eo_delete_event_occurrences( $post_id, $event_id );
 
 		//Clear cache
@@ -1073,16 +1073,16 @@ function eventorganiser_ical_vtimezone( $timezone, $from, $to ) {
 		return true;
 	}
 
-	
+
 /**
- * Updates a specific occurrence, and preserves the occurrence ID. 
- * 
+ * Updates a specific occurrence, and preserves the occurrence ID.
+ *
  * Currently two occurrences cannot occupy the same date.
- * 
+ *
  * @ignore
  * @access private
  * @since 2.12.0
- * 
+ *
  * @param int $event_id      ID of the event whose occurrence we're moving
  * @param int $occurrence_id ID of the occurrence we're moving
  * @param DateTime $start    New start DateTime of the occurrence
@@ -1092,42 +1092,42 @@ function eventorganiser_ical_vtimezone( $timezone, $from, $to ) {
 function eventorganiser_move_occurrence( $event_id, $occurrence_id, $start, $end ){
 
 	global $wpdb;
-		
+
 	$old_start = eo_get_the_start( DATETIMEOBJ, $event_id, null, $occurrence_id );
 	$schedule  = eo_get_event_schedule( $event_id );
-	
+
 	if( $start == $old_start ){
 		return true;
 	}
-	
+
 	$current_occurrences = eo_get_the_occurrences( $event_id );
 	unset( $current_occurrences[$occurrence_id] );
 	$current_occurrences = array_map( 'eo_format_datetime', $current_occurrences );
-	
+
 	if( in_array( $start->format( 'd-m-Y' ), $current_occurrences ) ){
-		return new WP_Error( 'events-cannot-share-date', __( 'There is already an occurrence on this date', 'eventorganiser' ) );		
+		return new WP_Error( 'events-cannot-share-date', __( 'There is already an occurrence on this date', 'eventorganiser' ) );
 	}
-	
+
 	//We update the date directly in the DB first so the occurrence is not deleted and recreated,
-	//but simply updated. 
-	
+	//but simply updated.
+
 	$wpdb->update(
-		$wpdb->eo_events, 
+		$wpdb->eo_events,
 		array(
 			'StartDate'  => $start->format( 'Y-m-d' ),
 			'StartTime'  => $start->format( 'H:i:s' ),
 			'EndDate'    => $end->format( 'Y-m-d' ),
 			'FinishTime' => $end->format( 'H:i:s' ),
-		),				
+		),
 		array( 'event_id' => $occurrence_id )
 	);
-	
+
 	wp_cache_delete( 'eventorganiser_occurrences_'.$event_id );//Important: update DB clear cache
 	wp_cache_delete( 'eventorganiser_all_occurrences_'.$event_id );//Important: update DB clear cache
 
 	//Now update event schedule...
-	
-	//If date being removed was manually included remove it, 
+
+	//If date being removed was manually included remove it,
 	//otherwise add it to exclude. Then add new date as include.
 	if( false === ( $index = array_search( $old_start, $schedule['include'] ) ) ){
 		$schedule['exclude'][] = $old_start;
@@ -1137,11 +1137,11 @@ function eventorganiser_move_occurrence( $event_id, $occurrence_id, $start, $end
 	$schedule['include'][] = $start;
 
 	$re = eo_update_event( $event_id, $schedule );
-	
+
 	if( $re && !is_wp_error( $re ) ){
 		return true;
 	}
-	
+
 	return $re;
 }
 ?>
diff --git tests/unit-tests/recurrenceTest.php tests/unit-tests/recurrenceTest.php
index 8669f79..8ba31f4 100644
--- tests/unit-tests/recurrenceTest.php
+++ tests/unit-tests/recurrenceTest.php
@@ -2,7 +2,7 @@
 
 class recurrenceTest extends EO_UnitTestCase
 {
-	
+
     public function testOneOff()
     {
     	$_event_data = array(
@@ -13,12 +13,12 @@ class recurrenceTest extends EO_UnitTestCase
     	$expected = array(
     			new DateTime( '2013-10-22 19:19:00', eo_get_blog_timezone() ),
     	);
-    	
+
     	$this->assertEquals( $expected, $event_data['occurrences'] );
-		
+
     }
 
-    
+
     public function testDaily()
     {
     	$_event_data = array(
@@ -27,9 +27,9 @@ class recurrenceTest extends EO_UnitTestCase
     			'schedule' => 'daily',
     			'frequency' => 2,
     			'until' => new DateTime( '2013-11-02 20:19:00', eo_get_blog_timezone() ),
-    			
+
     	);
-    	
+
     	$event_data = _eventorganiser_generate_occurrences( $_event_data );
     	$expected = array(
     			new DateTime( '2013-10-22 19:19:00', eo_get_blog_timezone() ),
@@ -39,11 +39,11 @@ class recurrenceTest extends EO_UnitTestCase
     			new DateTime( '2013-10-30 19:19:00', eo_get_blog_timezone() ),
     			new DateTime( '2013-11-01 19:19:00', eo_get_blog_timezone() )
     	);
-    	 
+
     	$this->assertEquals( $expected, $event_data['occurrences'] );
-    
+
     }
-    
+
     public function testWeekly()
     {
     	$_event_data = array(
@@ -52,9 +52,9 @@ class recurrenceTest extends EO_UnitTestCase
     			'schedule' => 'weekly',
     			'schedule_meta' => array( 'WE', 'FR' ),
     			'until' => new DateTime( '2013-11-02 20:19:00', eo_get_blog_timezone() ),
-    			 
+
     	);
-    	 
+
     	$event_data = _eventorganiser_generate_occurrences( $_event_data );
     	$expected = array(
     			new DateTime( '2013-10-23 19:19:00', eo_get_blog_timezone() ),
@@ -62,11 +62,11 @@ class recurrenceTest extends EO_UnitTestCase
     			new DateTime( '2013-10-30 19:19:00', eo_get_blog_timezone() ),
     			new DateTime( '2013-11-01 19:19:00', eo_get_blog_timezone() )
     	);
-    
+
     	$this->assertEquals( $expected, $event_data['occurrences'] );
-    
+
     }
-    
+
     public function testWeeklyWithoutMeta()
     {
     	$_event_data = array(
@@ -74,21 +74,21 @@ class recurrenceTest extends EO_UnitTestCase
     			'end' => new DateTime( '2013-10-22 20:19:00', eo_get_blog_timezone() ),
     			'schedule' => 'weekly',
     			'until' => new DateTime( '2013-11-02 20:19:00', eo_get_blog_timezone() ),
-    
+
     	);
-    
+
     	$event_data = _eventorganiser_generate_occurrences( $_event_data );
     	$expected = array(
     			new DateTime( '2013-10-22 19:19:00', eo_get_blog_timezone() ),
     			new DateTime( '2013-10-29 19:19:00', eo_get_blog_timezone() )
     	);
-    
+
     	$this->assertEquals( $expected, $event_data['occurrences'] );
-    	
+
     	$this->assertEquals( array( 'TU' ), $event_data['schedule_meta'] );
-    
+
     }
-    
+
     public function testWeeklyLimitedData()
     {
     	$_event_data = array(
@@ -96,20 +96,20 @@ class recurrenceTest extends EO_UnitTestCase
     			'end' => new DateTime( '2013-10-22 20:19:00', eo_get_blog_timezone() ),
     			'schedule' => 'weekly',
     			'until' => new DateTime( '2013-11-02 20:19:00', eo_get_blog_timezone() ),
-    
+
     	);
-    
+
     	$event_data = _eventorganiser_generate_occurrences( $_event_data );
     	$expected = array(
     			new DateTime( '2013-10-22 19:19:00', eo_get_blog_timezone() ),
     			new DateTime( '2013-10-29 19:19:00', eo_get_blog_timezone() )
     	);
-    
+
     	$this->assertEquals( $expected, $event_data['occurrences'] );
-    
+
     }
 
-    
+
     public function testMonthlyByMonthDay()
     {
     	$_event_data = array(
@@ -118,9 +118,9 @@ class recurrenceTest extends EO_UnitTestCase
     			'schedule' => 'monthly',
     			'schedule_meta' => 'BYMONTHDAY',
     			'until' => new DateTime( '2014-01-22 19:19:00', eo_get_blog_timezone() ),
-    
+
     	);
-    
+
     	$event_data = _eventorganiser_generate_occurrences( $_event_data );
     	$expected = array(
     			new DateTime( '2013-10-22 19:19:00', eo_get_blog_timezone() ),
@@ -128,10 +128,10 @@ class recurrenceTest extends EO_UnitTestCase
     			new DateTime( '2013-12-22 19:19:00', eo_get_blog_timezone() ),
     			new DateTime( '2014-01-22 19:19:00', eo_get_blog_timezone() ),
     	);
-    
+
     	$this->assertEquals( $expected, $event_data['occurrences'] );
     }
-    
+
     public function testMonthlyByDay()
     {
     	$_event_data = array(
@@ -140,9 +140,9 @@ class recurrenceTest extends EO_UnitTestCase
     			'schedule' => 'monthly',
     			'schedule_meta' => 'BYDAY=4WE',
     			'until' => new DateTime( '2014-01-22 19:19:00', eo_get_blog_timezone() ),
-    
+
     	);
-    
+
     	$event_data = _eventorganiser_generate_occurrences( $_event_data );
     	$expected = array(
     			new DateTime( '2013-10-22 19:19:00', eo_get_blog_timezone() ), //Tuesday
@@ -150,10 +150,10 @@ class recurrenceTest extends EO_UnitTestCase
     			new DateTime( '2013-12-25 19:19:00', eo_get_blog_timezone() ), //4th Wednesday
     			new DateTime( '2014-01-22 19:19:00', eo_get_blog_timezone() ), //4th Wednesday
     	);
-    
+
     	$this->assertEquals( $expected, $event_data['occurrences'] );
     }
-    
+
     public function testYearly()
     {
     	$_event_data = array(
@@ -162,19 +162,19 @@ class recurrenceTest extends EO_UnitTestCase
     			'schedule' => 'yearly',
     			'frequency' => 2,
     			'until' => new DateTime( '2017-10-22 19:19:00', eo_get_blog_timezone() ),
-    
+
     	);
-    
+
     	$event_data = _eventorganiser_generate_occurrences( $_event_data );
     	$expected = array(
     			new DateTime( '2013-10-22 19:19:00', eo_get_blog_timezone() ),
     			new DateTime( '2015-10-22 19:19:00', eo_get_blog_timezone() ),
     			new DateTime( '2017-10-22 19:19:00', eo_get_blog_timezone() )
     	);
-    
+
     	$this->assertEquals( $expected, $event_data['occurrences'] );
     }
-    
+
     public function testCustom()
     {
     	$_event_data = array(
@@ -187,9 +187,9 @@ class recurrenceTest extends EO_UnitTestCase
     				new DateTime( '2013-11-17 19:19:00', eo_get_blog_timezone() ),
     				new DateTime( '2013-12-06 19:19:00', eo_get_blog_timezone() ),
     			)
-    
+
     	);
-    
+
     	$event_data = _eventorganiser_generate_occurrences( $_event_data );
     	$expected = array(
     		new DateTime( '2013-10-22 19:19:00', eo_get_blog_timezone() ),
@@ -197,10 +197,10 @@ class recurrenceTest extends EO_UnitTestCase
     		new DateTime( '2013-11-17 19:19:00', eo_get_blog_timezone() ),
     		new DateTime( '2013-12-06 19:19:00', eo_get_blog_timezone() ),
     	);
-    
+
     	$this->assertEquals( $expected, $event_data['occurrences'] );
     }
-    
+
     public function testLeapYear()
     {
     	$_event_data = array(
@@ -209,19 +209,19 @@ class recurrenceTest extends EO_UnitTestCase
     			'schedule' => 'yearly',
     			'frequency' => 1,
     			'until' => new DateTime( '2020-02-29 00:00:00', eo_get_blog_timezone() ),
-    
+
     	);
-    
+
     	$event_data = _eventorganiser_generate_occurrences( $_event_data );
     	$expected = array(
     			new DateTime( '2012-02-29 00:00:00', eo_get_blog_timezone() ),
     			new DateTime( '2016-02-29 00:00:00', eo_get_blog_timezone() ),
     			new DateTime( '2020-02-29 00:00:00', eo_get_blog_timezone() )
     	);
-    
+
     	$this->assertEquals( $expected, $event_data['occurrences'] );
     }
-    
+
     public function testShortMonth()
     {
     	$_event_data = array(
@@ -231,9 +231,9 @@ class recurrenceTest extends EO_UnitTestCase
     			'frequency' => 1,
     			'until' => new DateTime( '2013-03-31 00:00:00', eo_get_blog_timezone() ),
     			'schedule_meta' => 'BYMONTHDAY',
-    
+
     	);
-    
+
     	$event_data = _eventorganiser_generate_occurrences( $_event_data );
     	$expected = array(
     			new DateTime( '2012-10-31 00:00:00', eo_get_blog_timezone() ),
@@ -241,11 +241,11 @@ class recurrenceTest extends EO_UnitTestCase
     			new DateTime( '2013-01-31 00:00:00', eo_get_blog_timezone() ),
     			new DateTime( '2013-03-31 00:00:00', eo_get_blog_timezone() ),
     	);
-    
+
     	$this->assertEquals( $expected, $event_data['occurrences'] );
     }
 
-    
+
     public function testNoOccurrences()
     {
     	$_event_data = array(
@@ -256,11 +256,11 @@ class recurrenceTest extends EO_UnitTestCase
     			)
     	);
     	$event_data = _eventorganiser_generate_occurrences( $_event_data );
-    	 
+
     	$this->assertInstanceOf( 'WP_Error', $event_data );
     }
-    
-    
+
+
     public function testNumberOccurrences()
     {
     	$_event_data = array(
@@ -270,19 +270,19 @@ class recurrenceTest extends EO_UnitTestCase
     			'frequency' => 3,
     			'number_occurrences' => 3,
     	);
-    
+
     	$event_data = _eventorganiser_generate_occurrences( $_event_data );
     	$expected = array(
     			new DateTime( '2013-11-01 00:00:00', eo_get_blog_timezone() ),
     			new DateTime( '2013-11-04 00:00:00', eo_get_blog_timezone() ),
     			new DateTime( '2013-11-07 00:00:00', eo_get_blog_timezone() )
     	);
-    
+
     	$this->assertEquals( $expected, $event_data['occurrences'] );
     }
-    
+
     public function testNumberOccurrencesWeekly(){
-    	
+
     	$_event_data = array(
     			'start' => new DateTime( '2013-10-22 19:19:00', eo_get_blog_timezone() ), //Tuesday
     			'end' => new DateTime( '2013-10-22 20:19:00', eo_get_blog_timezone() ),
@@ -290,7 +290,7 @@ class recurrenceTest extends EO_UnitTestCase
     			'schedule_meta' => array( 'WE', 'FR' ),
     			'number_occurrences' => 5,
     	);
-    	
+
     	$event_data = _eventorganiser_generate_occurrences( $_event_data );
     	$expected = array(
     			new DateTime( '2013-10-23 19:19:00', eo_get_blog_timezone() ),
@@ -299,22 +299,22 @@ class recurrenceTest extends EO_UnitTestCase
     			new DateTime( '2013-11-01 19:19:00', eo_get_blog_timezone() ),
     			new DateTime( '2013-11-06 19:19:00', eo_get_blog_timezone() ),
     	);
-    	
+
     	$this->assertEquals( $expected, $event_data['occurrences'] );
-    	
-    } 
-    
+
+    }
+
     public function testNumberOccurrencesYearly(){
-    	 
+
     	$_event_data = array(
     			'start' => new DateTime( '2012-02-29 00:00:00', eo_get_blog_timezone() ), //Tuesday
     			'end' => new DateTime( '2012-02-29 23:59:00', eo_get_blog_timezone() ),
     			'schedule' => 'yearly',
     			'frequency' => 1,
     			'number_occurrences' => 4,
-    
+
     	);
-    
+
     	$event_data = _eventorganiser_generate_occurrences( $_event_data );
     	$expected = array(
     			new DateTime( '2012-02-29 00:00:00', eo_get_blog_timezone() ),
@@ -322,11 +322,11 @@ class recurrenceTest extends EO_UnitTestCase
     			new DateTime( '2020-02-29 00:00:00', eo_get_blog_timezone() ),
     			new DateTime( '2024-02-29 00:00:00', eo_get_blog_timezone() ),
     	);
-    
+
     	$this->assertEquals( $expected, $event_data['occurrences'] );
-    	 
+
     }
-    
+
     public function testNumberOccurrencesYearlyShortMonth()
     {
     	$_event_data = array(
@@ -337,7 +337,7 @@ class recurrenceTest extends EO_UnitTestCase
     			'number_occurrences' => 4,
     			'schedule_meta' => 'BYMONTHDAY',
     	);
-    
+
     	$event_data = _eventorganiser_generate_occurrences( $_event_data );
     	$expected = array(
     			new DateTime( '2012-10-31 00:00:00', eo_get_blog_timezone() ),
@@ -345,11 +345,11 @@ class recurrenceTest extends EO_UnitTestCase
     			new DateTime( '2013-01-31 00:00:00', eo_get_blog_timezone() ),
     			new DateTime( '2013-03-31 00:00:00', eo_get_blog_timezone() ),
     	);
-    
+
     	$this->assertEquals( $expected, $event_data['occurrences'] );
     }
-    
-    
+
+
     public function testInvalidIncludes()
     {
     	$_event_data = array(
@@ -362,19 +362,19 @@ class recurrenceTest extends EO_UnitTestCase
     				0,
     				new DateTime( '2013-12-06 19:19:00', eo_get_blog_timezone() ),
     			)
-    
+
     	);
-    
+
     	$event_data = _eventorganiser_generate_occurrences( $_event_data );
     	$expected = array(
     		new DateTime( '2013-10-22 19:19:00', eo_get_blog_timezone() ),
 			new DateTime( '2013-10-24 19:19:00', eo_get_blog_timezone() ),
     		new DateTime( '2013-12-06 19:19:00', eo_get_blog_timezone() ),
     	);
-    
+
     	$this->assertEquals( $expected, $event_data['occurrences'] );
     }
-    
+
 
     public function testReallyInvalidIncludes()
     {
@@ -385,17 +385,17 @@ class recurrenceTest extends EO_UnitTestCase
     			'frequency' => 2,
     			'include' => false,
     	);
-    
+
     	$event_data = _eventorganiser_generate_occurrences( $_event_data );
     	$expected = array(
     			new DateTime( '2013-10-22 19:19:00', eo_get_blog_timezone() )
     	);
-    
+
     	$this->assertEquals( $expected, $event_data['occurrences'] );
     }
-  
-    
-	
+
+
+
     public function testScheduleLastUpdate()
     {
     	$event_data = array(
@@ -406,20 +406,20 @@ class recurrenceTest extends EO_UnitTestCase
     		'until' => new DateTime( '2013-10-26 19:19:00', eo_get_blog_timezone() ),
     	);
     	$event = eo_insert_event( $event_data );
-    	
+
     	eo_update_event( $event, array(
     		'include' => array( new DateTime( '2013-10-25 19:19:00', eo_get_blog_timezone() ) )
     	));
-    	
+
     	$schedule = eo_get_event_schedule( $event );
-    	
-    	$this->assertEquals( 
-    		new DateTime( '2013-10-26 19:19:00', eo_get_blog_timezone() ), 
-    		$schedule['until'] 
+
+    	$this->assertEquals(
+    		new DateTime( '2013-10-26 19:19:00', eo_get_blog_timezone() ),
+    		$schedule['until']
     	);
 
     }
-    	
+
     /**
      * Tests where an occurrence's start time.
      */
@@ -433,9 +433,9 @@ class recurrenceTest extends EO_UnitTestCase
     		'include'       => array( new DateTime( '2014-08-25 22:48:00', eo_get_blog_timezone() ) ),
     		'exclude'       => array( new DateTime( '2014-08-25 18:48:00', eo_get_blog_timezone() ) ),
     	);
-    	
+
     	$event_data = _eventorganiser_generate_occurrences( $_event_data );
-    	
+
     	//echo print_r( $event_data );
     	$expected = array(
     			new DateTime( '2014-08-11 18:48:00', eo_get_blog_timezone() ),
@@ -443,9 +443,9 @@ class recurrenceTest extends EO_UnitTestCase
     			new DateTime( '2014-08-25 22:48:00', eo_get_blog_timezone() ),
     			new DateTime( '2014-09-01 18:48:00', eo_get_blog_timezone() ),
     	);
-    	
+
     	$this->assertEquals( $expected, $event_data['occurrences'] );
-		
+
     }
 
     public function testMoveOccurrence()
@@ -466,8 +466,8 @@ class recurrenceTest extends EO_UnitTestCase
     	$new_start = new DateTime( '2014-08-26 15:48:00', eo_get_blog_timezone() );
     	$new_end   = new DateTime( '2014-08-26 16:48:00', eo_get_blog_timezone() );
     	$response = eventorganiser_move_occurrence( $event_id, $occurrence_id, $new_start, $new_end );
-    	
-    	//Test that this was successful    
+
+    	//Test that this was successful
     	$expected = $occurrences;
     	$expected[$occurrence_id] = array(
     		'start' => $new_start,
@@ -477,10 +477,10 @@ class recurrenceTest extends EO_UnitTestCase
     	$this->assertEquals( $expected, eo_get_the_occurrences_of( $event_id ) );
 
     }
-    
+
     public function testChangeDurationOfOccurrence()
     {
-    	
+
     	$this->markTestSkipped(
     		'This feature has not been implemented yet.'
     	);
@@ -491,12 +491,12 @@ class recurrenceTest extends EO_UnitTestCase
     		'schedule'      => 'weekly',
     		'until' => new DateTime( '2014-09-01 18:48:00', eo_get_blog_timezone() ),
     	);
-   
+
     	$event_id       = $this->factory->event->create( $event );
     	$occurrences    = eo_get_the_occurrences_of( $event_id );
     	$occurrence_ids = array_keys( $occurrences );
-    	$occurrence_id  = $occurrence_ids[2]; 
-    	
+    	$occurrence_id  = $occurrence_ids[2];
+
     	$start = $occurrences[$occurrence_id]['start'];
     	$new_end = clone $start;
     	$new_end->modify( '+2 hours' );
@@ -514,7 +514,7 @@ class recurrenceTest extends EO_UnitTestCase
     	$this->assertEquals( $expected, eo_get_the_occurrences_of( $event_id ) );
     
     }
-    
+
     /**
      * Currently the following case is not allowed:
      * - Changing the start date to a date where an occurrence already exists
@@ -531,19 +531,19 @@ class recurrenceTest extends EO_UnitTestCase
     	$event_id       = $this->factory->event->create( $event );
     	$occurrences    = eo_get_the_occurrences_of( $event_id );
     	$occurrence_ids = array_keys( $occurrences );
-    	$occurrence_id  = $occurrence_ids[2]; 
-    	
+    	$occurrence_id  = $occurrence_ids[2];
+
     	//Check the start/end datetimes are as expected
     	$this->assertEquals( array(
     		'start' => new DateTime( '2014-08-25 18:48:00', eo_get_blog_timezone() ),
     		'end'   => new DateTime( '2014-08-25 19:48:00', eo_get_blog_timezone() ),
     	), $occurrences[$occurrence_id] );
-    	
+
     	//Try to move to an 'occupied date' (even with different time)
     	$new_start = new DateTime( '2014-08-18 15:48:00', eo_get_blog_timezone() );
     	$new_end   = new DateTime( '2014-08-18 16:48:00', eo_get_blog_timezone() );
     	$response = eventorganiser_move_occurrence( $event_id, $occurrence_id, $new_start, $new_end );
-    	
+
     	$this->assertInstanceOf( 'WP_Error', $response );
     	$this->assertEquals( 'events-cannot-share-date', $response->get_error_code() );
     
