diff --git a/assets/squat-radar.js b/assets/squat-radar.js
index 00394f97e6a1067bef2061aa08bfa55a1fcbb40f..8939ee9d499ea3880437993cc786f2861fdc7987 100644
--- a/assets/squat-radar.js
+++ b/assets/squat-radar.js
@@ -7,7 +7,7 @@ jQuery(function($){
 			type:		'POST',
 			data:		{
 						action: "squat_radar_events",
-						instance: window[widget.id],
+						instance: squat_radar_widget[widget.id],
 			},
 			success: 	function(result){
 
@@ -20,17 +20,6 @@ jQuery(function($){
 				} else {
 					$(widget).empty();
 					$(widget).append(result.html);
-//					$(".squat-li a").on('click', function(e){
-
-//						if (this.hasAttribute("data-link")) {
-//							e.preventDefault();
-//							$(this).parent().find('p').show();
-//							this.textContent = this.getAttribute('data-nog-meer');
-//							this.setAttribute('href', this.getAttribute('data-link'));
-//							this.removeAttribute('data-link');
-//						}
-//
-//					});
 				}
 			},
 			error: 		function(res){
diff --git a/includes/squat-radar-widget.php b/includes/squat-radar-widget.php
index f4a6eef4a1c100219bf74c72a31e4849d2813fef..26034acf6abc7933b43657dea49b6697eaa3074f 100644
--- a/includes/squat-radar-widget.php
+++ b/includes/squat-radar-widget.php
@@ -25,11 +25,11 @@ class Squat_Radar_Widget extends WP_Widget {
         /**
          * Register the widget
          */
-        public static function register_widget() {
-                register_widget( __CLASS__ );
+  public static function register_widget() {
+    register_widget( __CLASS__ );
 		add_action( 'wp_ajax_squat_radar_events', [__CLASS__, 'ajax_callback'] );
 		add_action( 'wp_ajax_nopriv_squat_radar_events', [__CLASS__, 'ajax_callback'] );
-		add_action( 'wp_enqueue_scripts', [__CLASS__, 'widget_script'] );
+		wp_register_script( 'squat-radar-widget',  SQUAT_RADAR_URL . 'assets/squat-radar.js', ['jquery'] );
 		add_action( 'wp_enqueue_scripts', [__CLASS__, 'widget_style'] );
 
 		add_action( 'squat_radar_widget_cache_cron', [__CLASS__, 'cache_cron'] );
@@ -44,13 +44,6 @@ class Squat_Radar_Widget extends WP_Widget {
 		wp_enqueue_style( 'squat-radar-widget' );
 	}
 
-	/**
-	 * Enqueue scripts callback, add JS.
-	 */
-	static public function widget_script() {
-		wp_register_script( 'squat-radar-widget',  SQUAT_RADAR_URL . 'assets/squat-radar.js', ['jquery'] );
-	}
-
 	/**
 	 * Cron action.
 	 *
@@ -66,7 +59,7 @@ class Squat_Radar_Widget extends WP_Widget {
 				}
 			}
 		}
-		add_option('squat_radar_widget_cron_run', $last_run);
+		update_option('squat_radar_widget_cron_run', $last_run);
 	}
 
 	/**
@@ -75,9 +68,9 @@ class Squat_Radar_Widget extends WP_Widget {
 	protected static function cache_refresh($instance) {
 		$connector = new Squat_Radar_Connector();
 
-		$languages = apply_filters('wpml_active_languages', NULL);
-		$languages = is_array($languages) ? array_keys($languages) : [];
-		$languages = array_merge($instance['url']['keys']['language'], $languages);
+    $languages = apply_filters('wpml_active_languages', NULL);
+    $languages = is_array($languages) ? array_keys($languages) : [];
+    $languages = array_merge([$instance['url']['keys']['language']], $languages);
 		foreach ($languages as $language) {
 			try {
 				// Force update. Don't set expire.
@@ -119,9 +112,12 @@ class Squat_Radar_Widget extends WP_Widget {
 			}
 		}
 		else {
-			wp_enqueue_script( 'squat-radar-widget');
-			wp_localize_script( 'squat-radar-widget', 'squat_radar_widget', [ 'ajaxurl' => admin_url( 'admin-ajax.php' ) ] );
-			wp_localize_script( 'squat-radar-widget', $widget_id, ['number' => $this->number] );
+      wp_enqueue_script( 'squat-radar-widget');
+      wp_add_inline_script('squat-radar-widget', 
+        'const squat_radar_widget = ' . json_encode( [
+          'ajaxurl' => admin_url( 'admin-ajax.php' ),
+          $widget_id => $this->number,
+        ] ) . ';', 'before');
 
 			echo '<div id="' . $widget_id . '" class="squat-radar-widget squat-radar-ajax"><a href="' . esc_url_raw( $instance['url']['value'] ) . '">'
 				. esc_url( $instance['url']['value'] ) 
@@ -142,7 +138,7 @@ class Squat_Radar_Widget extends WP_Widget {
 		$data = [];
 
 		// Load instance configuration from ID.
-		$instance_number = (int) $_POST['instance']['number'];
+		$instance_number = (int) $_POST['instance'];
 		$widget_options_all = get_option('widget_squat_radar');
 		if ( ! isset($widget_options_all[$instance_number]) )  {
 			wp_die();
@@ -181,7 +177,6 @@ class Squat_Radar_Widget extends WP_Widget {
 	 * Widget options.
 	 */
 	public function form( $instance ) {
-
 		//
 		// Title.
 		//
@@ -329,8 +324,7 @@ class Squat_Radar_Widget extends WP_Widget {
 	 * Save widget options.
 	 */
 	public function update( $new_instance, $old_instance ) {
-		$options = [];
-
+    $options = [];
 		if ( ! empty( $new_instance['title'] ) ) {
 			$options['title'] = sanitize_text_field( $new_instance['title'] );
 		}
@@ -338,10 +332,18 @@ class Squat_Radar_Widget extends WP_Widget {
 			$options['title'] = '';
 		}
 
-		if ( ! empty($new_instance['url']) ) {
-			$keys = $this->connector->decode_search_url($new_instance['url']);
+    if ( ! empty($new_instance['url']) ) {
+      // The value passed here changes somewhere post WP5.4.
+      // More recent versions have the options array in the instance.
+      if (is_string($new_instance['url'])) {
+        $url = $new_instance['url'];
+      }
+      else {
+        $url = $new_instance['url']['value'];
+      }
+			$keys = $this->connector->decode_search_url($url);
 			$options['url']['keys'] = $keys;
-			$options['url']['value'] = $new_instance['url'];
+			$options['url']['value'] = $url;
 			if (empty($keys)) {
 				$options['url']['error'] = 'URL not recognised';
 			}
@@ -350,14 +352,20 @@ class Squat_Radar_Widget extends WP_Widget {
 			$options['url'] = ['value' => '', 'keys' => []];
 		}
 
-		$options['fields'] = [];
+    // When called by 5.9 ajax this contains the already set array.
+    // Just check it's sane. 
+    $options['fields'] = is_array($new_instance['fields']) ? $new_instance['fields'] : [];
+    array_filter($options['fields'], function ($v, $k) {
+      return ($v == $k) && (preg_match('([^a-zA-Z_:])', $k) === 0);
+    }, ARRAY_FILTER_USE_BOTH);
+
 		foreach ($this->preset_fields() as $field_name => $field_label) {
 			if ( ! empty($new_instance['field-' . $field_name]) ) {
 				$options['fields'][$field_name] = $field_name;
 			}
 		}
 
-		if ( ! empty($new_instance['fields']) ) {
+    if ( ! empty($new_instance['fields']) && is_string($new_instance['fields']) ) {
 			$matches = [];
 			preg_match_all('/([a-zA-Z_:]+)/', $new_instance['fields'], $matches);
 			$options['fields'] += array_combine($matches[0], $matches[0]);