diff --git a/plugins/content_types/custom/custom.inc b/plugins/content_types/custom/custom.inc
index a4a2def..0dee102 100644
--- a/plugins/content_types/custom/custom.inc
+++ b/plugins/content_types/custom/custom.inc
@@ -168,11 +168,20 @@ function ctools_custom_content_type_render($subtype, $conf, $args, $contexts) {
   $block->title   = filter_xss_admin($settings['title']);
 
   // Add keyword substitutions if we were configured to do so.
-  $content = $settings['body'];
+  if (is_array($settings['body'])) {
+    $content = $settings['body']['value'];
+    $format = $settings['body']['format'];
+  }
+  else {
+    $content = $settings['body'];
+    $format = $settings['format'];
+  }
   if (!empty($contexts) && !empty($settings['substitute'])) {
     $content = ctools_context_keyword_substitute($content, array(), $contexts);
   }
 
+  $block->content = check_markup($content, $format);
+
   $block->content = check_markup($content, $settings['format']);
   if ($settings['custom_type'] == 'fixed' && user_access('administer custom content')) {
     $block->admin_links = array(
@@ -240,7 +249,12 @@ function ctools_custom_content_type_admin_info($subtype, $conf) {
   else {
     // We also need to filter through XSS admin because <script> tags can
     // cause javascript which will interfere with our ajax.
-    $block->content = filter_xss_admin(check_markup($settings['body'], $settings['format']));
+    if (is_array($settings['body'])) {
+      $block->content = filter_xss_admin(check_markup($settings['body']['value'], $settings['body']['format']));
+    }
+    else {
+      $block->content = filter_xss_admin(check_markup($settings['body'], $settings['format']));
+    }
   }
   return $block;
 }
