diff --git a/modules/forum/comment--forum.tpl.php b/modules/forum/comment--forum.tpl.php
new file mode 100644
index 0000000..ddc114b
--- /dev/null
+++ b/modules/forum/comment--forum.tpl.php
@@ -0,0 +1,89 @@
+<?php
+
+/**
+ * @file
+ * Default theme implementation for comments.
+ *
+ * Available variables:
+ * - $author: Comment author. Can be link or plain text.
+ * - $content: An array of comment items. Use render($content) to print them all, or
+ *   print a subset such as render($content['field_example']). Use
+ *   hide($content['field_example']) to temporarily suppress the printing of a
+ *   given element.
+ * - $created: Formatted date and time for when the comment was created.
+ *   Preprocess functions can reformat it by calling format_date() with the
+ *   desired parameters on the $comment->created variable.
+ * - $changed: Formatted date and time for when the comment was last changed.
+ *   Preprocess functions can reformat it by calling format_date() with the
+ *   desired parameters on the $comment->changed variable.
+ * - $new: New comment marker.
+ * - $permalink: Comment permalink.
+ * - $submitted: Submission information created from $author and $created during
+ *   template_preprocess_comment().
+ * - $picture: Authors picture.
+ * - $signature: Authors signature.
+ * - $status: Comment status. Possible values are:
+ *   comment-unpublished, comment-published or comment-preview.
+ * - $title: Linked title.
+ * - $classes: String of classes that can be used to style contextually through
+ *   CSS. It can be manipulated through the variable $classes_array from
+ *   preprocess functions. The default values can be one or more of the following:
+ *   - comment: The current template type, i.e., "theming hook".
+ *   - comment-by-anonymous: Comment by an unregistered user.
+ *   - comment-by-node-author: Comment by the author of the parent node.
+ *   - comment-preview: When previewing a new or edited comment.
+ *   The following applies only to viewers who are registered users:
+ *   - comment-unpublished: An unpublished comment visible only to administrators.
+ *   - comment-by-viewer: Comment by the user currently viewing the page.
+ *   - comment-new: New comment since last the visit.
+ * - $title_prefix (array): An array containing additional output populated by
+ *   modules, intended to be displayed in front of the main title tag that
+ *   appears in the template.
+ * - $title_suffix (array): An array containing additional output populated by
+ *   modules, intended to be displayed after the main title tag that appears in
+ *   the template.
+ *
+ * These two variables are provided for context:
+ * - $comment: Full comment object.
+ * - $node: Node object the comments are attached to.
+ *
+ * Other variables:
+ * - $classes_array: Array of html class attribute values. It is flattened
+ *   into a string within the variable $classes.
+ *
+ * @see template_preprocess()
+ * @see template_preprocess_comment()
+ * @see template_process()
+ * @see theme_comment()
+ */
+?>
+<div class="<?php print $classes; ?> clearfix"<?php print $attributes; ?>>
+
+  <div class="post-meta">
+    <?php print $created; ?>
+    <?php if ($new): ?>
+      <span class="new"><?php print $new ?></span>
+    <?php endif; ?>
+    <?php print $permalink; ?>
+  </div>
+
+  <div class="author-info">
+    <?php print $picture ?>
+    <?php print $author; ?>
+  </div>
+
+  <div class="content"<?php print $content_attributes; ?>>
+    <?php
+      // We hide links now so that we can render them later.
+      hide($content['links']);
+      print render($content);
+    ?>
+    <?php if ($signature): ?>
+    <div class="user-signature">
+      <?php print $signature ?>
+    </div>
+    <?php endif; ?>
+  </div>
+
+  <?php print render($content['links']) ?>
+</div>
diff --git a/modules/forum/forum.css b/modules/forum/forum.css
index 4a67c8b..b5e59df 100644
--- a/modules/forum/forum.css
+++ b/modules/forum/forum.css
@@ -48,3 +48,14 @@
 #forum .icon .topic-status-closed {
   background-position: -120px 0;
 }
+
+/* ---------- Nodes and comments ----------- */
+
+.node-type-forum .author-info {
+ float: left;
+ padding-right: 10px;
+}
+.node-type-forum .node .content {
+ overflow: hidden;
+}
+
diff --git a/modules/forum/forum.module b/modules/forum/forum.module
index dd6c6de..4980037 100644
--- a/modules/forum/forum.module
+++ b/modules/forum/forum.module
@@ -80,6 +80,14 @@ function forum_theme() {
       'render element' => 'form',
       'file' => 'forum.admin.inc',
     ),
+    'node__forum' => array(
+      'template' => 'node--forum',
+      'variables' => array(),
+    ),
+    'comment__forum' => array(
+      'template' => 'comment--forum',
+      'variables' => array(),
+    ),
   );
 }
 
