Index: scribus/pageitem.cpp
===================================================================
--- scribus/pageitem.cpp	(revision 13437)
+++ scribus/pageitem.cpp	(working copy)
@@ -741,6 +741,9 @@
 		assert (ff != this);
 	}
 	itemText.append(nxt->itemText);
+	// set the new item's text - this must be done before actually linking,
+	// otherwise we get unneeded layout invalidation calls
+	nxt->itemText = itemText;
 	NextBox = nxt;
 	nxt->BackBox = this;
 	// update AutoText
Index: scribus/canvasmode_framelinks.cpp
===================================================================
--- scribus/canvasmode_framelinks.cpp	(revision 13437)
+++ scribus/canvasmode_framelinks.cpp	(working copy)
@@ -151,7 +151,7 @@
 
 	double Rxp = 0;
 	double Ryp = 0;
-	PageItem *currItem, *bb;
+	PageItem *currItem, *bb = 0;
 	m_canvas->PaintSizeRect(QRect());
 	m_canvas->m_viewMode.m_MouseButtonPressed = true;
 	m_canvas->m_viewMode.operItemMoving = false;
@@ -178,14 +178,25 @@
 	}
 	switch (m_doc->appMode)
 	{
-		case modeLinkFrames:
+		case modeLinkFrames: {
 			if (m->button() != Qt::LeftButton)
 				break;
 			currItem = m_doc->ElemToLink;
 			if (currItem==NULL)
 				break;
 			SeleItem(m);
-			if (GetItem(&bb) && (bb->asTextFrame()))
+			GetItem(&bb);
+			int autoFlowFrom = 0;
+			if (!bb) {
+				// clicked outside any object - create a new textframe on this page
+				int page, frame = -1;
+				page = m_doc->OnPage(Mxp, Myp);
+				if (page != -1) frame = m_doc->addFullTextFrame (page);
+				if (frame != -1) bb = m_doc->Items->at (frame);
+				// shift+click on empty space = auto-flow
+				if (m->modifiers() & Qt::ShiftModifier) autoFlowFrom = page;
+			}
+			if (bb && bb->asTextFrame())
 			{
 				PageItem* bblast = bb;
 				while (bblast->nextInChain())
@@ -202,6 +213,31 @@
 						bb = m_doc->Items->takeAt(bb->ItemNr);
 						m_doc->renumberItemsInListOrder();
 					}
+					if (autoFlowFrom) {
+						bb->layout ();  // relayout the new frame right now
+						// autoflow the text, creating new pages as needed
+						int lastChar = currItem->itemText.length()-1;
+						int lastShown = bb->lastInFrame();
+						int page = autoFlowFrom;
+						while (lastShown < lastChar) {
+							// go to next page, creating it if needed
+							++page;
+							if (page >= m_doc->DocPages.size()) {
+								m_doc->addPage (page, CommonStrings::masterPageNormal, true);
+								m_doc->view()->addPage (page, false);
+							}
+
+							int frame = m_doc->addFullTextFrame (page);
+							if (frame == -1) break;
+							PageItem *bb2 = m_doc->Items->at (frame);
+							bb->link(bb2);
+							bb = bb2;
+							bb->layout();
+							int last = bb->lastInFrame();
+							if (last == lastShown) break;  // frame added no new content - bail out to prevent infinite looping
+							lastShown = last;
+						}
+					}
 					// m_view->updateContents();
 					// link calls PageItem::update	
 					// emit DocChanged();
@@ -224,7 +260,7 @@
 			}
 			else
 				m_doc->ElemToLink = NULL;
-			break;
+		} break;
 		case modeUnlinkFrames:
 			if (m->button() != Qt::LeftButton)
 				break;
Index: scribus/text/storytext.cpp
===================================================================
--- scribus/text/storytext.cpp	(revision 13437)
+++ scribus/text/storytext.cpp	(working copy)
@@ -195,6 +195,7 @@
 	
 	int otherStart  = onlySelection? other.startOfSelection() : 0;
 	int otherEnd    = onlySelection? other.endOfSelection() : other.length();
