diff --git a/plugins/sources/xml.inc b/plugins/sources/xml.inc
index 7b0f3cf..76a7cc8 100644
--- a/plugins/sources/xml.inc
+++ b/plugins/sources/xml.inc
@@ -375,6 +375,13 @@ class MigrateItemsXML extends MigrateItems {
   protected $currentUrl;
 
   /**
+   * An array of namespaces to explicitly register before Xpath queries.
+   *
+   * @var  namespaces
+   */
+  protected $namespaces;
+
+  /**
    * Stores the loaded XML document from currentUrl.
    *
    * @var SimpleXMLElement
@@ -433,7 +440,7 @@ class MigrateItemsXML extends MigrateItems {
   /**
    * {@inheritdoc}
    */
-  public function __construct($urls, $item_xpath = 'item', $item_id_xpath = 'id') {
+  public function __construct($urls, $item_xpath = 'item', $item_id_xpath = 'id', $namespaces = array()) {
     parent::__construct();
     if (!is_array($urls)) {
       $urls = array($urls);
@@ -441,6 +448,7 @@ class MigrateItemsXML extends MigrateItems {
     $this->urls = $urls;
     $this->itemXpath = $item_xpath;
     $this->itemIDXpath = $item_id_xpath;
+    $this->namespaces = $namespaces;
 
     // Suppress errors during parsing, so we can pick them up after.
     libxml_use_internal_errors(TRUE);
@@ -470,7 +478,7 @@ class MigrateItemsXML extends MigrateItems {
   public function &xml() {
     if (!empty($this->currentUrl)) {
       $this->currentXml = simplexml_load_file($this->currentUrl);
-      if (!$this->currentXml) {
+      if ($this->currentXml === FALSE) {
         Migration::displayMessage(t(
           'Loading of !currentUrl failed:',
           array('!currentUrl' => $this->currentUrl)
@@ -479,6 +487,9 @@ class MigrateItemsXML extends MigrateItems {
           Migration::displayMessage(self::parseLibXMLError($error));
         }
       }
+      else {
+        $this->registerNamespaces($this->currentXml);
+      }
     }
     return $this->currentXml;
   }
@@ -576,6 +587,11 @@ class MigrateItemsXML extends MigrateItems {
     $ids = array();
     if ($result) {
       foreach ($result as $element) {
+        if (!isset($element)) {
+          continue;
+        }
+        // Namespaces must be reapplied after xpath().
+        $this->registerNamespaces($element);
         $id = $this->getItemID($element);
         if (!is_null($id)) {
           $ids[] = (string) $id;
@@ -646,6 +662,11 @@ class MigrateItemsXML extends MigrateItems {
 
     if ($result) {
       foreach ($result as $item_xml) {
+        if (!isset($item_xml)) {
+          continue;
+        }
+        // Namespaces must be reapplied after xpath().
+        $this->registerNamespaces($item_xml);
         $id = $this->getItemID($item_xml);
         $item = new stdclass();
         $item->xml = $item_xml;
@@ -660,6 +681,17 @@ class MigrateItemsXML extends MigrateItems {
   }
 
   /**
+   * Explicitly register namespaces on an xml element.
+   *
+   * @param SimpleXMLElement$xml
+   */
+  protected function registerNamespaces(SimpleXMLElement &$xml) {
+    foreach ($this->namespaces as $prefix => $namespace) {
+      $xml->registerXPathNamespace($prefix, $namespace);
+    }
+  }
+
+  /**
    * Get the item ID from the itemXML based on itemIDXpath.
    *
    * @param SimpleXMLElement $item_xml
@@ -685,7 +717,7 @@ class MigrateItemsXML extends MigrateItems {
    */
   protected function getElementValue($item_xml, $xpath) {
     $value = NULL;
-    if ($item_xml) {
+    if ($item_xml->asXML()) {
       $result = $item_xml->xpath($xpath);
       if ($result) {
         $value = (string) $result[0];
