Index: oem-config/d-i/source/user-setup/debian/user-setup-udeb.templates
===================================================================
--- oem-config.orig/d-i/source/user-setup/debian/user-setup-udeb.templates	2009-09-23 19:51:37.000000000 -0400
+++ oem-config/d-i/source/user-setup/debian/user-setup-udeb.templates	2009-09-23 19:52:59.000000000 -0400
@@ -158,6 +158,11 @@
  You entered a password that consists of less than eight characters, which
  is considered too weak. You should choose a stronger password.
 
+Template: user-setup/user-setup
+Type: boolean
+# :sl2:
+_Description: Complete Check
+
 Template: passwd/shadow
 Type: boolean
 Default: true
Index: oem-config/d-i/source/user-setup/user-setup-apply
===================================================================
--- oem-config.orig/d-i/source/user-setup/user-setup-apply	2009-09-23 19:52:59.000000000 -0400
+++ oem-config/d-i/source/user-setup/user-setup-apply	2009-09-23 19:53:45.000000000 -0400
@@ -1,4 +1,4 @@
-#! /bin/sh
+#! /bin/bash
 set -e
 
 . /usr/share/debconf/confmodule
@@ -140,7 +140,8 @@
 		$log $chroot $ROOT mount -t tmpfs tmpfs /dev/shm
 	fi
 	if [ -x $ROOT/usr/sbin/adduser ]; then
-		$log $chroot $ROOT adduser --disabled-password --gecos "$RET" $UIDOPT $ENCRYPT_HOME_OPT "$USER" >/dev/null || true
+		$log $chroot $ROOT adduser --disabled-password --gecos "$RET" $UIDOPT $ENCRYPT_HOME_OPT "$USER" >/dev/null || true 
+		$log $chroot $ROOT usermod -c "$RET" "$USER" || true
 	else
 		$log $chroot $ROOT useradd -c "$RET" -m "$USER" $UIDOPT >/dev/null || true
 	fi
Index: oem-config/d-i/source/user-setup/user-setup-ask
===================================================================
--- oem-config.orig/d-i/source/user-setup/user-setup-ask	2009-09-23 19:51:36.000000000 -0400
+++ oem-config/d-i/source/user-setup/user-setup-ask	2009-09-23 19:52:59.000000000 -0400
@@ -198,7 +198,10 @@
 					db_input critical user-setup/password-mismatch
 					db_fset passwd/user-password seen false
 					db_fset passwd/user-password-again seen false
-					STATE=6
+					db_fset passwd/username seen false
+					db_fset passwd/user-fullname seen false
+#					STATE=6
+					STATE=3
 					continue
 				fi
 				# Loop if the password is empty, and it's not
@@ -210,7 +213,10 @@
 					db_input critical user-setup/password-empty
 					db_fset passwd/user-password seen false
 					db_fset passwd/user-password-again seen false
-					STATE=6
+					db_fset passwd/username seen false
+					db_fset passwd/user-fullname seen false
+#					STATE=6
+					STATE=3
 					continue
 				elif [ "$USER_PW" ] && password_is_weak "$USER_PW"; then
 					db_set user-setup/password-weak false
@@ -229,7 +235,10 @@
 						db_set passwd/user-password-again ""
 						db_fset passwd/user-password seen false
 						db_fset passwd/user-password-again seen false
-						STATE=6
+						db_fset passwd/username seen false
+						db_fset passwd/user-fullname seen false
+#						STATE=6
+						STATE=3
 						continue
 					fi
 				fi
@@ -237,6 +246,25 @@
 		fi
 		;;
 	    8)
+		db_set user-setup/user-setup false
+		db_fset user-setup/user-setup seen false
+		db_input critical user-setup/user-setup
+		if ! db_go; then
+			STATE=6
+			continue
+		fi
+		db_get user-setup/user-setup || RET=
+		if [ "$RET" != true ]; then
+			db_set passwd/user-password ""
+			db_set passwd/user-password-again ""
+			db_fset passwd/user-password seen false
+			db_fset passwd/user-password-again seen false
+			db_fset passwd/username seen false
+			db_fset passwd/user-fullname seen false
+#			STATE=6
+			STATE=3
+			continue
+		fi
 		db_get passwd/username
 		USER="$RET"
 		db_get passwd/make-user
