Index: chordrest.cpp
===================================================================
--- chordrest.cpp	(revision 5289)
+++ chordrest.cpp	(working copy)
@@ -512,7 +512,7 @@
 //   drop
 //---------------------------------------------------------
 
-Element* ChordRest::drop(ScoreView* view, const QPointF& p1, const QPointF& p2, Element* e)
+Element* ChordRest::drop(ScoreView* view, const QPointF& p1, const QPointF& p2, Element* e, Fraction duration)
       {
       Measure* m  = measure();
       switch (e->type()) {
@@ -581,7 +581,7 @@
                   {
                   Note* note = static_cast<Note*>(e);
                   score()->setNoteRest(this, track(), note->pitch(),
-                     Fraction(1, 4), note->headGroup(), AUTO);
+                     duration, note->headGroup(), AUTO);
                   delete e;
                   }
                   break;
Index: chordrest.h
===================================================================
--- chordrest.h	(revision 5289)
+++ chordrest.h	(working copy)
@@ -60,7 +60,7 @@
       ChordRest &operator=(const ChordRest&);
       virtual ElementType type() const = 0;
       virtual QPointF canvasPos() const;      ///< position in canvas coordinates
-      virtual Element* drop(ScoreView*, const QPointF&, const QPointF&, Element*);
+      virtual Element* drop(ScoreView*, const QPointF&, const QPointF&, Element*, Fraction);
 
       Segment* segment() const                   { return (Segment*)parent(); }
       virtual Measure* measure() const           { return (Measure*)(parent()->parent()); }
Index: cmd.cpp
===================================================================
--- cmd.cpp	(revision 5289)
+++ cmd.cpp	(working copy)
@@ -2300,27 +2300,15 @@
             docName = "--";
             QDomElement e = doc.documentElement();
             QPointF dragOffset;
-            ElementType type    = Element::readType(e, &dragOffset);
+            Fraction duration(1, 4);
+            ElementType type    = Element::readType(e, &dragOffset, &duration);
             if (type != INVALID) {
                   Element* el = Element::create(type, this);
                   if (el) {
                         el->read(e);
                         addRefresh(selection().element()->abbox());   // layout() ?!
-#if 0
-                        if (el->type() == NOTE) {
-                              Note* n = static_cast<Note*>(el);
-                              if (!styleB(ST_concertPitch) && part->transpose().chromatic) {
-                                    int npitch;
-                                    int ntpc;
-                                    Interval interval = part->transpose();
-                                    interval.flip();
-                                    transposeInterval(n->pitch(), n->tpc(), &npitch, &ntpc,
-                                      interval, true);
-                                    n->setPitch(npitch, ntpc);
-                                    }
-                              }
-#endif
-                        selection().element()->drop(view, QPointF(), QPointF(), el);
+
+                        selection().element()->drop(view, QPointF(), QPointF(), el, duration);
                         if (selection().element())
                               addRefresh(selection().element()->abbox());
                         }
Index: element.cpp
===================================================================
--- element.cpp	(revision 5289)
+++ element.cpp	(working copy)
@@ -1128,10 +1128,13 @@
 
 QByteArray Element::mimeData(const QPointF& dragOffset) const
       {
-      QBuffer buffer;
+    const Element *e = this;
+    QBuffer buffer;
       buffer.open(QIODevice::WriteOnly);
       Xml xml(&buffer);
       xml.stag("Element");
+      if (e->type() == NOTE)
+            xml.fTag("duration", static_cast<const Note*>(e)->chord()->fraction());
       if (!dragOffset.isNull())
             xml.tag("dragOffset", dragOffset);
       write(xml);
@@ -1145,13 +1148,15 @@
 //    return -1 if no valid type found
 //---------------------------------------------------------
 
-ElementType Element::readType(QDomElement& e, QPointF* dragOffset)
+ElementType Element::readType(QDomElement& e, QPointF* dragOffset, Fraction * duration)
       {
       ElementType type = INVALID;
 
       for (e = e.firstChildElement(); !e.isNull(); e = e.nextSiblingElement()) {
             if (e.tagName() == "dragOffset")
                   *dragOffset = readPoint(e);
+            else if (e.tagName() == "duration")
+                  *duration = readFraction(e);
             else if ((type = name2type(e.tagName())) == INVALID) {
                   domError(e);
                   break;
Index: element.h
===================================================================
--- element.h	(revision 5289)
+++ element.h	(working copy)
@@ -22,6 +22,7 @@
 #define __ELEMENT_H__
 
 #include "xml.h"
+#include "al/fraction.h"
 #include "globals.h"
 
 /**
@@ -282,7 +283,7 @@
       QColor color() const            { return _color; }
       QColor curColor() const;
       void setColor(const QColor& c)  { _color = c;    }
-      static ElementType readType(QDomElement& node, QPointF*);
+      static ElementType readType(QDomElement& node, QPointF*, Fraction* duration);
 
       virtual QByteArray mimeData(const QPointF&) const;
 /**
@@ -301,6 +302,7 @@
  Reimplemented by elements that accept drops.
 */
       virtual Element* drop(ScoreView*, const QPointF&, const QPointF&, Element*) { return 0;}
+      virtual Element* drop(ScoreView*, const QPointF&, const QPointF&, Element*, Fraction) { return 0;}
 
 /**
  Return a name for a \a subtype. Used for outputting xml data.
Index: keyedit.cpp
===================================================================
--- keyedit.cpp	(revision 5289)
+++ keyedit.cpp	(working copy)
@@ -201,7 +201,8 @@
             QDomElement e = doc.documentElement();
 
             QPointF dragOffset;
-            ElementType type = Element::readType(e, &dragOffset);
+            Fraction duration;  // dummy
+            ElementType type = Element::readType(e, &dragOffset, &duration);
             if (type != ACCIDENTAL)
                   return;
 
Index: note.cpp
===================================================================
--- note.cpp	(revision 5289)
+++ note.cpp	(working copy)
@@ -1116,7 +1116,7 @@
                   break;
 
             default:
-                  return ch->drop(view, p1, p2, e);
+          return ch->drop(view, p1, p2, e, Fraction (1,4));
             }
       return 0;
       }
Index: palette.cpp
===================================================================
--- palette.cpp	(revision 5289)
+++ palette.cpp	(working copy)
@@ -680,7 +680,8 @@
             docName = "--";
             QDomElement el = doc.documentElement();
             QPointF dragOffset;
-            ElementType type = Element::readType(el, &dragOffset);
+            Fraction duration;  // dummy
+            ElementType type = Element::readType(el, &dragOffset, &duration);
 
             if (type == IMAGE) {
                   // look ahead for image type
Index: rest.cpp
===================================================================
--- rest.cpp	(revision 5289)
+++ rest.cpp	(working copy)
@@ -254,7 +254,7 @@
                   score()->undoAddElement(e);
                   return e;
             default:
-                  return ChordRest::drop(view, p1, p2, e);
+          return ChordRest::drop(view, p1, p2, e, Fraction (1,4));
             }
       return 0;
       }
Index: scoreview.cpp
===================================================================
--- scoreview.cpp	(revision 5289)
+++ scoreview.cpp	(working copy)
@@ -1518,7 +1518,8 @@
             QDomElement e = doc.documentElement();
 
             dragOffset = QPoint();
-            ElementType type = Element::readType(e, &dragOffset);
+            Fraction duration;  // dummy
+            ElementType type = Element::readType(e, &dragOffset, &duration);
 
             Element* el = 0;
             switch(type) {
Index: xml.cpp
===================================================================
--- xml.cpp	(revision 5289)
+++ xml.cpp	(working copy)
@@ -110,3 +110,24 @@
       return AUTO_VAL;
       }
 
+//---------------------------------------------------------
+//   fTag
+//---------------------------------------------------------
+
+void Xml::fTag(const char* name, const Fraction& f)
+      {
+      tagE(QString("%1 z=\"%2\" n=\"%3\"").arg(name).arg(f.numerator()).arg(f.denominator()));
+      }
+
+//---------------------------------------------------------
+//   readFraction
+//---------------------------------------------------------
+
+Fraction readFraction(const QDomElement& e)
+      {
+      qreal z = e.attribute("z", "0.0").toDouble();
+      qreal n = e.attribute("n", "0.0").toDouble();
+      return Fraction(z, n);
+      }
+
+
Index: xml.h
===================================================================
--- xml.h	(revision 5289)
+++ xml.h	(working copy)
@@ -23,6 +23,7 @@
 
 #include "globals.h"
 #include "spatium.h"
+#include "al/fraction.h"
 #include "al/xml.h"
 
 using AL::Prop;
@@ -55,10 +56,12 @@
 
       void sTag(const char* name, Spatium sp) { AL::Xml::tag(name, QVariant(sp.val())); }
       void pTag(const char* name, Placement);
+      void fTag(const char* name, const Fraction&);
       void valueTypeTag(const char* name, ValueType t);
       };
 
 extern Placement readPlacement(QDomElement e);
+extern Fraction  readFraction(const QDomElement&);
 extern ValueType readValueType(QDomElement e);
 #endif
 
