diff --git a/imp/js/mailbox.js b/imp/js/mailbox.js
index 01eea4e..f76f8b8 100644
--- a/imp/js/mailbox.js
+++ b/imp/js/mailbox.js
@@ -199,7 +199,7 @@ var ImpMailbox = {
         while (Object.isElement(elt)) {
             if (elt.match('.msgactions A.widget')) {
                 if (elt.hasClassName('moveAction')) {
-                    this._transfer('move_messages');
+                    this._transfer('move_messages_confirm');
                 } else if (elt.hasClassName('copyAction')) {
                     this._transfer('copy_messages');
                 } else if (elt.hasClassName('permdeleteAction')) {
@@ -250,6 +250,9 @@ var ImpMailbox = {
                     this.selectRow(i, $F('checkAll'));
                 }, this);
                 return;
+            case 'btn_return':
+                document.location.href = this.mailbox_url;
+                break;
             }
 
             if (!this.sortlimit &&
diff --git a/imp/js/message.js b/imp/js/message.js
index e7777a7..55e870a 100644
--- a/imp/js/message.js
+++ b/imp/js/message.js
@@ -162,7 +162,7 @@ var ImpMessage = {
         while (Object.isElement(elt)) {
             if (elt.match('.msgactions A.widget')) {
                 if (elt.hasClassName('moveAction')) {
-                    this._transfer('move_message');
+                    this._transfer('move_message_confirm');
                 } else if (elt.hasClassName('copyAction')) {
                     this._transfer('copy_message');
                 } else if (elt.hasClassName('spamAction')) {
@@ -182,6 +182,18 @@ var ImpMessage = {
                 Effect.BlindUp(elt.next(), { duration: 0.2, queue: { position: 'end', scope: 'showquote', limit: 2 } });
             }
 
+            id = elt.readAttribute('id');
+            if (!id) {
+                elt = elt.up();
+                continue;
+            }
+
+            switch (id) {
+            case 'btn_return':
+                document.location.href = this.message_url;
+                break;
+            }
+
             elt = elt.up();
         }
     }
diff --git a/imp/mailbox.php b/imp/mailbox.php
index 8699965..ab1e341 100644
--- a/imp/mailbox.php
+++ b/imp/mailbox.php
@@ -41,6 +41,10 @@ function _outputSummaries($msgs)
 require_once dirname(__FILE__) . '/lib/Application.php';
 new IMP_Application(array('init' => true));
 
+Horde::addScriptFile('effects.js', 'horde', true);
+Horde::addScriptFile('redbox.js', 'horde', true);
+Horde::addScriptFile('mailbox.js', 'imp', true);
+
 /* Call the mailbox redirection hook, if requested. */
 try {
     $redirect = Horde::callHook('mbox_redirect', array($imp_mbox['mailbox']), 'imp');
@@ -151,6 +155,63 @@ case 'undelete_messages':
     }
     break;
 
+case 'move_messages_confirm':
+    if (!empty($indices) && !empty($targetMbox)) {
+        if (($conf['tasklist']['use_tasklist'] &&
+            (strpos($targetMbox, '_tasklist_') === 0)) ||
+            ($conf['notepad']['use_notepad'] &&
+            (strpos($targetMbox, '_notepad_') === 0))) {
+
+            $messagesIds = array();
+            foreach ($indices as $index) {
+                $messageId = explode(IMP::IDX_SEP, $index);
+                $messagesIds[] = $messageId[0];
+            }
+            //Get messages
+            $messages = $imp_imap->ob()->fetch($imp_mbox['mailbox'], array(Horde_Imap_Client::FETCH_ENVELOPE => true), array('ids' => $messagesIds));
+
+            $loop = array();
+            $rowct = 0;
+            foreach ($messages as $messageId => $message) {
+                $data = array(
+                        'class' => (++$rowct % 2) ? 'item0' : 'item1',
+                        'name' => htmlspecialchars($message['envelope']['subject']),
+                        'val' => htmlspecialchars($messageId . IMP::IDX_SEP . $imp_mbox['mailbox'])
+                    );
+                $loop[] = $data;
+            }
+            if (!count($loop)) {
+                break;
+            }
+
+            $messagesUrl = Horde::selfUrl();
+            $charset = Horde_Nls::getCharset();
+            Horde::addInlineScript(array(
+                'ImpMailbox.mailbox_url = ' . Horde_Serialize::serialize($mailbox_imp_url, Horde_Serialize::JSON, $charset)
+            ));
+            $title = _("Move Action - Confirmation");
+            IMP::prepareMenu();
+            require IMP_TEMPLATES . '/common-header.inc';
+            IMP::menu();
+
+            $template = new Horde_Template();
+            $template->setOption('gettext', true);
+            $template->set('messages', $loop);
+            $template->set('messages_url', $messagesUrl);
+            $template->set('targetMbox', $targetMbox);
+            $template->set('mailbox_token', Horde::getRequestToken('imp.mailbox'));
+            echo $template->fetch(IMP_TEMPLATES . '/mailbox/move_confirm.html');
+
+            require $registry->get('templates', 'horde') . '/common-footer.inc';
+            exit;
+        } else {
+            //Moving message inside IMP
+            $actionID = 'move_messages';
+        }
+    } else {
+        break;
+    }
+
 case 'move_messages':
 case 'copy_messages':
     if (!empty($indices) && !empty($targetMbox)) {
@@ -371,10 +432,6 @@ if ($vfolder ||
     $pagetitle = $title = htmlspecialchars($title);
 }
 
-Horde::addScriptFile('effects.js', 'horde', true);
-Horde::addScriptFile('redbox.js', 'horde', true);
-Horde::addScriptFile('mailbox.js', 'imp', true);
-
 /* Handle compose_popup. */
 if ($open_compose_window === false) {
     if (!isset($options)) {
diff --git a/imp/message.php b/imp/message.php
index daecd4a..a83221c 100644
--- a/imp/message.php
+++ b/imp/message.php
@@ -29,6 +29,10 @@ function _moveAfterAction()
 require_once dirname(__FILE__) . '/lib/Application.php';
 new IMP_Application(array('init' => true));
 
+Horde::addScriptFile('effects.js', 'horde', true);
+Horde::addScriptFile('imp.js', 'imp', true);
+Horde::addScriptFile('message.js', 'imp', true);
+
 /* We know we are going to be exclusively dealing with this mailbox, so
  * select it on the IMAP server (saves some STATUS calls). Open R/W to clear
  * the RECENT flag. */
@@ -107,6 +111,54 @@ case 'undelete_message':
     }
     break;
 
+case 'move_message_confirm':
+    if (($targetMbox = Horde_Util::getFormData('targetMbox')) !== null) {
+        if (($conf['tasklist']['use_tasklist'] &&
+            (strpos($targetMbox, '_tasklist_') === 0)) ||
+            ($conf['notepad']['use_notepad'] &&
+            (strpos($targetMbox, '_notepad_') === 0))) {
+
+            $message = $imp_imap->ob()->fetch($imp_mbox['mailbox'], array(Horde_Imap_Client::FETCH_ENVELOPE => true), array('ids' => array($index)));
+            $data = array(
+                        'class' => 'item0',
+                        'name' => htmlspecialchars($message[$index]['envelope']['subject']),
+                        'val' => htmlspecialchars($index)
+                    );
+
+            $messageUrl = Horde::selfUrl();
+            $charset = Horde_Nls::getCharset();
+            $self_link = IMP::generateIMPUrl('message.php', $imp_mbox['mailbox'], $index, $index_array['mailbox'], false);
+            Horde::addInlineScript(array(
+                'ImpMessage.message_url = ' . Horde_Serialize::serialize($self_link, Horde_Serialize::JSON, $charset)
+            ));
+            $title = _("Move Action - Confirmation");
+            IMP::prepareMenu();
+            require IMP_TEMPLATES . '/common-header.inc';
+            IMP::menu();
+
+            $template = new Horde_Template();
+            $template->setOption('gettext', true);
+            $template->set('actionID', 'move_message');
+            $template->set('message', $data);
+            $template->set('message_url', $messageUrl);
+            $template->set('targetMbox', $targetMbox);
+            $template->set('mailbox', htmlspecialchars($imp_mbox['mailbox']));
+            $template->set('thismailbox', htmlspecialchars($mailbox_name));
+            $template->set('start', htmlspecialchars($imp_mailbox->getMessageIndex()));
+            $template->set('index', htmlspecialchars($index));
+            $template->set('message_token', Horde::getRequestToken('imp.message'));
+            echo $template->fetch(IMP_TEMPLATES . '/message/move_confirm.html');
+
+            require $registry->get('templates', 'horde') . '/common-footer.inc';
+            exit;
+        } else {
+            //Moving message inside IMP
+            $actionID = 'move_message';
+        }
+    } else {
+        break;
+    }
+
 case 'move_message':
 case 'copy_message':
     if (($targetMbox = Horde_Util::getFormData('targetMbox')) !== null) {
@@ -713,9 +765,6 @@ $m_template->set('headers', $hdrs);
 $m_template->set('msgtext', $msgtext);
 
 /* Output message page now. */
-Horde::addScriptFile('effects.js', 'horde', true);
-Horde::addScriptFile('imp.js', 'imp', true);
-Horde::addScriptFile('message.js', 'imp', true);
 IMP::prepareMenu();
 require IMP_TEMPLATES . '/common-header.inc';
 if (!empty($conf['maillog']['use_maillog'])) {
diff --git a/imp/templates/mailbox/move_confirm.html b/imp/templates/mailbox/move_confirm.html
new file mode 100644
index 0000000..5787cbc
--- /dev/null
+++ b/imp/templates/mailbox/move_confirm.html
@@ -0,0 +1,27 @@
+<form name="mmanager" method="post" action="<tag:messagesUrl />">
+<input type="hidden" name="actionID" value="move_messages" />
+<input type="hidden" id="mailbox_token" name="mailbox_token" value="<tag:mailbox_token />" />
+<input type="hidden" id="targetMbox" name="targetMbox" value="<tag:targetMbox />" />
+
+<div class="header leftAlign">
+ <gettext>Move Action - Confirmation</gettext>
+</div>
+
+<div class="control leftAlign">
+<gettext>Are you sure you want to move the message(s)?</gettext>
+ <br />
+ <gettext>Some message information might get lost, like message headers, text formatting or attachments!</gettext>
+</div>
+
+<loop:messages>
+<div class="<tag:messages.class />">
+ &nbsp;<label><input type="checkbox" class="checkbox" name="indices[]" value="<tag:messages.val />" checked="checked" /> <tag:messages.name /></label>
+</div>
+</loop:messages>
+
+<div class="control leftAlign">
+ <input type="submit" name="submit" class="button" value="<gettext>Move Messages</gettext>" />&nbsp;
+ <input id="btn_return" type="button" class="button" value="<gettext>Cancel</gettext>" />
+</div>
+
+</form>
diff --git a/imp/templates/message/move_confirm.html b/imp/templates/message/move_confirm.html
new file mode 100644
index 0000000..8bdea86
--- /dev/null
+++ b/imp/templates/message/move_confirm.html
@@ -0,0 +1,30 @@
+<form name="mmanager" method="post" action="<tag:messageUrl />">
+<input type="hidden" name="actionID" value="move_message" />
+<input type="hidden" id="message_token" name="message_token" value="<tag:message_token />" />
+<input type="hidden" id="targetMbox" name="targetMbox" value="<tag:targetMbox />" />
+<input type="hidden" id="mailbox" name="mailbox" value="<tag:mailbox />" />
+<input type="hidden" id="thismailbox" name="thismailbox" value="<tag:thismailbox />" />
+<input type="hidden" id="start" name="start" value="<tag:start />" />
+<input type="hidden" id="index" name="index" value="<tag:index />" />
+
+
+<div class="header leftAlign">
+ <gettext>Move Action - Confirmation</gettext>
+</div>
+
+<div class="control leftAlign">
+<gettext>Are you sure you want to move the message?</gettext>
+ <br />
+ <gettext>Some message information might get lost, like message headers, text formatting or attachments!</gettext>
+</div>
+
+<div class="<tag:message.class />">
+ &nbsp;<label><input type="checkbox" class="checkbox" name="index" value="<tag:message.val />" checked="checked" /> <tag:message.name /></label>
+</div>
+
+<div class="control leftAlign">
+ <input type="submit" name="submit" class="button" value="<gettext>Move Message</gettext>" />&nbsp;
+ <input id="btn_return" type="button" class="button" value="<gettext>Cancel</gettext>" />
+</div>
+
+</form>