Index: sanedialog.cpp
===================================================================
--- sanedialog.cpp	(Revision 1217369)
+++ sanedialog.cpp	(Arbeitskopie)
@@ -29,6 +29,7 @@
 #include <KDebug>
 #include <KPluginLoader>
 #include <KMessageBox>
+#include <KConfig>
 
 K_PLUGIN_FACTORY(SaneDialogFactory, registerPlugin<SaneDialog>();)
 K_EXPORT_PLUGIN(SaneDialogFactory("ksaneplugin"))
@@ -71,12 +72,33 @@
         openDev = QString();
         return false;
     }
+
+    // restore scan dialog size and all options for the selected device if available
+    restoreDialogSize(KConfigGroup(KGlobal::config(), "ScanDialog"));
+    QString groupName = QString("ScanDialog_%1").arg(openDev);
+    if (KGlobal::config()->hasGroup(groupName)) {
+        KConfigGroup group(KGlobal::config(), groupName);
+        QStringList keys = group.keyList();
+        for (int i = 0; i < keys.count(); i++)
+            ksanew->setOptVal(keys[i], group.readEntry(keys[i]));
+    }
+
    return true;
 }
 
-
 SaneDialog::~SaneDialog()
 {
+    if (ksanew && !openDev.isEmpty()) {
+        // save scan dialog size and all options for the selected device if available
+        KConfigGroup group(KGlobal::config(), "ScanDialog");
+        saveDialogSize(group, KConfigGroup::Global | KConfigGroup::Persistent);
+        group = KGlobal::config()->group(QString("ScanDialog_%1").arg(openDev));
+        QMap<QString, QString> opts;
+        ksanew->getOptVals(opts);
+        QMap<QString, QString>::const_iterator i = opts.constBegin();
+        for (; i != opts.constEnd(); ++i)
+            group.writeEntry(i.key(), i.value(), KConfigGroup::Global | KConfigGroup::Persistent);
+    }
 }
 
 void SaneDialog::imageReady(QByteArray &data, int w, int h, int bpl, int f)
