diff --git a/Scribus/scribus/canvasmode_create.cpp b/Scribus/scribus/canvasmode_create.cpp
index 3bc916f..8bbd4f7 100644
--- a/Scribus/scribus/canvasmode_create.cpp
+++ b/Scribus/scribus/canvasmode_create.cpp
@@ -300,6 +300,10 @@ void CreateMode::mouseMoveEvent(QMouseEvent *m)
 				double ny = np2.y();
 				m_doc->ApplyGuides(&nx, &ny);
 				m_doc->ApplyGuides(&nx, &ny,true);
+				if(nx!=np2.x())
+					xSnap = nx * m_canvas->scale();
+				if(ny!=np2.y())
+					ySnap = ny * m_canvas->scale();
 				// #8959 : suppress qRound here as this prevent drawing line with angle constrain
 				// precisely and does not allow to stick precisely to grid or guides
 				newX = /*qRound(*/nx/*)*/;
diff --git a/Scribus/scribus/canvasmode_drawcalligraphic.cpp b/Scribus/scribus/canvasmode_drawcalligraphic.cpp
index 22e35d5..8df73f2 100644
--- a/Scribus/scribus/canvasmode_drawcalligraphic.cpp
+++ b/Scribus/scribus/canvasmode_drawcalligraphic.cpp
@@ -242,7 +242,9 @@ void CalligraphicMode::mouseReleaseEvent(QMouseEvent *m)
 	{
 		if (RecordP.size() > 1)
 		{
-			UndoTransaction createTransaction(UndoManager::instance()->beginTransaction());
+			UndoTransaction *createTransaction = NULL;
+			if(UndoManager::undoEnabled())
+				createTransaction = new UndoTransaction(UndoManager::instance()->beginTransaction());
 			uint z = m_doc->itemAdd(PageItem::Polygon, PageItem::Unspecified, Mxp, Myp, 1, 1, m_doc->itemToolPrefs().calligrapicPenLineWidth, m_doc->itemToolPrefs().calligrapicPenFillColor, m_doc->itemToolPrefs().calligrapicPenLineColor, true);
 			currItem = m_doc->Items->at(z);
 			currItem->PoLine.resize(0);
@@ -283,7 +285,12 @@ void CalligraphicMode::mouseReleaseEvent(QMouseEvent *m)
 			QString targetName = Um::ScratchSpace;
 			if (currItem->OwnPage > -1)
 				targetName = m_doc->Pages->at(currItem->OwnPage)->getUName();
-			createTransaction.commit(targetName, currItem->getUPixmap(), Um::Create + " " + currItem->getUName(),  "", Um::ICreate);
+			if(createTransaction)
+			{
+				createTransaction->commit(targetName, currItem->getUPixmap(), Um::Create + " " + currItem->getUName(),  "", Um::ICreate);
+				delete createTransaction;
+				createTransaction = NULL;
+			}
 			//FIXME	
 			m_canvas->m_viewMode.operItemResizing = false;
 			m_doc->changed();
diff --git a/Scribus/scribus/canvasmode_editarc.cpp b/Scribus/scribus/canvasmode_editarc.cpp
index 3956a9c..7278c35 100644
--- a/Scribus/scribus/canvasmode_editarc.cpp
+++ b/Scribus/scribus/canvasmode_editarc.cpp
@@ -227,19 +227,8 @@ void CanvasMode_EditArc::applyValues(double start, double end, double height, do
 	QRectF upRect2 = QRectF(mPoint.x() - item->arcWidth / 2.0, mPoint.y() - item->arcHeight / 2.0, item->arcWidth, item->arcHeight);
 	upRect = upRect2.united(upRect);
 	upRect.translate(currItem->xPos(), currItem->yPos());
-	ScItemState<QPair<FPointArray, FPointArray> > *ss = new ScItemState<QPair<FPointArray, FPointArray> >(Um::EditArc,"",Um::IPolygon);
-	FPointArray old = item->PoLine;
-	ss->set("ARC","arc");
-	ss->set("OLD_WIDTH",item->arcWidth);
-	ss->set("NEW_WIDTH",width);
-	ss->set("OLD_XPOS",item->xPos());
-	ss->set("OLD_YPOS",item->yPos());
-	ss->set("OLD_HEIGHT",item->arcHeight);
-	ss->set("NEW_HEIGHT",height);
-	item->arcWidth = width;
-	item->arcHeight = height;
 	QTransform bb;
-	bb.scale(item->arcHeight / item->arcWidth, 1.0);
+	bb.scale(height / width, 1.0);
 	QLineF inp = QLineF(QPointF(width / 2.0, height / 2.0), QPointF(width, height / 2.0));
 	inp.setAngle(start);
 	QLineF res = bb.map(inp);
@@ -252,22 +241,34 @@ void CanvasMode_EditArc::applyValues(double start, double end, double height, do
 		nSweep += 360;
 	QPainterPath pp;
 	pp.moveTo(mPoint);
-	pp.arcTo(QRectF(mPoint.x() - item->arcWidth / 2.0, mPoint.y() - item->arcHeight / 2.0, item->arcWidth, item->arcHeight), startAngle, nSweep);
+	pp.arcTo(QRectF(mPoint.x() - width / 2.0, mPoint.y() - height / 2.0, width, height), startAngle, nSweep);
 	pp.closeSubpath();
 	currItem->PoLine.fromQPainterPath(pp);
-	undoManager->setUndoEnabled(false);
 	m_doc->AdjustItemSize(currItem);
-	undoManager->setUndoEnabled(true);
-	ss->set("OLD_START",item->arcStartAngle);
-	ss->set("NEW_START",startAngle);
-	ss->set("OLD_SWEEP",item->arcSweepAngle);
-	ss->set("NEW_SWEEP",nSweep);
-	ss->setItem(qMakePair(old,item->PoLine));
+	if(UndoManager::undoEnabled())
+	{
+		ScItemState<QPair<FPointArray, FPointArray> > *ss = new ScItemState<QPair<FPointArray, FPointArray> >(Um::EditArc,"",Um::IPolygon);
+		FPointArray old = item->PoLine;
+		ss->set("ARC","arc");
+		ss->set("OLD_WIDTH",item->arcWidth);
+		ss->set("NEW_WIDTH",width);
+		ss->set("OLD_XPOS",item->xPos());
+		ss->set("OLD_YPOS",item->yPos());
+		ss->set("OLD_HEIGHT",item->arcHeight);
+		ss->set("NEW_HEIGHT",height);
+		ss->set("OLD_START",item->arcStartAngle);
+		ss->set("NEW_START",startAngle);
+		ss->set("OLD_SWEEP",item->arcSweepAngle);
+		ss->set("NEW_SWEEP",nSweep);
+		ss->setItem(qMakePair(old,item->PoLine));
+		ss->set("NEW_XPOS",item->xPos());
+		ss->set("NEW_YPOS",item->yPos());
+		undoManager->action(currItem,ss);
+	}
 	item->arcStartAngle = startAngle;
 	item->arcSweepAngle = nSweep;
-	ss->set("NEW_XPOS",item->xPos());
-	ss->set("NEW_YPOS",item->yPos());
-	undoManager->action(currItem,ss);
+	item->arcWidth = width;
+	item->arcHeight = height;
 	startPoint = currItem->PoLine.pointQF(2);
 	endPoint = currItem->PoLine.pointQF(currItem->PoLine.size() - 4);
 	centerPoint = currItem->PoLine.pointQF(0);
diff --git a/Scribus/scribus/canvasmode_editgradient.cpp b/Scribus/scribus/canvasmode_editgradient.cpp
index 9281c65..b47715a 100644
--- a/Scribus/scribus/canvasmode_editgradient.cpp
+++ b/Scribus/scribus/canvasmode_editgradient.cpp
@@ -932,7 +932,7 @@ void CanvasMode_EditGradient::mouseReleaseEvent(QMouseEvent *m)
 	m_canvas->resetRenderMode();
 	m->accept();
 	PageItem* currItem = m_doc->m_Selection->itemAt(0);
-	if(m_gradientPoint != noPointDefined){
+	if(m_gradientPoint != noPointDefined && UndoManager::undoEnabled()){
 		QList<FPoint> tmp;
 		ScItemState<QList<FPoint> > *is = new ScItemState<QList<FPoint> >(Um::GradPos + "i");
 		is->set("GRAD_POS","grad_pos");
diff --git a/Scribus/scribus/canvasmode_editmeshgradient.cpp b/Scribus/scribus/canvasmode_editmeshgradient.cpp
index 0ce79eb..ab97fde 100644
--- a/Scribus/scribus/canvasmode_editmeshgradient.cpp
+++ b/Scribus/scribus/canvasmode_editmeshgradient.cpp
@@ -972,7 +972,7 @@ void CanvasMode_EditMeshGradient::mouseReleaseEvent(QMouseEvent *m)
 	m_canvas->resetRenderMode();
 	m->accept();
 	PageItem *currItem = m_doc->m_Selection->itemAt(0);
-	if (currItem->selectedMeshPointX >=0 && currItem->selectedMeshPointY >=0)
+	if (currItem->selectedMeshPointX >=0 && currItem->selectedMeshPointY >=0 && UndoManager::undoEnabled())
 	{
 		ScItemState<QPair<meshPoint,meshPoint> > *ss = new ScItemState<QPair<meshPoint,meshPoint> >(Um::GradPos);
 		ss->set("MOVE_MESH_PATCH","move_mesh_patch");
diff --git a/Scribus/scribus/canvasmode_editmeshpatch.cpp b/Scribus/scribus/canvasmode_editmeshpatch.cpp
index ae49e94..4dc53f7 100644
--- a/Scribus/scribus/canvasmode_editmeshpatch.cpp
+++ b/Scribus/scribus/canvasmode_editmeshpatch.cpp
@@ -972,7 +972,7 @@ void CanvasMode_EditMeshPatch::mouseReleaseEvent(QMouseEvent *m)
 	m_canvas->m_viewMode.m_MouseButtonPressed = false;
 	m_canvas->resetRenderMode();
 	m->accept();
-	if (m_view->editStrokeGradient != 11 && currItem->selectedMeshPointX >=0 && m_patchPoint != noPointDefined)
+	if (m_view->editStrokeGradient != 11 && currItem->selectedMeshPointX >=0 && m_patchPoint != noPointDefined && UndoManager::undoEnabled())
 	{
 		ScItemState<QPair<meshPoint,meshPoint> > *ss = new ScItemState<QPair<meshPoint,meshPoint> >(Um::GradPos);
 		ss->set("MOVE_MESH_PATCH","move_mesh_patch");
diff --git a/Scribus/scribus/canvasmode_editpolygon.cpp b/Scribus/scribus/canvasmode_editpolygon.cpp
index dc3829e..7d17bc8 100644
--- a/Scribus/scribus/canvasmode_editpolygon.cpp
+++ b/Scribus/scribus/canvasmode_editpolygon.cpp
@@ -251,23 +251,26 @@ void CanvasMode_EditPolygon::applyValues(int polyC, double polyF, bool polyUseCF
 	polyCurvature = polyCur;
 	polyInnerRot = polyIRot;
 	polyOuterCurvature = polyOCur;
-	SimpleState *ss = new SimpleState(Um::EditPolygon,"",Um::IPolygon);
-	ss->set("POLYGON","polygon");
-	ss->set("NEW_CORNER",polyC);
-	ss->set("NEW_USEFACTOR",polyUseCF);
-	ss->set("NEW_FACTOR",polyFactor);
-	ss->set("NEW_ROTATION",polyRotation);
-	ss->set("NEW_CURV",polyCurvature);
-	ss->set("NEW_INNER",polyInnerRot);
-	ss->set("NEW_OUTER",polyOuterCurvature);
-	ss->set("OLD_CORNER",item->polyCorners);
-	ss->set("OLD_USEFACTOR",item->polyUseFactor);
-	ss->set("OLD_FACTOR",item->polyFactor);
-	ss->set("OLD_ROTATION",item->polyRotation);
-	ss->set("OLD_CURV",item->polyCurvature);
-	ss->set("OLD_INNER",item->polyInnerRot);
-	ss->set("OLD_OUTER",item->polyOuterCurvature);
-	undoManager->action(currItem,ss);
+	if(UndoManager::undoEnabled())
+	{
+		SimpleState *ss = new SimpleState(Um::EditPolygon,"",Um::IPolygon);
+		ss->set("POLYGON","polygon");
+		ss->set("NEW_CORNER",polyC);
+		ss->set("NEW_USEFACTOR",polyUseCF);
+		ss->set("NEW_FACTOR",polyFactor);
+		ss->set("NEW_ROTATION",polyRotation);
+		ss->set("NEW_CURV",polyCurvature);
+		ss->set("NEW_INNER",polyInnerRot);
+		ss->set("NEW_OUTER",polyOuterCurvature);
+		ss->set("OLD_CORNER",item->polyCorners);
+		ss->set("OLD_USEFACTOR",item->polyUseFactor);
+		ss->set("OLD_FACTOR",item->polyFactor);
+		ss->set("OLD_ROTATION",item->polyRotation);
+		ss->set("OLD_CURV",item->polyCurvature);
+		ss->set("OLD_INNER",item->polyInnerRot);
+		ss->set("OLD_OUTER",item->polyOuterCurvature);
+		undoManager->action(currItem,ss);
+	}
 	item->polyCorners = polyC;
 	item->polyUseFactor = polyUseCF;
 	item->polyFactor = polyFactor;
@@ -453,7 +456,7 @@ void CanvasMode_EditPolygon::mousePressEvent(QMouseEvent *m)
 	}
 	else
 		m_polygonPoint = noPointDefined;
-	if(m_polygonPoint != noPointDefined)
+	if(m_polygonPoint != noPointDefined && UndoManager::undoEnabled())
 		trans = new UndoTransaction(undoManager->beginTransaction(Um::Polygon,Um::IPolygon,Um::EditPolygon,"",Um::IPolygon));
 	qApp->changeOverrideCursor(QCursor(Qt::CrossCursor));
 	QPainterPath path = itemMatrix.map(RegularPolygonPath(currItem->width(), currItem->height(), polyCorners, polyUseFactor, polyFactor, polyRotation, polyCurvature, polyInnerRot, polyOuterCurvature));
diff --git a/Scribus/scribus/canvasmode_nodeedit.cpp b/Scribus/scribus/canvasmode_nodeedit.cpp
index 6a64aa4..e229db2 100644
--- a/Scribus/scribus/canvasmode_nodeedit.cpp
+++ b/Scribus/scribus/canvasmode_nodeedit.cpp
@@ -459,10 +459,7 @@ void CanvasMode_NodeEdit::mouseReleaseEvent(QMouseEvent *m)
 			}
 			m_doc->nodeEdit.moveClipPoint(currItem, npf);
 		}
-
-		undoManager->setUndoEnabled(false);
 		m_doc->AdjustItemSize(currItem, true, true);
-		undoManager->setUndoEnabled(true);
 		if (!m_doc->nodeEdit.isContourLine)
 			currItem->ContourLine.translate(xposOrig - currItem->xPos(), yposOrig - currItem->yPos());
 		m_doc->regionsChanged()->update(QRectF());
diff --git a/Scribus/scribus/canvasmode_objimport.cpp b/Scribus/scribus/canvasmode_objimport.cpp
index 211658c..6bae373 100644
--- a/Scribus/scribus/canvasmode_objimport.cpp
+++ b/Scribus/scribus/canvasmode_objimport.cpp
@@ -179,6 +179,7 @@ void CanvasMode_ObjImport::mousePressEvent(QMouseEvent *m)
 		{
 			undoTransaction->commit();
 			delete undoTransaction;
+			undoTransaction = NULL;
 		}
 		// Return to normal mode
 		m_view->requestMode(modeNormal);
diff --git a/Scribus/scribus/guidesmodel.cpp b/Scribus/scribus/guidesmodel.cpp
index 66ba993..3023ff7 100644
--- a/Scribus/scribus/guidesmodel.cpp
+++ b/Scribus/scribus/guidesmodel.cpp
@@ -48,13 +48,13 @@ QVariant GuidesModel::data(const QModelIndex & index, int role) const
 	if (role == Qt::DisplayRole)
 	{
 		QLocale l;
-		return QVariant(l.toString(pts2value(m_values.at(index.row()),
-											  m_docUnitIndex) - rule, 'f',
+		return QVariant(l.toString(pts2value(m_values.at(index.row()) - rule,
+											  m_docUnitIndex), 'f',
 											  m_docUnitDecimals)
 						);
 	}
 	if (role == Qt::EditRole)
-		return pts2value(m_values.at(index.row()), m_docUnitIndex);
+		return pts2value(m_values.at(index.row()) - rule, m_docUnitIndex);
 
 	if (role == Qt::BackgroundColorRole && m_values.at(index.row()) == 0.0)
 		return QVariant(Qt::red);
diff --git a/Scribus/scribus/pageitem_textframe.cpp b/Scribus/scribus/pageitem_textframe.cpp
index 52b2564..ecf4c84 100644
--- a/Scribus/scribus/pageitem_textframe.cpp
+++ b/Scribus/scribus/pageitem_textframe.cpp
@@ -3461,7 +3461,9 @@ void PageItem_TextFrame::handleModeEditKey(QKeyEvent *k, bool& keyRepeat)
 			unicodeInputString = "";
 			if (ok)
 			{
-				UndoTransaction trans(undoManager->beginTransaction(Um::Selection,Um::ITextFrame,Um::InsertText,"",Um::IDelete));
+				UndoTransaction *trans = NULL;
+				if(UndoManager::undoEnabled())
+					trans = new UndoTransaction(undoManager->beginTransaction(Um::Selection,Um::ITextFrame,Um::InsertText,"",Um::IDelete));
 				if (itemText.lengthOfSelection() > 0)
 					deleteSelectedTextFromFrame();
 				if (conv < 31)
@@ -3481,7 +3483,12 @@ void PageItem_TextFrame::handleModeEditKey(QKeyEvent *k, bool& keyRepeat)
 					}
 				}
 				itemText.insertChars(QString(QChar(conv)), true);
-				trans.commit();
+				if(trans)
+				{
+					trans->commit();
+					delete trans;
+					trans = NULL;
+				}
 //				Tinput = true;
 				m_Doc->scMW()->setTBvals(this);
 				update();
diff --git a/Scribus/scribus/plugins/fileloader/scribus134format/scribus134format.cpp b/Scribus/scribus/plugins/fileloader/scribus134format/scribus134format.cpp
index f42ff1b..a62054a 100644
--- a/Scribus/scribus/plugins/fileloader/scribus134format/scribus134format.cpp
+++ b/Scribus/scribus/plugins/fileloader/scribus134format/scribus134format.cpp
@@ -1016,15 +1016,9 @@ void Scribus134Format::readToolSettings(ScribusDoc* doc, ScXmlStreamAttributes&
 	doc->itemToolPrefs().shapeLineColorShade     = attrs.valueAsInt("PENSHADE", 100);
 	doc->itemToolPrefs().lineColor  = attrs.valueAsInt("LINESHADE", 100);
 	doc->itemToolPrefs().shapeFillColorShade      = attrs.valueAsInt("BRUSHSHADE", 100);
-	doc->opToolPrefs().magMin      = attrs.valueAsInt("MAGMIN", 1);
-	doc->opToolPrefs().magMax      = attrs.valueAsInt("MAGMAX", 3200);
-	doc->opToolPrefs().magStep     = attrs.valueAsInt("MAGSTEP", 125);
 	doc->opToolPrefs().dispX       = attrs.valueAsDouble("dispX", 10.0);
 	doc->opToolPrefs().dispY       = attrs.valueAsDouble("dispY", 10.0);
 	doc->opToolPrefs().constrain   = attrs.valueAsDouble("constrain", 15.0);
-	//CB Reset doc zoom step value to 200% instead of old values.
-	if (doc->opToolPrefs().magStep <= 100)
-		doc->opToolPrefs().magStep = 125;
 	doc->itemToolPrefs().textTabFillChar = attrs.valueAsString("TabFill","");
 	doc->itemToolPrefs().textTabWidth   = attrs.valueAsDouble("TabWidth", 36.0);
 	if (attrs.hasAttribute("CPICT"))
diff --git a/Scribus/scribus/plugins/fileloader/scribus134format/scribus134format_save.cpp b/Scribus/scribus/plugins/fileloader/scribus134format/scribus134format_save.cpp
index 3dcfda7..5f6300c 100644
--- a/Scribus/scribus/plugins/fileloader/scribus134format/scribus134format_save.cpp
+++ b/Scribus/scribus/plugins/fileloader/scribus134format/scribus134format_save.cpp
@@ -207,9 +207,6 @@ bool Scribus134Format::saveFile(const QString & fileName, const FileFormat & /*
 	docu.writeAttribute("PENSHADE",m_Doc->itemToolPrefs().shapeLineColorShade);
 	docu.writeAttribute("LINESHADE",m_Doc->itemToolPrefs().lineColorShade);
 	docu.writeAttribute("BRUSHSHADE",m_Doc->itemToolPrefs().shapeFillColorShade);
-	docu.writeAttribute("MAGMIN",m_Doc->opToolPrefs().magMin);
-	docu.writeAttribute("MAGMAX",m_Doc->opToolPrefs().magMax);
-	docu.writeAttribute("MAGSTEP",m_Doc->opToolPrefs().magStep);
 	docu.writeAttribute("CPICT",m_Doc->itemToolPrefs().imageFillColor);
 	docu.writeAttribute("PICTSHADE",m_Doc->itemToolPrefs().imageFillColorShade);
 	docu.writeAttribute("PICTSCX",m_Doc->itemToolPrefs().imageScaleX);
diff --git a/Scribus/scribus/plugins/fileloader/scribus13format/scribus13format.cpp b/Scribus/scribus/plugins/fileloader/scribus13format/scribus13format.cpp
index 1dc5f7d..99ef238 100644
--- a/Scribus/scribus/plugins/fileloader/scribus13format/scribus13format.cpp
+++ b/Scribus/scribus/plugins/fileloader/scribus13format/scribus13format.cpp
@@ -400,12 +400,6 @@ bool Scribus13Format::loadFile(const QString & fileName, const FileFormat & /* f
 		m_Doc->itemToolPrefs().shapeLineColorShade    = dc.attribute("PENSHADE", "100").toInt();
 		m_Doc->itemToolPrefs().lineColorShade = dc.attribute("LINESHADE", "100").toInt();
 		m_Doc->itemToolPrefs().shapeFillColorShade     = dc.attribute("BRUSHSHADE", "100").toInt();
-		m_Doc->opToolPrefs().magMin     = dc.attribute("MAGMIN", "1").toInt();
-		m_Doc->opToolPrefs().magMax     = dc.attribute("MAGMAX", "3200").toInt();
-		m_Doc->opToolPrefs().magStep    = dc.attribute("MAGSTEP", "125").toInt();
-		//CB Reset doc zoom step value to 200% instead of old values.
-		if (m_Doc->opToolPrefs().magStep <= 100)
-			m_Doc->opToolPrefs().magStep = 125;
 		m_Doc->itemToolPrefs().textTabFillChar = dc.attribute("TabFill","");
 		m_Doc->itemToolPrefs().textTabWidth   = ScCLocale::toDoubleC(dc.attribute("TabWidth"), 36.0);
 		if (dc.hasAttribute("CPICT"))
diff --git a/Scribus/scribus/plugins/fileloader/scribus150format/scribus150format.cpp b/Scribus/scribus/plugins/fileloader/scribus150format/scribus150format.cpp
index 4a59095..1149088 100644
--- a/Scribus/scribus/plugins/fileloader/scribus150format/scribus150format.cpp
+++ b/Scribus/scribus/plugins/fileloader/scribus150format/scribus150format.cpp
@@ -2126,15 +2126,9 @@ void Scribus150Format::readToolSettings(ScribusDoc* doc, ScXmlStreamAttributes&
 	doc->itemToolPrefs().calligrapicPenAngle = attrs.valueAsDouble("calligrapicPenAngle", 0.0);
 	doc->itemToolPrefs().calligrapicPenWidth = attrs.valueAsDouble("calligrapicPenWidth", 10.0);
 	doc->itemToolPrefs().calligrapicPenStyle = static_cast<Qt::PenStyle>(attrs.valueAsInt("calligrapicPenStyle"));
-	doc->opToolPrefs().magMin      = attrs.valueAsInt("MAGMIN", 1);
-	doc->opToolPrefs().magMax      = attrs.valueAsInt("MAGMAX", 3200);
-	doc->opToolPrefs().magStep     = attrs.valueAsInt("MAGSTEP", 125);
 	doc->opToolPrefs().dispX       = attrs.valueAsDouble("dispX", 10.0);
 	doc->opToolPrefs().dispY       = attrs.valueAsDouble("dispY", 10.0);
 	doc->opToolPrefs().constrain   = attrs.valueAsDouble("constrain", 15.0);
-	//CB Reset doc zoom step value to 200% instead of old values.
-	if (doc->opToolPrefs().magStep <= 100)
-		doc->opToolPrefs().magStep = 125;
 	doc->itemToolPrefs().textTabFillChar = attrs.valueAsString("TabFill","");
 	doc->itemToolPrefs().textTabWidth   = attrs.valueAsDouble("TabWidth", 36.0);
 	if (attrs.hasAttribute("CPICT"))
diff --git a/Scribus/scribus/plugins/fileloader/scribus150format/scribus150format_save.cpp b/Scribus/scribus/plugins/fileloader/scribus150format/scribus150format_save.cpp
index 5b35591..a8d8fb4 100644
--- a/Scribus/scribus/plugins/fileloader/scribus150format/scribus150format_save.cpp
+++ b/Scribus/scribus/plugins/fileloader/scribus150format/scribus150format_save.cpp
@@ -332,9 +332,6 @@ bool Scribus150Format::saveFile(const QString & fileName, const FileFormat & /*
 	docu.writeAttribute("PENSHADE",m_Doc->itemToolPrefs().shapeLineColorShade);
 	docu.writeAttribute("LINESHADE",m_Doc->itemToolPrefs().lineColorShade);
 	docu.writeAttribute("BRUSHSHADE",m_Doc->itemToolPrefs().shapeFillColorShade);
-	docu.writeAttribute("MAGMIN",m_Doc->opToolPrefs().magMin);
-	docu.writeAttribute("MAGMAX",m_Doc->opToolPrefs().magMax);
-	docu.writeAttribute("MAGSTEP",m_Doc->opToolPrefs().magStep);
 	docu.writeAttribute("CPICT",m_Doc->itemToolPrefs().imageFillColor);
 	docu.writeAttribute("PICTSHADE",m_Doc->itemToolPrefs().imageFillColorShade);
 	docu.writeAttribute("CSPICT",m_Doc->itemToolPrefs().imageStrokeColor);
diff --git a/Scribus/scribus/plugins/import/ai/importaiplugin.cpp b/Scribus/scribus/plugins/import/ai/importaiplugin.cpp
index 5522321..30a0981 100644
--- a/Scribus/scribus/plugins/import/ai/importaiplugin.cpp
+++ b/Scribus/scribus/plugins/import/ai/importaiplugin.cpp
@@ -224,40 +224,28 @@ bool ImportAIPlugin::import(QString fileName, int flags)
 
 QImage ImportAIPlugin::readThumbnail(const QString& fileName)
 {
-	bool wasUndo = false;
 	if( fileName.isEmpty() )
 		return QImage();
-	if (UndoManager::undoEnabled())
-	{
-		UndoManager::instance()->setUndoEnabled(false);
-		wasUndo = true;
-	}
+	UndoManager::instance()->setUndoEnabled(false);
 	m_Doc = NULL;
 	AIPlug *dia = new AIPlug(m_Doc, lfCreateThumbnail);
 	Q_CHECK_PTR(dia);
 	QImage ret = dia->readThumbnail(fileName);
-	if (wasUndo)
-		UndoManager::instance()->setUndoEnabled(true);
+	UndoManager::instance()->setUndoEnabled(true);
 	delete dia;
 	return ret;
 }
 
 bool ImportAIPlugin::readColors(const QString& fileName, ColorList &colors)
 {
-	bool wasUndo = false;
 	if( fileName.isEmpty() )
 		return false;
-	if (UndoManager::undoEnabled())
-	{
-		UndoManager::instance()->setUndoEnabled(false);
-		wasUndo = true;
-	}
+	UndoManager::instance()->setUndoEnabled(false);
 	m_Doc = NULL;
 	AIPlug *dia = new AIPlug(m_Doc, lfCreateThumbnail);
 	Q_CHECK_PTR(dia);
 	bool ret = dia->readColors(fileName, colors);
-	if (wasUndo)
-		UndoManager::instance()->setUndoEnabled(true);
+	UndoManager::instance()->setUndoEnabled(true);
 	delete dia;
 	return ret;
 }
diff --git a/Scribus/scribus/plugins/import/cgm/importcgmplugin.cpp b/Scribus/scribus/plugins/import/cgm/importcgmplugin.cpp
index 74885ec..8dbece8 100644
--- a/Scribus/scribus/plugins/import/cgm/importcgmplugin.cpp
+++ b/Scribus/scribus/plugins/import/cgm/importcgmplugin.cpp
@@ -170,17 +170,12 @@ QImage ImportCgmPlugin::readThumbnail(const QString& fileName)
 	bool wasUndo = false;
 	if( fileName.isEmpty() )
 		return QImage();
-	if (UndoManager::undoEnabled())
-	{
-		UndoManager::instance()->setUndoEnabled(false);
-		wasUndo = true;
-	}
+	UndoManager::instance()->setUndoEnabled(false);
 	m_Doc = NULL;
 	CgmPlug *dia = new CgmPlug(m_Doc, lfCreateThumbnail);
 	Q_CHECK_PTR(dia);
 	QImage ret = dia->readThumbnail(fileName);
-	if (wasUndo)
-		UndoManager::instance()->setUndoEnabled(true);
+	UndoManager::instance()->setUndoEnabled(true);
 	delete dia;
 	return ret;
 }
diff --git a/Scribus/scribus/plugins/import/cvg/importcvgplugin.cpp b/Scribus/scribus/plugins/import/cvg/importcvgplugin.cpp
index 75469b8..9ab1bb6 100644
--- a/Scribus/scribus/plugins/import/cvg/importcvgplugin.cpp
+++ b/Scribus/scribus/plugins/import/cvg/importcvgplugin.cpp
@@ -166,20 +166,14 @@ bool ImportCvgPlugin::import(QString fileName, int flags)
 
 QImage ImportCvgPlugin::readThumbnail(const QString& fileName)
 {
-	bool wasUndo = false;
 	if( fileName.isEmpty() )
 		return QImage();
-	if (UndoManager::undoEnabled())
-	{
-		UndoManager::instance()->setUndoEnabled(false);
-		wasUndo = true;
-	}
+	UndoManager::instance()->setUndoEnabled(false);
 	m_Doc = NULL;
 	CvgPlug *dia = new CvgPlug(m_Doc, lfCreateThumbnail);
 	Q_CHECK_PTR(dia);
 	QImage ret = dia->readThumbnail(fileName);
-	if (wasUndo)
-		UndoManager::instance()->setUndoEnabled(true);
+	UndoManager::instance()->setUndoEnabled(true);
 	delete dia;
 	return ret;
 }
diff --git a/Scribus/scribus/plugins/import/drw/importdrwplugin.cpp b/Scribus/scribus/plugins/import/drw/importdrwplugin.cpp
index 59c0493..ebd4d94 100644
--- a/Scribus/scribus/plugins/import/drw/importdrwplugin.cpp
+++ b/Scribus/scribus/plugins/import/drw/importdrwplugin.cpp
@@ -168,20 +168,14 @@ bool ImportDrwPlugin::import(QString fileName, int flags)
 
 QImage ImportDrwPlugin::readThumbnail(const QString& fileName)
 {
-	bool wasUndo = false;
 	if( fileName.isEmpty() )
 		return QImage();
-	if (UndoManager::undoEnabled())
-	{
-		UndoManager::instance()->setUndoEnabled(false);
-		wasUndo = true;
-	}
+	UndoManager::instance()->setUndoEnabled(false);
 	m_Doc = NULL;
 	DrwPlug *dia = new DrwPlug(m_Doc, lfCreateThumbnail);
 	Q_CHECK_PTR(dia);
 	QImage ret = dia->readThumbnail(fileName);
-	if (wasUndo)
-		UndoManager::instance()->setUndoEnabled(true);
+	UndoManager::instance()->setUndoEnabled(true);
 	delete dia;
 	return ret;
 }
diff --git a/Scribus/scribus/plugins/import/idml/importidmlplugin.cpp b/Scribus/scribus/plugins/import/idml/importidmlplugin.cpp
index 09079d8..ed12bad 100644
--- a/Scribus/scribus/plugins/import/idml/importidmlplugin.cpp
+++ b/Scribus/scribus/plugins/import/idml/importidmlplugin.cpp
@@ -183,40 +183,28 @@ bool ImportIdmlPlugin::import(QString fileName, int flags)
 
 QImage ImportIdmlPlugin::readThumbnail(const QString& fileName)
 {
-	bool wasUndo = false;
 	if( fileName.isEmpty() )
 		return QImage();
-	if (UndoManager::undoEnabled())
-	{
-		UndoManager::instance()->setUndoEnabled(false);
-		wasUndo = true;
-	}
+	UndoManager::instance()->setUndoEnabled(false);
 	m_Doc = NULL;
 	IdmlPlug *dia = new IdmlPlug(m_Doc, lfCreateThumbnail);
 	Q_CHECK_PTR(dia);
 	QImage ret = dia->readThumbnail(fileName);
-	if (wasUndo)
-		UndoManager::instance()->setUndoEnabled(true);
+	UndoManager::instance()->setUndoEnabled(true);
 	delete dia;
 	return ret;
 }
 
 bool ImportIdmlPlugin::readColors(const QString& fileName, ColorList &colors)
 {
-	bool wasUndo = false;
 	if( fileName.isEmpty() )
 		return false;
-	if (UndoManager::undoEnabled())
-	{
-		UndoManager::instance()->setUndoEnabled(false);
-		wasUndo = true;
-	}
+	UndoManager::instance()->setUndoEnabled(false);
 	m_Doc = NULL;
 	IdmlPlug *dia = new IdmlPlug(m_Doc, lfCreateThumbnail);
 	Q_CHECK_PTR(dia);
 	bool ret = dia->readColors(fileName, colors);
-	if (wasUndo)
-		UndoManager::instance()->setUndoEnabled(true);
+	UndoManager::instance()->setUndoEnabled(true);
 	delete dia;
 	return ret;
 }
diff --git a/Scribus/scribus/plugins/import/oodraw/oodrawimp.cpp b/Scribus/scribus/plugins/import/oodraw/oodrawimp.cpp
index a86ae58..d1f0237 100644
--- a/Scribus/scribus/plugins/import/oodraw/oodrawimp.cpp
+++ b/Scribus/scribus/plugins/import/oodraw/oodrawimp.cpp
@@ -220,20 +220,14 @@ bool OODrawImportPlugin::import(QString fileName, int flags)
 
 QImage OODrawImportPlugin::readThumbnail(const QString& fileName)
 {
-	bool wasUndo = false;
 	if( fileName.isEmpty() )
 		return QImage();
-	if (UndoManager::undoEnabled())
-	{
-		UndoManager::instance()->setUndoEnabled(false);
-		wasUndo = true;
-	}
+	UndoManager::instance()->setUndoEnabled(false);
 	m_Doc = NULL;
 	OODPlug *dia = new OODPlug(m_Doc);
 	Q_CHECK_PTR(dia);
 	QImage ret = dia->readThumbnail(fileName);
-	if (wasUndo)
-		UndoManager::instance()->setUndoEnabled(true);
+	UndoManager::instance()->setUndoEnabled(true);
 	delete dia;
 	return ret;
 }
diff --git a/Scribus/scribus/plugins/import/pct/importpctplugin.cpp b/Scribus/scribus/plugins/import/pct/importpctplugin.cpp
index f4a43b7..1e91c6d 100644
--- a/Scribus/scribus/plugins/import/pct/importpctplugin.cpp
+++ b/Scribus/scribus/plugins/import/pct/importpctplugin.cpp
@@ -162,17 +162,12 @@ QImage ImportPctPlugin::readThumbnail(const QString& fileName)
 	bool wasUndo = false;
 	if( fileName.isEmpty() )
 		return QImage();
-	if (UndoManager::undoEnabled())
-	{
-		UndoManager::instance()->setUndoEnabled(false);
-		wasUndo = true;
-	}
+	UndoManager::instance()->setUndoEnabled(false);
 	m_Doc = NULL;
 	PctPlug *dia = new PctPlug(m_Doc, lfCreateThumbnail);
 	Q_CHECK_PTR(dia);
 	QImage ret = dia->readThumbnail(fileName);
-	if (wasUndo)
-		UndoManager::instance()->setUndoEnabled(true);
+	UndoManager::instance()->setUndoEnabled(true);
 	delete dia;
 	return ret;
 }
diff --git a/Scribus/scribus/plugins/import/pdf/importpdfplugin.cpp b/Scribus/scribus/plugins/import/pdf/importpdfplugin.cpp
index 3e4b874..b423aaa 100644
--- a/Scribus/scribus/plugins/import/pdf/importpdfplugin.cpp
+++ b/Scribus/scribus/plugins/import/pdf/importpdfplugin.cpp
@@ -238,20 +238,14 @@ bool ImportPdfPlugin::import(QString fileName, int flags)
 
 QImage ImportPdfPlugin::readThumbnail(const QString& fileName)
 {
-	bool wasUndo = false;
 	if( fileName.isEmpty() )
 		return QImage();
-	if (UndoManager::undoEnabled())
-	{
-		UndoManager::instance()->setUndoEnabled(false);
-		wasUndo = true;
-	}
+	UndoManager::instance()->setUndoEnabled(false);
 	m_Doc = NULL;
 	PdfPlug *dia = new PdfPlug(m_Doc, lfCreateThumbnail);
 	Q_CHECK_PTR(dia);
 	QImage ret = dia->readThumbnail(fileName);
-	if (wasUndo)
-		UndoManager::instance()->setUndoEnabled(true);
+	UndoManager::instance()->setUndoEnabled(true);
 	delete dia;
 	return ret;
 }
diff --git a/Scribus/scribus/plugins/import/shape/importshapeplugin.cpp b/Scribus/scribus/plugins/import/shape/importshapeplugin.cpp
index 5bd3f3b..22498e1 100644
--- a/Scribus/scribus/plugins/import/shape/importshapeplugin.cpp
+++ b/Scribus/scribus/plugins/import/shape/importshapeplugin.cpp
@@ -161,17 +161,14 @@ bool ImportShapePlugin::import(QString fileName, int flags)
 
 QImage ImportShapePlugin::readThumbnail(const QString& fileName)
 {
-	bool wasUndo = UndoManager::undoEnabled();
 	if( fileName.isEmpty() )
 		return QImage();
-	if (UndoManager::undoEnabled())
-		UndoManager::instance()->setUndoEnabled(false);
+	UndoManager::instance()->setUndoEnabled(false);
 	m_Doc = NULL;
 	ShapePlug *dia = new ShapePlug(m_Doc, lfCreateThumbnail);
 	Q_CHECK_PTR(dia);
 	QImage ret = dia->readThumbnail(fileName);
-	if (wasUndo)
-		UndoManager::instance()->setUndoEnabled(true);
+	UndoManager::instance()->setUndoEnabled(true);
 	delete dia;
 	return ret;
 }
diff --git a/Scribus/scribus/plugins/import/sml/importsmlplugin.cpp b/Scribus/scribus/plugins/import/sml/importsmlplugin.cpp
index be46505..dbd5472 100644
--- a/Scribus/scribus/plugins/import/sml/importsmlplugin.cpp
+++ b/Scribus/scribus/plugins/import/sml/importsmlplugin.cpp
@@ -168,20 +168,14 @@ bool ImportSmlPlugin::import(QString fileName, int flags)
 
 QImage ImportSmlPlugin::readThumbnail(const QString& fileName)
 {
-	bool wasUndo = false;
 	if( fileName.isEmpty() )
 		return QImage();
-	if (UndoManager::undoEnabled())
-	{
-		UndoManager::instance()->setUndoEnabled(false);
-		wasUndo = true;
-	}
+	UndoManager::instance()->setUndoEnabled(false);
 	m_Doc = NULL;
 	SmlPlug *dia = new SmlPlug(m_Doc, lfCreateThumbnail);
 	Q_CHECK_PTR(dia);
 	QImage ret = dia->readThumbnail(fileName);
-	if (wasUndo)
-		UndoManager::instance()->setUndoEnabled(true);
+	UndoManager::instance()->setUndoEnabled(true);
 	delete dia;
 	return ret;
 }
diff --git a/Scribus/scribus/plugins/import/svg/svgplugin.cpp b/Scribus/scribus/plugins/import/svg/svgplugin.cpp
index c1bcd6f..e1ecf0a 100644
--- a/Scribus/scribus/plugins/import/svg/svgplugin.cpp
+++ b/Scribus/scribus/plugins/import/svg/svgplugin.cpp
@@ -207,20 +207,14 @@ bool SVGImportPlugin::import(QString filename, int flags)
 
 QImage SVGImportPlugin::readThumbnail(const QString& fileName)
 {
-	bool wasUndo = false;
 	if( fileName.isEmpty() )
 		return QImage();
-	if (UndoManager::undoEnabled())
-	{
-		UndoManager::instance()->setUndoEnabled(false);
-		wasUndo = true;
-	}
+	UndoManager::instance()->setUndoEnabled(false);
 	m_Doc = NULL;
 	SVGPlug *dia = new SVGPlug(m_Doc, lfCreateThumbnail);
 	Q_CHECK_PTR(dia);
 	QImage ret = dia->readThumbnail(fileName);
-	if (wasUndo)
-		UndoManager::instance()->setUndoEnabled(true);
+	UndoManager::instance()->setUndoEnabled(true);
 	delete dia;
 	return ret;
 }
diff --git a/Scribus/scribus/plugins/import/wmf/wmfimportplugin.cpp b/Scribus/scribus/plugins/import/wmf/wmfimportplugin.cpp
index 3cc9133..c62e0f7 100644
--- a/Scribus/scribus/plugins/import/wmf/wmfimportplugin.cpp
+++ b/Scribus/scribus/plugins/import/wmf/wmfimportplugin.cpp
@@ -194,20 +194,14 @@ bool WMFImportPlugin::import(QString filename, int flags)
 
 QImage WMFImportPlugin::readThumbnail(const QString& fileName)
 {
-	bool wasUndo = false;
 	if( fileName.isEmpty() )
 		return QImage();
-	if (UndoManager::undoEnabled())
-	{
-		UndoManager::instance()->setUndoEnabled(false);
-		wasUndo = true;
-	}
+	UndoManager::instance()->setUndoEnabled(false);
 	m_Doc = NULL;
 	WMFImport *dia = new WMFImport(m_Doc, lfCreateThumbnail);
 	Q_CHECK_PTR(dia);
 	QImage ret = dia->readThumbnail(fileName);
-	if (wasUndo)
-		UndoManager::instance()->setUndoEnabled(true);
+	UndoManager::instance()->setUndoEnabled(true);
 	delete dia;
 	return ret;
 }
diff --git a/Scribus/scribus/plugins/import/wpg/importwpgplugin.cpp b/Scribus/scribus/plugins/import/wpg/importwpgplugin.cpp
index 38d5020..2b1ca47 100644
--- a/Scribus/scribus/plugins/import/wpg/importwpgplugin.cpp
+++ b/Scribus/scribus/plugins/import/wpg/importwpgplugin.cpp
@@ -166,20 +166,14 @@ bool ImportWpgPlugin::import(QString fileName, int flags)
 
 QImage ImportWpgPlugin::readThumbnail(const QString& fileName)
 {
-	bool wasUndo = false;
 	if( fileName.isEmpty() )
 		return QImage();
-	if (UndoManager::undoEnabled())
-	{
-		UndoManager::instance()->setUndoEnabled(false);
-		wasUndo = true;
-	}
+	UndoManager::instance()->setUndoEnabled(false);
 	m_Doc = NULL;
 	WpgPlug *dia = new WpgPlug(m_Doc, lfCreateThumbnail);
 	Q_CHECK_PTR(dia);
 	QImage ret = dia->readThumbnail(fileName);
-	if (wasUndo)
-		UndoManager::instance()->setUndoEnabled(true);
+	UndoManager::instance()->setUndoEnabled(true);
 	delete dia;
 	return ret;
 }
diff --git a/Scribus/scribus/plugins/import/xar/importxarplugin.cpp b/Scribus/scribus/plugins/import/xar/importxarplugin.cpp
index 76cdffe..db4e3c1 100644
--- a/Scribus/scribus/plugins/import/xar/importxarplugin.cpp
+++ b/Scribus/scribus/plugins/import/xar/importxarplugin.cpp
@@ -161,40 +161,28 @@ bool ImportXarPlugin::import(QString fileName, int flags)
 
 QImage ImportXarPlugin::readThumbnail(const QString& fileName)
 {
-	bool wasUndo = false;
 	if( fileName.isEmpty() )
 		return QImage();
-	if (UndoManager::undoEnabled())
-	{
-		UndoManager::instance()->setUndoEnabled(false);
-		wasUndo = true;
-	}
+	UndoManager::instance()->setUndoEnabled(false);
 	m_Doc = ScCore->primaryMainWindow()->doc;
 	XarPlug *dia = new XarPlug(m_Doc, lfCreateThumbnail);
 	Q_CHECK_PTR(dia);
 	QImage ret = dia->readThumbnail(fileName);
-	if (wasUndo)
-		UndoManager::instance()->setUndoEnabled(true);
+	UndoManager::instance()->setUndoEnabled(true);
 	delete dia;
 	return ret;
 }
 
 bool ImportXarPlugin::readColors(const QString& fileName, ColorList &colors)
 {
-	bool wasUndo = false;
 	if( fileName.isEmpty() )
 		return false;
-	if (UndoManager::undoEnabled())
-	{
-		UndoManager::instance()->setUndoEnabled(false);
-		wasUndo = true;
-	}
+	UndoManager::instance()->setUndoEnabled(false);
 	m_Doc = NULL;
 	XarPlug *dia = new XarPlug(m_Doc, lfCreateThumbnail);
 	Q_CHECK_PTR(dia);
 	bool ret = dia->readColors(fileName, colors);
-	if (wasUndo)
-		UndoManager::instance()->setUndoEnabled(true);
+	UndoManager::instance()->setUndoEnabled(true);
 	delete dia;
 	return ret;
 }
diff --git a/Scribus/scribus/plugins/import/xfig/importxfigplugin.cpp b/Scribus/scribus/plugins/import/xfig/importxfigplugin.cpp
index c7bbf06..49e486d 100644
--- a/Scribus/scribus/plugins/import/xfig/importxfigplugin.cpp
+++ b/Scribus/scribus/plugins/import/xfig/importxfigplugin.cpp
@@ -166,20 +166,14 @@ bool ImportXfigPlugin::import(QString fileName, int flags)
 
 QImage ImportXfigPlugin::readThumbnail(const QString& fileName)
 {
-	bool wasUndo = false;
 	if( fileName.isEmpty() )
 		return QImage();
-	if (UndoManager::undoEnabled())
-	{
-		UndoManager::instance()->setUndoEnabled(false);
-		wasUndo = true;
-	}
+	UndoManager::instance()->setUndoEnabled(false);
 	m_Doc = NULL;
 	XfigPlug *dia = new XfigPlug(m_Doc, lfCreateThumbnail);
 	Q_CHECK_PTR(dia);
 	QImage ret = dia->readThumbnail(fileName);
-	if (wasUndo)
-		UndoManager::instance()->setUndoEnabled(true);
+	UndoManager::instance()->setUndoEnabled(true);
 	delete dia;
 	return ret;
 }
diff --git a/Scribus/scribus/plugins/tools/pathconnect/pathconnect.cpp b/Scribus/scribus/plugins/tools/pathconnect/pathconnect.cpp
index 5b8548a..a7e1a74 100644
--- a/Scribus/scribus/plugins/tools/pathconnect/pathconnect.cpp
+++ b/Scribus/scribus/plugins/tools/pathconnect/pathconnect.cpp
@@ -56,7 +56,7 @@ PathConnectPlugin::PathConnectPlugin() : ScActionPlugin()
 	languageChange();
 }
 
-PathConnectPlugin::~PathConnectPlugin() {};
+PathConnectPlugin::~PathConnectPlugin() {}
 
 void PathConnectPlugin::languageChange()
 {
@@ -131,11 +131,10 @@ bool PathConnectPlugin::run(ScribusDoc* doc, QString)
 			int pointOne = dia->getFirstLinePoint();
 			int pointTwo = dia->getSecondLinePoint();
 			int mode = dia->getMode();
-			UndoTransaction trans(UndoManager::instance()->beginTransaction(Um::BezierCurve,Um::ILine,Um::ConnectPath,"",Um::ILine));
-			ScItemState<QPair<FPointArray,FPointArray> > *is = new ScItemState<QPair<FPointArray,FPointArray> >(Um::ConnectPath);
-			is->set("CONNECT_PATH","connect_path");
-			is->set("OLDX",originalXPos);
-			is->set("OLDY",originalYPos);
+			UndoTransaction *trans = NULL;
+			if(UndoManager::undoEnabled())
+				trans = new UndoTransaction(UndoManager::instance()->beginTransaction(Um::BezierCurve,Um::ILine,Um::ConnectPath,"",Um::ILine));
+
 			Item1->PoLine = computePath(pointOne, pointTwo, mode, originalPath1, originalPath2);
 			Item1->Frame = false;
 			Item1->ClipEdited = true;
@@ -143,16 +142,28 @@ bool PathConnectPlugin::run(ScribusDoc* doc, QString)
 			currDoc->AdjustItemSize(Item1);
 			Item1->OldB2 = Item1->width();
 			Item1->OldH2 = Item1->height();
-			is->set("NEWX",Item1->xPos());
-			is->set("NEWY",Item1->yPos());
-			is->setItem(qMakePair(originalPath1,Item1->PoLine));
-			UndoManager::instance()->action(Item1,is);
+			if(UndoManager::undoEnabled())
+			{
+				ScItemState<QPair<FPointArray,FPointArray> > *is = new ScItemState<QPair<FPointArray,FPointArray> >(Um::ConnectPath);
+				is->set("CONNECT_PATH","connect_path");
+				is->set("OLDX",originalXPos);
+				is->set("OLDY",originalYPos);
+				is->set("NEWX",Item1->xPos());
+				is->set("NEWY",Item1->yPos());
+				is->setItem(qMakePair(originalPath1,Item1->PoLine));
+				UndoManager::instance()->action(Item1,is);
+			}
 			Item1->updateClip();
 			Item1->ContourLine = Item1->PoLine.copy();
 			currDoc->m_Selection->removeItem(Item1);
 			currDoc->itemSelection_DeleteItem();
 			currDoc->changed();
-			trans.commit();
+			if(trans)
+			{
+				trans->commit();
+				delete trans;
+				trans = NULL;
+			}
 		}
 		else
 		{
diff --git a/Scribus/scribus/plugins/tools/pathfinder/pathfinder.cpp b/Scribus/scribus/plugins/tools/pathfinder/pathfinder.cpp
index af1e098..440a775 100644
--- a/Scribus/scribus/plugins/tools/pathfinder/pathfinder.cpp
+++ b/Scribus/scribus/plugins/tools/pathfinder/pathfinder.cpp
@@ -67,7 +67,7 @@ PathFinderPlugin::PathFinderPlugin() : ScActionPlugin()
 	languageChange();
 }
 
-PathFinderPlugin::~PathFinderPlugin() {};
+PathFinderPlugin::~PathFinderPlugin() {}
 
 void PathFinderPlugin::languageChange()
 {
diff --git a/Scribus/scribus/prefsmanager.cpp b/Scribus/scribus/prefsmanager.cpp
index 0320bdd..1496747 100644
--- a/Scribus/scribus/prefsmanager.cpp
+++ b/Scribus/scribus/prefsmanager.cpp
@@ -258,7 +258,7 @@ void PrefsManager::initDefaults()
 	appPrefs.itemToolPrefs.lineEndArrow = 0;
 	appPrefs.opToolPrefs.magMin = 1;
 	appPrefs.opToolPrefs.magMax = 3200;
-	appPrefs.opToolPrefs.magStep = 125;
+	appPrefs.opToolPrefs.magStep = 25;
 	appPrefs.docSetupPrefs.docUnitIndex = 0;
 	appPrefs.itemToolPrefs.polyCorners = 4;
 	appPrefs.itemToolPrefs.polyFactor = 0.5;
@@ -2146,10 +2146,9 @@ bool PrefsManager::ReadPref(QString ho)
 		{
 			appPrefs.opToolPrefs.magMin  = dc.attribute("MinimumMagnification", "1").toInt();
 			appPrefs.opToolPrefs.magMax  = dc.attribute("MaximumMagnification", "3200").toInt();
-			appPrefs.opToolPrefs.magStep = dc.attribute("MagnificationStep", "125").toInt();
-			//CB Reset prefs zoom step value to 200% instead of old values.
-			if (appPrefs.opToolPrefs.magStep <= 100)
-				appPrefs.opToolPrefs.magStep = 125;
+			appPrefs.opToolPrefs.magStep = dc.attribute("MagnificationStep", "25").toInt();
+			if (appPrefs.opToolPrefs.magStep < 0)
+				appPrefs.opToolPrefs.magStep = 25;
 			appPrefs.opToolPrefs.dispX = ScCLocale::toDoubleC(dc.attribute("DisplayOffsetX"), 10.0);
 			appPrefs.opToolPrefs.dispY = ScCLocale::toDoubleC(dc.attribute("DisplayOffsetY"), 10.0);
 			appPrefs.opToolPrefs.constrain = ScCLocale::toDoubleC(dc.attribute("RotationConstrainAngle"), 15.0);
diff --git a/Scribus/scribus/scribus.cpp b/Scribus/scribus/scribus.cpp
index 6c3eecd..0190508 100644
--- a/Scribus/scribus/scribus.cpp
+++ b/Scribus/scribus/scribus.cpp
@@ -3444,7 +3444,9 @@ void ScribusMainWindow::doPasteRecent(QString data)
 		}
 		else
 		{
-			UndoTransaction pasteAction(undoManager->beginTransaction(Um::SelectionGroup, Um::IGroup, Um::Create,"",Um::ICreate));
+			UndoTransaction *pasteAction = NULL;
+			if(UndoManager::undoEnabled())
+				pasteAction = new UndoTransaction(undoManager->beginTransaction(Um::SelectionGroup, Um::IGroup, Um::Create,"",Um::ICreate));
 			view->Deselect(true);
 			uint ac = doc->Items->count();
 			bool savedAlignGrid = doc->useRaster;
@@ -3471,7 +3473,12 @@ void ScribusMainWindow::doPasteRecent(QString data)
 					AddBookMark(currItem);
 			}
 			doc->m_Selection->copy(tmpSelection, false);
-			pasteAction.commit();
+			if(pasteAction)
+			{
+				pasteAction->commit();
+				delete pasteAction;
+				pasteAction = NULL;
+			}
 		}
 		slotDocCh(false);
 		doc->regionsChanged()->update(QRectF());
@@ -6211,6 +6218,12 @@ void ScribusMainWindow::ToggleUElements()
 	}
 }
 
+void ScribusMainWindow::SetSnapElements(bool b)
+{
+	if(doc && doc->SnapElement != b)
+		ToggleUElements();
+}
+
 
 void ScribusMainWindow::toggleNodeEdit()
 {
@@ -6484,7 +6497,7 @@ void ScribusMainWindow::setAppMode(int mode)
 			ToggleFrameEdit();
 
 		//Ugly hack but I have absolutly no idea about how to do this in another way
-		if(currItem && oldMode != mode && (mode == modeEditMeshPatch || mode == modeEditMeshGradient || mode == modeEditGradientVectors || oldMode == modeEditMeshPatch || oldMode == modeEditMeshGradient || oldMode == modeEditGradientVectors || oldMode == modeEditPolygon || mode == modeEditPolygon || oldMode == modeEditArc || mode == modeEditArc || oldMode == modeEditSpiral || mode == modeEditSpiral))
+		if(UndoManager::undoEnabled() && currItem && oldMode != mode && (mode == modeEditMeshPatch || mode == modeEditMeshGradient || mode == modeEditGradientVectors || oldMode == modeEditMeshPatch || oldMode == modeEditMeshGradient || oldMode == modeEditGradientVectors || oldMode == modeEditPolygon || mode == modeEditPolygon || oldMode == modeEditArc || mode == modeEditArc || oldMode == modeEditSpiral || mode == modeEditSpiral))
 		{
 			SimpleState *ss = new SimpleState(Um::Mode);
 			ss->set("CHANGE_MODE","change_mode");
@@ -7507,14 +7520,21 @@ void ScribusMainWindow::duplicateItem()
 	doc->SnapElement = false;
 	slotEditCopy();
 	view->Deselect(true);
-	UndoTransaction trans(undoManager->beginTransaction(Um::Selection,Um::IPolygon,Um::Duplicate,"",Um::IMultipleDuplicate));
+	UndoTransaction *trans = NULL;
+	if(UndoManager::undoEnabled())
+		trans = new UndoTransaction(undoManager->beginTransaction(Um::Selection,Um::IPolygon,Um::Duplicate,"",Um::IMultipleDuplicate));
 	slotEditPaste();
 	for (int b=0; b<doc->m_Selection->count(); ++b)
 	{
 		doc->m_Selection->itemAt(b)->setLocked(false);
 		doc->MoveItem(doc->opToolPrefs().dispX, doc->opToolPrefs().dispY, doc->m_Selection->itemAt(b));
 	}
-	trans.commit();
+	if(trans)
+	{
+		trans->commit();
+		delete trans;
+		trans = NULL;
+	}
 	doc->useRaster = savedAlignGrid;
 	doc->SnapGuides = savedAlignGuides;
 	doc->SnapElement = savedAlignElement;
@@ -9973,14 +9993,21 @@ void ScribusMainWindow::slotItemTransform()
 		TransformDialog td(this, doc);
 		if (td.exec())
 		{
-			UndoTransaction trans(undoManager->beginTransaction(Um::Selection,Um::IPolygon,Um::Transform,"",Um::IMove));
+			UndoTransaction *trans = NULL;
+			if(UndoManager::undoEnabled())
+				trans = new UndoTransaction(undoManager->beginTransaction(Um::Selection,Um::IPolygon,Um::Transform,"",Um::IMove));
 			qApp->changeOverrideCursor(QCursor(Qt::WaitCursor));
 			int count=td.getCount();
 			QTransform matrix(td.getTransformMatrix());
 			int basepoint=td.getBasepoint();
 			doc->itemSelection_Transform(count, matrix, basepoint);
 			qApp->changeOverrideCursor(QCursor(Qt::ArrowCursor));
-			trans.commit();
+			if(trans)
+			{
+				trans->commit();
+				delete trans;
+				trans = NULL;
+			}
 		}
 	}
 }
diff --git a/Scribus/scribus/scribus.h b/Scribus/scribus/scribus.h
index 4f01695..e79d311 100644
--- a/Scribus/scribus/scribus.h
+++ b/Scribus/scribus/scribus.h
@@ -479,6 +479,7 @@ public slots:
 	void ToggleBase();
 	void ToggleUGuides();
 	void ToggleUElements();
+	void SetSnapElements(bool b);
 	void EditTabs();
 	void SearchText();
 	void imageEditorExited(int, QProcess::ExitStatus);
diff --git a/Scribus/scribus/scribusview.cpp b/Scribus/scribus/scribusview.cpp
index fb81a30..0a8fd35 100644
--- a/Scribus/scribus/scribusview.cpp
+++ b/Scribus/scribus/scribusview.cpp
@@ -2442,7 +2442,9 @@ void ScribusView::slotZoomIn(int mx,int my)
 	}
 	else
 		rememberOldZoomLocation(mx,my);
-	double newScale = m_canvas->scale() * static_cast<double>(Doc->opToolPrefs().magStep)/100.0;
+	double newScale = m_canvas->scale() * (1 + static_cast<double>(Doc->opToolPrefs().magStep)/100.0);
+	if(static_cast<int>(newScale*100)>static_cast<int>(100 * static_cast<double>(Doc->opToolPrefs().magStep)*Prefs->displayPrefs.displayScale/100))
+		newScale = m_canvas->scale() + static_cast<double>(Doc->opToolPrefs().magStep)*Prefs->displayPrefs.displayScale/100;
 	if (Doc->m_Selection->count() != 0)
 	{
 		PageItem *currItem = Doc->m_Selection->itemAt(0);
@@ -2468,7 +2470,9 @@ void ScribusView::slotZoomOut(int mx,int my)
 	}
 	else
 		rememberOldZoomLocation(mx,my);
-	double newScale = m_canvas->scale() / (static_cast<double>(Doc->opToolPrefs().magStep)/100.0);
+	double newScale = m_canvas->scale() - static_cast<double>(Doc->opToolPrefs().magStep)*Prefs->displayPrefs.displayScale/100;
+	if(newScale<=Prefs->displayPrefs.displayScale/100)
+		newScale = m_canvas->scale() / (1 + static_cast<double>(Doc->opToolPrefs().magStep)/100.0);
 	if (Doc->m_Selection->count() != 0)
 	{
 		PageItem *currItem = Doc->m_Selection->itemAt(0);
@@ -4304,6 +4308,8 @@ bool ScribusView::eventFilter(QObject *obj, QEvent *event)
 	else if (event->type() == QEvent::KeyPress)
 	{
 		QKeyEvent* m = static_cast<QKeyEvent*> (event);
+		if(m->key() == Qt::Key_Shift)
+			m_ScMW->SetSnapElements(false);
 		if (m_canvasMode->handleKeyEvents())
 			m_canvasMode->keyPressEvent(m);
 		else
@@ -4313,6 +4319,8 @@ bool ScribusView::eventFilter(QObject *obj, QEvent *event)
 	else if (event->type() == QEvent::KeyRelease)
 	{
 		QKeyEvent* m = static_cast<QKeyEvent*> (event);
+		if(m->key() == Qt::Key_Shift)
+			m_ScMW->SetSnapElements(true);
 		if (m_canvasMode->handleKeyEvents())
 			m_canvasMode->keyReleaseEvent(m);
 		else
diff --git a/Scribus/scribus/ui/guidemanager.cpp b/Scribus/scribus/ui/guidemanager.cpp
index 87dd332..8ad4a4d 100644
--- a/Scribus/scribus/ui/guidemanager.cpp
+++ b/Scribus/scribus/ui/guidemanager.cpp
@@ -518,7 +518,9 @@ void GuideManager::clearRestoreVerticalList()
 
 void GuideManager::deletePageButton_clicked()
 {
-	UndoTransaction trans(UndoManager::instance()->beginTransaction(currentPage->getUName(),
+	UndoTransaction *trans = NULL;
+	if(UndoManager::undoEnabled())
+		trans = new UndoTransaction(UndoManager::instance()->beginTransaction(currentPage->getUName(),
 																currentPage->getUPixmap(),
 																Um::RemoveAllPageGuides, "",
 																Um::IGuides));
@@ -537,7 +539,12 @@ void GuideManager::deletePageButton_clicked()
 	currentPage->guides.setVerticalAutoRefer(0);
 	horizontalAutoCountSpin->setValue(0);
 	verticalAutoCountSpin->setValue(0);
-	trans.commit();
+	if(trans)
+	{
+		trans->commit();
+		delete trans;
+		trans = NULL;
+	}
 
 	drawGuides();
 	m_Doc->changed();
@@ -545,7 +552,9 @@ void GuideManager::deletePageButton_clicked()
 
 void GuideManager::deleteAllGuides_clicked()
 {
-	UndoTransaction trans(UndoManager::instance()->beginTransaction(m_Doc->getUName(),
+	UndoTransaction *trans = NULL;
+	if(UndoManager::undoEnabled())
+		trans = new UndoTransaction(UndoManager::instance()->beginTransaction(m_Doc->getUName(),
 																m_Doc->getUPixmap(),
 																Um::RemoveAllGuides, "",
 																Um::IGuides));
@@ -554,7 +563,12 @@ void GuideManager::deleteAllGuides_clicked()
 	copyGuidesToAllPages(GuideManagerCore::Standard);
 	copyGuidesToAllPages(GuideManagerCore::Auto);
 	m_drawGuides = true;
-	trans.commit();
+	if(trans)
+	{
+		trans->commit();
+		delete trans;
+		trans = NULL;
+	}
 	drawGuides();
 	m_Doc->changed();
 }
diff --git a/Scribus/scribus/ui/layers.cpp b/Scribus/scribus/ui/layers.cpp
index 5b5f247..edd0afc 100644
--- a/Scribus/scribus/ui/layers.cpp
+++ b/Scribus/scribus/ui/layers.cpp
@@ -276,7 +276,9 @@ void LayerPalette::addLayer()
 
 void LayerPalette::dupLayer()
 {
-	UndoTransaction copyTransaction( UndoManager::instance()->beginTransaction("", Um::ILayerAction, Um::DuplicateLayer.arg(m_Doc->activeLayerName()) , "", Um::ICreate) );
+	UndoTransaction *copyTransaction = NULL;
+	if(UndoManager::undoEnabled())
+		copyTransaction = new UndoTransaction(UndoManager::instance()->beginTransaction("", Um::ILayerAction, Um::DuplicateLayer.arg(m_Doc->activeLayerName()) , "", Um::ICreate) );
 	
 	int current = m_Doc->activeLayer();
 	
@@ -286,8 +288,12 @@ void LayerPalette::dupLayer()
 	m_Doc->copyLayer(current, m_Doc->activeLayer());
 	m_Doc->scMW()->changeLayer(m_Doc->activeLayer());
 	m_Doc->changed();
-	
-	copyTransaction.commit();
+	if(copyTransaction)
+	{
+		copyTransaction->commit();
+		delete copyTransaction;
+		copyTransaction = NULL;
+	}
 }
 
 void LayerPalette::removeLayer()
diff --git a/Scribus/scribus/ui/paintmanager.cpp b/Scribus/scribus/ui/paintmanager.cpp
index 7504c97..210b3ab 100644
--- a/Scribus/scribus/ui/paintmanager.cpp
+++ b/Scribus/scribus/ui/paintmanager.cpp
@@ -1283,7 +1283,6 @@ void PaintManagerDialog::loadVectors(QString data)
 {
 	m_doc->PageColors = m_colorList;
 	m_doc->docGradients = dialogGradients;
-	bool wasUndo = UndoManager::undoEnabled();
 	UndoManager::instance()->setUndoEnabled(false);
 	m_doc->setLoading(true);
 	QFileInfo fi(data);
@@ -1387,7 +1386,7 @@ void PaintManagerDialog::loadVectors(QString data)
 	m_doc->setLoading(false);
 	m_colorList = m_doc->PageColors;
 	dialogGradients = m_doc->docGradients;
-	UndoManager::instance()->setUndoEnabled(wasUndo);
+	UndoManager::instance()->setUndoEnabled(true);
 }
 
 ColorList PaintManagerDialog::getGradientColors()
diff --git a/Scribus/scribus/ui/prefs_itemtools.cpp b/Scribus/scribus/ui/prefs_itemtools.cpp
index 557b336..eda3540 100644
--- a/Scribus/scribus/ui/prefs_itemtools.cpp
+++ b/Scribus/scribus/ui/prefs_itemtools.cpp
@@ -136,6 +136,7 @@ void Prefs_ItemTools::restoreDefaults(struct ApplicationPrefs *prefsData)
 	imageHorizontalScalingSpinBox->setValue(qRound(prefsData->itemToolPrefs.imageScaleX * 100));
 	imageVerticalScalingSpinBox->setValue(qRound(prefsData->itemToolPrefs.imageScaleY * 100));
 	imageKeepAspectRatioCheckBox->setChecked(prefsData->itemToolPrefs.imageAspectRatio);
+	scalingLockToolButton->setChecked(prefsData->itemToolPrefs.imageAspectRatio);
 	imageFrameFillColorComboBox->initColorList(colorList, m_doc, prefsData->itemToolPrefs.imageFillColor);
 	imageFrameFillShadingSpinBox->setValue(prefsData->itemToolPrefs.imageFillColorShade );
 	imageFrameLineColorComboBox->initColorList(colorList, m_doc, prefsData->itemToolPrefs.imageStrokeColor);
@@ -252,11 +253,6 @@ void Prefs_ItemTools::saveGuiToPrefs(struct ApplicationPrefs *prefsData) const
 	prefsData->itemToolPrefs.textDistances.Bottom = bottomTextDistanceSpinBox->value() / unitRatio;
 	prefsData->itemToolPrefs.textDistances.Left = leftTextDistanceSpinBox->value() / unitRatio;
 	prefsData->itemToolPrefs.textDistances.Right = rightTextDistanceSpinBox->value() / unitRatio;
-
-	//Image Tool
-	//
-	//	TODO scalingLockToolButton
-
 	prefsData->itemToolPrefs.imageFillColor = imageFrameFillColorComboBox->currentText();
 	if (prefsData->itemToolPrefs.imageFillColor == CommonStrings::tr_NoneColor)
 		prefsData->itemToolPrefs.imageFillColor = CommonStrings::None;
@@ -340,6 +336,7 @@ void Prefs_ItemTools::enableSignals(bool on)
 //		connect(buttonGroup5, SIGNAL(toggled(bool)), this, SLOT(changeImageScalingRatio(bool)));
 		connect(scalingLockToolButton, SIGNAL(clicked()), this, SLOT(toggleImagesScalingChain()));
 		connect(imageHorizontalScalingSpinBox, SIGNAL(valueChanged(int)), this, SLOT(imageHorizontalScalingChange()));
+		connect(imageKeepAspectRatioCheckBox, SIGNAL(toggled(bool)), scalingLockToolButton, SLOT(setChecked(bool)));
 		connect(imageVerticalScalingSpinBox, SIGNAL(valueChanged(int)), this, SLOT(imageVerticalScalingChange()));
 //		connect(tabFillCombo, SIGNAL(activated(int)), this, SLOT(setFillChar(int)));
 	}
@@ -414,6 +411,7 @@ void Prefs_ItemTools::updateFontPreview()
 void Prefs_ItemTools::toggleImagesScalingChain()
 {
 	imageHorizontalScalingChange();
+	imageKeepAspectRatioCheckBox->setChecked(scalingLockToolButton->isChecked());
 }
 
 void Prefs_ItemTools::imageHorizontalScalingChange()
diff --git a/Scribus/scribus/ui/propertiespalette.cpp b/Scribus/scribus/ui/propertiespalette.cpp
index 8e71a68..15a8d2b 100644
--- a/Scribus/scribus/ui/propertiespalette.cpp
+++ b/Scribus/scribus/ui/propertiespalette.cpp
@@ -637,7 +637,9 @@ void PropertiesPalette::NewSpGradient(double x1, double y1, double x2, double y2
 	if ((m_haveDoc) && (m_haveItem))
 	{
 		QRectF upRect;
-		UndoTransaction trans(undoManager->beginTransaction(Um::Selection,Um::ILine,Um::GradPos + "p","",Um::ILine));
+		UndoTransaction *trans = NULL;
+		if(UndoManager::undoEnabled())
+			trans = new UndoTransaction(undoManager->beginTransaction(Um::Selection,Um::ILine,Um::GradPos + "p","",Um::ILine));
 		if (m_ScMW->view->editStrokeGradient == 1)
 		{
 			m_item->setGradientStrokeStartX(x1 / m_unitRatio);
@@ -690,7 +692,7 @@ void PropertiesPalette::NewSpGradient(double x1, double y1, double x2, double y2
 		}
 		else
 		{
-			if (m_item->gradientType() == 13)
+			if (m_item->gradientType() == 13 && UndoManager::undoEnabled())
 			{
 				SimpleState *ss= new SimpleState("Refresh");
 				ss->set("UNDO_UPDATE_CONICAL","undo_update_conical");
@@ -709,7 +711,7 @@ void PropertiesPalette::NewSpGradient(double x1, double y1, double x2, double y2
 				m_item->setGradientFocalX(m_item->gradientStartX());
 				m_item->setGradientFocalY(m_item->gradientStartY());
 			}
-			if (m_item->gradientType() == 13)
+			if (m_item->gradientType() == 13 && UndoManager::undoEnabled())
 			{
 				m_item->createConicalMesh();
 				SimpleState *ss= new SimpleState("Refresh");
@@ -732,7 +734,12 @@ void PropertiesPalette::NewSpGradient(double x1, double y1, double x2, double y2
 			upRect |= QRectF(shP, QPointF(0, 0)).normalized();
 			upRect |= QRectF(shP, QPointF(m_item->width(), m_item->height())).normalized();
 		}
-		trans.commit();
+		if(trans)
+		{
+			trans->commit();
+			delete trans;
+			trans = NULL;
+		}
 		upRect.translate(m_item->xPos(), m_item->yPos());
 		m_doc->regionsChanged()->update(upRect.adjusted(-10.0, -10.0, 10.0, 10.0));
 		m_doc->changed();
@@ -778,7 +785,9 @@ void PropertiesPalette::NewSpGradientM(double x1, double y1, double x2, double y
 	if ((m_haveDoc) && (m_haveItem))
 	{
 		QRectF upRect;
-		UndoTransaction trans(undoManager->beginTransaction(Um::Selection,Um::ILine,Um::GradPos + "o","",Um::ILine));
+		UndoTransaction *trans = NULL;
+		if(UndoManager::undoEnabled())
+			trans = new UndoTransaction(undoManager->beginTransaction(Um::Selection,Um::ILine,Um::GradPos + "o","",Um::ILine));
 		m_item->setGradientMaskStartX(x1 / m_unitRatio);
 		m_item->setGradientMaskStartY(y1 / m_unitRatio);
 		m_item->setGradientMaskEndX(x2 / m_unitRatio);
@@ -793,7 +802,12 @@ void PropertiesPalette::NewSpGradientM(double x1, double y1, double x2, double y
 			m_item->setGradientMaskFocalY(m_item->GrMaskStartY);
 		}
 		m_item->update();
-		trans.commit();
+		if(trans)
+		{
+			trans->commit();
+			delete trans;
+			trans = NULL;
+		}
 		upRect = QRectF(QPointF(m_item->GrMaskStartX, m_item->GrMaskStartY), QPointF(m_item->GrMaskEndX, m_item->GrMaskEndY));
 		double radEnd = distance(m_item->GrMaskEndX - m_item->GrMaskStartX, m_item->GrMaskEndY - m_item->GrMaskStartY);
 		double rotEnd = xy2Deg(m_item->GrMaskEndX - m_item->GrMaskStartX, m_item->GrMaskEndY - m_item->GrMaskStartY);
diff --git a/Scribus/scribus/ui/propertiespalette_image.cpp b/Scribus/scribus/ui/propertiespalette_image.cpp
index f57fe80..7ee3a19 100644
--- a/Scribus/scribus/ui/propertiespalette_image.cpp
+++ b/Scribus/scribus/ui/propertiespalette_image.cpp
@@ -104,7 +104,7 @@ PropertiesPalette_Image::PropertiesPalette_Image( QWidget* parent) : QWidget(par
 	connect(keepImageDPIRatioButton, SIGNAL(clicked())       , this, SLOT(handleImageDPIRatio()));
 	connect(freeScale          , SIGNAL(clicked())           , this, SLOT(handleScaling()));
 	connect(frameScale         , SIGNAL(clicked())           , this, SLOT(handleScaling()));
-	connect(cbProportional     , SIGNAL(clicked())           , this, SLOT(handleScaling()));
+	connect(cbProportional     , SIGNAL(stateChanged(int))   , this, SLOT(handleScaling()));
 	connect(imgEffectsButton   , SIGNAL(clicked())           , this, SLOT(handleImageEffects()));
 	connect(imgExtProperties   , SIGNAL(clicked())           , this, SLOT(handleExtImgProperties()));
 	connect(inputProfiles      , SIGNAL(activated(const QString&)), this, SLOT(handleProfile(const QString&)));
@@ -490,6 +490,8 @@ void PropertiesPalette_Image::setCurrentItem(PageItem *item)
 			//Necessary for undo action
 			keepImageWHRatioButton->setEnabled(setter);
 			keepImageDPIRatioButton->setEnabled(setter);
+			keepImageWHRatioButton->setChecked(m_item->AspectRatio);
+			keepImageDPIRatioButton->setChecked(m_item->AspectRatio);
 		}
 //CB Why do we need this? Setting it too much here
 // 		if (setter == true)
@@ -674,9 +676,13 @@ void PropertiesPalette_Image::handleImageDPIRatio()
 		imgDpiY->setValue(imgDpiX->value());
 		handleLocalDpi();
 		keepImageWHRatioButton->setChecked(true);
+		cbProportional->setChecked(true);
 	}
 	else
+	{
 		keepImageWHRatioButton->setChecked(false);
+		cbProportional->setChecked(false);
+	}
 	imgDpiX->blockSignals(false);
 	imgDpiY->blockSignals(false);
 }
@@ -692,9 +698,13 @@ void PropertiesPalette_Image::handleImageWHRatio()
 		imageYScaleSpinBox->setValue(imageXScaleSpinBox->value());
 		handleLocalScale();
 		keepImageDPIRatioButton->setChecked(true);
+		cbProportional->setChecked(true);
 	}
 	else
+	{
 		keepImageDPIRatioButton->setChecked(false);
+		cbProportional->setChecked(false);
+	}
 	imageXScaleSpinBox->blockSignals(false);
 	imageYScaleSpinBox->blockSignals(false);
 }
@@ -719,11 +729,14 @@ void PropertiesPalette_Image::handleImagePageNumber()
 	if (!m_haveDoc || !m_haveItem || !m_ScMW || m_ScMW->scriptIsRunning())
 		return;
 	bool reallynew = (m_item->pixm.imgInfo.actualPageNumber != imagePageNumber->value());
-	SimpleState *ss = new SimpleState(Um::PageNmbr.arg(static_cast<int>(imagePageNumber->value())),"",Um::IImageFrame);
-	ss->set("IMAGE_NBR","image_nbr");
-	ss->set("OLD",m_item->pixm.imgInfo.actualPageNumber);
-	ss->set("NEW",imagePageNumber->value());
-	UndoManager::instance()->action(m_item,ss);
+	if(UndoManager::undoEnabled())
+	{
+		SimpleState *ss = new SimpleState(Um::PageNmbr.arg(static_cast<int>(imagePageNumber->value())),"",Um::IImageFrame);
+		ss->set("IMAGE_NBR","image_nbr");
+		ss->set("OLD",m_item->pixm.imgInfo.actualPageNumber);
+		ss->set("NEW",imagePageNumber->value());
+		UndoManager::instance()->action(m_item,ss);
+	}
 	m_item->pixm.imgInfo.actualPageNumber = static_cast<int>(imagePageNumber->value());
 	if (reallynew)
 		m_item->loadImage(m_item->externalFile(), true);
