diff --git a/editor/libeditor/html/nsHTMLEditRules.cpp b/editor/libeditor/html/nsHTMLEditRules.cpp
index 97e2921ef4c..afecfb6f6f1 100644
--- a/editor/libeditor/html/nsHTMLEditRules.cpp
+++ b/editor/libeditor/html/nsHTMLEditRules.cpp
@@ -6526,6 +6526,23 @@ nsHTMLEditRules::ReturnInListItem(nsISelection *aSelection,
if (NS_FAILED(res)) return res;
if (bIsEmptyNode)
{
+ nsCOMPtr nodeAtom = nsEditor::GetTag(aListItem);
+ if (nodeAtom == nsEditProperty::dd || nodeAtom == nsEditProperty::dt)
+ {
+ nsCOMPtr list;
+ PRInt32 itemOffset;
+ res = nsEditor::GetNodeLocation(aListItem, address_of(list), &itemOffset);
+ if (NS_FAILED(res)) return res;
+
+ nsAutoString listTag((nodeAtom == nsEditProperty::dt) ? NS_LITERAL_STRING("dd") : NS_LITERAL_STRING("dt"));
+ nsCOMPtr newListItem;
+ res = mHTMLEditor->CreateNode(listTag, list, itemOffset+1, getter_AddRefs(newListItem));
+ if (NS_FAILED(res)) return res;
+ res = mEditor->DeleteNode(aListItem);
+ if (NS_FAILED(res)) return res;
+ return aSelection->Collapse(newListItem, 0);
+ }
+
nsCOMPtr brNode;
res = mHTMLEditor->CopyLastEditableChildStyles(prevItem, aListItem, getter_AddRefs(brNode));
if (NS_FAILED(res)) return res;
diff --git a/editor/libeditor/html/nsHTMLEditor.cpp b/editor/libeditor/html/nsHTMLEditor.cpp
index 0d9608577f9..52ed4948cad 100644
--- a/editor/libeditor/html/nsHTMLEditor.cpp
+++ b/editor/libeditor/html/nsHTMLEditor.cpp
@@ -592,6 +592,8 @@ nsHTMLEditor::NodeIsBlockStatic(nsIDOMNode *aNode, PRBool *aIsBlock)
tagAtom==nsEditProperty::th ||
tagAtom==nsEditProperty::td ||
tagAtom==nsEditProperty::li ||
+ tagAtom==nsEditProperty::dt ||
+ tagAtom==nsEditProperty::dd ||
tagAtom==nsEditProperty::pre)
{
*aIsBlock = PR_TRUE;