diff -ubr /tmp/mollom/includes/mollom.class.inc ./includes/mollom.class.inc
--- /tmp/mollom/includes/mollom.class.inc	2015-06-10 20:22:06.000000000 +0700
+++ ./includes/mollom.class.inc	2015-07-02 16:29:51.816975125 +0700
@@ -507,9 +507,15 @@
       }
       elseif (strstr($response->headers['content-type'], 'application/xml')) {
         try {
+          if (class_exists('SimpleXmlIterator')) {
           $response->elements = new SimpleXmlIterator($response->body);
           $response->data = $this->parseXML($response->elements);
         }
+          else {
+            $response->elements = new SimpleXmlElement($response->body);
+            $response->data = $this->parseXMLWithNoSimpleXMLIterator($response->elements);
+          }
+        }
         catch (Exception $e) {
           // Invalid XML so just set the data back to blank.
           $response->data = array();
@@ -741,6 +747,44 @@
   abstract protected function request($method, $server, $path, $query = NULL, array $headers = array());
 
   /**
+   * Support for PHP build with no SimpleXMLIterator class.
+   *
+   * Some PHP build does not ship with SimpleXMLIterator class, such as HHVM.
+   * Use this function to support that poor build in exchange with speed.
+   *
+   * @param SimpleXMLIterator $sxi
+   *   A SimpleXMLIterator structure of the server response body.
+   *
+   * @return array
+   *   An associative, possibly multidimensional array.
+   */
+  public static function parseXMLWithNoSimpleXMLIterator(SimpleXMLElement $sxe) {
+    if (!$sxe->count()) {
+      return strval($sxe);
+    }
+
+    $a = array();
+    $remove = array();
+    foreach ($sxe as $key => $element) {
+      if (!isset($a[$key])) {
+        $a[$key] = self::parseXMLWithNoSimpleXMLIterator($element);
+      }
+      else {
+        if (!isset($remove[$key])) {
+          $a[] = $a[$key];
+          $remove[$key] = $key;
+        }
+        $a[] = self::parseXMLWithNoSimpleXMLIterator($element);
+      }
+    }
+
+    foreach ($remove as $key) {
+      unset($a[$key]);
+    }
+    return $a;
+  }
+
+  /**
    * Converts a SimpleXMLIterator structure into an associative array.
    *
    * Used to parse an XML response from Mollom servers into a PHP array. For
@@ -756,7 +800,10 @@
    * @return array
    *   An associative, possibly multidimensional array.
    */
-  public static function parseXML(SimpleXMLIterator $sxi) {
+  public static function parseXML($sxi) {
+    if (!is_a($sxi, 'SimpleXMLIterator')) {
+      throw new Exception("Class 'SimpleXMLIterator' not found");
+    }
     $a = array();
     $remove = array();
     for ($sxi->rewind(); $sxi->valid(); $sxi->next()) {
diff -ubr /tmp/mollom/mollom.module ./mollom.module
--- /tmp/mollom/mollom.module	2015-06-10 20:22:06.000000000 +0700
+++ ./mollom.module	2015-07-02 16:25:20.324341750 +0700
@@ -1,5 +1,4 @@
 <?php
-
 /**
  * @file
  * Main Mollom integration module functions.
