diff --git a/doc/examples/addressbook-sdk/part7/addressbook.cpp b/doc/examples/addressbook-sdk/part7/addressbook.cpp
index de35f5ac738bebdd1a7a75d9055fc8399ef33589..63d52a65a95498f54dd51844ad39ebd9444aa3bf 100644
--- a/doc/examples/addressbook-sdk/part7/addressbook.cpp
+++ b/doc/examples/addressbook-sdk/part7/addressbook.cpp
@@ -5,9 +5,325 @@ AddressBook::AddressBook(QWidget *parent)
     : QWidget(parent), ui(new Ui::AddressBook)
 {
     ui->setupUi(this);
+
+    nameLine = new QLineEdit;
+    nameLine = ui->nameLine;
+    nameLine->setReadOnly(true);
+
+    addressText = new QTextEdit;
+    addressText = ui->addressText;
+    addressText->setReadOnly(true);
+
+    addButton = new QPushButton;
+    addButton = ui->addButton;
+
+    submitButton = new QPushButton;
+    submitButton = ui->submitButton;
+    submitButton->hide();
+
+    cancelButton = new QPushButton;
+    cancelButton = ui->cancelButton;
+    cancelButton->hide();
+
+    nextButton = new QPushButton;
+    nextButton = ui->nextButton;
+    nextButton->setEnabled(false);
+
+    previousButton = new QPushButton;
+    previousButton = ui->previousButton;
+    previousButton->setEnabled(false);
+
+    editButton = new QPushButton;
+    editButton = ui->editButton;
+    editButton->setEnabled(false);
+
+    removeButton = new QPushButton;
+    removeButton = ui->removeButton;
+    removeButton->setEnabled(false);
+
+    findButton = new QPushButton;
+    findButton = ui->findButton;
+
+    dialog = new FindDialog;
+
+    loadButton = new QPushButton;
+    loadButton = ui->loadButton;
+
+    saveButton = new QPushButton;
+    saveButton = ui->saveButton;
+
+    connect(addButton, SIGNAL(clicked()), this,
+                SLOT(addContact()));
+    connect(submitButton, SIGNAL(clicked()), this,
+                SLOT(submitContact()));
+    connect(cancelButton, SIGNAL(clicked()), this,
+                SLOT(cancel()));
+    connect(nextButton, SIGNAL(clicked()), this,
+                SLOT(next()));
+    connect(previousButton, SIGNAL(clicked()), this,
+                SLOT(previous()));
+    connect(editButton, SIGNAL(clicked()), this,
+                SLOT(editContact()));
+    connect(removeButton, SIGNAL(clicked()), this,
+                SLOT(removeContact()));
+    connect(findButton, SIGNAL(clicked()), this,
+                SLOT(findContact()));
+
+    setWindowTitle(tr("Simple Address Book"));
 }
 
 AddressBook::~AddressBook()
 {
     delete ui;
 }
+
+void AddressBook::addContact()
+{
+    oldName = nameLine->text();
+    oldAddress = addressText->toPlainText();
+
+    nameLine->clear();
+    addressText->clear();
+
+    updateInterface(AddingMode);
+}
+
+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."));
+    }
+
+    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));
+        }
+
+    } 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));
+            }
+        } 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);
+    nameLine->setReadOnly(true);
+
+    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::editContact()
+{
+    oldName = nameLine->text();
+    oldAddress = addressText->toPlainText();
+
+    updateInterface(EditingMode);
+}
+
+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::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;
+    }
+}
+
+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);
+}
+
+void AddressBook::saveToFile()
+{
+    QString fileName = QFileDialog::getSaveFileName(this,
+        tr("Save Address Book"), "",
+        tr("Address book (*.abk);; AllFiles (*)"));
+
+    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_5);
+        out << contacts;
+    }
+}
+
+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_5);
+        contacts.empty();   // empty existing contacts
+        in >> contacts;
+
+        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);
+}
diff --git a/doc/examples/addressbook-sdk/part7/addressbook.h b/doc/examples/addressbook-sdk/part7/addressbook.h
index b85a0acddbfc7bc458b2e218cc73089f33cfe543..0e4048a63d77173070f318e06484f7ce1617c0d0 100644
--- a/doc/examples/addressbook-sdk/part7/addressbook.h
+++ b/doc/examples/addressbook-sdk/part7/addressbook.h
@@ -2,6 +2,11 @@
 #define ADDRESSBOOK_H
 
 #include <QtGui/QWidget>
+#include <QtGui/QPushButton>
+#include <QtGui/QLineEdit>
+#include <QtGui/QTextEdit>
+#include <QtGui/QMessageBox>
+#include "finddialog.h"
 
 namespace Ui
 {
@@ -14,10 +19,43 @@ class AddressBook : public QWidget
 
 public:
     AddressBook(QWidget *parent = 0);
+    enum Mode { NavigationMode, AddingMode, EditingMode };
     ~AddressBook();
 
+public slots:
+    void addContact();
+    void submitContact();
+    void cancel();
+    void editContact();
+    void removeContact();
+    void next();
+    void previous();
+    void findContact();
+    void saveToFile();
+    void loadFromFile();
+
 private:
     Ui::AddressBook *ui;
+
+    void updateInterface(Mode mode);
+    QPushButton *addButton;
+    QPushButton *submitButton;
+    QPushButton *cancelButton;
+    QPushButton *editButton;
+    QPushButton *removeButton;
+    QPushButton *nextButton;
+    QPushButton *previousButton;
+    QPushButton *findButton;
+    QPushButton *loadButton;
+    QPushButton *saveButton;
+    QLineEdit *nameLine;
+    QTextEdit *addressText;
+
+    QMap<QString, QString> contacts;
+    QString oldName;
+    QString oldAddress;
+    Mode currentMode;
+    FindDialog *dialog;
 };
 
 #endif // ADDRESSBOOK_H