Index: oem-config/debian/oem-config.install
===================================================================
--- oem-config.orig/debian/oem-config.install	2009-09-23 19:51:37.000000000 -0400
+++ oem-config/debian/oem-config.install	2009-09-23 19:52:59.000000000 -0400
@@ -33,3 +33,6 @@
 # netcfg
 d-i/source/netcfg/netcfg usr/lib/oem-config/network
 scripts/netcfg-wrapper usr/lib/oem-config/network
+
+# welcome
+scripts/welcome usr/lib/oem-config/welcome
Index: oem-config/debian/oem-config.templates
===================================================================
--- oem-config.orig/debian/oem-config.templates	2009-09-23 19:51:37.000000000 -0400
+++ oem-config/debian/oem-config.templates	2009-09-23 19:52:59.000000000 -0400
@@ -111,10 +111,36 @@
 # Translators, this text will appear on a button, so KEEP IT SHORT
 _Description: Continue
 
+Template: oem-config/text/yes
+Type: text
+# Translators, this text will appear on a button, so KEEP IT SHORT
+_Description: Yes
+
+Template: oem-config/text/end
+Type: text
+_Description: End confirmation
+
+Template: oem-config/text/stop
+Type: text
+_Description: You stop initial setting and am finished?
+
+Template: oem-config/text/user-setup
+Type: text
+_Description: Initial setting confirmation
+ Complete setting.
+
+Template: oem-config/text/welcome_heading_label
+Type: text
+_Description: Welcome
+
+Template: oem-config/text/welcome_textlabel1
+Type: text
+_Description: Initialize it before having you use it.
+
 Template: oem-config/steps
 Type: multiselect
-Choices: language, timezone, keyboard, user, network, tasks
-Default: language, timezone, keyboard, user
+Choices: welcome, language, timezone, keyboard, user, network, tasks
+Default: welcome, user
 Description: for internal use; can be preseeded
  List of steps to display. Steps are always displayed in the order given by
  this list of choices, regardless of the order given in the answer to this
Index: oem-config/debian/po/ja.po
===================================================================
--- oem-config.orig/debian/po/ja.po	2009-09-23 19:51:37.000000000 -0400
+++ oem-config/debian/po/ja.po	2009-09-23 19:52:59.000000000 -0400
@@ -101,19 +101,22 @@
 #. Description
 #: ../oem-config.templates:15001
 msgid "Who are you?"
-msgstr "あなたは誰ですか？"
+msgstr "使用者情報を設定ください"
+# msgstr "あなたは誰ですか？"
 
 #. Type: text
 #. Description
 #: ../oem-config.templates:16001
 msgid "What is your name?"
-msgstr "あなたの名前は何ですか？"
+msgstr "お名前"
+# msgstr "あなたの名前は何ですか？"
 
 #. Type: text
 #. Description
 #: ../oem-config.templates:17001
 msgid "What name do you want to use to log in?"
-msgstr "ログインに使いたい名前は何ですか？"
+msgstr "ユーザ名（ログイン時に使われます。）"
+# msgstr "ログインに使いたい名前は何ですか？"
 
 #. Type: text
 #. Description
@@ -129,7 +132,8 @@
 #. Description
 #: ../oem-config.templates:19001
 msgid "Choose a password to keep your account safe."
-msgstr "アカウントを安全に保つために、パスワードを入力してください。"
+msgstr "パスワード　　　　　パスワードの再入力"
+# msgstr "アカウントを安全に保つために、パスワードを入力してください。"
 
 #. Type: text
 #. Description
@@ -144,7 +148,8 @@
 #: ../oem-config.templates:21001
 msgid ""
 "Enter the same password twice, so that it can be checked for typing errors."
-msgstr "打ち間違っているといけないので、同じパスワードを2回入力してください。"
+msgstr "入力間違いを避けるために、同じパスワードを２回入力ください。"
+# msgstr "打ち間違っているといけないので、同じパスワードを2回入力してください。"
 
 #. Type: text
 #. Description
@@ -184,6 +189,51 @@
 msgid "Continue"
 msgstr "続ける"
 
