diff -Naur kdebase-3.5.8.orig/kioslave/media/mounthelper/kio_media_mounthelper.cpp kdebase-3.5.8/kioslave/media/mounthelper/kio_media_mounthelper.cpp
--- kdebase-3.5.8.orig/kioslave/media/mounthelper/kio_media_mounthelper.cpp	2007-10-08 15:58:36.000000000 +0200
+++ kdebase-3.5.8/kioslave/media/mounthelper/kio_media_mounthelper.cpp	2007-11-20 14:02:02.000000000 +0100
@@ -2,6 +2,8 @@
    Copyright (c) 2004 KÃ©vin Ottens <ervin ipsquad net>
    Parts of this file are
    Copyright 2003 Waldo Bastian <bastian@kde.org>
+   Small changes for Kubuntu by
+   Copyright 2007 Frode M. DÃ¸ving <frode@lnix.net>
 
    This library is free software; you can redistribute it and/or
    modify it under the terms of the GNU Library General Public
@@ -31,6 +33,7 @@
 #include <kdebug.h>
 #include <kglobal.h>
 #include <kprocess.h>
+#include <kprogress.h>
 #include <kstartupinfo.h>
 
 #include "kio_media_mounthelper.h"
@@ -62,6 +65,7 @@
 MountHelper::MountHelper() : KApplication()
 {
 	KCmdLineArgs *args = KCmdLineArgs::parsedArgs();
+    m_progress = new KProgressDialog();
 
 	m_errorStr = "";
 
@@ -114,6 +118,15 @@
 		*/
 		if (medium.isMounted())
 		{
+            m_progress->setLabel(i18n("Unmounting, please wait")+"..");
+            m_progress->setAutoClose(true);
+            m_progress->setAllowCancel(false);
+            m_progress->progressBar()->setTextEnabled(false);
+            m_progress->progressBar()->setTotalSteps(10);
+            m_progress->show();
+            QTimer *t = new QTimer(this);
+            connect(t, SIGNAL(timeout()), SLOT(progressAdvance()));
+            t->start(250, FALSE);
 			DCOPRef mediamanager("kded", "mediamanager");
 			DCOPReply reply = mediamanager.call( "unmount", medium.id());
 			if (reply.isValid())
@@ -139,6 +152,12 @@
 	}
 }
 
+void MountHelper::progressAdvance()
+{
+    if (m_progress->progressBar()->progress() < 9)
+        m_progress->progressBar()->advance(1);
+}
+
 void MountHelper::invokeEject(const QString &device, bool quiet)
 {
 	KProcess *proc = new KProcess(this);
@@ -159,7 +178,7 @@
 	* If eject failed, report the error stored in m_errorStr
 	*/
 	if (proc->normalExit() && proc->exitStatus() == 0) {
-		::exit(0);
+        QTimer::singleShot(1000, this, SLOT(quit()));
 	} else {
 		if (m_errorStr.isEmpty()) {
 			if (m_isCdrom)
diff -Naur kdebase-3.5.8.orig/kioslave/media/mounthelper/kio_media_mounthelper.h kdebase-3.5.8/kioslave/media/mounthelper/kio_media_mounthelper.h
--- kdebase-3.5.8.orig/kioslave/media/mounthelper/kio_media_mounthelper.h	2007-10-08 15:58:36.000000000 +0200
+++ kdebase-3.5.8/kioslave/media/mounthelper/kio_media_mounthelper.h	2007-11-20 14:02:02.000000000 +0100
@@ -2,6 +2,8 @@
    Copyright (c) 2004 Kévin Ottens <ervin ipsquad net>
    Parts of this file are
    Copyright 2003 Waldo Bastian <bastian@kde.org>
+   Small changes for Kubuntu by
+   Copyright 2007 Frode M. Døving <frode@lnix.net>
 
    This library is free software; you can redistribute it and/or
    modify it under the terms of the GNU Library General Public
@@ -23,6 +25,7 @@
 #define _KIO_MEDIA_MOUNTHELPER_H_
 
 #include <kapplication.h>
+#include <kprogress.h>
 #include <qstring.h>
 #include <kio/job.h>
 
@@ -39,9 +42,11 @@
 	void invokeEject(const QString &device, bool quiet=false);
 	QString m_errorStr;
 	QString m_device;
+    KProgressDialog *m_progress;
 	bool m_isCdrom;
 
 private slots:
+    void progressAdvance();
 	void ejectFinished(KProcess* proc);
 	void error();
 };
