Index: wp-admin/options.php
===================================================================
--- wp-admin/options.php	(revision 17563)
+++ wp-admin/options.php	(working copy)
@@ -61,7 +61,8 @@
 	'privacy' => array( 'blog_public' ),
 	'reading' => array( 'posts_per_page', 'posts_per_rss', 'rss_use_excerpt', 'blog_charset', 'show_on_front', 'page_on_front', 'page_for_posts' ),
 	'writing' => array( 'default_post_edit_rows', 'use_smilies', 'default_category', 'default_email_category', 'use_balanceTags', 'default_link_category', 'default_post_format', 'enable_app', 'enable_xmlrpc' ),
-	'options' => array( '' ) );
+	'options' => array( '' ),
+	'permalink' => array( 'permalink_structure', 'category_base', 'tag_base' ) );
 
 $mail_options = array('mailserver_url', 'mailserver_port', 'mailserver_login', 'mailserver_pass');
 $uploads_options = array('uploads_use_yearmonth_folders', 'upload_path', 'upload_url_path');
@@ -105,7 +106,7 @@
 		check_admin_referer( $option_page . '-options' );
 	}
 
-	if ( !isset( $whitelist_options[ $option_page ] ) )
+	if ( ! isset( $whitelist_options[ $option_page ] ) )
 		wp_die( __( 'Error: options page not found.' ) );
 
 	if ( 'options' == $option_page ) {
@@ -129,7 +130,40 @@
 			$_POST['timezone_string'] = '';
 		}
 	}
+	
+	if ( 'permalink' == $option_page ) {
+		if ( isset( $permalink_structure ) || isset( $category_base ) ) {
 
+			if ( isset( $permalink_structure ) ) {
+				if ( isset( $selection ) && 'custom' != $selection )
+					$permalink_structure = $selection;
+				
+				if ( ! empty( $permalink_structure ) ) {
+					$permalink_structure = preg_replace( '#/+#', '/', '/' . str_replace( '#', '', $permalink_structure ) );
+					if ( $prefix && $blog_prefix )
+						$permalink_structure = $prefix . preg_replace( '#^/?index\.php#', '', $permalink_structure );
+					else
+						$permalink_structure = $blog_prefix . $permalink_structure;
+				}
+				$wp_rewrite->set_permalink_structure( $permalink_structure );
+			}
+
+			if ( isset( $category_base ) ) {
+				if ( ! empty( $category_base ) )
+					$category_base = $blog_prefix . preg_replace( '#/+#', '/', '/' . str_replace( '#', '', $category_base ) );
+				$wp_rewrite->set_category_base( $category_base );
+			}
+
+			if ( isset( $tag_base ) ) {
+				if ( ! empty( $tag_base ) )
+					$tag_base = $blog_prefix . preg_replace('#/+#', '/', '/' . str_replace( '#', '', $tag_base ) );
+				$wp_rewrite->set_tag_base( $tag_base );
+			}
+
+			create_initial_taxonomies();
+		}
+	}
+
 	if ( $options ) {
 		foreach ( $options as $option ) {
 			if ( $unregistered )
@@ -150,7 +184,7 @@
 	 *  Handle settings errors and return to options page
 	 */
 	// If no settings errors were registered add a general 'updated' message.
-	if ( !count( get_settings_errors() ) )
+	if ( !count( get_settings_errors() ) && 'permalink' != $option_page )
 		add_settings_error('general', 'settings_updated', __('Settings saved.'), 'updated');
 	set_transient('settings_errors', get_settings_errors(), 30);
 
Index: wp-admin/options-permalink.php
===================================================================
--- wp-admin/options-permalink.php	(revision 17563)
+++ wp-admin/options-permalink.php	(working copy)
@@ -65,44 +65,8 @@
 if ( is_multisite() && !is_subdomain_install() && is_main_site() )
 	$blog_prefix = '/blog';
 
-if ( isset($_POST['permalink_structure']) || isset($_POST['category_base']) ) {
-	check_admin_referer('update-permalink');
-
-	if ( isset( $_POST['permalink_structure'] ) ) {
-		if ( isset( $_POST['selection'] ) && 'custom' != $_POST['selection'] )
-			$permalink_structure = $_POST['selection'];
-		else
-			$permalink_structure = $_POST['permalink_structure'];
-
-		if ( ! empty( $permalink_structure ) ) {
-			$permalink_structure = preg_replace( '#/+#', '/', '/' . str_replace( '#', '', $permalink_structure ) );
-			if ( $prefix && $blog_prefix )
-				$permalink_structure = $prefix . preg_replace( '#^/?index\.php#', '', $permalink_structure );
-			else
-				$permalink_structure = $blog_prefix . $permalink_structure;
-		}
-		$wp_rewrite->set_permalink_structure( $permalink_structure );
-	}
-
-	if ( isset( $_POST['category_base'] ) ) {
-		$category_base = $_POST['category_base'];
-		if ( ! empty( $category_base ) )
-			$category_base = $blog_prefix . preg_replace('#/+#', '/', '/' . str_replace( '#', '', $category_base ) );
-		$wp_rewrite->set_category_base( $category_base );
-	}
-
-	if ( isset( $_POST['tag_base'] ) ) {
-		$tag_base = $_POST['tag_base'];
-		if ( ! empty( $tag_base ) )
-			$tag_base = $blog_prefix . preg_replace('#/+#', '/', '/' . str_replace( '#', '', $tag_base ) );
-		$wp_rewrite->set_tag_base( $tag_base );
-	}
-
-	create_initial_taxonomies();
-}
-
-$permalink_structure = get_option('permalink_structure');
-$category_base = get_option('category_base');
+$permalink_structure = get_option( 'permalink_structure' );
+$category_base = get_option( 'category_base' );
 $tag_base = get_option( 'tag_base' );
 
 if ( $iis7_permalinks ) {
@@ -125,7 +89,7 @@
 $wp_rewrite->flush_rules();
 
 
-if (isset($_POST['submit'])) : ?>
+if (isset($_GET['settings-updated'])) : ?>
 <div id="message" class="updated"><p><?php
 if ( ! is_multisite() ) {
 	if ( $iis7_permalinks ) {
@@ -152,8 +116,8 @@
 <?php screen_icon(); ?>
 <h2><?php echo esc_html( $title ); ?></h2>
 
-<form name="form" action="options-permalink.php" method="post">
-<?php wp_nonce_field('update-permalink') ?>
+<form name="form" action="options.php" method="post">
+<?php settings_fields( 'permalink' ); ?>
 
   <p><?php _e('By default WordPress uses web <abbr title="Universal Resource Locator">URL</abbr>s which have question marks and lots of numbers in them, however WordPress offers you the ability to create a custom URL structure for your permalinks and archives. This can improve the aesthetics, usability, and forward-compatibility of your links. A <a href="http://codex.wordpress.org/Using_Permalinks">number of tags are available</a>, and here are some examples to get you started.'); ?></p>
 