+#. Type: text
+#. Description
+#. Translators, this text will appear on a button, so KEEP IT SHORT
+#: ../oem-config.templates:28001
+msgid "Yes"
+msgstr "はい"
+
+#. Type: text
+#. Description
+#: ../oem-config.templates:29001
+msgid "End confirmation"
+msgstr "終了確認"
+
+#. Type: text
+#. Description
+#: ../oem-config.templates:29001
+msgid "You stop initial setting and am finished?"
+msgstr ""
+"初期設定を中断し、終了しますか？"
+
+#. Type: text
+#. Description
+#: ../oem-config.templates:30001
+msgid "Initial setting confirmation"
+msgstr "初期設定確認"
+
+#. Type: text
+#. Description
+#: ../oem-config.templates:30001
+msgid "Complete setting."
+msgstr ""
+"  設定を完了します。  "
+
+#. Type: text
+#. Description
+#: ../oem-config.templates:31001
+msgid "Welcome"
+msgstr "ようこそ"
+
+#. Type: text
+#. Description
+#: ../oem-config.templates:32001
+msgid "Initialize it before having you use it."
+msgstr "お使いいただく前に初期設定を行います。"
+
 #. Type: title
 #. Description
 #. Info message displayed when running in OEM mode
Index: oem-config/debian/po/templates.pot
===================================================================
--- oem-config.orig/debian/po/templates.pot	2009-09-23 19:51:37.000000000 -0400
+++ oem-config/debian/po/templates.pot	2009-09-23 19:52:59.000000000 -0400
@@ -178,6 +178,49 @@
 msgid "Continue"
 msgstr ""
 
+#. Type: text
+#. Description
+#. Translators, this text will appear on a button, so KEEP IT SHORT
+#: ../oem-config.templates:28001
+msgid "Yes"
+msgstr ""
+
+#. Type: text
+#. Description
+#: ../oem-config.templates:29001
+msgid "End confirmation"
+msgstr ""
+
+#. Type: text
+#. Description
+#: ../oem-config.templates:29001
+msgid "You stop initial setting and am finished?"
+msgstr ""
+
+#. Type: text
+#. Description
+#: ../oem-config.templates:30001
+msgid "Initial setting confirmation"
+msgstr ""
+
+#. Type: text
+#. Description
+#: ../oem-config.templates:30001
+msgid "Complete setting."
+msgstr ""
+
+#. Type: text
+#. Description
+#: ../oem-config.templates:31001
+msgid "Welcome"
+msgstr ""
+
+#. Type: text
+#. Description
+#: ../oem-config.templates:32001
+msgid "Initialize it before having you use it."
+msgstr ""
+
 #. Type: title
 #. Description
 #. Info message displayed when running in OEM mode
Index: oem-config/gui/glade/oem-config.glade
===================================================================
--- oem-config.orig/gui/glade/oem-config.glade	2009-09-23 19:51:36.000000000 -0400
+++ oem-config/gui/glade/oem-config.glade	2009-09-23 19:52:59.000000000 -0400
@@ -56,9 +56,25 @@
                   </packing>
                 </child>
                 <child>
-                  <widget class="GtkHButtonBox" id="hbuttonbox1">
+                  <widget class="GtkTable" id="table1">
                     <property name="visible">True</property>
-                    <property name="layout_style">GTK_BUTTONBOX_END</property>
+                    <property name="n_columns">3</property>
+                    <property name="homogeneous">True</property>
+                    <child>
+                      <widget class="GtkButton" id="quit">
+                        <property name="visible">True</property>
+                        <property name="can_focus">True</property>
+                        <property name="can_default">True</property>
+                        <property name="border_width">6</property>
+                        <property name="label">gtk-quit</property>
+                        <property name="use_stock">True</property>
+                        <property name="response_id">0</property>
+                        <signal name="clicked" handler="on_quit_clicked"/>
+                      </widget>
+                      <packing>
+                        <property name="position">0</property>
+                      </packing>
+                    </child>
                     <child>
                       <widget class="GtkButton" id="back">
                         <property name="visible">True</property>
@@ -70,6 +86,10 @@
                         <property name="response_id">0</property>
                         <signal name="clicked" handler="on_back_clicked"/>
                       </widget>
+                      <packing>
+                        <property name="left_attach">1</property>
+                        <property name="right_attach">2</property>
+                      </packing>
                     </child>
                     <child>
                       <widget class="GtkButton" id="next">
@@ -84,12 +104,14 @@
                         <signal name="clicked" handler="on_next_clicked"/>
                       </widget>
                       <packing>