diff --git a/doc/examples/addressbook-sdk/part7/addressbook.ui b/doc/examples/addressbook-sdk/part7/addressbook.ui
index 7b771cc37b5055068b2ba1a365085b6f66465897..f46c9c396976369327bc8f3ae9ad0c43d03511e5 100644
--- a/doc/examples/addressbook-sdk/part7/addressbook.ui
+++ b/doc/examples/addressbook-sdk/part7/addressbook.ui
@@ -1,7 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
 <ui version="4.0">
  <class>AddressBook</class>
- <widget class="QWidget" name="AddressBook" >
-  <property name="geometry" >
+ <widget class="QWidget" name="AddressBook">
+  <property name="geometry">
    <rect>
     <x>0</x>
     <y>0</y>
@@ -9,12 +10,137 @@
     <height>400</height>
    </rect>
   </property>
-  <property name="windowTitle" >
+  <property name="windowTitle">
    <string>AddressBook</string>
   </property>
+  <layout class="QHBoxLayout" name="horizontalLayout_2">
+   <item>
+    <layout class="QGridLayout" name="gridLayout">
+     <item row="0" column="0">
+      <widget class="QLabel" name="nameLabel">
+       <property name="text">
+        <string>Name:</string>
+       </property>
+      </widget>
+     </item>
+     <item row="0" column="1">
+      <widget class="QLineEdit" name="nameLine"/>
+     </item>
+     <item row="1" column="0">
+      <widget class="QLabel" name="addressLabel">
+       <property name="text">
+        <string>Address:</string>
+       </property>
+       <property name="alignment">
+        <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
+       </property>
+      </widget>
+     </item>
+     <item row="1" column="1">
+      <widget class="QTextEdit" name="addressText"/>
+     </item>
+     <item row="1" column="2">
+      <layout class="QVBoxLayout" name="verticalLayout">
+       <item>
+        <widget class="QPushButton" name="addButton">
+         <property name="text">
+          <string>Add</string>
+         </property>
+        </widget>
+       </item>
+       <item>
+        <widget class="QPushButton" name="submitButton">
+         <property name="text">
+          <string>Submit</string>
+         </property>
+        </widget>
+       </item>
+       <item>
+        <widget class="QPushButton" name="cancelButton">
+         <property name="text">
+          <string>Cancel</string>
+         </property>
+        </widget>
+       </item>
+       <item>
+        <widget class="QPushButton" name="editButton">
+         <property name="text">
+          <string>Edit</string>
+         </property>
+        </widget>
+       </item>
+       <item>
+        <widget class="QPushButton" name="removeButton">
+         <property name="text">
+          <string>Remove</string>
+         </property>
+        </widget>
+       </item>
+       <item>
+        <widget class="QPushButton" name="findButton">
+         <property name="text">
+          <string>Find</string>
+         </property>
+        </widget>
+       </item>
+       <item>
+        <widget class="QPushButton" name="loadButton">
+         <property name="toolTip">
+          <string>Load contacts from a file</string>
+         </property>
+         <property name="text">
+          <string>Load...</string>
+         </property>
+        </widget>
+       </item>
+       <item>
+        <widget class="QPushButton" name="saveButton">
+         <property name="toolTip">
+          <string>Save contacts to a file</string>
+         </property>
+         <property name="text">
+          <string>Save...</string>
+         </property>
+        </widget>
+       </item>
+       <item>
+        <spacer name="verticalSpacer">
+         <property name="orientation">
+          <enum>Qt::Vertical</enum>
+         </property>
+         <property name="sizeHint" stdset="0">
+          <size>
+           <width>20</width>
+           <height>40</height>
+          </size>
+         </property>
+        </spacer>
+       </item>
+      </layout>
+     </item>
+     <item row="2" column="1">
+      <layout class="QHBoxLayout" name="horizontalLayout">
+       <item>
+        <widget class="QPushButton" name="nextButton">
+         <property name="text">
+          <string>Previous</string>
+         </property>
+        </widget>
+       </item>
+       <item>
+        <widget class="QPushButton" name="previousButton">
+         <property name="text">
+          <string>Next</string>
+         </property>
+        </widget>
+       </item>
+      </layout>
+     </item>
+    </layout>
+   </item>
+  </layout>
  </widget>
- <layoutDefault spacing="6" margin="11" />
- <pixmapfunction></pixmapfunction>
+ <layoutdefault spacing="6" margin="11"/>
  <resources/>
  <connections/>
 </ui>
diff --git a/doc/examples/addressbook-sdk/part7/part7.pro b/doc/examples/addressbook-sdk/part7/part7.pro
index 9fc496316211066ac2473b95462de208ea143be6..efdbe0bb6e37d30c099a23082140668cca91e7e5 100644
--- a/doc/examples/addressbook-sdk/part7/part7.pro
+++ b/doc/examples/addressbook-sdk/part7/part7.pro
@@ -1,16 +1,12 @@
-#-------------------------------------------------
-#
+# -------------------------------------------------
 # Project created by QtCreator 2009-07-07T17:10:19
-#
-#-------------------------------------------------
-
+# -------------------------------------------------
 TARGET = part7
 TEMPLATE = app
-
-
-SOURCES += main.cpp\
-        addressbook.cpp
-
-HEADERS  += addressbook.h
-
-FORMS    += addressbook.ui
+SOURCES += main.cpp \
+    addressbook.cpp \
+    finddialog.cpp
+HEADERS += addressbook.h \
+    finddialog.h
+FORMS += addressbook.ui \
+    finddialog.ui