diff --git a/src/openaccess_epub/main.py b/src/openaccess_epub/main.py
index <HASH>..<HASH> 100755
--- a/src/openaccess_epub/main.py
+++ b/src/openaccess_epub/main.py
@@ -189,6 +189,7 @@ def batch_input(args):
                       None,  # Does not use custom image path
                       batch=True)
         except:
+            error_file.write(item_path + '\n')
             traceback.print_exc(file=error_file)
 
         #Cleanup output directory, keeps EPUB and log
diff --git a/src/openaccess_epub/utils/element_methods.py b/src/openaccess_epub/utils/element_methods.py
index <HASH>..<HASH> 100644
--- a/src/openaccess_epub/utils/element_methods.py
+++ b/src/openaccess_epub/utils/element_methods.py
@@ -39,6 +39,23 @@ def getChildrenByTagName(self, tagName):
     return child_list
 
 
+def getOptionalChild(self, tagName, not_found=None):
+    """
+    This method is used to return the first child with the supplied tagName
+    when the child may or may not exist.
+
+    This saves repetitive coding of blocks to check for child existence.
+
+    The optional not_found argument (default None) can be used to define what
+    should be returned by the method if the child does not exist.
+    """
+    try:
+        child = self.getChildrenByTagName(tagName)[0]
+    except IndexError:
+        child = not_found
+    return child
+
+
 def removeAllAttributes(self):
     """
     This method will remove all attributes of any provided element.
adding file name to batch_traceback collection, and providing a new method to refactor optional children