-                        <property name="position">1</property>
+                        <property name="left_attach">2</property>
+                        <property name="right_attach">3</property>
                       </packing>
                     </child>
                   </widget>
                   <packing>
                     <property name="expand">False</property>
+                    <property name="fill">False</property>
                     <property name="pack_type">GTK_PACK_END</property>
                     <property name="position">1</property>
                   </packing>
Index: oem-config/gui/glade/step_user.glade
===================================================================
--- oem-config.orig/gui/glade/step_user.glade	2009-09-23 19:52:59.000000000 -0400
+++ oem-config/gui/glade/step_user.glade	2009-09-23 19:52:59.000000000 -0400
@@ -203,7 +203,7 @@
                         </child>
                         <child>
                           <widget class="GtkLabel" id="username_extra_label">
-                            <property name="visible">True</property>
+                            <property name="visible">False</property>
                             <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
                             <property name="xalign">0</property>
                             <property name="label" translatable="yes">&lt;i&gt;If more than one person will use this computer, you can set up multiple accounts after installation.&lt;/i&gt;</property>
@@ -287,7 +287,6 @@
                                     <property name="visible">True</property>
                                     <property name="can_focus">True</property>
                                     <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                                    <property name="visibility">False</property>
                                     <property name="activates_default">True</property>
                                     <property name="width_chars">12</property>
                                     <signal name="changed" handler="info_loop"/>
@@ -298,7 +297,6 @@
                                     <property name="visible">True</property>
                                     <property name="can_focus">True</property>
                                     <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                                    <property name="visibility">False</property>
                                     <property name="activates_default">True</property>
                                     <property name="width_chars">12</property>
                                     <signal name="changed" handler="info_loop"/>
Index: oem-config/gui/glade/step_welcome.glade
===================================================================
--- /dev/null	1970-01-01 00:00:00.000000000 +0000
+++ oem-config/gui/glade/step_welcome.glade	2009-09-23 19:52:59.000000000 -0400
@@ -0,0 +1,72 @@
+<?xml version="1.0"?>
+<glade-interface>
+  <!-- interface-requires gtk+ 2.16 -->
+  <!-- interface-naming-policy toplevel-contextual -->
+  <widget class="GtkWindow" id="dummy_window">
+    <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+    <child>
+      <widget class="GtkVBox" id="step_welcome">
+        <property name="visible">True</property>
+        <property name="border_width">6</property>
+        <child>
+          <widget class="GtkLabel" id="welcome_heading_label">
+            <property name="visible">True</property>
+            <property name="can_focus">True</property>
+            <property name="xalign">0</property>
+            <property name="label" translatable="yes">&lt;big&gt;&lt;b&gt;Welcome&lt;/b&gt;&lt;/big&gt;</property>
+            <property name="use_markup">True</property>
+            <property name="selectable">True</property>
+            <property name="single_line_mode">True</property>
+          </widget>
+          <packing>
+            <property name="expand">False</property>
+            <property name="fill">False</property>
+            <property name="position">0</property>
+          </packing>
+        </child>
+        <child>
+          <widget class="GtkHSeparator" id="hseparator2">
+            <property name="visible">True</property>
+          </widget>
+          <packing>
+            <property name="expand">False</property>
+            <property name="fill">False</property>
+            <property name="padding">6</property>
+            <property name="position">1</property>
+          </packing>
+        </child>
+        <child>
+          <widget class="GtkVBox" id="vbox1">
+            <property name="visible">True</property>
+            <property name="orientation">vertical</property>
+            <child>
+              <widget class="GtkLabel" id="welcome_textlabel1">
+                <property name="visible">True</property>
+                <property name="xalign">0</property>
+                <property name="yalign">0</property>
+                <property name="label" translatable="yes">Initialize it before having you use it.</property>
+              </widget>
+              <packing>
+                <property name="expand">False</property>
+                <property name="position">0</property>
+              </packing>
+            </child>
+            <child>
+              <widget class="GtkImage" id="image1">
+                <property name="visible">True</property>
+                <property name="icon-size">6</property>
+              </widget>
+              <packing>
+                <property name="fill">False</property>
+                <property name="position">1</property>
+              </packing>
+            </child>
+          </widget>
+          <packing>
+            <property name="position">2</property>
+          </packing>
+        </child>
+      </widget>
+    </child>
+  </widget>
+</glade-interface>
Index: oem-config/lib/components/user.py
===================================================================
--- oem-config.orig/lib/components/user.py	2009-09-23 19:51:36.000000000 -0400
+++ oem-config/lib/components/user.py	2009-09-23 19:52:59.000000000 -0400
@@ -28,7 +28,7 @@
         # the page to be shown, if they're the only questions not preseeded.
         questions = ['^passwd/user-fullname$', '^passwd/username$',
                      '^passwd/user-password$', '^passwd/user-password-again$',
-                     '^user-setup/password-weak$',
+                     '^user-setup/password-weak$', '^user-setup/user-setup$',
                      'ERROR']
         return (['/usr/lib/oem-config/user/user-setup-wrapper', '/'],
                 questions)
