diff --git a/ext/simplexml/simplexml.c b/ext/simplexml/simplexml.c
index 835bb394ee7..e95a6593971 100644
--- a/ext/simplexml/simplexml.c
+++ b/ext/simplexml/simplexml.c
@@ -451,9 +451,14 @@ static void sxe_prop_dim_write(zval *object, zval *member, zval *value, zend_boo
attr = (xmlAttrPtr)node;
test = sxe->iter.name != NULL;
} else if (sxe->iter.type != SXE_ITER_CHILD) {
+ mynode = node;
node = php_sxe_get_first_node(sxe, node TSRMLS_CC);
attr = node ? node->properties : NULL;
test = 0;
+ if (attribs && !node && sxe->iter.type == SXE_ITER_ELEMENT) {
+ node = xmlNewChild(mynode, mynode->ns, sxe->iter.name, NULL);
+ attr = node->properties;
+ }
}
mynode = node;
diff --git a/ext/simplexml/tests/028.phpt b/ext/simplexml/tests/028.phpt
new file mode 100755
index 00000000000..753056b9ad8
--- /dev/null
+++ b/ext/simplexml/tests/028.phpt
@@ -0,0 +1,42 @@
+--TEST--
+SimpleXML: Adding an elements without text
+--SKIPIF--
+
+--FILE--
+
+EOF;
+
+function traverse_xml($xml, $pad = '')
+{
+ $name = $xml->getName();
+ echo "$pad<$name";
+ foreach($xml->attributes() as $attr => $value)
+ {
+ echo " $attr=\"$value\"";
+ }
+ echo ">" . trim($xml) . "\n";
+ foreach($xml->children() as $node)
+ {
+ traverse_xml($node, $pad.' ');
+ }
+ echo $pad."$name>\n";
+}
+
+
+$people = simplexml_load_string($xml);
+traverse_xml($people);
+$people->person['name'] = 'John';
+traverse_xml($people);
+
+?>
+===DONE===
+--EXPECTF--
+
+
+
+
+
+
+===DONE===