diff --git a/ds.module b/ds.module
index 6e0226e..6fff98f 100644
--- a/ds.module
+++ b/ds.module
@@ -1131,10 +1131,41 @@ function ds_render_block_field($field) {
   if (isset($block['content']) && is_array($block['content'])) {
     $block['content'] = drupal_render($block['content']);
   }
-  if (!empty($block)) {
+  if (!empty($block['content'])) {
+
+    global $theme_key;
+    $block_title = db_query("SELECT title FROM {block} WHERE module = :module AND delta = :delta AND theme = :theme", array(':module' => $module, ':delta' => $delta, ':theme' => $theme_key))->fetchField();
+    if (!empty($block_title)) {
+      $block['subject'] = $block_title == '<none>' ? '' : check_plain($block_title);
+    }
+
+    // i18n support.
+    if (function_exists('i18n_block_block_view_alter')) {
+      // Check language visibility.
+      global $language;
+      static $block_languages = FALSE;
+      if (!$block_languages) {
+        $block_languages = array();
+        $result = db_query('SELECT module, delta, language FROM {i18n_block_language}');
+        foreach ($result as $record) {
+          $block_languages[$record->module][$record->delta][$record->language] = TRUE;
+        }
+      }
+      if (isset($block_languages[$module][$delta]) && !isset($block_languages[$module][$delta][$language->language])) {
+        return;
+      }
+
+      // Translate.
+      $i18n_block = db_query("SELECT * FROM {block} WHERE module = :module AND delta = :delta", array(':module' => $module, ':delta' => $delta))->fetchObject();
+      i18n_block_block_view_alter($block, $i18n_block);
+      // OH WTF ...
+      if (!empty($i18n_block->title)) {
+        $block['subject'] = $i18n_block->title;
+      }
+    }
+
     switch ($field['properties']['block_render']) {
       case DS_BLOCK_TEMPLATE:
-        global $theme_key;
         $block = (object) $block;
         if (!isset($block->subject)) {
           $block->subject = NULL;
@@ -1142,10 +1173,6 @@ function ds_render_block_field($field) {
         $block->region = NULL;
         $block->module = $module;
         $block->delta = $delta;
-        $block_title = db_query("SELECT title FROM {block} WHERE module = :module AND delta = :delta AND theme = :theme", array(':module' => $module, ':delta' => $delta, ':theme' => $theme_key))->fetchField();
-        if (!empty($block_title)) {
-          $block->subject = $block_title == '<none>' ? '' : check_plain($block_title);
-        }
         $elements = array('elements' => array('#block' => $block, '#children' => $block->content));
         // Add contextual links
         if (module_exists('contextual') && user_access('access contextual links')) {
@@ -1154,12 +1181,10 @@ function ds_render_block_field($field) {
         return theme('block', $elements);
         break;
       case DS_BLOCK_TITLE_CONTENT:
-        $content = '<h2 class="block-title">' . $block['subject'] . '</h2>';
-        $content .= $block['content'];
-        return $content;
+        return '<h2 class="block-title">' . $block->subject . '</h2>' . $block->content;
         break;
       case DS_BLOCK_CONTENT:
-        return $block['content'];
+        return $block->content;
         break;
     }
   }
