diff --git a/bbb-common-web/src/main/scala/org/bigbluebutton/api2/domain/Recording.scala b/bbb-common-web/src/main/scala/org/bigbluebutton/api2/domain/Recording.scala
index 122d752547865a90372feefa62f9d232c5a9344d..7f12fc689f525fadfe1a497430d9086634b402f8 100755
--- a/bbb-common-web/src/main/scala/org/bigbluebutton/api2/domain/Recording.scala
+++ b/bbb-common-web/src/main/scala/org/bigbluebutton/api2/domain/Recording.scala
@@ -203,7 +203,8 @@ case class RecMeta(id: String, meetingId: String, internalMeetingId: Option[ Str
       val buffer = new scala.xml.NodeBuffer
 
       map.foreach {case (key, value) =>
-        val m = "<" + key + ">" + value + "</" + key + ">"
+        // Need to escape value otherwise loadString would choke.
+        val m = "<" + key + ">" + xml.Utility.escape(value) + "</" + key + ">"
         buffer += scala.xml.XML.loadString(m)
       }
       <metadata>{buffer}</metadata>
@@ -281,7 +282,8 @@ case class RecMeta(id: String, meetingId: String, internalMeetingId: Option[ Str
       val buffer = new scala.xml.NodeBuffer
 
       map.foreach {case (key, value) =>
-        val m = "<" + key + ">" + value + "</" + key + ">"
+        // Need to escape value otherwise loadString would choke.
+        val m = "<" + key + ">" + xml.Utility.escape(value) + "</" + key + ">"
         buffer += scala.xml.XML.loadString(m)
       }
       <meta>{buffer}</meta>
diff --git a/bbb-common-web/src/main/scala/org/bigbluebutton/api2/util/RecMetaXmlHelper.scala b/bbb-common-web/src/main/scala/org/bigbluebutton/api2/util/RecMetaXmlHelper.scala
index dda58baeb4b10e4c3fed3d9a9c7779e120a96493..9773d95faf4dfda4b620c58d7a3d577bb40420aa 100755
--- a/bbb-common-web/src/main/scala/org/bigbluebutton/api2/util/RecMetaXmlHelper.scala
+++ b/bbb-common-web/src/main/scala/org/bigbluebutton/api2/util/RecMetaXmlHelper.scala
@@ -39,6 +39,10 @@ class RecMetaXmlHelper extends RecordingServiceGW with LogHelper {
       try {
         writer.write("<?xml version='1.0' encoding='" + Encoding + "'?>\n")
         writer.write(pp.format(metadata.getRecMeta.toMetadataXml()))
+      } catch {
+        case ex: Exception =>
+          logger.info("Exception while saving {}", xml.getAbsolutePath)
+          logger.info("Exception details: {}", ex.fillInStackTrace())
       } finally {
         writer.close()
       }
@@ -47,25 +51,45 @@ class RecMetaXmlHelper extends RecordingServiceGW with LogHelper {
         logger.info("Failed to save metadataxml {}", xml.getAbsolutePath)
       case ex: Exception =>
         logger.info("Exception while saving {}", xml.getAbsolutePath)
-        logger.info("Exception details: {}", ex.getMessage)
+        logger.info("Exception details: {}", ex.fillInStackTrace())
     }
   }
 
   def getRecordingMetadata(xml: File): Option[RecordingMetadata] = {
     loadMetadataXml(xml.getAbsolutePath) match {
       case Some(mXML) =>
-        RecMeta.getRecMeta(mXML) match {
-          case Some(rm) =>
-            val rec = new RecordingMetadata()
-            rec.setRecMeta(rm)
-            Some(rec)
-          case None => None
+        try {
+          RecMeta.getRecMeta(mXML) match {
+            case Some(rm) =>
+              val rec = new RecordingMetadata()
+              rec.setRecMeta(rm)
+              Some(rec)
+            case None => None
+          }
+        } catch {
+          case ex: Exception =>
+            logger.info("Exception while saving {}", xml.getAbsolutePath)
+            logger.info("Exception details: {}", ex.fillInStackTrace())
+            None
         }
+
       case None => None
     }
   }
 
   def getRecordings2x(recs: util.ArrayList[RecordingMetadata]): String = {
+
+    def toXml(rec: RecMeta): Option[Elem] = {
+      try {
+        Some(rec.toXml())
+      } catch {
+        case ex: Exception =>
+          logger.info("Exception while building xml for recording {}", rec.id)
+          logger.info("Exception details: {}", ex.fillInStackTrace())
+          None
+      }
+    }
+
     val recMeta = recs.asScala map(r => r.getRecMeta)
     if (recMeta.isEmpty) {
       val resp =
@@ -80,7 +104,9 @@ class RecMetaXmlHelper extends RecordingServiceGW with LogHelper {
       p.format(<recording>{resp}</recording>)
     } else {
       val buffer = new scala.xml.NodeBuffer
-      recMeta foreach(rm => buffer += rm.toXml())
+      recMeta foreach { rm =>
+        toXml(rm) foreach (r => buffer += r)
+      }
       val resp =
         <response>
           <returncode>SUCCESS</returncode>