Index: java/org/apache/fop/fo/flow/Block.java
===================================================================
--- java/org/apache/fop/fo/flow/Block.java	(revision 1475804)
+++ java/org/apache/fop/fo/flow/Block.java	(working copy)
@@ -49,6 +49,9 @@
   */
 public class Block extends FObjMixed implements BreakPropertySet,
         CommonAccessibilityHolder {
+	
+	// Used to keep track of the number of blocks inside an RTF list
+	private int index;
 
     // used for FO validation
     private boolean blockOrInlineItemFound = false;
@@ -357,5 +360,13 @@
     public int getNameId() {
         return FO_BLOCK;
     }
+    
+    public int getIndex() {
+    	return index;
+    }
+    
+    public void setIndex(int id) {
+    	index = id;
+    }
 
 }
Index: java/org/apache/fop/fo/flow/ListItemBody.java
===================================================================
--- java/org/apache/fop/fo/flow/ListItemBody.java	(revision 1475804)
+++ java/org/apache/fop/fo/flow/ListItemBody.java	(working copy)
@@ -27,6 +27,8 @@
  * <code>fo:list-item-body object</code></a>.
  */
 public class ListItemBody extends AbstractListItemPart {
+	
+	private int nbListItems = 0;
 
     /**
      * @param parent FONode that is the parent of this object
@@ -40,17 +42,45 @@
         super.startOfNode();
         getFOEventHandler().startListBody(this);
     }
+    
+    public int getChildCount(FONode node, int id) {
+    	if (node.getName().equals("fo:block")) {
+    		Block b = (Block)node;
+    		b.setIndex(id);
+    	}
+    	int childCount = 0;
+		FONodeIterator iter = node.getChildNodes();
+		while (iter.hasNext()) {
+			FONode cnode = (FONode)iter.next();
+			if (cnode.getName().equals("fo:block")) {
+				childCount += 1 + getChildCount(cnode, ++id);
+			}
+		}
+    	return childCount;
+    }
 
     /** {@inheritDoc} */
     public void endOfNode() throws FOPException {
         super.endOfNode();
         getFOEventHandler().endListBody(this);
+		
+		// Calculate the number of childs
+        FONodeIterator iter = this.getChildNodes();
+        nbListItems = 0;
+        int id = 0;
+        while (iter.hasNext()) {
+        	nbListItems += 1 + getChildCount((FONode)iter.next(), id++);
+        }
     }
 
     /** {@inheritDoc} */
     public String getLocalName() {
         return "list-item-body";
     }
+	
+	public int getChildCount() {
+		return nbListItems;
+	}
 
     /**
      * {@inheritDoc}
Index: java/org/apache/fop/render/rtf/RTFHandler.java
===================================================================
--- java/org/apache/fop/render/rtf/RTFHandler.java	(revision 1475804)
+++ java/org/apache/fop/render/rtf/RTFHandler.java	(working copy)
@@ -430,8 +430,20 @@
                     true, this);
 
             RtfTextrun textrun = container.getTextrun();
+            if (container instanceof RtfListItem) {
+                // Find node (fo:list-item-body)
+                FONode node = bl.getParent();
+                while (!node.getName().equals("fo:list-item-body")) {
+                	node = node.getParent();
+                }
+                	
+                ListItemBody p = (ListItemBody)node;
+                textrun.setParagraphControlSwitch("par");
+                if (bl.getIndex() < (p.getChildCount() - 1)) {
+                	textrun.setParagraphControlSwitch("line");
+                }
+            }
             RtfParagraphBreak par = textrun.addParagraphBreak();
-
             RtfTableCell cellParent = (RtfTableCell)textrun.getParentOfClass(RtfTableCell.class);
             if (cellParent != null && par != null) {
                 int iDepth = cellParent.findChildren(textrun);
Index: java/org/apache/fop/render/rtf/rtflib/rtfdoc/RtfParagraphBreak.java
===================================================================
--- java/org/apache/fop/render/rtf/rtflib/rtfdoc/RtfParagraphBreak.java	(revision 1475804)
+++ java/org/apache/fop/render/rtf/rtflib/rtfdoc/RtfParagraphBreak.java	(working copy)
@@ -33,6 +33,11 @@
             throws IOException {
         super(parent, w);
     }
+    RtfParagraphBreak(RtfContainer parent, Writer w, String cs)
+            throws IOException {
+        super(parent, w);
+        switchControlWord(cs);
+    }
 
     /**
      * @return true if this element would generate no "useful" RTF content
@@ -57,7 +62,7 @@
      * @return boolean
      */
     public boolean canHide() {
-        return this.controlWord.equals (DEFAULT_PARAGRAPH);
+        return this.controlWord.equals (DEFAULT_PARAGRAPH) || controlWord.equals("line");
     }
 
     /**
Index: java/org/apache/fop/render/rtf/rtflib/rtfdoc/RtfTextrun.java
===================================================================
--- java/org/apache/fop/render/rtf/rtflib/rtfdoc/RtfTextrun.java	(revision 1475804)
+++ java/org/apache/fop/render/rtf/rtflib/rtfdoc/RtfTextrun.java	(working copy)
@@ -51,6 +51,7 @@
 
     private boolean bSuppressLastPar = false;
     private RtfListItem rtfListItem;
+	private String parcs = "par";
 
     /**
      * logging instance
@@ -263,6 +264,10 @@
         return new RtfFootnote(this, writer);
     }
 
+	public void setParagraphControlSwitch(String cs) {
+		parcs = cs;
+	}
+	
     /**
      * Inserts paragraph break before all close group marks.
      *
@@ -289,7 +294,7 @@
         if (children.size() != 0) {
             // add paragraph break and restore all deleted close group marks
             setChildren(children);
-            par = new RtfParagraphBreak(this, writer);
+            par = new RtfParagraphBreak(this, writer, parcs);
             for (int i = 0; i < deletedCloseGroupCount; i++) {
                 addCloseGroupMark(((Integer)tmp.pop()).intValue());
             }
