diff --git a/tinyxml2.cpp b/tinyxml2.cpp
index 0467d17..f260513 100755
--- a/tinyxml2.cpp
+++ b/tinyxml2.cpp
@@ -1962,41 +1962,34 @@
 }
 
 
-XMLElement* XMLElement::PushNewChildElement(const char* name)
+XMLElement* XMLElement::InsertNewChildElement(const char* name)
 {
-    XMLElement* element = _document->NewElement(name);
-    // by construction, the new element has the same Document, so this
-    // call will always succeed
-    InsertEndChild(element);
-    return element;
+    XMLElement* node = _document->NewElement(name);
+    return InsertEndChild(node) ? node : 0;
 }
 
-XMLComment* XMLElement::PushNewChildComment(const char* comment)
+XMLComment* XMLElement::InsertNewComment(const char* comment)
 {
-    XMLComment* element = _document->NewComment(comment);
-    InsertEndChild(element);
-    return element;
+    XMLComment* node = _document->NewComment(comment);
+    return InsertEndChild(node) ? node : 0;
 }
 
-XMLText* XMLElement::PushNewChildText(const char* text)
+XMLText* XMLElement::InsertNewText(const char* text)
 {
-    XMLText* element = _document->NewText(text);
-    InsertEndChild(element);
-    return element;
+    XMLText* node = _document->NewText(text);
+    return InsertEndChild(node) ? node : 0;
 }
 
-XMLDeclaration* XMLElement::PushNewChildDeclaration(const char* text)
+XMLDeclaration* XMLElement::InsertNewDeclaration(const char* text)
 {
-    XMLDeclaration* element = _document->NewDeclaration(text);
-    InsertEndChild(element);
-    return element;
+    XMLDeclaration* node = _document->NewDeclaration(text);
+    return InsertEndChild(node) ? node : 0;
 }
 
-XMLUnknown* XMLElement::PushNewUnknown(const char* text)
+XMLUnknown* XMLElement::InsertNewUnknown(const char* text)
 {
-    XMLUnknown* element = _document->NewUnknown(text);
-    InsertEndChild(element);
-    return element;
+    XMLUnknown* node = _document->NewUnknown(text);
+    return InsertEndChild(node) ? node : 0;
 }
 
 
diff --git a/tinyxml2.h b/tinyxml2.h
index 25b59c3..cb8bad5 100755
--- a/tinyxml2.h
+++ b/tinyxml2.h
@@ -1646,15 +1646,15 @@
         Convenience method to create a new XMLElement and add it as last (right)
         child of this node. Returns the created and inserted element.
     */
-    XMLElement* PushNewChildElement(const char* name);
-    /// See PushNewChildElement()
-    XMLComment* PushNewChildComment(const char* comment);
-    /// See PushNewChildElement()
-    XMLText* PushNewChildText(const char* text);
-    /// See PushNewChildElement()
-    XMLDeclaration* PushNewChildDeclaration(const char* text);
-    /// See PushNewChildElement()
-    XMLUnknown* PushNewUnknown(const char* text);
+    XMLElement* InsertNewChildElement(const char* name);
+    /// See InsertNewChildElement()
+    XMLComment* InsertNewComment(const char* comment);
+    /// See InsertNewChildElement()
+    XMLText* InsertNewText(const char* text);
+    /// See InsertNewChildElement()
+    XMLDeclaration* InsertNewDeclaration(const char* text);
+    /// See InsertNewChildElement()
+    XMLUnknown* InsertNewUnknown(const char* text);
 
 
     // internal:
