--- sw/inc/doc.hxx.orig	2007-09-05 21:59:02.000000000 +0800
+++ sw/inc/doc.hxx	2007-09-11 14:55:09.000000000 +0800
@@ -616,6 +616,7 @@ class SwDoc :
     bool mbUnixForceZeroExtLeading                  : 1;   // FME 2006-10-09 #i60945#
     bool mbOldPrinterMetrics                        : 1;   // FME 2007-05-14 #147385#
     bool mbProtectForm                              : 1;
+	bool mbZHAutoFirstIndent						: 1;	// PFLIN 2007-09-03
     //
     // COMPATIBILITY FLAGS END
     //
--- sw/inc/IDocumentSettingAccess.hxx.orig	2007-09-05 21:58:59.000000000 +0800
+++ sw/inc/IDocumentSettingAccess.hxx	2007-09-11 14:55:57.000000000 +0800
@@ -88,6 +88,7 @@ namespace com { namespace sun { namespac
          UNIX_FORCE_ZERO_EXT_LEADING,
          USE_OLD_PRINTER_METRICS,
 	 PROTECT_FORM,
+	 	ZH_AUTO_FIRST_INDENT,
          // COMPATIBILITY FLAGS END
 
          BROWSE_MODE,
--- sw/source/ui/uno/SwXDocumentSettings.cxx.orig	2007-09-05 21:58:59.000000000 +0800
+++ sw/source/ui/uno/SwXDocumentSettings.cxx	2007-09-11 15:01:25.000000000 +0800
@@ -160,7 +160,8 @@ enum SwDocumentSettingsPropertyHandles
     HANDLE_CLIP_AS_CHARACTER_ANCHORED_WRITER_FLY_FRAMES,
     HANDLE_UNIX_FORCE_ZERO_EXT_LEADING,
     HANDLE_USE_OLD_PRINTER_METRICS,
-    HANDLE_PROTECT_FORM
+    HANDLE_PROTECT_FORM,
+	HANDLE_ZH_AUTO_FIRST_INDENT
 };
 
 MasterPropertySetInfo * lcl_createSettingsInfo()
@@ -211,6 +212,7 @@ MasterPropertySetInfo * lcl_createSettin
         { RTL_CONSTASCII_STRINGPARAM("UnxForceZeroExtLeading"), HANDLE_UNIX_FORCE_ZERO_EXT_LEADING, CPPUTYPE_BOOLEAN, 0, 0},
         { RTL_CONSTASCII_STRINGPARAM("UseOldPrinterMetrics"), HANDLE_USE_OLD_PRINTER_METRICS, CPPUTYPE_BOOLEAN, 0, 0},
         { RTL_CONSTASCII_STRINGPARAM("ProtectForm"), HANDLE_PROTECT_FORM, CPPUTYPE_BOOLEAN, 0, 0},
+        { RTL_CONSTASCII_STRINGPARAM("ZHAutoFirstIndent"), HANDLE_ZH_AUTO_FIRST_INDENT, CPPUTYPE_BOOLEAN, 0, 0},
 
 /*
  * As OS said, we don't have a view when we need to set this, so I have to
@@ -691,6 +693,12 @@ void SwXDocumentSettings::_setSingleValu
             mpDoc->set(IDocumentSettingAccess::PROTECT_FORM, bTmp);
         }
         break;
+		case HANDLE_ZH_AUTO_FIRST_INDENT:
+        {
+            sal_Bool bTmp = *(sal_Bool*)rValue.getValue();
+            mpDoc->set(IDocumentSettingAccess::ZH_AUTO_FIRST_INDENT, bTmp);
+        }
+		break;
 
         default:
 			throw UnknownPropertyException();
@@ -991,6 +999,12 @@ void SwXDocumentSettings::_getSingleValu
             rValue.setValue( &bTmp, ::getBooleanCppuType() );
         }
         break;
+        case HANDLE_ZH_AUTO_FIRST_INDENT:
+        {
+            sal_Bool bTmp = mpDoc->get(IDocumentSettingAccess::ZH_AUTO_FIRST_INDENT);
+            rValue.setValue( &bTmp, ::getBooleanCppuType() );
+        }
+        break;
 
         default:
 			throw UnknownPropertyException();
--- sw/source/core/doc/doc.cxx.orig	2007-09-05 21:58:59.000000000 +0800
+++ sw/source/core/doc/doc.cxx	2007-09-11 14:56:57.000000000 +0800
@@ -299,6 +299,7 @@ bool SwDoc::get(/*[in]*/ DocumentSetting
         case UNIX_FORCE_ZERO_EXT_LEADING: return mbUnixForceZeroExtLeading;
         case USE_OLD_PRINTER_METRICS: return mbOldPrinterMetrics;
 	case PROTECT_FORM: return mbProtectForm;
+		case ZH_AUTO_FIRST_INDENT: return mbZHAutoFirstIndent;			   
          // COMPATIBILITY FLAGS END
 
         case BROWSE_MODE: return mbBrowseMode;
@@ -414,6 +415,9 @@ void SwDoc::set(/*[in]*/ DocumentSetting
 	case PROTECT_FORM:
 	    mbProtectForm = value;
 	    break;
+		case ZH_AUTO_FIRST_INDENT:
+		mbZHAutoFirstIndent = value;
+		break;
 
          // COMPATIBILITY FLAGS END
 
--- sw/source/core/doc/docnew.cxx.orig	2007-09-05 21:59:02.000000000 +0800
+++ sw/source/core/doc/docnew.cxx	2007-09-11 14:57:12.000000000 +0800
@@ -417,6 +417,7 @@ SwDoc::SwDoc() :
     mbUnixForceZeroExtLeading               = false;        // hidden
     mbOldPrinterMetrics                     = false;        // hidden
     mbProtectForm                           = false;        // hidden
+	mbZHAutoFirstIndent						= true;			// hidden
 
     //
     // COMPATIBILITY FLAGS END
--- sw/source/core/text/itrcrsr.cxx.orig	2007-06-27 21:19:49.000000000 +0800
+++ sw/source/core/text/itrcrsr.cxx	2007-09-11 14:59:33.000000000 +0800
@@ -85,6 +85,10 @@
 #include <pormulti.hxx> 	// SwMultiPortion
 #endif
 
+#ifndef __SVTOOLS_CJKOPTIONS_HXX
+#include <svtools/cjkoptions.hxx>	//SvtCJKOptions
+#endif
+
 // Nicht reentrant !!!
 // wird in GetCharRect gesetzt und im UnitUp/Down ausgewertet.
 sal_Bool SwTxtCursor::bRightMargin = sal_False;
@@ -254,49 +258,56 @@ void SwTxtMargin::CtorInit( SwTxtFrm *pF
 			rSpace.IsAutoFirst() )
 		{
 			nFirstLineOfs = GetFnt()->GetSize( GetFnt()->GetActual() ).Height();
-			const SvxLineSpacingItem *pSpace = aLineInf.GetLineSpacing();
-			if( pSpace )
+			if ( pNode->getIDocumentSettingAccess()->get(IDocumentSettingAccess::ZH_AUTO_FIRST_INDENT) )
+			{
+					nFirstLineOfs *= 2;
+			}
+			else
 			{
-				switch( pSpace->GetLineSpaceRule() )
+				const SvxLineSpacingItem *pSpace = aLineInf.GetLineSpacing();
+				if( pSpace )
 				{
-					case SVX_LINE_SPACE_AUTO:
-					break;
-					case SVX_LINE_SPACE_MIN:
+					switch( pSpace->GetLineSpaceRule() )
 					{
-						if( nFirstLineOfs < KSHORT( pSpace->GetLineHeight() ) )
-							nFirstLineOfs = pSpace->GetLineHeight();
+						case SVX_LINE_SPACE_AUTO:
 						break;
-					}
-					case SVX_LINE_SPACE_FIX:
-						nFirstLineOfs = pSpace->GetLineHeight();
-					break;
-					default: ASSERT( sal_False, ": unknown LineSpaceRule" );
-				}
-				switch( pSpace->GetInterLineSpaceRule() )
-				{
-					case SVX_INTER_LINE_SPACE_OFF:
-					break;
-					case SVX_INTER_LINE_SPACE_PROP:
-					{
-						long nTmp = pSpace->GetPropLineSpace();
-						// 50% ist das Minimum, bei 0% schalten wir auf
-						// den Defaultwert 100% um ...
-						if( nTmp < 50 )
-							nTmp = nTmp ? 50 : 100;
-
-						nTmp *= nFirstLineOfs;
-						nTmp /= 100;
-						if( !nTmp )
-							++nTmp;
-						nFirstLineOfs = (KSHORT)nTmp;
+						case SVX_LINE_SPACE_MIN:
+						{
+							if( nFirstLineOfs < KSHORT( pSpace->GetLineHeight() ) )
+								nFirstLineOfs = pSpace->GetLineHeight();
+							break;
+						}
+						case SVX_LINE_SPACE_FIX:
+							nFirstLineOfs = pSpace->GetLineHeight();
 						break;
+						default: ASSERT( sal_False, ": unknown LineSpaceRule" );
 					}
-					case SVX_INTER_LINE_SPACE_FIX:
+					switch( pSpace->GetInterLineSpaceRule() )
 					{
-						nFirstLineOfs += pSpace->GetInterLineSpace();
+						case SVX_INTER_LINE_SPACE_OFF:
 						break;
+						case SVX_INTER_LINE_SPACE_PROP:
+						{
+							long nTmp = pSpace->GetPropLineSpace();
+							// 50% ist das Minimum, bei 0% schalten wir auf
+							// den Defaultwert 100% um ...
+							if( nTmp < 50 )
+								nTmp = nTmp ? 50 : 100;
+	
+							nTmp *= nFirstLineOfs;
+							nTmp /= 100;
+							if( !nTmp )
+								++nTmp;
+							nFirstLineOfs = (KSHORT)nTmp;
+							break;
+						}
+						case SVX_INTER_LINE_SPACE_FIX:
+						{
+							nFirstLineOfs += pSpace->GetInterLineSpace();
+							break;
+						}
+						default: ASSERT( sal_False, ": unknown InterLineSpaceRule" );
 					}
-					default: ASSERT( sal_False, ": unknown InterLineSpaceRule" );
 				}
 			}
 		}
