diff --git a/doc/addressbook-sdk.qdoc b/doc/addressbook-sdk.qdoc
new file mode 100644
index 0000000000000000000000000000000000000000..b6b257d55ff4a4d646001b81b9632ea4f74c3d8a
--- /dev/null
+++ b/doc/addressbook-sdk.qdoc
@@ -0,0 +1,179 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: Qt Software Information (qt-info@nokia.com)
+**
+** This file is part of the documentation of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the either Technology Preview License Agreement or the
+** Beta Release License Agreement.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain
+** additional rights. These rights are described in the Nokia Qt LGPL
+** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this
+** package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you are unsure which license is appropriate for your use, please
+** contact the sales department at qt-sales@nokia.com.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+/*!
+    \page tutorials-addressbook-sdk.html
+
+    \startpage {index.html}{Qt Reference Documentation}
+    \nextpage \l{Designing the User Interface}{Chapter 1}
+
+    \title Address Book Tutorial
+    \ingroup howto
+    \ingroup tutorials
+    \brief An introduction to GUI programming with Qt and Qt Creator,
+    describing in detail how to put together a simple yet fully-
+    functioning application.
+
+    This tutorial gives an introduction to GUI programming using the Qt SDK.
+
+    ### Screenshot
+
+    In the process, we will learn about some basic technologies provided by
+    Qt, such as:
+
+    \list
+        \o  Widgets and layout managers
+        \o  Container classes
+        \o  Signals and slots
+        \o  Input and output devices
+    \endlist
+
+    If you are completely new to Qt, please read \l{How to Learn Qt} if you
+    have not already done so.
+
+    The tutorial's source code is located in Qt's
+    \c{examples/tutorials/addressbook} directory.
+
+    Tutorial chapters:
+
+    \list 1
+        \o \l{Designing the User Interface}
+        \o \l{Adding Addresses}
+        \o \l{Navigating between Entries}
+        \o \l{Editing and Removing Addresses}
+        \o \l{Adding a Find Function}
+        \o \l{Loading and Saving}
+        \o \l{Additional Features}
+    \endlist
+
+    Although this little application does not look much like a fully-fledged
+    modern GUI application, it uses many of the basic techniques that are used
+    in more complex applications. After you have worked through it, we
+    recommend checking out the \l{mainwindows/application}{Application}
+    example, which presents a small GUI application, with menus, toolbars, a
+    status bar, and so on.
+*/
+
+
+/*!
+    \page tutorials-addressbook-sdk-part1.html
+    \contentspage {Address Book Tutorial}{Contents}
+    \nextpage \l{Adding Addresses}{Chapter 2}
+    \title Address Book 1 - Designing the User Interface
+
+    The first part of this tutorial covers the design of the basic graphical
+    user interface (GUI) we use for the Address Book application.
+
+    The first step to creating a GUI program is to design the user interface.
+    In this chapter, our goal is to set up the labels and input fields needed
+    to implement a basic address book application. The figure below is a
+    screenshot of our expected output.
+
+    \image addressbook-tutorial-part1-screenshot.png
+
+    We begin by launching Qt Creator and use it to generate a new project. To
+    do this, select \gui New from the \gui File menu. In the
+    \gui{New File or Project} dialog. Follow the step by step guide on how to
+    create a \gui Project with Qt Creator, refer to the document
+    \l{Creating a Project in Qt Creator}{here}. Ensure that you select QWidget
+    as your subclass and name it \c AddressBook.
+
+    There are five files generated in this \gui{Project}:
+
+    \list
+        \o  \c{addressbook.pro} - the project file,
+        \o  \c{addressbook.h} - the definition file for the \c AddressBook
+            class,
+        \o  \c{addressbook.cpp} - the implementation file for the
+            \c AddressBook class,
+        \o  \c{main.cpp} - the file containing a \c main() function, with an
+            instance of \c AddressBook, and
+        \o  \c{addressbook.ui} - the user interface file created with \QD.
+    \endlist
+
+    Now we have all the files we need, let's move on to designing the user
+    interface.
+
+    \section1 Placing the Widgets on the Form
+
+    In the \gui{Project Sidebar}, double-click on the \c{addressbook.ui} file.
+    The \QD plugin will be launched, allowing you to design your program's user
+    interface.
+
+    We require two \l{QLabel}s to label the input fields as well as a
+    QLineEdit and a QTextEdit as the input fields. So, drag those widgets from
+    the \gui{Widget Box} to your form. In the \gui{Property Editor}, set their
+    \gui{objectName} property to \c nameLabel and \c addressLabel for the
+    \l{QLabel}s, \c nameLine for the QLineEdit and finally, \c addressText for
+    the QTextEdit.
+
+    Next, we have to position the widgets properly, according to the screenshot
+    earlier. We use a QGridLayout to position our labels and input fields in a
+    structured manner. QGridLayout divides the available space into a grid and
+    places widgets in the cells we specify with row and column numbers. The
+    diagram below shows the layout cells and the position of our widgets.
+
+    \image addressbook-tutorial-part1-labeled-screenshot.png
+
+
+    \section1 Qt Programming - Subclassing
+
+    When writing Qt programs, we usually subclass Qt objects to add
+    functionality. This is one of the essential concepts behind creating custom
+    widgets or collections of standard widgets. Subclassing to extend or change
+    the behavior of a widget has the following advantages:
+
+    \list
+        \o  We can write implementations of virtual or pure virtual functions
+            to obtain exactly what we need, falling back on the base class's
+            implementation when necessary.
+        \o  It allows us to encapsulate parts of the user interface within a
+            class, so that the other parts of the application do not need to
+            know about the individual widgets in the user interface.
+        \o  The subclass can be used to create multiple custom widgets in the
+            same application or library, and the code for the subclass can be
+            reused in other projects.
+    \endlist
+
+
+
+
+*/
diff --git a/doc/examples/addressbook-sdk/README b/doc/examples/addressbook-sdk/README
new file mode 100644
index 0000000000000000000000000000000000000000..2d528b5200c95ba1c5bc97530efeafe3fead0de9
--- /dev/null
+++ b/doc/examples/addressbook-sdk/README
@@ -0,0 +1,42 @@
+The Address Book Tutorial shows how to put together a simple yet
+fully-functioning GUI application. The tutorial chapters can be found in the
+Qt documentation, which can be viewed using Qt Assistant or a Web browser.
+
+The tutorial is also available online at
+
+http://doc.trolltech.com/4.4/tutorial.html
+
+All programs corresponding to the chapters in the tutorial should
+automatically be built when Qt is compiled, or will be provided as
+pre-built executables if you have obtained a binary package of Qt.
+
+If you have only compiled the Qt libraries, use the following instructions
+to build the tutorial.
+
+On Linux/Unix:
+
+Typing 'make' in this directory builds all the programs (part1/part1,
+part2/part2, part3/part3 and so on). Typing 'make' in each subdirectory
+builds just that tutorial program.
+
+On Windows:
+
+Create a single Visual Studio project for the tutorial directory in
+the usual way. You can do this by typing the following at the command
+line:
+
+qmake -tp vc
+
+You should now be able to open the project file in Visual Studio and
+build all of the tutorial programs at the same time.
+
+On Mac OS X:
+
+Create an Xcode project with the .pro file in the tutorial directory.
+You can do this by typing the following at the command line:
+
+qmake -spec macx-xcode
+
+Then open the generated Xcode project in Xcode and build it.
+
+Feel free to send comments about the tutorial to qt-bugs@trolltech.com.
diff --git a/doc/examples/addressbook-sdk/addressbook.pro b/doc/examples/addressbook-sdk/addressbook.pro
new file mode 100644
index 0000000000000000000000000000000000000000..4607c25c353a9c6a1903e0efe2af4b24e8adb050
--- /dev/null
+++ b/doc/examples/addressbook-sdk/addressbook.pro
@@ -0,0 +1,8 @@
+TEMPLATE  = subdirs
+SUBDIRS   = part1 part2 part3 part4 part5 part6 part7
+
+# install
+target.path = $$[QT_INSTALL_EXAMPLES]/tutorials/addressbook
+sources.files = $$SOURCES $$HEADERS $$RESOURCES $$FORMS addressbook.pro README
+sources.path = $$[QT_INSTALL_EXAMPLES]/tutorials/addressbook
+INSTALLS += target sources
diff --git a/doc/examples/addressbook-sdk/part1/addressbook.cpp b/doc/examples/addressbook-sdk/part1/addressbook.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..d0107ba067680be50d00eda5353d7a673ec39dff
--- /dev/null
+++ b/doc/examples/addressbook-sdk/part1/addressbook.cpp
@@ -0,0 +1,68 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: Qt Software Information (qt-info@nokia.com)
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the either Technology Preview License Agreement or the
+** Beta Release License Agreement.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain
+** additional rights. These rights are described in the Nokia Qt LGPL
+** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this
+** package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you are unsure which license is appropriate for your use, please
+** contact the sales department at qt-sales@nokia.com.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QtGui>
+#include "addressbook.h"
+
+//! [constructor and input fields]
+AddressBook::AddressBook(QWidget *parent)
+    : QWidget(parent)
+{
+    QLabel *nameLabel = new QLabel(tr("Name:"));
+    nameLine = new QLineEdit;
+
+    QLabel *addressLabel = new QLabel(tr("Address:"));
+    addressText = new QTextEdit;
+//! [constructor and input fields]
+
+//! [layout]
+    QGridLayout *mainLayout = new QGridLayout;
+    mainLayout->addWidget(nameLabel, 0, 0);
+    mainLayout->addWidget(nameLine, 0, 1);
+    mainLayout->addWidget(addressLabel, 1, 0, Qt::AlignTop);
+    mainLayout->addWidget(addressText, 1, 1);
+//! [layout]
+
+//![setting the layout]    
+    setLayout(mainLayout);
+    setWindowTitle(tr("Simple Address Book"));
+}
+//! [setting the layout]
diff --git a/doc/examples/addressbook-sdk/part1/addressbook.h b/doc/examples/addressbook-sdk/part1/addressbook.h
new file mode 100644
index 0000000000000000000000000000000000000000..811fb057af6149687673798d9551b49da742a5e9
--- /dev/null
+++ b/doc/examples/addressbook-sdk/part1/addressbook.h
@@ -0,0 +1,67 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: Qt Software Information (qt-info@nokia.com)
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the either Technology Preview License Agreement or the
+** Beta Release License Agreement.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain
+** additional rights. These rights are described in the Nokia Qt LGPL
+** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this
+** package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you are unsure which license is appropriate for your use, please
+** contact the sales department at qt-sales@nokia.com.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef ADDRESSBOOK_H
+#define ADDRESSBOOK_H
+
+#include <QWidget>
+
+QT_BEGIN_NAMESPACE
+class QLabel;
+class QLineEdit;
+class QTextEdit;
+QT_END_NAMESPACE
+
+//! [class definition]
+class AddressBook : public QWidget
+{
+    Q_OBJECT
+
+public:
+    AddressBook(QWidget *parent = 0);
+
+private:
+    QLineEdit *nameLine;
+    QTextEdit *addressText;
+};
+//! [class definition]
+
+#endif
diff --git a/doc/examples/addressbook-sdk/part1/main.cpp b/doc/examples/addressbook-sdk/part1/main.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..22bfd3ee3ef75f2560fbd22bc6ae055a8657c59e
--- /dev/null
+++ b/doc/examples/addressbook-sdk/part1/main.cpp
@@ -0,0 +1,55 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: Qt Software Information (qt-info@nokia.com)
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the either Technology Preview License Agreement or the
+** Beta Release License Agreement.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain
+** additional rights. These rights are described in the Nokia Qt LGPL
+** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this
+** package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you are unsure which license is appropriate for your use, please
+** contact the sales department at qt-sales@nokia.com.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QtGui>
+#include "addressbook.h"
+
+//! [main function]
+int main(int argc, char *argv[])
+{
+    QApplication app(argc, argv);
+
+    AddressBook *addressBook = new AddressBook;
+    addressBook->show();
+
+    return app.exec();
+}
+//! [main function]
diff --git a/doc/examples/addressbook-sdk/part1/part1 b/doc/examples/addressbook-sdk/part1/part1
new file mode 100755
index 0000000000000000000000000000000000000000..1259ff2d8535f4417f5d3a69e8b9b836471c04bf
Binary files /dev/null and b/doc/examples/addressbook-sdk/part1/part1 differ
diff --git a/doc/examples/addressbook-sdk/part1/part1.pro b/doc/examples/addressbook-sdk/part1/part1.pro
new file mode 100644
index 0000000000000000000000000000000000000000..bb181dd39231551682e2f394f3c38bcf71381ab9
--- /dev/null
+++ b/doc/examples/addressbook-sdk/part1/part1.pro
@@ -0,0 +1,9 @@
+SOURCES   = addressbook.cpp \
+            main.cpp
+HEADERS   = addressbook.h
+
+# install
+target.path = $$[QT_INSTALL_EXAMPLES]/tutorials/addressbook/part1
+sources.files = $$SOURCES $$HEADERS $$RESOURCES $$FORMS part1.pro
+sources.path = $$[QT_INSTALL_EXAMPLES]/tutorials/addressbook/part1
+INSTALLS += target sources
diff --git a/doc/examples/addressbook-sdk/part2/addressbook.cpp b/doc/examples/addressbook-sdk/part2/addressbook.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..ac4b9c123ab0c2b1dc990e70231ae812a0a7f3ec
--- /dev/null
+++ b/doc/examples/addressbook-sdk/part2/addressbook.cpp
@@ -0,0 +1,158 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: Qt Software Information (qt-info@nokia.com)
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the either Technology Preview License Agreement or the
+** Beta Release License Agreement.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain
+** additional rights. These rights are described in the Nokia Qt LGPL
+** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this
+** package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you are unsure which license is appropriate for your use, please
+** contact the sales department at qt-sales@nokia.com.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QtGui>
+#include "addressbook.h"
+
+AddressBook::AddressBook(QWidget *parent)
+    : QWidget(parent)
+{
+    QLabel *nameLabel = new QLabel(tr("Name:"));
+    nameLine = new QLineEdit;
+//! [setting readonly 1]
+    nameLine->setReadOnly(true);
+//! [setting readonly 1]
+    QLabel *addressLabel = new QLabel(tr("Address:"));
+    addressText = new QTextEdit;
+//! [setting readonly 2]    
+    addressText->setReadOnly(true);
+//! [setting readonly 2]
+   
+//! [pushbutton declaration]
+    addButton = new QPushButton(tr("&Add"));
+    addButton->show();
+    submitButton = new QPushButton(tr("&Submit"));
+    submitButton->hide();
+    cancelButton = new QPushButton(tr("&Cancel"));
+    cancelButton->hide();
+//! [pushbutton declaration]
+//! [connecting signals and slots]
+    connect(addButton, SIGNAL(clicked()), this, SLOT(addContact()));
+    connect(submitButton, SIGNAL(clicked()), this, SLOT(submitContact()));
+    connect(cancelButton, SIGNAL(clicked()), this, SLOT(cancel()));
+//! [connecting signals and slots]
+//! [vertical layout]
+    QVBoxLayout *buttonLayout1 = new QVBoxLayout;
+    buttonLayout1->addWidget(addButton, Qt::AlignTop);
+    buttonLayout1->addWidget(submitButton);
+    buttonLayout1->addWidget(cancelButton);
+    buttonLayout1->addStretch();
+//! [vertical layout]
+//! [grid layout]
+    QGridLayout *mainLayout = new QGridLayout;
+    mainLayout->addWidget(nameLabel, 0, 0);
+    mainLayout->addWidget(nameLine, 0, 1);
+    mainLayout->addWidget(addressLabel, 1, 0, Qt::AlignTop);
+    mainLayout->addWidget(addressText, 1, 1);
+    mainLayout->addLayout(buttonLayout1, 1, 2);
+//! [grid layout]
+    setLayout(mainLayout);
+    setWindowTitle(tr("Simple Address Book"));
+}
+//! [addContact]
+void AddressBook::addContact()
+{
+    oldName = nameLine->text();
+    oldAddress = addressText->toPlainText();
+
+    nameLine->clear();
+    addressText->clear();
+    
+    nameLine->setReadOnly(false);
+    nameLine->setFocus(Qt::OtherFocusReason);
+    addressText->setReadOnly(false);
+
+    addButton->setEnabled(false);
+    submitButton->show();
+    cancelButton->show();
+}
+//! [addContact]
+
+//! [submitContact part1]
+void AddressBook::submitContact()
+{
+    QString name = nameLine->text();
+    QString address = addressText->toPlainText();
+    
+    if (name == "" || address == "") {
+        QMessageBox::information(this, tr("Empty Field"),
+            tr("Please enter a name and address."));
+        return;
+    }
+//! [submitContact part1]
+//! [submitContact part2]
+    if (!contacts.contains(name)) {
+        contacts.insert(name, address);
+        QMessageBox::information(this, tr("Add Successful"),
+            tr("\"%1\" has been added to your address book.").arg(name));
+    } else {
+        QMessageBox::information(this, tr("Add Unsuccessful"),
+            tr("Sorry, \"%1\" is already in your address book.").arg(name));
+        return;
+    }
+//! [submitContact part2]
+//! [submitContact part3]
+    if (contacts.isEmpty()) {
+        nameLine->clear();
+        addressText->clear();
+    }
+
+    nameLine->setReadOnly(true);
+    addressText->setReadOnly(true);
+    addButton->setEnabled(true);
+    submitButton->hide();
+    cancelButton->hide();
+}
+//! [submitContact part3]
+//! [cancel]
+void AddressBook::cancel()
+{
+    nameLine->setText(oldName);
+    nameLine->setReadOnly(true);
+
+    addressText->setText(oldAddress);
+    addressText->setReadOnly(true);
+
+    addButton->setEnabled(true);
+    submitButton->hide();
+    cancelButton->hide();    
+}
+//! [cancel]
diff --git a/doc/examples/addressbook-sdk/part2/addressbook.h b/doc/examples/addressbook-sdk/part2/addressbook.h
new file mode 100644
index 0000000000000000000000000000000000000000..c99b3735b9dadf2656a1a26638c0e8327a04ee34
--- /dev/null
+++ b/doc/examples/addressbook-sdk/part2/addressbook.h
@@ -0,0 +1,85 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: Qt Software Information (qt-info@nokia.com)
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the either Technology Preview License Agreement or the
+** Beta Release License Agreement.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain
+** additional rights. These rights are described in the Nokia Qt LGPL
+** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this
+** package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you are unsure which license is appropriate for your use, please
+** contact the sales department at qt-sales@nokia.com.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef ADDRESSBOOK_H
+#define ADDRESSBOOK_H
+
+#include <QWidget>
+#include <QMap>
+
+QT_BEGIN_NAMESPACE
+class QLabel;
+class QLineEdit;
+class QPushButton;
+class QTextEdit;
+QT_END_NAMESPACE
+
+class AddressBook : public QWidget
+{
+    Q_OBJECT
+
+public:
+    AddressBook(QWidget *parent = 0);
+
+//! [slots]
+public slots:
+    void addContact();
+    void submitContact();
+    void cancel();
+//! [slots]
+
+//! [pushbutton declaration]
+private:
+    QPushButton *addButton;
+    QPushButton *submitButton;
+    QPushButton *cancelButton;
+    QLineEdit *nameLine;
+    QTextEdit *addressText;
+//! [pushbutton declaration]
+
+//! [remaining private variables]
+    QMap<QString, QString> contacts;
+    QString oldName;
+    QString oldAddress;
+};
+//! [remaining private variables]
+
+#endif
diff --git a/doc/examples/addressbook-sdk/part2/main.cpp b/doc/examples/addressbook-sdk/part2/main.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..22bfd3ee3ef75f2560fbd22bc6ae055a8657c59e
--- /dev/null
+++ b/doc/examples/addressbook-sdk/part2/main.cpp
@@ -0,0 +1,55 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: Qt Software Information (qt-info@nokia.com)
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the either Technology Preview License Agreement or the
+** Beta Release License Agreement.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain
+** additional rights. These rights are described in the Nokia Qt LGPL
+** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this
+** package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you are unsure which license is appropriate for your use, please
+** contact the sales department at qt-sales@nokia.com.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QtGui>
+#include "addressbook.h"
+
+//! [main function]
+int main(int argc, char *argv[])
+{
+    QApplication app(argc, argv);
+
+    AddressBook *addressBook = new AddressBook;
+    addressBook->show();
+
+    return app.exec();
+}
+//! [main function]
diff --git a/doc/examples/addressbook-sdk/part2/part2 b/doc/examples/addressbook-sdk/part2/part2
new file mode 100755
index 0000000000000000000000000000000000000000..66db7c17a74582efedb623ed86a0d492f44323b3
Binary files /dev/null and b/doc/examples/addressbook-sdk/part2/part2 differ
diff --git a/doc/examples/addressbook-sdk/part2/part2.pro b/doc/examples/addressbook-sdk/part2/part2.pro
new file mode 100644
index 0000000000000000000000000000000000000000..01ce34465f4ee1bf445f4f72371c5df010187881
--- /dev/null
+++ b/doc/examples/addressbook-sdk/part2/part2.pro
@@ -0,0 +1,9 @@
+SOURCES   = addressbook.cpp \
+            main.cpp
+HEADERS   = addressbook.h
+
+# install
+target.path = $$[QT_INSTALL_EXAMPLES]/tutorials/addressbook/part2
+sources.files = $$SOURCES $$HEADERS $$RESOURCES $$FORMS part2.pro
+sources.path = $$[QT_INSTALL_EXAMPLES]/tutorials/addressbook/part2
+INSTALLS += target sources
diff --git a/doc/examples/addressbook-sdk/part3/addressbook.cpp b/doc/examples/addressbook-sdk/part3/addressbook.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..49c52061609efca7ca1d28edd72a8696e9e11a5f
--- /dev/null
+++ b/doc/examples/addressbook-sdk/part3/addressbook.cpp
@@ -0,0 +1,217 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: Qt Software Information (qt-info@nokia.com)
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the either Technology Preview License Agreement or the
+** Beta Release License Agreement.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain
+** additional rights. These rights are described in the Nokia Qt LGPL
+** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this
+** package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you are unsure which license is appropriate for your use, please
+** contact the sales department at qt-sales@nokia.com.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QtGui>
+#include "addressbook.h"
+
+AddressBook::AddressBook(QWidget *parent)
+    : QWidget(parent)
+{
+    QLabel *nameLabel = new QLabel(tr("Name:"));
+    nameLine = new QLineEdit;
+    nameLine->setReadOnly(true);
+
+    QLabel *addressLabel = new QLabel(tr("Address:"));
+    addressText = new QTextEdit;
+    addressText->setReadOnly(true);
+    
+    addButton = new QPushButton(tr("&Add"));
+    addButton->show();
+    submitButton = new QPushButton(tr("&Submit"));
+    submitButton->hide();
+    cancelButton = new QPushButton(tr("&Cancel"));
+    cancelButton->hide();
+//! [navigation pushbuttons]
+    nextButton = new QPushButton(tr("&Next"));
+    nextButton->setEnabled(false);
+    previousButton = new QPushButton(tr("&Previous"));
+    previousButton->setEnabled(false);
+//! [navigation pushbuttons]
+
+    connect(addButton, SIGNAL(clicked()), this, SLOT(addContact()));
+    connect(submitButton, SIGNAL(clicked()), this, SLOT(submitContact()));
+    connect(cancelButton, SIGNAL(clicked()), this, SLOT(cancel()));
+//! [connecting navigation signals]    
+    connect(nextButton, SIGNAL(clicked()), this, SLOT(next()));
+    connect(previousButton, SIGNAL(clicked()), this, SLOT(previous()));
+//! [connecting navigation signals]
+
+    QVBoxLayout *buttonLayout1 = new QVBoxLayout;
+    buttonLayout1->addWidget(addButton, Qt::AlignTop);
+    buttonLayout1->addWidget(submitButton);
+    buttonLayout1->addWidget(cancelButton);
+    buttonLayout1->addStretch();
+//! [navigation layout]
+    QHBoxLayout *buttonLayout2 = new QHBoxLayout;
+    buttonLayout2->addWidget(previousButton);
+    buttonLayout2->addWidget(nextButton);
+//! [ navigation layout]
+    QGridLayout *mainLayout = new QGridLayout;
+    mainLayout->addWidget(nameLabel, 0, 0);
+    mainLayout->addWidget(nameLine, 0, 1);
+    mainLayout->addWidget(addressLabel, 1, 0, Qt::AlignTop);
+    mainLayout->addWidget(addressText, 1, 1);
+    mainLayout->addLayout(buttonLayout1, 1, 2);
+//! [adding navigation layout]
+    mainLayout->addLayout(buttonLayout2, 3, 1);
+//! [adding navigation layout]
+    setLayout(mainLayout);
+    setWindowTitle(tr("Simple Address Book"));
+}
+
+void AddressBook::addContact()
+{
+    oldName = nameLine->text();
+    oldAddress = addressText->toPlainText();
+
+    nameLine->clear();
+    addressText->clear();
+
+    nameLine->setReadOnly(false);
+    nameLine->setFocus(Qt::OtherFocusReason);
+    addressText->setReadOnly(false);
+    
+    addButton->setEnabled(false);
+//! [disabling navigation]
+    nextButton->setEnabled(false);
+    previousButton->setEnabled(false);
+//! [disabling navigation]
+    submitButton->show();
+    cancelButton->show();
+}
+
+void AddressBook::submitContact()
+{
+    QString name = nameLine->text();
+    QString address = addressText->toPlainText();
+    
+    if (name == "" || address == "") {
+        QMessageBox::information(this, tr("Empty Field"),
+            tr("Please enter a name and adderss."));
+        return;
+    }
+
+    if (!contacts.contains(name)) {
+        contacts.insert(name, address);
+        QMessageBox::information(this, tr("Add Successful"),
+            tr("\"%1\" has been added to your address book.").arg(name));
+    } else {
+        QMessageBox::information(this, tr("Add Unsuccessful"),
+            tr("Sorry, \"%1\" is already in your address book.").arg(name));
+        return;
+    }
+
+    if (contacts.isEmpty()) {
+        nameLine->clear();
+        addressText->clear();
+    }
+
+    nameLine->setReadOnly(true);
+    addressText->setReadOnly(true);
+    addButton->setEnabled(true);
+
+//! [enabling navigation]
+    int number = contacts.size();
+    nextButton->setEnabled(number > 1);
+    previousButton->setEnabled(number > 1);
+//! [enabling navigation]
+    submitButton->hide();
+    cancelButton->hide();
+}
+
+void AddressBook::cancel()
+{
+    nameLine->setText(oldName);
+    addressText->setText(oldAddress);
+   
+    if (contacts.isEmpty()) {
+        nameLine->clear();
+        addressText->clear();
+    }
+    
+    nameLine->setReadOnly(true);
+    addressText->setReadOnly(true);
+    addButton->setEnabled(true);
+    
+    int number = contacts.size();
+    nextButton->setEnabled(number > 1);
+    previousButton->setEnabled(number > 1);
+    
+    submitButton->hide();
+    cancelButton->hide();
+}
+
+//! [next() function]
+void AddressBook::next()
+{
+    QString name = nameLine->text();
+    QMap<QString, QString>::iterator i = contacts.find(name);
+
+    if (i != contacts.end())
+        i++;
+
+    if (i == contacts.end())
+        i = contacts.begin();
+
+    nameLine->setText(i.key());
+    addressText->setText(i.value());
+}
+//! [next() function]
+//! [previous() function]
+void AddressBook::previous()
+{
+    QString name = nameLine->text();
+    QMap<QString, QString>::iterator i = contacts.find(name);
+
+    if (i == contacts.end()){
+        nameLine->clear();
+        addressText->clear();
+        return;
+    }
+
+    if (i == contacts.begin())
+        i = contacts.end();
+
+    i--;
+    nameLine->setText(i.key());
+    addressText->setText(i.value());
+}
+//! [previous() function]
diff --git a/doc/examples/addressbook-sdk/part3/addressbook.h b/doc/examples/addressbook-sdk/part3/addressbook.h
new file mode 100644
index 0000000000000000000000000000000000000000..c13dc21a8bd9b9fb46a1b1f7e947340ba741b805
--- /dev/null
+++ b/doc/examples/addressbook-sdk/part3/addressbook.h
@@ -0,0 +1,87 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: Qt Software Information (qt-info@nokia.com)
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the either Technology Preview License Agreement or the
+** Beta Release License Agreement.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain
+** additional rights. These rights are described in the Nokia Qt LGPL
+** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this
+** package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you are unsure which license is appropriate for your use, please
+** contact the sales department at qt-sales@nokia.com.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef ADDRESSBOOK_H
+#define ADDRESSBOOK_H
+
+#include <QWidget>
+#include <QMap>
+
+QT_BEGIN_NAMESPACE
+class QLabel;
+class QLineEdit;
+class QPushButton;
+class QTextEdit;
+QT_END_NAMESPACE
+
+class AddressBook : public QWidget
+{
+    Q_OBJECT
+
+public:
+    AddressBook(QWidget *parent = 0);
+
+public slots:
+    void addContact();
+    void submitContact();
+    void cancel();
+//! [navigation functions]
+    void next();
+    void previous();
+//! [navigation functions]    
+
+private:
+    QPushButton *addButton;
+    QPushButton *submitButton;
+    QPushButton *cancelButton;
+//! [navigation pushbuttons]    
+    QPushButton *nextButton;
+    QPushButton *previousButton;
+//! [navigation pushbuttons]    
+    QLineEdit *nameLine;
+    QTextEdit *addressText;
+
+    QMap<QString, QString> contacts;
+    QString oldName;
+    QString oldAddress;
+};
+
+#endif
diff --git a/doc/examples/addressbook-sdk/part3/main.cpp b/doc/examples/addressbook-sdk/part3/main.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..b25d6561a9d84b2d29642737d760a4ee9e2d2998
--- /dev/null
+++ b/doc/examples/addressbook-sdk/part3/main.cpp
@@ -0,0 +1,53 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: Qt Software Information (qt-info@nokia.com)
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the either Technology Preview License Agreement or the
+** Beta Release License Agreement.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain
+** additional rights. These rights are described in the Nokia Qt LGPL
+** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this
+** package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you are unsure which license is appropriate for your use, please
+** contact the sales department at qt-sales@nokia.com.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QtGui>
+#include "addressbook.h"
+
+int main(int argc, char *argv[])
+{
+    QApplication app(argc, argv);
+
+    AddressBook *addressBook = new AddressBook;
+    addressBook->show();
+
+    return app.exec();
+}
diff --git a/doc/examples/addressbook-sdk/part3/part3 b/doc/examples/addressbook-sdk/part3/part3
new file mode 100755
index 0000000000000000000000000000000000000000..9a335620a659a876c447284857b49e253fb29f24
Binary files /dev/null and b/doc/examples/addressbook-sdk/part3/part3 differ
diff --git a/doc/examples/addressbook-sdk/part3/part3.pro b/doc/examples/addressbook-sdk/part3/part3.pro
new file mode 100644
index 0000000000000000000000000000000000000000..128c0380e9f0fdf55b0a6b896f09395ef1fec6fa
--- /dev/null
+++ b/doc/examples/addressbook-sdk/part3/part3.pro
@@ -0,0 +1,9 @@
+SOURCES = addressbook.cpp \
+          main.cpp
+HEADERS = addressbook.h
+
+# install
+target.path = $$[QT_INSTALL_EXAMPLES]/tutorials/addressbook/part3
+sources.files = $$SOURCES $$HEADERS $$RESOURCES $$FORMS part3.pro
+sources.path = $$[QT_INSTALL_EXAMPLES]/tutorials/addressbook/part3
+INSTALLS += target sources
diff --git a/doc/examples/addressbook-sdk/part4/addressbook.cpp b/doc/examples/addressbook-sdk/part4/addressbook.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..95def9c4d0318f2c093f2848165779ffd12392ac
--- /dev/null
+++ b/doc/examples/addressbook-sdk/part4/addressbook.cpp
@@ -0,0 +1,291 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: Qt Software Information (qt-info@nokia.com)
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the either Technology Preview License Agreement or the
+** Beta Release License Agreement.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain
+** additional rights. These rights are described in the Nokia Qt LGPL
+** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this
+** package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you are unsure which license is appropriate for your use, please
+** contact the sales department at qt-sales@nokia.com.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QtGui>
+#include "addressbook.h"
+
+AddressBook::AddressBook(QWidget *parent)
+    : QWidget(parent)
+{
+    QLabel *nameLabel = new QLabel(tr("Name:"));
+    nameLine = new QLineEdit;
+    nameLine->setReadOnly(true);
+
+    QLabel *addressLabel = new QLabel(tr("Address:"));
+    addressText = new QTextEdit;
+    addressText->setReadOnly(true);
+
+    addButton = new QPushButton(tr("&Add"));
+//! [edit and remove buttons] 
+    editButton = new QPushButton(tr("&Edit"));
+    editButton->setEnabled(false);
+    removeButton = new QPushButton(tr("&Remove"));
+    removeButton->setEnabled(false);
+//! [edit and remove buttons] 
+    submitButton = new QPushButton(tr("&Submit"));
+    submitButton->hide();
+    cancelButton = new QPushButton(tr("&Cancel"));
+    cancelButton->hide();
+    
+    nextButton = new QPushButton(tr("&Next"));
+    nextButton->setEnabled(false);
+    previousButton = new QPushButton(tr("&Previous"));
+    previousButton->setEnabled(false);
+
+    connect(addButton, SIGNAL(clicked()), this, SLOT(addContact()));
+    connect(submitButton, SIGNAL(clicked()), this, SLOT(submitContact()));
+//! [connecting edit and remove] 
+    connect(editButton, SIGNAL(clicked()), this, SLOT(editContact()));
+    connect(removeButton, SIGNAL(clicked()), this, SLOT(removeContact()));
+//! [connecting edit and remove] 
+    connect(cancelButton, SIGNAL(clicked()), this, SLOT(cancel()));
+    connect(nextButton, SIGNAL(clicked()), this, SLOT(next()));
+    connect(previousButton, SIGNAL(clicked()), this, SLOT(previous()));
+
+    QVBoxLayout *buttonLayout1 = new QVBoxLayout;
+    buttonLayout1->addWidget(addButton);
+//! [adding edit and remove to the layout]     
+    buttonLayout1->addWidget(editButton);
+    buttonLayout1->addWidget(removeButton);
+//! [adding edit and remove to the layout]         
+    buttonLayout1->addWidget(submitButton);
+    buttonLayout1->addWidget(cancelButton);
+    buttonLayout1->addStretch();
+
+    QHBoxLayout *buttonLayout2 = new QHBoxLayout;
+    buttonLayout2->addWidget(previousButton);
+    buttonLayout2->addWidget(nextButton);
+
+    QGridLayout *mainLayout = new QGridLayout;
+    mainLayout->addWidget(nameLabel, 0, 0);
+    mainLayout->addWidget(nameLine, 0, 1);
+    mainLayout->addWidget(addressLabel, 1, 0, Qt::AlignTop);
+    mainLayout->addWidget(addressText, 1, 1);
+    mainLayout->addLayout(buttonLayout1, 1, 2);
+    mainLayout->addLayout(buttonLayout2, 3, 1);
+
+    setLayout(mainLayout);
+    setWindowTitle(tr("Simple Address Book"));
+}
+
+void AddressBook::addContact()
+{
+    oldName = nameLine->text();
+    oldAddress = addressText->toPlainText();
+
+    nameLine->clear();
+    addressText->clear();
+
+    updateInterface(AddingMode);
+}
+//! [editContact() function]
+void AddressBook::editContact()
+{
+    oldName = nameLine->text();
+    oldAddress = addressText->toPlainText();
+
+    updateInterface(EditingMode);
+}
+//! [editContact() function]
+//! [submitContact() function beginning]
+void AddressBook::submitContact()
+{
+//! [submitContact() function beginning]
+    QString name = nameLine->text();
+    QString address = addressText->toPlainText();
+
+    if (name == "" || address == "") {
+        QMessageBox::information(this, tr("Empty Field"),
+            tr("Please enter a name and address."));
+        return;
+    }
+//! [submitContact() function part1]
+    if (currentMode == AddingMode) {
+        
+        if (!contacts.contains(name)) {
+            contacts.insert(name, address);
+            QMessageBox::information(this, tr("Add Successful"),
+                tr("\"%1\" has been added to your address book.").arg(name));
+        } else {
+            QMessageBox::information(this, tr("Add Unsuccessful"),
+                tr("Sorry, \"%1\" is already in your address book.").arg(name));
+            return;
+        }
+//! [submitContact() function part1]
+//! [submitContact() function part2]
+    } else if (currentMode == EditingMode) {
+        
+        if (oldName != name) {
+            if (!contacts.contains(name)) {
+                QMessageBox::information(this, tr("Edit Successful"),
+                    tr("\"%1\" has been edited in your address book.").arg(oldName));
+                contacts.remove(oldName);
+                contacts.insert(name, address);
+            } else {
+                QMessageBox::information(this, tr("Edit Unsuccessful"),
+                    tr("Sorry, \"%1\" is already in your address book.").arg(name));
+                return;
+            }
+        } else if (oldAddress != address) {
+            QMessageBox::information(this, tr("Edit Successful"),
+                tr("\"%1\" has been edited in your address book.").arg(name));
+            contacts[name] = address;        
+        }
+    }
+
+    updateInterface(NavigationMode);
+}
+//! [submitContact() function part2]
+
+void AddressBook::cancel()
+{
+    nameLine->setText(oldName);
+    addressText->setText(oldAddress);
+    updateInterface(NavigationMode);
+}
+//! [removeContact() function]
+void AddressBook::removeContact()
+{
+    QString name = nameLine->text();
+    QString address = addressText->toPlainText();
+
+    if (contacts.contains(name)) {
+
+        int button = QMessageBox::question(this,
+            tr("Confirm Remove"),
+            tr("Are you sure you want to remove \"%1\"?").arg(name),
+            QMessageBox::Yes | QMessageBox::No);
+
+        if (button == QMessageBox::Yes) {
+            
+            previous();
+            contacts.remove(name);
+
+            QMessageBox::information(this, tr("Remove Successful"),
+                tr("\"%1\" has been removed from your address book.").arg(name));
+        }
+    }
+
+    updateInterface(NavigationMode);
+}
+//! [removeContact() function]
+void AddressBook::next()
+{
+    QString name = nameLine->text();
+    QMap<QString, QString>::iterator i = contacts.find(name);
+
+    if (i != contacts.end())
+        i++;
+
+    if (i == contacts.end())
+        i = contacts.begin();
+
+    nameLine->setText(i.key());
+    addressText->setText(i.value());
+}
+
+void AddressBook::previous()
+{
+    QString name = nameLine->text();
+    QMap<QString, QString>::iterator i = contacts.find(name);
+
+    if (i == contacts.end()) {
+        nameLine->clear();
+        addressText->clear();
+        return;
+    }
+
+    if (i == contacts.begin())
+        i = contacts.end();
+
+    i--;
+    nameLine->setText(i.key());
+    addressText->setText(i.value());
+}
+//! [update interface() part 1]
+void AddressBook::updateInterface(Mode mode)
+{
+    currentMode = mode;
+
+    switch (currentMode) {
+        
+    case AddingMode:
+    case EditingMode:
+
+        nameLine->setReadOnly(false);
+        nameLine->setFocus(Qt::OtherFocusReason);
+        addressText->setReadOnly(false);
+
+        addButton->setEnabled(false);
+        editButton->setEnabled(false);
+        removeButton->setEnabled(false);
+
+        nextButton->setEnabled(false);
+        previousButton->setEnabled(false);
+
+        submitButton->show();
+        cancelButton->show();
+        break;
+//! [update interface() part 1]
+//! [update interface() part 2]
+    case NavigationMode:
+
+        if (contacts.isEmpty()) {
+            nameLine->clear();
+            addressText->clear();
+        }
+
+        nameLine->setReadOnly(true);
+        addressText->setReadOnly(true);
+        addButton->setEnabled(true);
+
+        int number = contacts.size();
+        editButton->setEnabled(number >= 1);
+        removeButton->setEnabled(number >= 1);
+        nextButton->setEnabled(number > 1);
+        previousButton->setEnabled(number >1 );
+
+        submitButton->hide();
+        cancelButton->hide();
+        break;
+    }
+}
+//! [update interface() part 2]
diff --git a/doc/examples/addressbook-sdk/part4/addressbook.h b/doc/examples/addressbook-sdk/part4/addressbook.h
new file mode 100644
index 0000000000000000000000000000000000000000..83c7af3e9d2fd47c955d0397871f22337e3c1c9e
--- /dev/null
+++ b/doc/examples/addressbook-sdk/part4/addressbook.h
@@ -0,0 +1,100 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: Qt Software Information (qt-info@nokia.com)
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the either Technology Preview License Agreement or the
+** Beta Release License Agreement.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain
+** additional rights. These rights are described in the Nokia Qt LGPL
+** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this
+** package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you are unsure which license is appropriate for your use, please
+** contact the sales department at qt-sales@nokia.com.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef ADDRESSBOOK_H
+#define ADDRESSBOOK_H
+
+#include <QWidget>
+#include <QMap>
+
+QT_BEGIN_NAMESPACE
+class QPushButton;
+class QLabel;
+class QLineEdit;
+class QTextEdit;
+QT_END_NAMESPACE
+
+class AddressBook : public QWidget
+{
+    Q_OBJECT
+
+public:
+    AddressBook(QWidget *parent = 0);
+//! [Mode enum]
+    enum Mode { NavigationMode, AddingMode, EditingMode };
+//! [Mode enum]
+
+public slots:
+    void addContact();
+    void submitContact();
+    void cancel();
+//! [edit and remove slots]
+    void editContact();
+    void removeContact();
+//! [edit and remove slots]
+    void next();
+    void previous();
+
+private:
+//! [updateInterface() declaration]
+    void updateInterface(Mode mode);
+//! [updateInterface() declaration]
+    QPushButton *addButton;
+//! [buttons declaration]    
+    QPushButton *editButton;
+    QPushButton *removeButton;
+//! [buttons declaration]        
+    QPushButton *submitButton;
+    QPushButton *cancelButton;
+    QPushButton *nextButton;
+    QPushButton *previousButton;
+    QLineEdit *nameLine;
+    QTextEdit *addressText;
+
+    QMap<QString, QString> contacts;
+    QString oldName;
+    QString oldAddress;
+//! [mode declaration]    
+    Mode currentMode;
+//! [mode declaration]    
+};
+
+#endif
diff --git a/doc/examples/addressbook-sdk/part4/main.cpp b/doc/examples/addressbook-sdk/part4/main.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..b25d6561a9d84b2d29642737d760a4ee9e2d2998
--- /dev/null
+++ b/doc/examples/addressbook-sdk/part4/main.cpp
@@ -0,0 +1,53 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: Qt Software Information (qt-info@nokia.com)
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the either Technology Preview License Agreement or the
+** Beta Release License Agreement.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain
+** additional rights. These rights are described in the Nokia Qt LGPL
+** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this
+** package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you are unsure which license is appropriate for your use, please
+** contact the sales department at qt-sales@nokia.com.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QtGui>
+#include "addressbook.h"
+
+int main(int argc, char *argv[])
+{
+    QApplication app(argc, argv);
+
+    AddressBook *addressBook = new AddressBook;
+    addressBook->show();
+
+    return app.exec();
+}
diff --git a/doc/examples/addressbook-sdk/part4/part4 b/doc/examples/addressbook-sdk/part4/part4
new file mode 100755
index 0000000000000000000000000000000000000000..4a65060243e104b1a047e9804b45873898812491
Binary files /dev/null and b/doc/examples/addressbook-sdk/part4/part4 differ
diff --git a/doc/examples/addressbook-sdk/part4/part4.pro b/doc/examples/addressbook-sdk/part4/part4.pro
new file mode 100644
index 0000000000000000000000000000000000000000..23ce3e600817470e2beb2e2800d699504f11226e
--- /dev/null
+++ b/doc/examples/addressbook-sdk/part4/part4.pro
@@ -0,0 +1,9 @@
+SOURCES = addressbook.cpp \
+          main.cpp
+HEADERS = addressbook.h
+
+# install
+target.path = $$[QT_INSTALL_EXAMPLES]/tutorials/addressbook/part4
+sources.files = $$SOURCES $$HEADERS $$RESOURCES $$FORMS part4.pro
+sources.path = $$[QT_INSTALL_EXAMPLES]/tutorials/addressbook/part4
+INSTALLS += target sources
diff --git a/doc/examples/addressbook-sdk/part5/addressbook.cpp b/doc/examples/addressbook-sdk/part5/addressbook.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..5afb6b8e0ad5f59f455525ad3a7d5a35a809ba6c
--- /dev/null
+++ b/doc/examples/addressbook-sdk/part5/addressbook.cpp
@@ -0,0 +1,315 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: Qt Software Information (qt-info@nokia.com)
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the either Technology Preview License Agreement or the
+** Beta Release License Agreement.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain
+** additional rights. These rights are described in the Nokia Qt LGPL
+** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this
+** package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you are unsure which license is appropriate for your use, please
+** contact the sales department at qt-sales@nokia.com.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QtGui>
+#include "addressbook.h"
+
+AddressBook::AddressBook(QWidget *parent)
+    : QWidget(parent)
+{
+    QLabel *nameLabel = new QLabel(tr("Name:"));
+    nameLine = new QLineEdit;
+    nameLine->setReadOnly(true);
+
+    QLabel *addressLabel = new QLabel(tr("Address:"));
+    addressText = new QTextEdit;
+    addressText->setReadOnly(true);
+
+    addButton = new QPushButton(tr("&Add"));
+
+    editButton = new QPushButton(tr("&Edit"));
+    editButton->setEnabled(false);
+    removeButton = new QPushButton(tr("&Remove"));
+    removeButton->setEnabled(false);
+//! [instantiating findButton]
+    findButton = new QPushButton(tr("&Find"));
+    findButton->setEnabled(false);
+//! [instantiating findButton]
+    submitButton = new QPushButton(tr("&Submit"));
+    submitButton->hide();
+    cancelButton = new QPushButton(tr("&Cancel"));
+    cancelButton->hide();
+
+    nextButton = new QPushButton(tr("&Next"));
+    nextButton->setEnabled(false);
+    previousButton = new QPushButton(tr("&Previous"));
+    previousButton->setEnabled(false);
+
+//! [instantiating FindDialog]
+    dialog = new FindDialog;
+//! [instantiating FindDialog]
+
+    connect(addButton, SIGNAL(clicked()), this, SLOT(addContact()));
+    connect(submitButton, SIGNAL(clicked()), this, SLOT(submitContact()));
+    connect(editButton, SIGNAL(clicked()), this, SLOT(editContact()));
+    connect(cancelButton, SIGNAL(clicked()), this, SLOT(cancel()));
+    connect(removeButton, SIGNAL(clicked()), this, SLOT(removeContact()));
+//! [signals and slots for find]    
+    connect(findButton, SIGNAL(clicked()), this, SLOT(findContact()));
+//! [signals and slots for find]        
+    connect(nextButton, SIGNAL(clicked()), this, SLOT(next()));
+    connect(previousButton, SIGNAL(clicked()), this, SLOT(previous()));
+    
+    QVBoxLayout *buttonLayout1 = new QVBoxLayout;
+    buttonLayout1->addWidget(addButton);
+    buttonLayout1->addWidget(editButton);
+    buttonLayout1->addWidget(removeButton);
+//! [adding findButton to layout]        
+    buttonLayout1->addWidget(findButton);
+//! [adding findButton to layout]            
+    buttonLayout1->addWidget(submitButton);
+    buttonLayout1->addWidget(cancelButton);
+    buttonLayout1->addStretch();
+
+    QHBoxLayout *buttonLayout2 = new QHBoxLayout;
+    buttonLayout2->addWidget(previousButton);
+    buttonLayout2->addWidget(nextButton);
+
+    QGridLayout *mainLayout = new QGridLayout;
+    mainLayout->addWidget(nameLabel, 0, 0);
+    mainLayout->addWidget(nameLine, 0, 1);
+    mainLayout->addWidget(addressLabel, 1, 0, Qt::AlignTop);
+    mainLayout->addWidget(addressText, 1, 1);
+    mainLayout->addLayout(buttonLayout1, 1, 2);
+    mainLayout->addLayout(buttonLayout2, 2, 1);
+
+    setLayout(mainLayout);
+    setWindowTitle(tr("Simple Address Book"));
+}
+
+void AddressBook::addContact()
+{
+    oldName = nameLine->text();
+    oldAddress = addressText->toPlainText();
+
+    nameLine->clear();
+    addressText->clear();
+
+    updateInterface(AddingMode);
+}
+
+void AddressBook::editContact()
+{
+    oldName = nameLine->text();
+    oldAddress = addressText->toPlainText();
+
+    updateInterface(EditingMode);
+}
+
+void AddressBook::submitContact()
+{
+    QString name = nameLine->text();
+    QString address = addressText->toPlainText();
+
+    if (name == "" || address == "") {
+        QMessageBox::information(this, tr("Empty Field"),
+            tr("Please enter a name and address."));
+        return;
+    }
+
+    if (currentMode == AddingMode) {
+        
+        if (!contacts.contains(name)) {
+            contacts.insert(name, address);
+            QMessageBox::information(this, tr("Add Successful"),
+                tr("\"%1\" has been added to your address book.").arg(name));
+        } else {
+            QMessageBox::information(this, tr("Add Unsuccessful"),
+                tr("Sorry, \"%1\" is already in your address book.").arg(name));
+            return;
+        }
+    } else if (currentMode == EditingMode) {
+        
+        if (oldName != name) {
+            if (!contacts.contains(name)) {
+                QMessageBox::information(this, tr("Edit Successful"),
+                    tr("\"%1\" has been edited in your address book.").arg(oldName));
+                contacts.remove(oldName);
+                contacts.insert(name, address);
+            } else {
+                QMessageBox::information(this, tr("Edit Unsuccessful"),
+                    tr("Sorry, \"%1\" is already in your address book.").arg(name));
+                return;
+            }
+        } else if (oldAddress != address) {
+            QMessageBox::information(this, tr("Edit Successful"),
+                tr("\"%1\" has been edited in your address book.").arg(name));
+            contacts[name] = address;
+        }
+    }
+
+    updateInterface(NavigationMode);
+}
+
+void AddressBook::cancel()
+{
+    nameLine->setText(oldName);
+    addressText->setText(oldAddress);
+    updateInterface(NavigationMode);
+}
+
+void AddressBook::removeContact()
+{
+    QString name = nameLine->text();
+    QString address = addressText->toPlainText();
+
+    if (contacts.contains(name)) {
+
+        int button = QMessageBox::question(this,
+            tr("Confirm Remove"),
+            tr("Are you sure you want to remove \"%1\"?").arg(name),
+            QMessageBox::Yes | QMessageBox::No);
+
+        if (button == QMessageBox::Yes) {
+            
+            previous();
+            contacts.remove(name);
+
+            QMessageBox::information(this, tr("Remove Successful"),
+                tr("\"%1\" has been removed from your address book.").arg(name));
+        }
+    }
+
+    updateInterface(NavigationMode);
+}
+
+void AddressBook::next()
+{
+    QString name = nameLine->text();
+    QMap<QString, QString>::iterator i = contacts.find(name);
+
+    if (i != contacts.end())
+        i++;
+
+    if (i == contacts.end())
+        i = contacts.begin();
+
+    nameLine->setText(i.key());
+    addressText->setText(i.value());
+}
+
+void AddressBook::previous()
+{
+    QString name = nameLine->text();
+    QMap<QString, QString>::iterator i = contacts.find(name);
+
+    if (i == contacts.end()) {
+        nameLine->clear();
+        addressText->clear();
+        return;
+    }
+
+    if (i == contacts.begin())
+        i = contacts.end();
+
+    i--;
+    nameLine->setText(i.key());
+    addressText->setText(i.value());
+}
+//! [findContact() function] 
+void AddressBook::findContact()
+{
+    dialog->show();
+
+    if (dialog->exec() == QDialog::Accepted) {
+        QString contactName = dialog->getFindText();
+
+        if (contacts.contains(contactName)) {
+            nameLine->setText(contactName);
+            addressText->setText(contacts.value(contactName));
+        } else {
+            QMessageBox::information(this, tr("Contact Not Found"),
+                tr("Sorry, \"%1\" is not in your address book.").arg(contactName));
+            return;
+        }
+    }
+
+    updateInterface(NavigationMode);
+}
+//! [findContact() function] 
+
+void AddressBook::updateInterface(Mode mode)
+{
+    currentMode = mode;
+
+    switch (currentMode) {
+
+    case AddingMode:
+    case EditingMode:
+
+        nameLine->setReadOnly(false);
+        nameLine->setFocus(Qt::OtherFocusReason);
+        addressText->setReadOnly(false);
+
+        addButton->setEnabled(false);
+        editButton->setEnabled(false);
+        removeButton->setEnabled(false);
+
+        nextButton->setEnabled(false);
+        previousButton->setEnabled(false);
+
+        submitButton->show();
+        cancelButton->show();
+        break;
+
+    case NavigationMode:
+        
+        if (contacts.isEmpty()) {
+            nameLine->clear();
+            addressText->clear();
+        }
+
+        nameLine->setReadOnly(true);
+        addressText->setReadOnly(true);
+        addButton->setEnabled(true);
+
+        int number = contacts.size();
+        editButton->setEnabled(number >= 1);
+        removeButton->setEnabled(number >= 1);
+        findButton->setEnabled(number > 2);
+        nextButton->setEnabled(number > 1);
+        previousButton->setEnabled(number > 1);
+
+        submitButton->hide();
+        cancelButton->hide();
+        break;
+    }
+}
diff --git a/doc/examples/addressbook-sdk/part5/addressbook.h b/doc/examples/addressbook-sdk/part5/addressbook.h
new file mode 100644
index 0000000000000000000000000000000000000000..04dfa00ee89259b8aa5f839f2b58795ea27ff50b
--- /dev/null
+++ b/doc/examples/addressbook-sdk/part5/addressbook.h
@@ -0,0 +1,103 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: Qt Software Information (qt-info@nokia.com)
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the either Technology Preview License Agreement or the
+** Beta Release License Agreement.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain
+** additional rights. These rights are described in the Nokia Qt LGPL
+** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this
+** package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you are unsure which license is appropriate for your use, please
+** contact the sales department at qt-sales@nokia.com.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef ADDRESSBOOK_H
+#define ADDRESSBOOK_H
+
+#include <QWidget>
+#include <QMap>
+//! [include finddialog's header]
+#include "finddialog.h"
+//! [include finddialog's header]
+QT_BEGIN_NAMESPACE
+class QPushButton;
+class QLabel;
+class QLineEdit;
+class QTextEdit;
+QT_END_NAMESPACE
+
+
+class AddressBook : public QWidget
+{
+    Q_OBJECT
+
+public:
+    AddressBook(QWidget *parent = 0);
+    enum Mode { NavigationMode, AddingMode, EditingMode };
+
+public slots:
+    void addContact();
+    void editContact();
+    void submitContact();
+    void cancel();
+    void removeContact();
+//! [findContact() declaration]    
+    void findContact();
+//! [findContact() declaration]    
+    void next();
+    void previous();
+
+private:
+    void updateInterface(Mode mode);
+
+    QPushButton *addButton;
+    QPushButton *editButton;
+    QPushButton *removeButton;
+//! [findButton declaration]        
+    QPushButton *findButton;
+//! [findButton declaration] 
+    QPushButton *submitButton;
+    QPushButton *cancelButton;
+    QPushButton *nextButton;
+    QPushButton *previousButton;
+    QLineEdit *nameLine;
+    QTextEdit *addressText;
+
+    QMap<QString, QString> contacts;
+//! [FindDialog declaration]     
+    FindDialog *dialog;
+//! [FindDialog declaration]     
+    QString oldName;
+    QString oldAddress;
+    Mode currentMode;
+};
+
+#endif
diff --git a/doc/examples/addressbook-sdk/part5/finddialog.cpp b/doc/examples/addressbook-sdk/part5/finddialog.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..f8839505b0556054b169cffedc59c32c79ea75dc
--- /dev/null
+++ b/doc/examples/addressbook-sdk/part5/finddialog.cpp
@@ -0,0 +1,87 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: Qt Software Information (qt-info@nokia.com)
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the either Technology Preview License Agreement or the
+** Beta Release License Agreement.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain
+** additional rights. These rights are described in the Nokia Qt LGPL
+** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this
+** package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you are unsure which license is appropriate for your use, please
+** contact the sales department at qt-sales@nokia.com.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QtGui>
+#include "finddialog.h"
+
+//! [constructor]
+FindDialog::FindDialog(QWidget *parent)
+    : QDialog(parent)
+{
+    QLabel *findLabel = new QLabel(tr("Enter the name of a contact:"));
+    lineEdit = new QLineEdit;
+
+    findButton = new QPushButton(tr("&Find"));
+    findText = "";
+
+    QHBoxLayout *layout = new QHBoxLayout;
+    layout->addWidget(findLabel);
+    layout->addWidget(lineEdit);
+    layout->addWidget(findButton);
+
+    setLayout(layout);
+    setWindowTitle(tr("Find a Contact"));
+    connect(findButton, SIGNAL(clicked()), this, SLOT(findClicked()));
+    connect(findButton, SIGNAL(clicked()), this, SLOT(accept()));
+}
+//! [constructor]
+//! [findClicked() function]
+void FindDialog::findClicked()
+{
+    QString text = lineEdit->text();
+
+    if (text.isEmpty()) {
+        QMessageBox::information(this, tr("Empty Field"),
+            tr("Please enter a name."));
+        return;
+    } else {
+        findText = text;
+        lineEdit->clear();
+        hide();
+    }
+}
+//! [findClicked() function]
+//! [getFindText() function]
+QString FindDialog::getFindText()
+{
+    return findText;
+}
+//! [getFindText() function]
diff --git a/doc/examples/addressbook-sdk/part5/finddialog.h b/doc/examples/addressbook-sdk/part5/finddialog.h
new file mode 100644
index 0000000000000000000000000000000000000000..db60784f48ce14c6e94c6ef0eb38c2c1cb4c9fbb
--- /dev/null
+++ b/doc/examples/addressbook-sdk/part5/finddialog.h
@@ -0,0 +1,69 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: Qt Software Information (qt-info@nokia.com)
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the either Technology Preview License Agreement or the
+** Beta Release License Agreement.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain
+** additional rights. These rights are described in the Nokia Qt LGPL
+** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this
+** package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you are unsure which license is appropriate for your use, please
+** contact the sales department at qt-sales@nokia.com.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef FINDDIALOG_H
+#define FINDDIALOG_H
+//! [FindDialog header]
+#include <QDialog>
+
+QT_BEGIN_NAMESPACE
+class QLineEdit;
+class QPushButton;
+QT_END_NAMESPACE
+
+class FindDialog : public QDialog
+{
+    Q_OBJECT
+
+public:
+    FindDialog(QWidget *parent = 0);
+    QString getFindText();
+
+public slots:
+    void findClicked();
+
+private:
+    QPushButton *findButton;
+    QLineEdit *lineEdit;
+    QString findText;
+};
+//! [FindDialog header]
+#endif
diff --git a/doc/examples/addressbook-sdk/part5/main.cpp b/doc/examples/addressbook-sdk/part5/main.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..b25d6561a9d84b2d29642737d760a4ee9e2d2998
--- /dev/null
+++ b/doc/examples/addressbook-sdk/part5/main.cpp
@@ -0,0 +1,53 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: Qt Software Information (qt-info@nokia.com)
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the either Technology Preview License Agreement or the
+** Beta Release License Agreement.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain
+** additional rights. These rights are described in the Nokia Qt LGPL
+** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this
+** package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you are unsure which license is appropriate for your use, please
+** contact the sales department at qt-sales@nokia.com.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QtGui>
+#include "addressbook.h"
+
+int main(int argc, char *argv[])
+{
+    QApplication app(argc, argv);
+
+    AddressBook *addressBook = new AddressBook;
+    addressBook->show();
+
+    return app.exec();
+}
diff --git a/doc/examples/addressbook-sdk/part5/part5 b/doc/examples/addressbook-sdk/part5/part5
new file mode 100755
index 0000000000000000000000000000000000000000..ef8a38df97bbca21c6596b5287b918d354787ac2
Binary files /dev/null and b/doc/examples/addressbook-sdk/part5/part5 differ
diff --git a/doc/examples/addressbook-sdk/part5/part5.pro b/doc/examples/addressbook-sdk/part5/part5.pro
new file mode 100644
index 0000000000000000000000000000000000000000..95123d000e0296b983cefa19b7ad9a0b6d1381e4
--- /dev/null
+++ b/doc/examples/addressbook-sdk/part5/part5.pro
@@ -0,0 +1,11 @@
+SOURCES   = addressbook.cpp \
+            finddialog.cpp \
+            main.cpp
+HEADERS   = addressbook.h \
+            finddialog.h
+
+# install
+target.path = $$[QT_INSTALL_EXAMPLES]/tutorials/addressbook/part5
+sources.files = $$SOURCES $$HEADERS $$RESOURCES $$FORMS part5.pro
+sources.path = $$[QT_INSTALL_EXAMPLES]/tutorials/addressbook/part5
+INSTALLS += target sources
diff --git a/doc/examples/addressbook-sdk/part6/addressbook.cpp b/doc/examples/addressbook-sdk/part6/addressbook.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..b7cd4469252d62800e3a19defe8e167a6b2631d6
--- /dev/null
+++ b/doc/examples/addressbook-sdk/part6/addressbook.cpp
@@ -0,0 +1,396 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: Qt Software Information (qt-info@nokia.com)
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the either Technology Preview License Agreement or the
+** Beta Release License Agreement.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain
+** additional rights. These rights are described in the Nokia Qt LGPL
+** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this
+** package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you are unsure which license is appropriate for your use, please
+** contact the sales department at qt-sales@nokia.com.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QtGui>
+#include "addressbook.h"
+
+AddressBook::AddressBook(QWidget *parent)
+    : QWidget(parent)
+{
+    QLabel *nameLabel = new QLabel(tr("Name:"));
+    nameLine = new QLineEdit;
+    nameLine->setReadOnly(true);
+
+    QLabel *addressLabel = new QLabel(tr("Address:"));
+    addressText = new QTextEdit;
+    addressText->setReadOnly(true);
+
+    addButton = new QPushButton(tr("&Add"));
+
+    editButton = new QPushButton(tr("&Edit"));
+    editButton->setEnabled(false);
+    removeButton = new QPushButton(tr("&Remove"));
+    removeButton->setEnabled(false);
+    findButton = new QPushButton(tr("&Find"));
+    findButton->setEnabled(false);
+    submitButton = new QPushButton(tr("&Submit"));
+    submitButton->hide();
+    cancelButton = new QPushButton(tr("&Cancel"));
+    cancelButton->hide();
+
+    nextButton = new QPushButton(tr("&Next"));
+    nextButton->setEnabled(false);
+    previousButton = new QPushButton(tr("&Previous"));
+    previousButton->setEnabled(false);
+
+    loadButton = new QPushButton(tr("&Load..."));
+//! [tooltip 1]    
+    loadButton->setToolTip(tr("Load contacts from a file"));
+//! [tooltip 1]        
+    saveButton = new QPushButton(tr("Sa&ve..."));
+//! [tooltip 2]
+    saveButton->setToolTip(tr("Save contacts to a file"));
+//! [tooltip 2]
+    saveButton->setEnabled(false);
+
+    dialog = new FindDialog;
+
+    connect(addButton, SIGNAL(clicked()), this, SLOT(addContact()));
+    connect(submitButton, SIGNAL(clicked()), this, SLOT(submitContact()));
+    connect(editButton, SIGNAL(clicked()), this, SLOT(editContact()));
+    connect(cancelButton, SIGNAL(clicked()), this, SLOT(cancel()));
+    connect(removeButton, SIGNAL(clicked()), this, SLOT(removeContact()));
+    connect(findButton, SIGNAL(clicked()), this, SLOT(findContact()));
+    connect(nextButton, SIGNAL(clicked()), this, SLOT(next()));
+    connect(previousButton, SIGNAL(clicked()), this, SLOT(previous()));
+    connect(loadButton, SIGNAL(clicked()), this, SLOT(loadFromFile()));
+    connect(saveButton, SIGNAL(clicked()), this, SLOT(saveToFile()));
+    
+    QVBoxLayout *buttonLayout1 = new QVBoxLayout;
+    buttonLayout1->addWidget(addButton);
+    buttonLayout1->addWidget(editButton);
+    buttonLayout1->addWidget(removeButton);
+    buttonLayout1->addWidget(findButton);
+    buttonLayout1->addWidget(submitButton);
+    buttonLayout1->addWidget(cancelButton);
+    buttonLayout1->addWidget(loadButton);
+    buttonLayout1->addWidget(saveButton);
+    buttonLayout1->addStretch();
+
+    QHBoxLayout *buttonLayout2 = new QHBoxLayout;
+    buttonLayout2->addWidget(previousButton);
+    buttonLayout2->addWidget(nextButton);
+
+    QGridLayout *mainLayout = new QGridLayout;
+    mainLayout->addWidget(nameLabel, 0, 0);
+    mainLayout->addWidget(nameLine, 0, 1);
+    mainLayout->addWidget(addressLabel, 1, 0, Qt::AlignTop);
+    mainLayout->addWidget(addressText, 1, 1);
+    mainLayout->addLayout(buttonLayout1, 1, 2);
+    mainLayout->addLayout(buttonLayout2, 2, 1);
+
+    setLayout(mainLayout);
+    setWindowTitle(tr("Simple Address Book"));
+}
+
+void AddressBook::addContact()
+{
+    oldName = nameLine->text();
+    oldAddress = addressText->toPlainText();
+
+    nameLine->clear();
+    addressText->clear();
+
+    updateInterface(AddingMode);
+}
+
+void AddressBook::editContact()
+{
+    oldName = nameLine->text();
+    oldAddress = addressText->toPlainText();
+
+    updateInterface(EditingMode);
+}
+
+void AddressBook::submitContact()
+{
+    QString name = nameLine->text();
+    QString address = addressText->toPlainText();
+
+    if (name == "" || address == "") {
+        QMessageBox::information(this, tr("Empty Field"),
+            tr("Please enter a name and address."));
+        return;
+    }
+
+    if (currentMode == AddingMode) {
+        
+        if (!contacts.contains(name)) {
+            contacts.insert(name, address);
+            QMessageBox::information(this, tr("Add Successful"),
+                tr("\"%1\" has been added to your address book.").arg(name));
+        } else {
+            QMessageBox::information(this, tr("Add Unsuccessful"),
+                tr("Sorry, \"%1\" is already in your address book.").arg(name));
+            return;
+        }
+    } else if (currentMode == EditingMode) {
+        
+        if (oldName != name) {
+            if (!contacts.contains(name)) {
+                QMessageBox::information(this, tr("Edit Successful"),
+                    tr("\"%1\" has been edited in your address book.").arg(oldName));
+                contacts.remove(oldName);
+                contacts.insert(name, address);
+            } else {
+                QMessageBox::information(this, tr("Edit Unsuccessful"),
+                    tr("Sorry, \"%1\" is already in your address book.").arg(name));
+                return;
+            }
+        } else if (oldAddress != address) {
+            QMessageBox::information(this, tr("Edit Successful"),
+                tr("\"%1\" has been edited in your address book.").arg(name));
+            contacts[name] = address;
+        }
+    }
+
+    updateInterface(NavigationMode);
+}
+
+void AddressBook::cancel()
+{
+    nameLine->setText(oldName);
+    addressText->setText(oldAddress);
+    updateInterface(NavigationMode);
+}
+
+void AddressBook::removeContact()
+{
+    QString name = nameLine->text();
+    QString address = addressText->toPlainText();
+
+    if (contacts.contains(name)) {
+
+        int button = QMessageBox::question(this,
+            tr("Confirm Remove"),
+            tr("Are you sure you want to remove \"%1\"?").arg(name),
+            QMessageBox::Yes | QMessageBox::No);
+
+        if (button == QMessageBox::Yes) {
+            
+            previous();
+            contacts.remove(name);
+
+            QMessageBox::information(this, tr("Remove Successful"),
+                tr("\"%1\" has been removed from your address book.").arg(name));
+        }
+    }
+
+    updateInterface(NavigationMode);
+}
+
+void AddressBook::next()
+{
+    QString name = nameLine->text();
+    QMap<QString, QString>::iterator i = contacts.find(name);
+
+    if (i != contacts.end())
+        i++;
+
+    if (i == contacts.end())
+        i = contacts.begin();
+
+    nameLine->setText(i.key());
+    addressText->setText(i.value());
+}
+
+void AddressBook::previous()
+{
+    QString name = nameLine->text();
+    QMap<QString, QString>::iterator i = contacts.find(name);
+
+    if (i == contacts.end()) {
+        nameLine->clear();
+        addressText->clear();
+        return;
+    }
+
+    if (i == contacts.begin())
+        i = contacts.end();
+
+    i--;
+    nameLine->setText(i.key());
+    addressText->setText(i.value());
+}
+
+void AddressBook::findContact()
+{
+    dialog->show();
+
+    if (dialog->exec() == 1) {
+        QString contactName = dialog->getFindText();
+
+        if (contacts.contains(contactName)) {
+            nameLine->setText(contactName);
+            addressText->setText(contacts.value(contactName));
+        } else {
+            QMessageBox::information(this, tr("Contact Not Found"),
+                tr("Sorry, \"%1\" is not in your address book.").arg(contactName));
+            return;
+        }
+    }
+
+    updateInterface(NavigationMode);
+}
+
+void AddressBook::updateInterface(Mode mode)
+{
+    currentMode = mode;
+
+    switch (currentMode) {
+
+    case AddingMode:
+    case EditingMode:
+
+        nameLine->setReadOnly(false);
+        nameLine->setFocus(Qt::OtherFocusReason);
+        addressText->setReadOnly(false);
+
+        addButton->setEnabled(false);
+        editButton->setEnabled(false);
+        removeButton->setEnabled(false);
+
+        nextButton->setEnabled(false);
+        previousButton->setEnabled(false);
+
+        submitButton->show();
+        cancelButton->show();
+
+        loadButton->setEnabled(false);
+        saveButton->setEnabled(false);
+        break;
+
+    case NavigationMode:
+        
+        if (contacts.isEmpty()) {
+            nameLine->clear();
+            addressText->clear();
+        }
+
+        nameLine->setReadOnly(true);
+        addressText->setReadOnly(true);
+        addButton->setEnabled(true);
+
+        int number = contacts.size();
+        editButton->setEnabled(number >= 1);
+        removeButton->setEnabled(number >= 1);
+        findButton->setEnabled(number > 2);
+        nextButton->setEnabled(number > 1);
+        previousButton->setEnabled(number > 1);
+
+        submitButton->hide();
+        cancelButton->hide();
+
+        loadButton->setEnabled(true);
+        saveButton->setEnabled(number >= 1);
+        break;
+    }
+}
+
+//! [saveToFile() function part1]
+void AddressBook::saveToFile()
+{
+    QString fileName = QFileDialog::getSaveFileName(this,
+        tr("Save Address Book"), "",
+        tr("Address Book (*.abk);;All Files (*)"));
+
+//! [saveToFile() function part1]
+//! [saveToFile() function part2]
+    if (fileName.isEmpty())
+        return;
+    else {
+        QFile file(fileName);
+        if (!file.open(QIODevice::WriteOnly)) {
+            QMessageBox::information(this, tr("Unable to open file"),
+                file.errorString());
+            return;
+        }
+
+//! [saveToFile() function part2]        
+//! [saveToFile() function part3]
+        QDataStream out(&file);
+        out.setVersion(QDataStream::Qt_4_5);
+        out << contacts;
+    }       
+}
+//! [saveToFile() function part3]
+
+//! [loadFromFile() function part1]
+void AddressBook::loadFromFile()
+{
+    QString fileName = QFileDialog::getOpenFileName(this,
+        tr("Open Address Book"), "",
+        tr("Address Book (*.abk);;All Files (*)"));
+//! [loadFromFile() function part1]
+
+//! [loadFromFile() function part2]
+    if (fileName.isEmpty())
+        return;
+    else {
+        
+        QFile file(fileName);
+        
+        if (!file.open(QIODevice::ReadOnly)) {
+            QMessageBox::information(this, tr("Unable to open file"),
+                file.errorString());
+            return;
+        }
+        
+        QDataStream in(&file);
+        in.setVersion(QDataStream::Qt_4_5);
+        contacts.empty();   // empty existing contacts
+        in >> contacts;
+//! [loadFromFile() function part2]
+
+//! [loadFromFile() function part3]
+        if (contacts.isEmpty()) {
+            QMessageBox::information(this, tr("No contacts in file"),
+                tr("The file you are attempting to open contains no contacts."));
+        } else {
+            QMap<QString, QString>::iterator i = contacts.begin();
+            nameLine->setText(i.key());
+            addressText->setText(i.value());
+        }
+    }
+
+    updateInterface(NavigationMode);
+}
+//! [loadFromFile() function part3]
diff --git a/doc/examples/addressbook-sdk/part6/addressbook.h b/doc/examples/addressbook-sdk/part6/addressbook.h
new file mode 100644
index 0000000000000000000000000000000000000000..5a36af3e69b7d93023c45253474f20593137de38
--- /dev/null
+++ b/doc/examples/addressbook-sdk/part6/addressbook.h
@@ -0,0 +1,104 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: Qt Software Information (qt-info@nokia.com)
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the either Technology Preview License Agreement or the
+** Beta Release License Agreement.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain
+** additional rights. These rights are described in the Nokia Qt LGPL
+** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this
+** package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you are unsure which license is appropriate for your use, please
+** contact the sales department at qt-sales@nokia.com.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef ADDRESSBOOK_H
+#define ADDRESSBOOK_H
+
+#include <QWidget>
+#include <QMap>
+#include "finddialog.h"
+
+QT_BEGIN_NAMESPACE
+class QPushButton;
+class QLabel;
+class QLineEdit;
+class QTextEdit;
+QT_END_NAMESPACE
+
+
+class AddressBook : public QWidget
+{
+    Q_OBJECT
+
+public:
+    AddressBook(QWidget *parent = 0);
+    enum Mode { NavigationMode, AddingMode, EditingMode };
+
+public slots:
+    void addContact();
+    void editContact();
+    void submitContact();
+    void cancel();
+    void removeContact();
+    void findContact();
+    void next();
+    void previous();
+//! [save and load functions declaration]    
+    void saveToFile();
+    void loadFromFile();
+//! [save and load functions declaration]    
+
+private:
+    void updateInterface(Mode mode);
+
+    QPushButton *addButton;
+    QPushButton *editButton;
+    QPushButton *removeButton;
+    QPushButton *findButton;
+    QPushButton *submitButton;
+    QPushButton *cancelButton;
+    QPushButton *nextButton;
+    QPushButton *previousButton;
+//! [save and load buttons declaration]        
+    QPushButton *loadButton;
+    QPushButton *saveButton;
+//! [save and load buttons declaration]            
+    QLineEdit *nameLine;
+    QTextEdit *addressText;
+
+    QMap<QString, QString> contacts;
+    FindDialog *dialog;
+    QString oldName;
+    QString oldAddress;
+    Mode currentMode;
+};
+
+#endif
diff --git a/doc/examples/addressbook-sdk/part6/finddialog.cpp b/doc/examples/addressbook-sdk/part6/finddialog.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..e28bbaef3941179d170c3519b74a2ac0c97f8262
--- /dev/null
+++ b/doc/examples/addressbook-sdk/part6/finddialog.cpp
@@ -0,0 +1,83 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: Qt Software Information (qt-info@nokia.com)
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the either Technology Preview License Agreement or the
+** Beta Release License Agreement.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain
+** additional rights. These rights are described in the Nokia Qt LGPL
+** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this
+** package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you are unsure which license is appropriate for your use, please
+** contact the sales department at qt-sales@nokia.com.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QtGui>
+#include "finddialog.h"
+
+FindDialog::FindDialog(QWidget *parent)
+    : QDialog(parent)
+{
+    QLabel *findLabel = new QLabel(tr("Enter the name of a contact:"));
+    lineEdit = new QLineEdit;
+
+    findButton = new QPushButton(tr("&Find"));
+    findText = "";
+
+    QHBoxLayout *layout = new QHBoxLayout;
+    layout->addWidget(findLabel);
+    layout->addWidget(lineEdit);
+    layout->addWidget(findButton);
+
+    setLayout(layout);
+    setWindowTitle(tr("Find a Contact"));
+    connect(findButton, SIGNAL(clicked()), this, SLOT(findClicked()));
+    connect(findButton, SIGNAL(clicked()), this, SLOT(accept()));
+}
+
+void FindDialog::findClicked()
+{
+    QString text = lineEdit->text();
+
+    if (text.isEmpty()) {
+        QMessageBox::information(this, tr("Empty Field"),
+            tr("Please enter a name."));
+        return;
+    } else {
+        findText = text;
+        lineEdit->clear();
+        hide();
+    }
+}
+
+QString FindDialog::getFindText()
+{
+    return findText;
+}
diff --git a/doc/examples/addressbook-sdk/part6/finddialog.h b/doc/examples/addressbook-sdk/part6/finddialog.h
new file mode 100644
index 0000000000000000000000000000000000000000..c94baad5d3950834ee8f52bcc986865f201dcee9
--- /dev/null
+++ b/doc/examples/addressbook-sdk/part6/finddialog.h
@@ -0,0 +1,69 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: Qt Software Information (qt-info@nokia.com)
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the either Technology Preview License Agreement or the
+** Beta Release License Agreement.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain
+** additional rights. These rights are described in the Nokia Qt LGPL
+** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this
+** package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you are unsure which license is appropriate for your use, please
+** contact the sales department at qt-sales@nokia.com.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef FINDDIALOG_H
+#define FINDDIALOG_H
+
+#include <QDialog>
+
+QT_BEGIN_NAMESPACE
+class QLineEdit;
+class QPushButton;
+QT_END_NAMESPACE
+
+class FindDialog : public QDialog
+{
+    Q_OBJECT
+
+public:
+    FindDialog(QWidget *parent = 0);
+    QString getFindText();
+
+public slots:
+    void findClicked();
+
+private:
+    QPushButton *findButton;
+    QLineEdit *lineEdit;
+    QString findText;
+};
+
+#endif
diff --git a/doc/examples/addressbook-sdk/part6/main.cpp b/doc/examples/addressbook-sdk/part6/main.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..b25d6561a9d84b2d29642737d760a4ee9e2d2998
--- /dev/null
+++ b/doc/examples/addressbook-sdk/part6/main.cpp
@@ -0,0 +1,53 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: Qt Software Information (qt-info@nokia.com)
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the either Technology Preview License Agreement or the
+** Beta Release License Agreement.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain
+** additional rights. These rights are described in the Nokia Qt LGPL
+** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this
+** package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you are unsure which license is appropriate for your use, please
+** contact the sales department at qt-sales@nokia.com.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QtGui>
+#include "addressbook.h"
+
+int main(int argc, char *argv[])
+{
+    QApplication app(argc, argv);
+
+    AddressBook *addressBook = new AddressBook;
+    addressBook->show();
+
+    return app.exec();
+}
diff --git a/doc/examples/addressbook-sdk/part6/part6 b/doc/examples/addressbook-sdk/part6/part6
new file mode 100755
index 0000000000000000000000000000000000000000..b096b395c758aa1d0949446961f07610326c49b3
Binary files /dev/null and b/doc/examples/addressbook-sdk/part6/part6 differ
diff --git a/doc/examples/addressbook-sdk/part6/part6.pro b/doc/examples/addressbook-sdk/part6/part6.pro
new file mode 100644
index 0000000000000000000000000000000000000000..dc8956132aa147dc3518fb046e917172e92702d6
--- /dev/null
+++ b/doc/examples/addressbook-sdk/part6/part6.pro
@@ -0,0 +1,11 @@
+SOURCES   = addressbook.cpp \
+            finddialog.cpp \
+            main.cpp
+HEADERS   = addressbook.h \
+            finddialog.h
+
+# install
+target.path = $$[QT_INSTALL_EXAMPLES]/tutorials/addressbook/part6
+sources.files = $$SOURCES $$HEADERS $$RESOURCES $$FORMS part6.pro
+sources.path = $$[QT_INSTALL_EXAMPLES]/tutorials/addressbook/part6
+INSTALLS += target sources
diff --git a/doc/examples/addressbook-sdk/part7/addressbook.cpp b/doc/examples/addressbook-sdk/part7/addressbook.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..2f81d2bd619eb39bb0889604f2fe6f05f384876c
--- /dev/null
+++ b/doc/examples/addressbook-sdk/part7/addressbook.cpp
@@ -0,0 +1,449 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: Qt Software Information (qt-info@nokia.com)
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the either Technology Preview License Agreement or the
+** Beta Release License Agreement.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain
+** additional rights. These rights are described in the Nokia Qt LGPL
+** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this
+** package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you are unsure which license is appropriate for your use, please
+** contact the sales department at qt-sales@nokia.com.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QtGui>
+#include "addressbook.h"
+
+AddressBook::AddressBook(QWidget *parent)
+    : QWidget(parent)
+{
+    QLabel *nameLabel = new QLabel(tr("Name:"));
+    nameLine = new QLineEdit;
+    nameLine->setReadOnly(true);
+
+    QLabel *addressLabel = new QLabel(tr("Address:"));
+    addressText = new QTextEdit;
+    addressText->setReadOnly(true);
+
+    addButton = new QPushButton(tr("&Add"));
+
+    editButton = new QPushButton(tr("&Edit"));
+    editButton->setEnabled(false);
+    removeButton = new QPushButton(tr("&Remove"));
+    removeButton->setEnabled(false);
+    findButton = new QPushButton(tr("&Find"));
+    findButton->setEnabled(false);
+    submitButton = new QPushButton(tr("&Submit"));
+    submitButton->hide();
+    cancelButton = new QPushButton(tr("&Cancel"));
+    cancelButton->hide();
+
+    nextButton = new QPushButton(tr("&Next"));
+    nextButton->setEnabled(false);
+    previousButton = new QPushButton(tr("&Previous"));
+    previousButton->setEnabled(false);
+
+    loadButton = new QPushButton(tr("&Load..."));
+    loadButton->setToolTip(tr("Load contacts from a file"));
+    saveButton = new QPushButton(tr("Sa&ve..."));
+    saveButton->setToolTip(tr("Save contacts to a file"));
+    saveButton->setEnabled(false);
+
+    exportButton = new QPushButton(tr("E&xport"));
+    exportButton->setToolTip(tr("Export as vCard"));
+    exportButton->setEnabled(false);
+
+    dialog = new FindDialog;
+
+    connect(addButton, SIGNAL(clicked()), this, SLOT(addContact()));
+    connect(submitButton, SIGNAL(clicked()), this, SLOT(submitContact()));
+    connect(editButton, SIGNAL(clicked()), this, SLOT(editContact()));
+    connect(cancelButton, SIGNAL(clicked()), this, SLOT(cancel()));
+    connect(removeButton, SIGNAL(clicked()), this, SLOT(removeContact()));
+    connect(findButton, SIGNAL(clicked()), this, SLOT(findContact()));
+    connect(nextButton, SIGNAL(clicked()), this, SLOT(next()));
+    connect(previousButton, SIGNAL(clicked()), this, SLOT(previous()));
+    connect(loadButton, SIGNAL(clicked()), this, SLOT(loadFromFile()));
+    connect(saveButton, SIGNAL(clicked()), this, SLOT(saveToFile()));
+    connect(exportButton, SIGNAL(clicked()), this, SLOT(exportAsVCard()));
+    
+    QVBoxLayout *buttonLayout1 = new QVBoxLayout;
+    buttonLayout1->addWidget(addButton);
+    buttonLayout1->addWidget(editButton);
+    buttonLayout1->addWidget(removeButton);
+    buttonLayout1->addWidget(findButton);
+    buttonLayout1->addWidget(submitButton);
+    buttonLayout1->addWidget(cancelButton);
+    buttonLayout1->addWidget(loadButton);
+    buttonLayout1->addWidget(saveButton);
+    buttonLayout1->addWidget(exportButton);
+    buttonLayout1->addStretch();
+
+    QHBoxLayout *buttonLayout2 = new QHBoxLayout;
+    buttonLayout2->addWidget(previousButton);
+    buttonLayout2->addWidget(nextButton);
+
+    QGridLayout *mainLayout = new QGridLayout;
+    mainLayout->addWidget(nameLabel, 0, 0);
+    mainLayout->addWidget(nameLine, 0, 1);
+    mainLayout->addWidget(addressLabel, 1, 0, Qt::AlignTop);
+    mainLayout->addWidget(addressText, 1, 1);
+    mainLayout->addLayout(buttonLayout1, 1, 2);
+    mainLayout->addLayout(buttonLayout2, 2, 1);
+
+    setLayout(mainLayout);
+    setWindowTitle(tr("Simple Address Book"));
+}
+
+void AddressBook::addContact()
+{
+    oldName = nameLine->text();
+    oldAddress = addressText->toPlainText();
+
+    nameLine->clear();
+    addressText->clear();
+
+    updateInterface(AddingMode);
+}
+
+void AddressBook::editContact()
+{
+    oldName = nameLine->text();
+    oldAddress = addressText->toPlainText();
+
+    updateInterface(EditingMode);
+}
+
+void AddressBook::submitContact()
+{
+    QString name = nameLine->text();
+    QString address = addressText->toPlainText();
+
+    if (name == "" || address == "") {
+        QMessageBox::information(this, tr("Empty Field"),
+            tr("Please enter a name and address."));
+        return;
+    }
+
+    if (currentMode == AddingMode) {
+        
+        if (!contacts.contains(name)) {
+            contacts.insert(name, address);
+            QMessageBox::information(this, tr("Add Successful"),
+                tr("\"%1\" has been added to your address book.").arg(name));
+        } else {
+            QMessageBox::information(this, tr("Add Unsuccessful"),
+                tr("Sorry, \"%1\" is already in your address book.").arg(name));
+            return;
+        }
+    } else if (currentMode == EditingMode) {
+        
+        if (oldName != name) {
+            if (!contacts.contains(name)) {
+                QMessageBox::information(this, tr("Edit Successful"),
+                    tr("\"%1\" has been edited in your address book.").arg(oldName));
+                contacts.remove(oldName);
+                contacts.insert(name, address);
+            } else {
+                QMessageBox::information(this, tr("Edit Unsuccessful"),
+                    tr("Sorry, \"%1\" is already in your address book.").arg(name));
+                return;
+            }
+        } else if (oldAddress != address) {
+            QMessageBox::information(this, tr("Edit Successful"),
+                tr("\"%1\" has been edited in your address book.").arg(name));
+            contacts[name] = address;
+        }
+    }
+
+    updateInterface(NavigationMode);
+}
+
+void AddressBook::cancel()
+{
+    nameLine->setText(oldName);
+    addressText->setText(oldAddress);
+    updateInterface(NavigationMode);
+}
+
+void AddressBook::removeContact()
+{
+    QString name = nameLine->text();
+    QString address = addressText->toPlainText();
+
+    if (contacts.contains(name)) {
+
+        int button = QMessageBox::question(this,
+            tr("Confirm Remove"),
+            tr("Are you sure you want to remove \"%1\"?").arg(name),
+            QMessageBox::Yes | QMessageBox::No);
+
+        if (button == QMessageBox::Yes) {
+            
+            previous();
+            contacts.remove(name);
+
+            QMessageBox::information(this, tr("Remove Successful"),
+                tr("\"%1\" has been removed from your address book.").arg(name));
+        }
+    }
+
+    updateInterface(NavigationMode);
+}
+
+void AddressBook::next()
+{
+    QString name = nameLine->text();
+    QMap<QString, QString>::iterator i = contacts.find(name);
+
+    if (i != contacts.end())
+        i++;
+
+    if (i == contacts.end())
+        i = contacts.begin();
+
+    nameLine->setText(i.key());
+    addressText->setText(i.value());
+}
+
+void AddressBook::previous()
+{
+    QString name = nameLine->text();
+    QMap<QString, QString>::iterator i = contacts.find(name);
+
+    if (i == contacts.end()) {
+        nameLine->clear();
+        addressText->clear();
+        return;
+    }
+
+    if (i == contacts.begin())
+        i = contacts.end();
+
+    i--;
+    nameLine->setText(i.key());
+    addressText->setText(i.value());
+}
+
+void AddressBook::findContact()
+{
+    dialog->show();
+
+    if (dialog->exec() == 1) {
+        QString contactName = dialog->getFindText();
+
+        if (contacts.contains(contactName)) {
+            nameLine->setText(contactName);
+            addressText->setText(contacts.value(contactName));
+        } else {
+            QMessageBox::information(this, tr("Contact Not Found"),
+                tr("Sorry, \"%1\" is not in your address book.").arg(contactName));
+            return;
+        }
+    }
+
+    updateInterface(NavigationMode);
+}
+void AddressBook::updateInterface(Mode mode)
+{
+    currentMode = mode;
+
+    switch (currentMode) {
+
+    case AddingMode:
+    case EditingMode:
+
+        nameLine->setReadOnly(false);
+        nameLine->setFocus(Qt::OtherFocusReason);
+        addressText->setReadOnly(false);
+
+        addButton->setEnabled(false);
+        editButton->setEnabled(false);
+        removeButton->setEnabled(false);
+
+        nextButton->setEnabled(false);
+        previousButton->setEnabled(false);
+
+        submitButton->show();
+        cancelButton->show();
+
+        loadButton->setEnabled(false);
+        saveButton->setEnabled(false);
+        exportButton->setEnabled(false);
+        break;
+
+    case NavigationMode:
+        
+        if (contacts.isEmpty()) {
+            nameLine->clear();
+            addressText->clear();
+        }
+
+        nameLine->setReadOnly(true);
+        addressText->setReadOnly(true);
+        addButton->setEnabled(true);
+
+        int number = contacts.size();
+        editButton->setEnabled(number >= 1);
+        removeButton->setEnabled(number >= 1);
+        findButton->setEnabled(number > 2);
+        nextButton->setEnabled(number > 1);
+        previousButton->setEnabled(number > 1);
+
+        submitButton->hide();
+        cancelButton->hide();
+
+        exportButton->setEnabled(number >= 1);
+
+        loadButton->setEnabled(true);
+        saveButton->setEnabled(number >= 1);
+        break;
+    }
+}
+
+void AddressBook::saveToFile()
+{
+    QString fileName = QFileDialog::getSaveFileName(this,
+        tr("Save Address Book"), "",
+        tr("Address Book (*.abk);;All Files (*)"));
+        
+    if (fileName.isEmpty())
+        return;
+    else {
+        QFile file(fileName);
+
+        if (!file.open(QIODevice::WriteOnly)) {
+            QMessageBox::information(this, tr("Unable to open file"),
+                file.errorString());
+            return;
+        }
+
+        QDataStream out(&file);
+        out.setVersion(QDataStream::Qt_4_3);
+        out << contacts;
+    }
+
+    updateInterface(NavigationMode);
+}
+
+void AddressBook::loadFromFile()
+{
+    QString fileName = QFileDialog::getOpenFileName(this,
+        tr("Open Address Book"), "",
+        tr("Address Book (*.abk);;All Files (*)"));
+
+    if (fileName.isEmpty())
+        return;
+    else {
+        QFile file(fileName);
+
+        if (!file.open(QIODevice::ReadOnly)) {
+            QMessageBox::information(this, tr("Unable to open file"),
+                file.errorString());
+            return;
+        }
+
+        QDataStream in(&file);
+        in.setVersion(QDataStream::Qt_4_3);
+        contacts.empty();   // empty existing contacts
+        in >> contacts;
+
+        QMap<QString, QString>::iterator i = contacts.begin();
+        nameLine->setText(i.key());
+        addressText->setText(i.value());
+    }
+
+    updateInterface(NavigationMode);
+}
+
+//! [export function part1]
+void AddressBook::exportAsVCard()
+{
+    QString name = nameLine->text();
+    QString address = addressText->toPlainText();
+    QString firstName;
+    QString lastName;
+    QStringList nameList;
+
+    int index = name.indexOf(" ");
+
+    if (index != -1) {
+        nameList = name.split(QRegExp("\\s+"), QString::SkipEmptyParts);
+        firstName = nameList.first();
+        lastName = nameList.last();
+    } else {
+        firstName = name;
+        lastName = "";
+    }
+
+    QString fileName = QFileDialog::getSaveFileName(this,
+        tr("Export Contact"), "",
+        tr("vCard Files (*.vcf);;All Files (*)"));
+        
+    if (fileName.isEmpty())
+        return;
+
+    QFile file(fileName);
+//! [export function part1]
+    
+//! [export function part2]    
+    if (!file.open(QIODevice::WriteOnly)) {
+        QMessageBox::information(this, tr("Unable to open file"),
+            file.errorString());
+        return;
+    }
+
+    QTextStream out(&file);
+//! [export function part2]
+
+//! [export function part3]
+    out << "BEGIN:VCARD" << "\n";
+    out << "VERSION:2.1" << "\n";
+    out << "N:" << lastName << ";" << firstName << "\n";
+        
+    if (!nameList.isEmpty())            
+       out << "FN:" << nameList.join(" ") << "\n";
+    else
+       out << "FN:" << firstName << "\n";
+//! [export function part3] 
+
+//! [export function part4]
+    address.replace(";", "\\;", Qt::CaseInsensitive);
+    address.replace("\n", ";", Qt::CaseInsensitive);
+    address.replace(",", " ", Qt::CaseInsensitive);
+
+    out << "ADR;HOME:;" << address << "\n";
+    out << "END:VCARD" << "\n";
+
+    QMessageBox::information(this, tr("Export Successful"),
+        tr("\"%1\" has been exported as a vCard.").arg(name));
+}
+//! [export function part4]
diff --git a/doc/examples/addressbook-sdk/part7/addressbook.h b/doc/examples/addressbook-sdk/part7/addressbook.h
new file mode 100644
index 0000000000000000000000000000000000000000..3a6ae41e76c53d2d83f9715d5b98495d31fa0525
--- /dev/null
+++ b/doc/examples/addressbook-sdk/part7/addressbook.h
@@ -0,0 +1,106 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: Qt Software Information (qt-info@nokia.com)
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the either Technology Preview License Agreement or the
+** Beta Release License Agreement.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain
+** additional rights. These rights are described in the Nokia Qt LGPL
+** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this
+** package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you are unsure which license is appropriate for your use, please
+** contact the sales department at qt-sales@nokia.com.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef ADDRESSBOOK_H
+#define ADDRESSBOOK_H
+
+#include <QWidget>
+#include <QMap>
+#include "finddialog.h"
+
+QT_BEGIN_NAMESPACE
+class QPushButton;
+class QLabel;
+class QLineEdit;
+class QTextEdit;
+QT_END_NAMESPACE
+
+
+class AddressBook : public QWidget
+{
+    Q_OBJECT
+
+public:
+    AddressBook(QWidget *parent = 0);
+    enum Mode { NavigationMode, AddingMode, EditingMode };
+
+public slots:
+    void addContact();
+    void editContact();
+    void submitContact();
+    void cancel();
+    void removeContact();
+    void findContact();
+    void next();
+    void previous();
+    void saveToFile();
+    void loadFromFile();
+//! [exportAsVCard() declaration]
+    void exportAsVCard();
+//! [exportAsVCard() declaration]       
+
+private:
+    void updateInterface(Mode mode);
+
+    QPushButton *addButton;
+    QPushButton *editButton;
+    QPushButton *removeButton;
+    QPushButton *findButton;
+    QPushButton *submitButton;
+    QPushButton *cancelButton;
+    QPushButton *nextButton;
+    QPushButton *previousButton;
+    QPushButton *loadButton;
+    QPushButton *saveButton;
+//! [exportButton declaration] 
+    QPushButton *exportButton;
+//! [exportButton declaration]     
+    QLineEdit *nameLine;
+    QTextEdit *addressText;
+
+    QMap<QString, QString> contacts;
+    FindDialog *dialog;
+    QString oldName;
+    QString oldAddress;
+    Mode currentMode;
+};
+
+#endif
diff --git a/doc/examples/addressbook-sdk/part7/finddialog.cpp b/doc/examples/addressbook-sdk/part7/finddialog.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..e28bbaef3941179d170c3519b74a2ac0c97f8262
--- /dev/null
+++ b/doc/examples/addressbook-sdk/part7/finddialog.cpp
@@ -0,0 +1,83 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: Qt Software Information (qt-info@nokia.com)
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the either Technology Preview License Agreement or the
+** Beta Release License Agreement.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain
+** additional rights. These rights are described in the Nokia Qt LGPL
+** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this
+** package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you are unsure which license is appropriate for your use, please
+** contact the sales department at qt-sales@nokia.com.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QtGui>
+#include "finddialog.h"
+
+FindDialog::FindDialog(QWidget *parent)
+    : QDialog(parent)
+{
+    QLabel *findLabel = new QLabel(tr("Enter the name of a contact:"));
+    lineEdit = new QLineEdit;
+
+    findButton = new QPushButton(tr("&Find"));
+    findText = "";
+
+    QHBoxLayout *layout = new QHBoxLayout;
+    layout->addWidget(findLabel);
+    layout->addWidget(lineEdit);
+    layout->addWidget(findButton);
+
+    setLayout(layout);
+    setWindowTitle(tr("Find a Contact"));
+    connect(findButton, SIGNAL(clicked()), this, SLOT(findClicked()));
+    connect(findButton, SIGNAL(clicked()), this, SLOT(accept()));
+}
+
+void FindDialog::findClicked()
+{
+    QString text = lineEdit->text();
+
+    if (text.isEmpty()) {
+        QMessageBox::information(this, tr("Empty Field"),
+            tr("Please enter a name."));
+        return;
+    } else {
+        findText = text;
+        lineEdit->clear();
+        hide();
+    }
+}
+
+QString FindDialog::getFindText()
+{
+    return findText;
+}
diff --git a/doc/examples/addressbook-sdk/part7/finddialog.h b/doc/examples/addressbook-sdk/part7/finddialog.h
new file mode 100644
index 0000000000000000000000000000000000000000..c94baad5d3950834ee8f52bcc986865f201dcee9
--- /dev/null
+++ b/doc/examples/addressbook-sdk/part7/finddialog.h
@@ -0,0 +1,69 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: Qt Software Information (qt-info@nokia.com)
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the either Technology Preview License Agreement or the
+** Beta Release License Agreement.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain
+** additional rights. These rights are described in the Nokia Qt LGPL
+** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this
+** package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you are unsure which license is appropriate for your use, please
+** contact the sales department at qt-sales@nokia.com.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef FINDDIALOG_H
+#define FINDDIALOG_H
+
+#include <QDialog>
+
+QT_BEGIN_NAMESPACE
+class QLineEdit;
+class QPushButton;
+QT_END_NAMESPACE
+
+class FindDialog : public QDialog
+{
+    Q_OBJECT
+
+public:
+    FindDialog(QWidget *parent = 0);
+    QString getFindText();
+
+public slots:
+    void findClicked();
+
+private:
+    QPushButton *findButton;
+    QLineEdit *lineEdit;
+    QString findText;
+};
+
+#endif
diff --git a/doc/examples/addressbook-sdk/part7/main.cpp b/doc/examples/addressbook-sdk/part7/main.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..b25d6561a9d84b2d29642737d760a4ee9e2d2998
--- /dev/null
+++ b/doc/examples/addressbook-sdk/part7/main.cpp
@@ -0,0 +1,53 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: Qt Software Information (qt-info@nokia.com)
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the either Technology Preview License Agreement or the
+** Beta Release License Agreement.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain
+** additional rights. These rights are described in the Nokia Qt LGPL
+** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this
+** package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you are unsure which license is appropriate for your use, please
+** contact the sales department at qt-sales@nokia.com.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QtGui>
+#include "addressbook.h"
+
+int main(int argc, char *argv[])
+{
+    QApplication app(argc, argv);
+
+    AddressBook *addressBook = new AddressBook;
+    addressBook->show();
+
+    return app.exec();
+}
diff --git a/doc/examples/addressbook-sdk/part7/part7 b/doc/examples/addressbook-sdk/part7/part7
new file mode 100755
index 0000000000000000000000000000000000000000..595312aa7db302521bed90c888871b619da40379
Binary files /dev/null and b/doc/examples/addressbook-sdk/part7/part7 differ
diff --git a/doc/examples/addressbook-sdk/part7/part7.pro b/doc/examples/addressbook-sdk/part7/part7.pro
new file mode 100644
index 0000000000000000000000000000000000000000..a726d91003848e2df4241d6d27b26fa374b4c04e
--- /dev/null
+++ b/doc/examples/addressbook-sdk/part7/part7.pro
@@ -0,0 +1,11 @@
+SOURCES   = addressbook.cpp \
+            finddialog.cpp \
+            main.cpp
+HEADERS   = addressbook.h \
+            finddialog.h
+
+# install
+target.path = $$[QT_INSTALL_EXAMPLES]/tutorials/addressbook/part7
+sources.files = $$SOURCES $$HEADERS $$RESOURCES $$FORMS part7.pro
+sources.path = $$[QT_INSTALL_EXAMPLES]/tutorials/addressbook/part7
+INSTALLS += target sources