Index: scribus/canvasmode_nodeedit.cpp
===================================================================
--- scribus/canvasmode_nodeedit.cpp	(Revision 23527)
+++ scribus/canvasmode_nodeedit.cpp	(Arbeitskopie)
@@ -451,8 +451,12 @@
 			m_doc->nodeEdit.moveClipPoint(currItem, npf);
 		}
 		m_doc->adjustItemSize(currItem, true);
-		if (!m_doc->nodeEdit.isContourLine())
-			currItem->ContourLine.translate(xposOrig - currItem->xPos(), yposOrig - currItem->yPos());
+		if (!m_doc->nodeEdit.isContourLine()) {
+			// Move the contour accordingly in the item's coordinate space
+			QTransform m = QTransform().rotate(-currItem->rotation());
+			QPointF delta = m.map(QPointF(xposOrig, yposOrig)) - m.map(QPointF(currItem->xPos(), currItem->yPos()));
+			currItem->ContourLine.translate(delta.x(), delta.y());
+		}
 		m_doc->regionsChanged()->update(QRectF());
 		if (state)
 			m_doc->nodeEdit.finishTransaction2(currItem, state);
Index: scribus/nodeeditcontext.cpp
===================================================================
--- scribus/nodeeditcontext.cpp	(Revision 23527)
+++ scribus/nodeeditcontext.cpp	(Arbeitskopie)
@@ -351,8 +351,12 @@
 			currItem->PoLine = Clip.copy();
 		currItem->Clip = flattenPath(currItem->PoLine, currItem->Segments);
 	}
-	if (!m_isContourLine)
-		currItem->ContourLine.translate(xposOrig - currItem->xPos(), yposOrig - currItem->yPos());
+	if (!m_isContourLine) {
+		// Move the contour accordingly in the item's coordinate space
+		QTransform m = QTransform().rotate(-currItem->rotation());
+		QPointF delta = m.map(QPointF(xposOrig, yposOrig)) - m.map(QPointF(currItem->xPos(), currItem->yPos()));
+		currItem->ContourLine.translate(delta.x(), delta.y());
+	}
 }
 
 
Index: scribus/ui/nodeeditpalette.cpp
===================================================================
--- scribus/ui/nodeeditpalette.cpp	(Revision 23527)
+++ scribus/ui/nodeeditpalette.cpp	(Arbeitskopie)
@@ -971,9 +971,20 @@
 		EditCont->setChecked(false);
 		ToggleConMode();
 		PageItem *currItem = m_doc->m_Selection->itemAt(0);
-		currItem->setXYPos(xPos, yPos, true);
+
+		// Calculate the difference of the current position and the original
+		// position in the item's coordinate space (which is rotated and translated,
+		// but the translation does not matter for the delta)
+		QTransform m = QTransform().rotate(-currItem->rotation());
+		QPointF delta = m.map(QPointF(xPos, yPos)) - m.map(QPointF(currItem->xPos(), currItem->yPos()));
+		// During operation the image offsets and possibly other values are changed.
+		// To not remember everything we move the clip path to the original position
+		// relative to the current position (in the item's coordinate space).
+		// adjustItemSize will then take care of moving the position and changing
+		// image offsets, etc.
+		currItem->PoLine = itemPath.copy();
+		currItem->PoLine.translate(delta.x(), delta.y());
 		currItem->ContourLine = itemContourPath.copy();
-		currItem->PoLine = itemPath.copy();
 		m_doc->adjustItemSize(currItem);
 		if (currItem->itemType() == PageItem::PathText)
 			currItem->updatePolyClip();
@@ -997,12 +1008,19 @@
 	m_doc->nodeEdit.selNode().clear();
 	m_doc->nodeEdit.setPreviewMode(false);
 	PageItem *currItem = m_doc->m_Selection->itemAt(0);
-	if (EditCont->isChecked())
+
+	// See comment in NodePalette::CancelEdit
+	QTransform m = QTransform().rotate(-currItem->rotation());
+	QPointF delta = m.map(QPointF(xPos, yPos)) - m.map(QPointF(currItem->xPos(), currItem->yPos()));
+	if (EditCont->isChecked()) {
 		currItem->ContourLine = itemContourPath.copy();
-	else
+		currItem->ContourLine.translate(delta.x(), delta.y());
+	} else
 	{
-		currItem->setXYPos(xPos, yPos, true);
-		currItem->PoLine = itemPath.copy();
+		// See comment in NodePalette::CancelEdit
+		currItem->PoLine = itemPath;
+ 		currItem->PoLine.translate(delta.x(), delta.y());
+ 		currItem->ContourLine = itemContourPath;
 		m_doc->adjustItemSize(currItem);
 	}
 	if (currItem->itemType() == PageItem::PathText)
