diff --git a/style.css b/style.css
index ac08045..e3c5e6c 100644
--- a/style.css
+++ b/style.css
@@ -824,6 +824,39 @@ table.hosting-table th {
   margin:0px 0px 10px;
 }
 
+.hosting-info-table .item {
+  border-bottom: 1px solid #e8e8e8;
+}
+
+.hosting-info-table .item:last-child {
+  border-bottom: none;
+}
+
+.hosting-info-table tbody,
+.hosting-info-table td {
+  border-top: none;
+}
+
+.hosting-info-table .item-title {
+  width: 95px;
+  font-size: 9px;
+  font-weight: bold;
+  padding: 0;
+  vertical-align: top;
+  padding: 5px 5px 4px;
+}
+
+.hosting-info-table .item-value {
+  vertical-align: top;
+  padding: 5px 5px 4px;
+}
+
+.hosting-info-table .item-description {
+  color: #666666;
+  margin: 5px 0;
+  line-height: 15px;
+}
+
 table.views-table { clear: both }
 
   #hosting-site-edit-info,
diff --git a/template.php b/template.php
index e0f244e..e97e1c0 100644
--- a/template.php
+++ b/template.php
@@ -86,4 +86,110 @@ function eldir_preprocess_node(&$variables, $hook) {
       $variables['title'] = "<span class='label'>{$types[$type]->name}</span>" . $variables['title'];
     }
   }
+
+  if (isset($variables['content']['info']) && is_array($variables['content']['info'])) {
+    // Change the rendering of the info area to proper table.
+    $variables['content']['info']['#theme'] = 'item_info_listing';
+    $variables['content']['info']['#pre_render'][] = 'eldir_info_table_pre_render';
+  }
+}
+
+/**
+ * Implements hook_theme().
+ */
+function eldir_theme() {
+  $info = array();
+
+  $info['item_info_listing'] = array(
+    'render element' => 'info_listing',
+  );
+
+  return $info;
 }
+
+/**
+ * Theme implementation for a hosting info listing.
+ */
+function eldir_item_info_listing($variables) {
+  $info_listing = $variables['info_listing'];
+
+  if (!isset($info_listing['#items'])) {
+    $info_listing['#items'] = array();
+  }
+  // Sort the items, adding a weight if they don't have one.
+  $weight = 0;
+  foreach ($info_listing['#items'] as $k => $item) {
+    if (!isset($item['weight'])) {
+      $weight += 0.001;
+      $info_listing['#items'][$k]['weight'] = $weight;
+    }
+  }
+  usort($info_listing['#items'], 'drupal_sort_weight');
+
+  // Add the actual table of items.
+  $render['hosting_info_table'] = array(
+    '#theme' => 'table',
+    '#rows' => array(),
+    '#weight' => 1000,
+    '#attributes' => array(
+      'class' => array(
+        'hosting-info-table',
+      ),
+    ),
+  );
+  foreach ($info_listing['#items'] as $item) {
+    $row = array(
+      'no_striping' => TRUE,
+      'class' => array('item'),
+    );
+
+    $row['data'][] = array(
+      'data' => $item['title'],
+      'class' => array('item-title'),
+    );
+    $text = render($item['value']);
+    if (isset($item['description'])) {
+      $text .= '<div class="item-description">' . render($item['description']) . '</div>';
+    }
+    $row['data'][] = array(
+      'data' => $text,
+      'class' => array('item-value'),
+    );
+
+    $render['hosting_info_table']['#rows'][] = $row;
+  }
+
+  // Move any children of this element over to our new render array.
+  foreach (element_children($info_listing) as $child) {
+    $render[$child] = $info_listing[$child];
+  }
+
+  return render($render);
+}
+
+/**
+ * Pre render function to process an info item into a hosting info table.
+ */
+function eldir_info_table_pre_render($element) {
+  // Try to move children into the '#items'.
+  foreach (element_children($element) as $child) {
+    if (isset($element[$child]['#type']) && $element[$child]['#type'] == 'item') {
+      if (!empty($element[$child]['#title']) && !empty($element[$child]['#markup'])) {
+        $new_item = array(
+          'title' => $element[$child]['#title'],
+          'value' => $element[$child]['#markup'],
+        );
+        if (isset($element[$child]['#weight'])) {
+          $new_item['weight'] = $element[$child]['#weight'];
+        }
+        if (isset($element[$child]['#description'])) {
+          $new_item['description'] = $element[$child]['#description'];
+        }
+        $element['#items'][] = $new_item;
+        unset($element[$child]);
+      }
+    }
+  }
+  return $element;
+}
+
