diff --git src/wp-includes/class-wp-widget.php src/wp-includes/class-wp-widget.php
index a99568d..5dc808b 100644
--- src/wp-includes/class-wp-widget.php
+++ src/wp-includes/class-wp-widget.php
@@ -73,6 +73,15 @@ class WP_Widget {
 	public $id = false;
 
 	/**
+	 * Default instance.
+	 *
+	 * @since 4.5.0
+	 * @access public
+	 * @var array
+	 */
+	public $default_instance = array();
+
+	/**
 	 * Whether the widget data has been updated.
 	 *
 	 * Set to true when the data is updated after a POST submit - ensures it does
@@ -335,6 +344,7 @@ class WP_Widget {
 
 		if ( array_key_exists( $this->number, $instances ) ) {
 			$instance = $instances[ $this->number ];
+			$instance = wp_parse_args( $instance, $this->default_instance );
 
 			/**
 			 * Filter the settings for a particular widget instance.
@@ -419,6 +429,7 @@ class WP_Widget {
 					wp_suspend_cache_addition( true );
 				}
 
+				$new_instance = wp_parse_args( $new_instance, $this->default_instance );
 				$instance = $this->update( $new_instance, $old_instance );
 
 				if ( $this->is_preview() ) {
diff --git src/wp-includes/widgets/class-wp-widget-links.php src/wp-includes/widgets/class-wp-widget-links.php
index 96ecc77..152652f 100644
--- src/wp-includes/widgets/class-wp-widget-links.php
+++ src/wp-includes/widgets/class-wp-widget-links.php
@@ -17,6 +17,23 @@
 class WP_Widget_Links extends WP_Widget {
 
 	/**
+	 * Default instance.
+	 *
+	 * @since 4.5.0
+	 * @var array
+	 */
+	public $default_instance = array(
+		'description' => false,
+		'name' => false,
+		'images' => false,
+		'rating' => false,
+		'category' => false,
+		'orderby' => 'name',
+		'order' => 'DESC',
+		'limit' => -1,
+	);
+
+	/**
 	 * Sets up a new Links widget instance.
 	 *
 	 * @since 2.8.0
diff --git src/wp-includes/widgets/class-wp-widget-meta.php src/wp-includes/widgets/class-wp-widget-meta.php
index c12238f..3b1e07e 100644
--- src/wp-includes/widgets/class-wp-widget-meta.php
+++ src/wp-includes/widgets/class-wp-widget-meta.php
@@ -19,6 +19,16 @@
 class WP_Widget_Meta extends WP_Widget {
 
 	/**
+	 * Default instance.
+	 *
+	 * @since 4.5.0
+	 * @var array
+	 */
+	public $default_instance = array(
+		'title' => '',
+	);
+
+	/**
 	 * Sets up a new Meta widget instance.
 	 *
 	 * @since 2.8.0
diff --git src/wp-includes/widgets/class-wp-widget-pages.php src/wp-includes/widgets/class-wp-widget-pages.php
index e8737ac..e62c044 100644
--- src/wp-includes/widgets/class-wp-widget-pages.php
+++ src/wp-includes/widgets/class-wp-widget-pages.php
@@ -17,6 +17,18 @@
 class WP_Widget_Pages extends WP_Widget {
 
 	/**
+	 * Default instance.
+	 *
+	 * @since 4.5.0
+	 * @var array
+	 */
+	public $default_instance = array(
+		'title' => '',
+		'orderby' => 'menu_order',
+		'exclude' => '',
+	);
+
+	/**
 	 * Sets up a new Pages widget instance.
 	 *
 	 * @since 2.8.0
@@ -50,10 +62,10 @@ class WP_Widget_Pages extends WP_Widget {
 		 */
 		$title = apply_filters( 'widget_title', empty( $instance['title'] ) ? __( 'Pages' ) : $instance['title'], $instance, $this->id_base );
 
-		$sortby = empty( $instance['sortby'] ) ? 'menu_order' : $instance['sortby'];
-		$exclude = empty( $instance['exclude'] ) ? '' : $instance['exclude'];
+		$sortby = $instance['sortby'];
+		$exclude = $instance['exclude'];
 
-		if ( $sortby == 'menu_order' )
+		if ( $sortby === 'menu_order' )
 			$sortby = 'menu_order, post_title';
 
 		/**
diff --git src/wp-includes/widgets/class-wp-widget-recent-comments.php src/wp-includes/widgets/class-wp-widget-recent-comments.php
index 0f1a3b5..b77a74a 100644
--- src/wp-includes/widgets/class-wp-widget-recent-comments.php
+++ src/wp-includes/widgets/class-wp-widget-recent-comments.php
@@ -17,6 +17,17 @@
 class WP_Widget_Recent_Comments extends WP_Widget {
 
 	/**
+	 * Default instance.
+	 *
+	 * @since 4.5.0
+	 * @var array
+	 */
+	public $default_instance = array(
+		'title' => '',
+		'number' => 5,
+	);
+
+	/**
 	 * Sets up a new Recent Comments widget instance.
 	 *
 	 * @since 2.8.0
@@ -75,9 +86,7 @@ class WP_Widget_Recent_Comments extends WP_Widget {
 		/** This filter is documented in wp-includes/widgets/class-wp-widget-pages.php */
 		$title = apply_filters( 'widget_title', $title, $instance, $this->id_base );
 
-		$number = ( ! empty( $instance['number'] ) ) ? absint( $instance['number'] ) : 5;
-		if ( ! $number )
-			$number = 5;
+		$number = $instance['number'];
 
 		/**
 		 * Filter the arguments for the Recent Comments widget.
@@ -91,7 +100,7 @@ class WP_Widget_Recent_Comments extends WP_Widget {
 		$comments = get_comments( apply_filters( 'widget_comments_args', array(
 			'number'      => $number,
 			'status'      => 'approve',
-			'post_status' => 'publish'
+			'post_status' => 'publish',
 		) ) );
 
 		$output .= $args['before_widget'];
diff --git src/wp-includes/widgets/class-wp-widget-recent-posts.php src/wp-includes/widgets/class-wp-widget-recent-posts.php
index 8f92bf3..30257f9 100644
--- src/wp-includes/widgets/class-wp-widget-recent-posts.php
+++ src/wp-includes/widgets/class-wp-widget-recent-posts.php
@@ -17,6 +17,18 @@
 class WP_Widget_Recent_Posts extends WP_Widget {
 
 	/**
+	 * Default instance.
+	 *
+	 * @since 4.5.0
+	 * @var array
+	 */
+	public $default_instance = array(
+		'title' => '',
+		'number' => 5,
+		'show_date' => false,
+	);
+
+	/**
 	 * Sets up a new Recent Posts widget instance.
 	 *
 	 * @since 2.8.0
@@ -48,10 +60,7 @@ class WP_Widget_Recent_Posts extends WP_Widget {
 		/** This filter is documented in wp-includes/widgets/class-wp-widget-pages.php */
 		$title = apply_filters( 'widget_title', $title, $instance, $this->id_base );
 
-		$number = ( ! empty( $instance['number'] ) ) ? absint( $instance['number'] ) : 5;
-		if ( ! $number )
-			$number = 5;
-		$show_date = isset( $instance['show_date'] ) ? $instance['show_date'] : false;
+		$number = absint( $instance['number'] );
 
 		/**
 		 * Filter the arguments for the Recent Posts widget.
@@ -66,7 +75,7 @@ class WP_Widget_Recent_Posts extends WP_Widget {
 			'posts_per_page'      => $number,
 			'no_found_rows'       => true,
 			'post_status'         => 'publish',
-			'ignore_sticky_posts' => true
+			'ignore_sticky_posts' => true,
 		) ) );
 
 		if ($r->have_posts()) :
@@ -121,15 +130,15 @@ class WP_Widget_Recent_Posts extends WP_Widget {
 	 * @param array $instance Current settings.
 	 */
 	public function form( $instance ) {
-		$title     = isset( $instance['title'] ) ? esc_attr( $instance['title'] ) : '';
-		$number    = isset( $instance['number'] ) ? absint( $instance['number'] ) : 5;
-		$show_date = isset( $instance['show_date'] ) ? (bool) $instance['show_date'] : false;
+		$title     = $instance['title'];
+		$number    = absint( $instance['number'] );
+		$show_date = (bool) $instance['show_date'];
 ?>
 		<p><label for="<?php echo $this->get_field_id( 'title' ); ?>"><?php _e( 'Title:' ); ?></label>
-		<input class="widefat" id="<?php echo $this->get_field_id( 'title' ); ?>" name="<?php echo $this->get_field_name( 'title' ); ?>" type="text" value="<?php echo $title; ?>" /></p>
+		<input class="widefat" id="<?php echo $this->get_field_id( 'title' ); ?>" name="<?php echo $this->get_field_name( 'title' ); ?>" type="text" value="<?php echo esc_attr( $title ); ?>" /></p>
 
 		<p><label for="<?php echo $this->get_field_id( 'number' ); ?>"><?php _e( 'Number of posts to show:' ); ?></label>
-		<input class="tiny-text" id="<?php echo $this->get_field_id( 'number' ); ?>" name="<?php echo $this->get_field_name( 'number' ); ?>" type="number" step="1" min="1" value="<?php echo $number; ?>" size="3" /></p>
+		<input class="tiny-text" id="<?php echo $this->get_field_id( 'number' ); ?>" name="<?php echo $this->get_field_name( 'number' ); ?>" type="number" step="1" min="1" value="<?php echo esc_attr( $number ); ?>" size="3" /></p>
 
 		<p><input class="checkbox" type="checkbox"<?php checked( $show_date ); ?> id="<?php echo $this->get_field_id( 'show_date' ); ?>" name="<?php echo $this->get_field_name( 'show_date' ); ?>" />
 		<label for="<?php echo $this->get_field_id( 'show_date' ); ?>"><?php _e( 'Display post date?' ); ?></label></p>
diff --git src/wp-includes/widgets/class-wp-widget-rss.php src/wp-includes/widgets/class-wp-widget-rss.php
index b477a6e..361f313 100644
--- src/wp-includes/widgets/class-wp-widget-rss.php
+++ src/wp-includes/widgets/class-wp-widget-rss.php
@@ -17,6 +17,17 @@
 class WP_Widget_RSS extends WP_Widget {
 
 	/**
+	 * Default instance.
+	 *
+	 * @since 4.5.0
+	 * @var array
+	 */
+	public $default_instance = array(
+		'title' => '',
+		// @todo
+	);
+
+	/**
 	 * Sets up a new RSS widget instance.
 	 *
 	 * @since 2.8.0
