Index: AnnotationDialog/Dialog.cpp
===================================================================
--- AnnotationDialog/Dialog.cpp	(revision 671896)
+++ AnnotationDialog/Dialog.cpp	(working copy)
@@ -159,6 +159,12 @@
     _rotateRight->setIconSet( KGlobal::iconLoader()->loadIconSet( QString::fromLatin1( "rotate_cw" ), KIcon::Desktop, 22 ) );
     _rotateRight->setFixedWidth( 40 );
 
+    _copyPreviousBut = new QPushButton( top2 );
+    lay6->addWidget( _copyPreviousBut );
+    _copyPreviousBut->setIconSet( KGlobal::iconLoader()->loadIconSet( QString::fromLatin1( "legalmoves" ), KIcon::Desktop, 22 ) );
+    _copyPreviousBut->setFixedWidth( 40 );
+    connect( _copyPreviousBut, SIGNAL( clicked() ), this, SLOT( slotCopyPrevious() ) );
+    
     lay6->addStretch( 1 );
     _delBut = new QPushButton( top2 );
     _delBut->setPixmap( KGlobal::iconLoader()->loadIcon( QString::fromLatin1( "editdelete" ), KIcon::Desktop, 22 ) );
@@ -328,6 +334,33 @@
     }
 }
 
+void AnnotationDialog::Dialog::copyFromPosition(int index)
+{
+    load();
+
+    DB::ImageInfo& old_info = _editList[ index ];
+    DB::ImageInfo& info = _editList[ _current ];
+
+    // FIXME: be more inteligent and overwrite only default values
+    /*_imageLabel->setText( old_info.label() );
+    info.setLabel( old_info.label() );
+    _description->setText( old_info.description() );
+    info.setDescription( old_info.description() );*/
+    
+    for( QPtrListIterator<ListSelect> it( _optionList ); *it; ++it ) {
+        (*it)->setSelection( old_info.itemsOfCategory( (*it)->category() ) );
+    }
+}
+
+void AnnotationDialog::Dialog::slotCopyPrevious()
+{
+    if ( _setup != InputSingleImageConfigMode )
+        return;
+    if ( _current == 0 )
+        return;
+    copyFromPosition( _current - 1 );
+}
+
 void AnnotationDialog::Dialog::load()
 {
     DB::ImageInfo& info = _editList[ _current ];
@@ -357,6 +390,7 @@
 
     _nextBut->setEnabled( _current != (int)_origList.count()-1 );
     _prevBut->setEnabled( _current != 0 );
+    _copyPreviousBut->setEnabled( _current != 0 );
 
     _preview->setImage( info );
 
@@ -429,6 +463,7 @@
 
         _prevBut->setEnabled( false );
         _nextBut->setEnabled( false );
+        _copyPreviousBut->setEnabled( false );
     }
 
     _thumbnailShouldReload = false;
@@ -493,6 +528,7 @@
     }
 
     _delBut->setEnabled( _setup == InputSingleImageConfigMode );
+    _copyPreviousBut->setEnabled( _setup == InputSingleImageConfigMode );
 
     for( QPtrListIterator<ListSelect> it( _optionList ); *it; ++it )
         (*it)->setMode( _setup );
@@ -663,7 +699,7 @@
 void AnnotationDialog::Dialog::reject()
 {
     if ( hasChanges() ) {
-        int code =  KMessageBox::questionYesNo( this, i18n("<p>Changes made to current item, really cancel?</p>") );
+        int code =  KMessageBox::questionYesNo( this, i18n("<p>Some items were changed. Do you really want to undo all recent edits for each affected image?</p>") );
         if ( code == KMessageBox::No )
             return;
     }
@@ -931,6 +967,9 @@
     new KAction( i18n("Delete"), CTRL+Key_Delete, this, SLOT( slotDeleteImage() ),
                  _actions, "annotationdialog-delete-image" );
 
+    new KAction( i18n("Copy tags from previous image"), CTRL+Key_Insert, this, SLOT( slotCopyPrevious() ),
+                 _actions, "annotationdialog-copy-previous");
+
     new KAction( i18n("Rotate Left"), 0, this, SLOT( rotateLeft() ), _actions, "annotationdialog-rotate-left" );
     new KAction( i18n("Rotate Right"), 0, this, SLOT( rotateRight() ), _actions, "annotationdialog-rotate-right" );
 
Index: AnnotationDialog/Dialog.h
===================================================================
--- AnnotationDialog/Dialog.h	(revision 671896)
+++ AnnotationDialog/Dialog.h	(working copy)
@@ -80,9 +80,11 @@
     void slotDeleteImage();
     void slotResetLayout();
     void slotStartDateChanged( const DB::ImageDate& );
+    void slotCopyPrevious();
 
 protected:
     void load();
+    void copyFromPosition(int);
     void writeToInfo();
     void setup();
     void loadInfo( const DB::ImageSearchInfo& );
@@ -132,6 +134,7 @@
     QPushButton* _rotateLeft;
     QPushButton* _rotateRight;
     QPushButton* _delBut;
+    QPushButton* _copyPreviousBut;
     Editor* _description;
     KTimeWidget* _time;
     QPushButton* _addTime;