+	if (otherStart >= otherEnd) return;  // nothing to do
 	int cstyleStart = otherStart;
 	for (int i=otherStart; i < otherEnd; ++i) {
 		if (other.charStyle(i) == cstyle 
Index: scribus/scribusdoc.cpp
===================================================================
--- scribus/scribusdoc.cpp	(revision 13437)
+++ scribus/scribusdoc.cpp	(working copy)
@@ -1876,29 +1876,33 @@
 
 int ScribusDoc::addAutomaticTextFrame(const int pageNumber)
 {
-	if (!automaticTextFrames)
+	if (masterPageMode() || (!automaticTextFrames))
 		return -1;
+	int z = addFullTextFrame (pageNumber);
+	if (z < 0) return z;
+	if (LastAuto != 0) {
+		LastAuto->link(Items->at(z));
+	}	
+	else
+		FirstAuto = Items->at(z);
+	LastAuto = Items->at(z);
+	return z;
+}
+
+int ScribusDoc::addFullTextFrame(const int pageNumber)
+{
 	Page *addToPage=DocPages.at(pageNumber);
-	if ((!masterPageMode()) && (usesAutomaticTextFrames()))// && (!isLoading()))
-	{
-		int z = itemAdd(PageItem::TextFrame, PageItem::Unspecified,
-		                     addToPage->Margins.Left+addToPage->xOffset(),
-		                     addToPage->Margins.Top+addToPage->yOffset(), pageWidth-addToPage->Margins.Right-addToPage->Margins.Left,
-		                     pageHeight-addToPage->Margins.Bottom-addToPage->Margins.Top,
-							 1, CommonStrings::None, toolSettings.dPen, true);
-		Items->at(z)->isAutoText = true;
-		Items->at(z)->Cols = qRound(PageSp);
-		Items->at(z)->ColGap = PageSpa;
-		if (LastAuto != 0) {
-			LastAuto->link(Items->at(z));
-		}	
-		else
-			FirstAuto = Items->at(z);
-		LastAuto = Items->at(z);
-		Items->at(z)->setRedrawBounding();
-		return z;
-	}
-	return -1;
+	if (!addToPage) return -1;
+	if (masterPageMode()) return -1;
+	int z = itemAdd(PageItem::TextFrame, PageItem::Unspecified,
+			     addToPage->Margins.Left+addToPage->xOffset(),
+			     addToPage->Margins.Top+addToPage->yOffset(), pageWidth-addToPage->Margins.Right-addToPage->Margins.Left,
+			     pageHeight-addToPage->Margins.Bottom-addToPage->Margins.Top,
+						 1, CommonStrings::None, toolSettings.dPen, true);
+	Items->at(z)->Cols = qRound(PageSp);
+	Items->at(z)->ColGap = PageSpa;
+	Items->at(z)->setRedrawBounding();
+	return z;
 }
 
 
Index: scribus/canvasmode_edit.cpp
===================================================================
--- scribus/canvasmode_edit.cpp	(revision 13437)
+++ scribus/canvasmode_edit.cpp	(working copy)
@@ -961,25 +961,29 @@
 			else if (resizeGesture->frameHandle() < 0)
 			{
 				m_view->Deselect(true);
+				bool wantNormal = true;
 				if (SeleItem(m))
 				{
 					currItem = m_doc->m_Selection->itemAt(0);
 					if ((currItem->asTextFrame()) || (currItem->asImageFrame()))
 					{
 						m_view->requestMode(modeEdit);
+						wantNormal = false;
 					}
 					else
 					{
 						m_view->requestMode(submodePaintingDone);
 						qApp->changeOverrideCursor(QCursor(Qt::ArrowCursor));
 					}
+					if (currItem->asTextFrame())
+						m_view->slotSetCurs(m->globalPos().x(), m->globalPos().y());
 				}
 				else
 				{
 					m_view->requestMode(submodePaintingDone);
 					qApp->changeOverrideCursor(QCursor(Qt::ArrowCursor));
 				}
-				m_view->requestMode(modeNormal);
+				if (wantNormal) m_view->requestMode(modeNormal);
 				return;
 			}
 		}
Index: scribus/scribusdoc.h
===================================================================
--- scribus/scribusdoc.h	(revision 13437)
+++ scribus/scribusdoc.h	(working copy)
@@ -169,6 +169,14 @@
 	 */
 	int addAutomaticTextFrame(const int pageNumber);
 	/**
+	 * @brief Add a full-size text frame to the page. Similar to addAutomaticTextFrame,
+	 * but works regardless on whether automaticTextFrames is set, and it also
+	 * doesn't connect the frame with other automatically created frames
+	 * @param pageNumber page number
+	 * @return number of frame
+	 */
+	int addFullTextFrame(const int pageNumber);
+	/**
 	 * Set the left and right margins based on the location of the page
 	 * @param pageIndex 
 	 */
