diff -urNwb -x CVS -x WIN32_20.1_i386_DBG -x WIN32_20.1_i386_OBJ -x abidiff.cmd -x patch.txt -x .#*.* abi.org\src\/text/fmt/xp/fl_BlockLayout.cpp abi.839\src\/text/fmt/xp/fl_BlockLayout.cpp
--- abi.org\src\/text/fmt/xp/fl_BlockLayout.cpp	Thu May 11 09:00:57 2000
+++ abi.839\src\/text/fmt/xp/fl_BlockLayout.cpp	Mon May 15 18:18:59 2000
@@ -307,7 +307,7 @@
 			UT_ASSERT(iPosLen < sizeof pszPosition);
 
 			memcpy(pszPosition, pStart, iPosLen);
-			pszPosition[i] = 0;
+            pszPosition[iPosLen] = 0;
 
 			iPosition = pG->convertDimension(pszPosition);
 
diff -urNwb -x CVS -x WIN32_20.1_i386_DBG -x WIN32_20.1_i386_OBJ -x abidiff.cmd -x patch.txt -x .#*.* abi.org\src\/wp/ap/xp/ap_TopRuler.cpp abi.839\src\/wp/ap/xp/ap_TopRuler.cpp
--- abi.org\src\/wp/ap/xp/ap_TopRuler.cpp	Thu Apr 20 09:03:47 2000
+++ abi.839\src\/wp/ap/xp/ap_TopRuler.cpp	Mon May 15 20:54:10 2000
@@ -1721,6 +1721,14 @@
 			UT_sint32 oldDraggingCenter = m_draggingCenter;
 			UT_Rect oldDraggingRect = m_draggingRect;
 			m_draggingCenter = xAbsLeft + xgrid;
+
+            UT_sint32 iLeftPos = xAbsLeft + m_infoCache.u.c.m_xColumnWidth - m_infoCache.m_xrRightIndent;
+
+            if((UT_sint32)m_infoCache.u.c.m_xColumnWidth + xAbsLeft - m_draggingCenter - m_infoCache.m_xrRightIndent  < (UT_sint32)m_minColumnWidth)
+            {
+                m_draggingCenter = xAbsLeft + m_infoCache.u.c.m_xColumnWidth -  m_infoCache.m_xrRightIndent - m_minColumnWidth;
+            }
+
 			_getParagraphMarkerRects(&m_infoCache,m_draggingCenter,0,0,&m_draggingRect,NULL,NULL);
 			if (!m_bBeforeFirstMotion && (m_draggingCenter != oldDraggingCenter))
 				draw(&oldDraggingRect,&m_infoCache);
@@ -1758,6 +1766,15 @@
 			UT_Rect oldDragging2Rect = m_dragging2Rect;
 			m_draggingCenter  = xAbsLeft + xgrid;
 			m_dragging2Center = xAbsLeft + xgridTagAlong;
+
+            UT_sint32 iLeftPos = xAbsLeft + m_infoCache.u.c.m_xColumnWidth - m_infoCache.m_xrRightIndent;
+
+            if((UT_sint32)m_infoCache.u.c.m_xColumnWidth + xAbsLeft - m_draggingCenter - m_infoCache.m_xrRightIndent  < (UT_sint32)m_minColumnWidth)
+            {
+                m_draggingCenter = xAbsLeft + m_infoCache.u.c.m_xColumnWidth -  m_infoCache.m_xrRightIndent - m_minColumnWidth;
+                m_dragging2Center = m_draggingCenter + xgridTagAlong - xgrid;
+            }
+
 			_getParagraphMarkerRects(&m_infoCache,
 									 m_draggingCenter,0,m_dragging2Center,
 									 &m_draggingRect,NULL,&m_dragging2Rect);
@@ -1789,6 +1806,13 @@
 			UT_sint32 oldDraggingCenter = m_draggingCenter;
 			UT_Rect oldDraggingRect = m_draggingRect;
 			m_draggingCenter = xAbsRight - xgrid;
+
+            UT_sint32 iLeftMaxPos = UT_MAX(m_infoCache.m_xrLeftIndent,m_infoCache.m_xrLeftIndent + m_infoCache.m_xrFirstLineIndent);
+            if(m_draggingCenter - (iLeftMaxPos + xAbsLeft) < m_minColumnWidth)
+            {
+                m_draggingCenter = xAbsLeft + iLeftMaxPos + m_minColumnWidth;
+            }
+
 			_getParagraphMarkerRects(&m_infoCache,0,m_draggingCenter,0,NULL,&m_draggingRect,NULL);
 			if (!m_bBeforeFirstMotion && (m_draggingCenter != oldDraggingCenter))
 				draw(&oldDraggingRect,&m_infoCache);
