diff --git src/wp-includes/widgets.php src/wp-includes/widgets.php
index 6c559c3..e041ad3 100644
--- src/wp-includes/widgets.php
+++ src/wp-includes/widgets.php
@@ -1457,7 +1457,10 @@ function wp_widgets_init() {
 
 	register_widget('WP_Widget_Categories');
 
-	register_widget('WP_Widget_Recent_Posts');
+	foreach ( get_post_types( array( 'public' => true ), 'objects' ) as $post_type_obj ) {
+		$recent_posts_widget = new WP_Widget_Recent_Posts( $post_type_obj->name );
+		register_widget( $recent_posts_widget );
+	}
 
 	register_widget('WP_Widget_Recent_Comments');
 
diff --git src/wp-includes/widgets/class-wp-widget-recent-posts.php src/wp-includes/widgets/class-wp-widget-recent-posts.php
index 8f92bf3..46a151f 100644
--- src/wp-includes/widgets/class-wp-widget-recent-posts.php
+++ src/wp-includes/widgets/class-wp-widget-recent-posts.php
@@ -17,14 +17,33 @@
 class WP_Widget_Recent_Posts extends WP_Widget {
 
 	/**
+	 * Post type for this widget.
+	 *
+	 * @var string
+	 */
+	public $post_type = 'post';
+
+	/**
 	 * Sets up a new Recent Posts widget instance.
 	 *
 	 * @since 2.8.0
 	 * @access public
+	 *
+	 * @param string $post_type Post type.
 	 */
-	public function __construct() {
-		$widget_ops = array('classname' => 'widget_recent_entries', 'description' => __( "Your site&#8217;s most recent Posts.") );
-		parent::__construct('recent-posts', __('Recent Posts'), $widget_ops);
+	public function __construct( $post_type = 'post' ) {
+		$this->post_type = $post_type;
+		$post_type_obj = get_post_type( $post_type );
+		$widget_ops = array(
+			'classname' => 'widget_recent_entries',
+			'description' => sprintf( __( 'Your site&#8217;s most recent %s.', $post_type_obj->labels->name ) ),
+		);
+		$id_base = sprintf( 'recent-%s', $post_type === 'post' ? 'posts' : "$post_type-posts" );
+		parent::__construct(
+			$id_base,
+			sprintf( __( 'Recent %s', $post_type_obj->labels->name ) ),
+			$widget_ops
+		);
 		$this->alt_option_name = 'widget_recent_entries';
 	}
 
@@ -66,7 +85,8 @@ 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,
+			'post_type'           => $this->post_type,
 		) ) );
 
 		if ($r->have_posts()) :