@@ -1186,6 +1194,20 @@ function template_preprocess_forum_icon(&$variables) {
 }
 
 /**
+ * Process variables to format forum topic nodes.
+ */
+function forum_preprocess_node(&$variables) {
+  $variables['theme_hook_suggestions'][] = 'node__' . $variables['node']->type;
+}
+
+/**
+ * Process variables to format comments.
+ */
+function forum_preprocess_comment(&$variables) {
+  $variables['theme_hook_suggestions'][] = 'comment__' . $variables['node']->type;
+}
+
+/**
  * Process variables to format submission info for display in the forum list and topic list.
  *
  * $variables will contain: $topic
diff --git a/modules/forum/node--forum.tpl.php b/modules/forum/node--forum.tpl.php
new file mode 100644
index 0000000..a151421
--- /dev/null
+++ b/modules/forum/node--forum.tpl.php
@@ -0,0 +1,116 @@
+<?php
+
+/**
+ * @file
+ * Default theme implementation to display a node.
+ *
+ * Available variables:
+ * - $title: the (sanitized) title of the node.
+ * - $content: An array of node items. Use render($content) to print them all,
+ *   or print a subset such as render($content['field_example']). Use
+ *   hide($content['field_example']) to temporarily suppress the printing of a
+ *   given element.
+ * - $user_picture: The node author's picture from user-picture.tpl.php.
+ * - $date: Formatted creation date. Preprocess functions can reformat it by
+ *   calling format_date() with the desired parameters on the $created variable.
+ * - $name: Themed username of node author output from theme_username().
+ * - $node_url: Direct url of the current node.
+ * - $display_submitted: Whether submission information should be displayed.
+ * - $submitted: Submission information created from $name and $date during
+ *   template_preprocess_node().
+ * - $classes: String of classes that can be used to style contextually through
+ *   CSS. It can be manipulated through the variable $classes_array from
+ *   preprocess functions. The default values can be one or more of the
+ *   following:
+ *   - node: The current template type, i.e., "theming hook".
+ *   - node-[type]: The current node type. For example, if the node is a
+ *     "Blog entry" it would result in "node-blog". Note that the machine
+ *     name will often be in a short form of the human readable label.
+ *   - node-teaser: Nodes in teaser form.
+ *   - node-preview: Nodes in preview mode.
+ *   The following are controlled through the node publishing options.
+ *   - node-promoted: Nodes promoted to the front page.
+ *   - node-sticky: Nodes ordered above other non-sticky nodes in teaser
+ *     listings.
+ *   - node-unpublished: Unpublished nodes visible only to administrators.
+ * - $title_prefix (array): An array containing additional output populated by
+ *   modules, intended to be displayed in front of the main title tag that
+ *   appears in the template.
+ * - $title_suffix (array): An array containing additional output populated by
+ *   modules, intended to be displayed after the main title tag that appears in
+ *   the template.
+ *
+ * Other variables:
+ * - $node: Full node object. Contains data that may not be safe.
+ * - $type: Node type, i.e. story, page, blog, etc.
+ * - $comment_count: Number of comments attached to the node.
+ * - $uid: User ID of the node author.
+ * - $created: Time the node was published formatted in Unix timestamp.
+ * - $classes_array: Array of html class attribute values. It is flattened
+ *   into a string within the variable $classes.
+ * - $zebra: Outputs either "even" or "odd". Useful for zebra striping in
+ *   teaser listings.
+ * - $id: Position of the node. Increments each time it's output.
+ *
+ * Node status variables:
+ * - $view_mode: View mode, e.g. 'full', 'teaser'...
+ * - $teaser: Flag for the teaser state (shortcut for $view_mode == 'teaser').
+ * - $page: Flag for the full page state.
+ * - $promote: Flag for front page promotion state.
+ * - $sticky: Flags for sticky post setting.
+ * - $status: Flag for published status.
+ * - $comment: State of comment settings for the node.
+ * - $readmore: Flags true if the teaser content of the node cannot hold the
+ *   main body content.
+ * - $is_front: Flags true when presented in the front page.
+ * - $logged_in: Flags true when the current user is a logged-in member.
+ * - $is_admin: Flags true when the current user is an administrator.
+ *
+ * Field variables: for each field instance attached to the node a corresponding
+ * variable is defined, e.g. $node->body becomes $body. When needing to access
+ * a field's raw values, developers/themers are strongly encouraged to use these
+ * variables. Otherwise they will have to explicitly specify the desired field
+ * language, e.g. $node->body['en'], thus overriding any language negotiation
+ * rule that was previously applied.
+ *
+ * @see template_preprocess()
+ * @see template_preprocess_node()
+ * @see template_process()
+ */
+?>
+<div id="node-<?php print $node->nid; ?>" class="<?php print $classes; ?> clearfix"<?php print $attributes; ?>>
+
+  <?php print render($title_prefix); ?>
+  <?php if (!$page): ?>
+    <h2<?php print $title_attributes; ?>><a href="<?php print $node_url; ?>"><?php print $title; ?></a></h2>
+  <?php endif; ?>
+  <?php print render($title_suffix); ?>
+
+  <div class="node-content">
+    <?php if ($display_submitted): ?>
+      <div class="post-meta">
+        <?php print $date; ?>
+      </div>
+    <?php endif; ?>
+  
+    <div class="author-info">
+      <?php print $user_picture ?>
+      <?php print $name; ?>
+    </div>
+  
+    <div class="content"<?php print $content_attributes; ?>>
+      <?php
+        // We hide the comments, links, and taxonomy terms now so that we can render them later.
+        hide($content['comments']);
+        hide($content['links']);
+        hide($content['taxonomy_forums']);
+        print render($content);
+      ?>    
+    </div>
+  
+    <?php print render($content['links']); ?>
+  </div>
+
+  <?php print render($content['comments']); ?>
+
+</div>