@@ -52,17 +52,30 @@
                 self.preseed(question, 'true')
             else:
                 self.preseed(question, 'false')
+                return super(User, self).error(priority, question)
+            return True
+
+        if question.startswith('user-setup/user-setup'):
+            response = self.frontend.question_dialog(
+                self.description('oem-config/text/user-setup'),
+                self.extended_description('oem-config/text/user-setup'),
+                ('oem-config/text/go_back', 'oem-config/text/yes'))
+            if response is None or response == 'oem-config/text/yes':
+                self.preseed(question, 'true')
+            else:
+                self.preseed(question, 'false')
+                return super(User, self).error(priority, question)
             return True
 
         return FilteredCommand.run(self, priority, question)
 
     def ok_handler(self):
+
         fullname = self.frontend.get_fullname()
         username = self.frontend.get_username()
         password = self.frontend.get_password()
         password_confirm = self.frontend.get_verified_password()
         auto_login = self.frontend.get_auto_login()
-
         self.preseed('passwd/user-fullname', fullname)
         self.preseed('passwd/username', username)
         # TODO: maybe encrypt these first
Index: oem-config/lib/components/welcome.py
===================================================================
--- /dev/null	1970-01-01 00:00:00.000000000 +0000
+++ oem-config/lib/components/welcome.py	2009-09-23 19:52:59.000000000 -0400
@@ -0,0 +1,31 @@
+# -*- coding: UTF-8 -*-
+
+# Copyright (C) 2005 Canonical Ltd.
+# Written by Colin Watson <cjwatson@ubuntu.com>.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+from oem_config.filteredcommand import FilteredCommand
+
+class Welcome(FilteredCommand):
+    def prepare(self, unfiltered=False):
+        questions = ['welcome/welcome']
+        return (['/usr/lib/oem-config/welcome/welcome'],
+                questions)
+
+    def ok_handler(self):
+        if self.current_question is not None:
+            self.preseed(self.current_question, 'yes')
+        FilteredCommand.ok_handler(self)
Index: oem-config/lib/frontend/base.py
===================================================================
--- oem-config.orig/lib/frontend/base.py	2009-09-23 19:51:36.000000000 -0400
+++ oem-config/lib/frontend/base.py	2009-09-23 19:52:59.000000000 -0400
@@ -31,9 +31,7 @@
 # strongly recommended to keep the page identifiers the same. Order is
 # important, and 'step_' will be prepended to all identifiers.
 VALID_PAGES = [
-    'language',
-    'timezone',
-    'keyboard',
+    'welcome',
     'user',
     'network',
     'tasks',
Index: oem-config/lib/frontend/gtk_ui.py
===================================================================
--- oem-config.orig/lib/frontend/gtk_ui.py	2009-09-23 19:51:36.000000000 -0400
+++ oem-config/lib/frontend/gtk_ui.py	2009-09-23 19:52:59.000000000 -0400
@@ -32,7 +32,7 @@
 from oem_config import filteredcommand, i18n, timezone_map
 from oem_config.components import console_setup, language, timezone, user, \
                                   language_apply, timezone_apply, \
-                                  console_setup_apply
+                                  console_setup_apply, welcome
 import oem_config.emap
 import oem_config.tz
 from oem_config.frontend.base import BaseFrontend
@@ -124,17 +124,17 @@
 
         self.translate_widgets()
 
-        if 'UBIQUITY_OLD_TZMAP' in os.environ:
-            self.tzmap = TimezoneMap(self)
-            self.tzmap.tzmap.show()
-        else:
-            self.tzdb = oem_config.tz.Database()
-            self.tzmap = timezone_map.TimezoneMap(self.tzdb,
-                '/usr/share/oem-config/pixmaps/timezone')
-            self.tzmap.connect('city-selected', self.select_city)
-            self.timezone_map_window.add(self.tzmap)
-            self.setup_timezone_page()
-            self.tzmap.show()
+#        if 'UBIQUITY_OLD_TZMAP' in os.environ:
+#            self.tzmap = TimezoneMap(self)
+#            self.tzmap.tzmap.show()
+#        else:
+#            self.tzdb = oem_config.tz.Database()
+#            self.tzmap = timezone_map.TimezoneMap(self.tzdb,
+#                '/usr/share/oem-config/pixmaps/timezone')
+#            self.tzmap.connect('city-selected', self.select_city)
+#            self.timezone_map_window.add(self.tzmap)
+#            self.setup_timezone_page()
+#            self.tzmap.show()
 
         if 'OEM_CONFIG_DEBUG' in os.environ:
             self.password_debug_warning_label.show()
@@ -198,13 +198,14 @@
         self.username_changed_id = self.username.connect(
             'changed', self.on_username_changed)
 
-        self.steps.set_current_page(self.steps.page_num(self.step_language))
+        self.steps.set_current_page(self.steps.page_num(self.step_welcome))
         # TODO cjwatson 2006-07-07: why isn't on_steps_switch_page getting
         # invoked?
-        self.set_current_page(self.steps.page_num(self.step_language))
+        self.set_current_page(self.steps.page_num(self.step_welcome))
 
         while self.current_page is not None:
             self.backup = False
+            self.exit_yes = False
             current_name = self.step_name(self.current_page)
             if current_name == 'step_language':
                 self.dbfilter = language.Language(self)
@@ -214,6 +215,8 @@
                 self.dbfilter = console_setup.ConsoleSetup(self)
             elif current_name == 'step_user':
                 self.dbfilter = user.User(self)
+            elif current_name == 'step_welcome':
+                self.dbfilter = welcome.Welcome(self)
             else:
                 raise ValueError, "step %s not recognised" % current_name
 
@@ -223,12 +226,17 @@
 
             if self.backup:
                 pass
-            elif current_name == 'step_language':
-                self.translate_widgets()
-                self.steps.next_page()
-            elif current_name == 'step_keyboard':
+            elif self.exit_yes:
+                self.current_page = None
+            elif current_name == 'step_welcome':
                 self.info_loop(None)
                 self.steps.next_page()
+#            elif current_name == 'step_language':
+#                self.translate_widgets()
+#                self.steps.next_page()
+#            elif current_name == 'step_keyboard':
+#                self.info_loop(None)
+#                self.steps.next_page()
             elif current_name == 'step_user':
                 self.allow_change_step(False)
                 self.current_page = None
@@ -241,19 +249,21 @@
 
         # TODO: handle errors
         if self.apply_changes:
-            dbfilter = language_apply.LanguageApply(self)
-            dbfilter.run_command(auto_process=True)
+#            dbfilter = language_apply.LanguageApply(self)
+#            dbfilter.run_command(auto_process=True)
 
             dbfilter = timezone_apply.TimezoneApply(self)
             dbfilter.run_command(auto_process=True)
 
-            dbfilter = console_setup_apply.ConsoleSetupApply(self)
-            dbfilter.run_command(auto_process=True)
+#            dbfilter = console_setup_apply.ConsoleSetupApply(self)
+#            dbfilter.run_command(auto_process=True)
 
         self.oem_config.hide()
 
         if self.apply_changes:
             return 0
+        elif self.exit_yes:
+            return 99
         else:
             return 10
 
@@ -425,6 +435,7 @@
         self.oem_config.window.set_cursor(cursor)
         self.back.set_sensitive(allowed)
         self.next.set_sensitive(allowed and self.allowed_go_forward)
+        self.quit.set_sensitive(allowed)
         # Work around http://bugzilla.gnome.org/show_bug.cgi?id=56070
         if self.back.get_property('visible') and allowed:
             self.back.hide()
@@ -434,6 +445,9 @@
             self.next.hide()
             self.next.show()
             self.next.grab_default()
+        if self.quit.get_property('visible'):
+            self.quit.hide()
+            self.quit.show()
         self.allowed_change_step = allowed
 
     def allow_go_forward(self, allowed):
@@ -744,6 +758,15 @@
     def on_username_changed(self, widget):
         self.username_edited = (widget.get_text() != '')
 
+    def on_quit_clicked(self, widget):
+        response = self.question_dialog(
+            self.get_string('end'),
+            self.get_string('stop'),
+            ('oem-config/text/go_back', 'oem-config/text/yes'))
+        if response is None or response == 'oem-config/text/yes':
+            self.exit_yes = True
+            if self.dbfilter is not None:
+                self.dbfilter.cancel_handler()
 
 # Much of this timezone map widget is a rough translation of
 # gnome-system-tools/src/time/tz-map.c. Thanks to Hans Petter Jansson
Index: oem-config/oem-config-firstboot
===================================================================
--- oem-config.orig/oem-config-firstboot	2009-09-23 19:51:36.000000000 -0400
+++ oem-config/oem-config-firstboot	2009-09-23 19:53:52.000000000 -0400
@@ -64,6 +64,11 @@
 	if [ "$CODE" -eq 0 ]; then
 		# Don't run again.
 		update-rc.d -f oem-config remove >>/var/log/oem-config.log 2>&1
+
+		# Return font size.
+		gconftool-2 --unset /desktop/gnome/interface/font_name
+		gconftool-2 --unset /apps/metacity/general/titlebar_font
+
 		# Remove the temporary OEM configuration user, if possible.
 		if getent passwd oem >/dev/null; then
 			deluser --quiet --remove-home oem || true
@@ -92,6 +97,10 @@
 			esac
 		done
 		exit 1
+       elif [ "$CODE" -eq 99 ]; then
+               shutdown -h now
+               sleep 3600
+               exit 1
 	fi
 done
 
@@ -115,6 +124,9 @@
 
 	# Don't run again.
 	update-rc.d -f oem-config remove >>/var/log/oem-config.log 2>&1
+	# Return font size.
+	gconftool-2 --unset /desktop/gnome/interface/font_name
+	gconftool-2 --unset /apps/metacity/general/titlebar_font
 
 	reboot
 fi
Index: oem-config/oem-config-prepare
===================================================================
--- oem-config.orig/oem-config-prepare	2009-09-23 19:51:36.000000000 -0400
+++ oem-config/oem-config-prepare	2009-09-23 19:52:59.000000000 -0400
@@ -56,6 +56,10 @@
 
 update-rc.d oem-config start 29 2 3 4 5 .
 
+# Application and Titlebar font size change.
+gconftool-2 --type=string --set /desktop/gnome/interface/font_name "Sans 14"
+gconftool-2 --type=string --set /apps/metacity/general/titlebar_font "Sans Bold 14"
+
 if [ -z "$quiet" ]; then
 	MESSAGE='oem-config will run the next time the system boots.'
 	case $frontend in
Index: oem-config/scripts/welcome
===================================================================
--- /dev/null	1970-01-01 00:00:00.000000000 +0000
+++ oem-config/scripts/welcome	2009-09-23 19:52:59.000000000 -0400
@@ -0,0 +1,11 @@
+#! /bin/sh
+set -e
+
+. /usr/share/debconf/confmodule
+
+db_capb backup
+
+db_input critical welcome/welcome || true
+
+exit 0
+
Index: oem-config/oem-config-dm
===================================================================
--- oem-config.orig/oem-config-dm	2009-09-23 19:52:59.000000000 -0400
+++ oem-config/oem-config-dm	2009-09-23 19:52:59.000000000 -0400
@@ -100,9 +100,14 @@
                 ret = langinstall.wait()
         finally:
             def sigalrm_handler(signum, frame):
-                os.kill(wm.pid, signal.SIGKILL)
+                if wm.returncode is None:
+                    os.kill(wm.pid, signal.SIGKILL)
                 for extra in extras:
-                    os.kill(extra.pid, signal.SIGKILL)
+                    if extra.returncode is None:
+                        os.kill(extra.pid, signal.SIGKILL)
+
+            if ret is not None and ret == 99:
+                return ret
 
             os.kill(wm.pid, signal.SIGTERM)
             for extra in extras:
