diff --git a/classroom-courses-list-item.tpl.php b/classroom-courses-list-item.tpl.php
new file mode 100644
index 0000000..f7883b3
--- /dev/null
+++ b/classroom-courses-list-item.tpl.php
@@ -0,0 +1,35 @@
+<?php
+// $Id$
+
+/**
+ * @file classroom-course-list-item.tpl.php
+ * Display a course in the courses list.
+ *
+ * Variables available:
+ * - $nid
+ * - $title
+ * - $start_t
+ * - $end_t
+ * - $links
+ *
+ * If you need anything else, the variable $course is also available.
+ * - $course
+ *
+ * @see classroom_preprocess_classroom_course_list_item
+ */
+?>
+
+<div class="classroom-course-item-list">
+<a href="node/{$nid}"><?= $title ?></a><br/>
+
+<strong><?= t("Start") ?>:</strong>
+<?= format_date($start_t, 'small') ?><br/>
+
+<strong><?php echo t("End") ?>:</strong>
+<?= format_date($end_t, 'small') ?>
+
+<?php if (!empty($course_links)): ?>
+<br/>
+<?php echo implode($course_links, " | ") ?>
+<?php endif; ?>
+</div>
diff --git a/classroom-users-list-item.tpl.php b/classroom-users-list-item.tpl.php
new file mode 100644
index 0000000..a9c8530
--- /dev/null
+++ b/classroom-users-list-item.tpl.php
@@ -0,0 +1,19 @@
+<?php
+// $Id$
+
+/**
+ * @file classroom-students-list-item.tpl.php
+ *
+ * Variables available:
+ * - $a_user
+ * - $links
+ *
+ * @see classroom_preprocess_classroom_students_list_item
+ */
+?>
+<li>
+<?php echo l($a_user->name, "user/$a_user->uid") ?>
+<?php if (!empty($links)): ?>
+ (<?php echo implode(' | ', $links) ?>)
+<?php endif ?>
+</li>
diff --git a/classroom.courses.inc b/classroom.courses.inc
index 7766b38..651b1ec 100644
--- a/classroom.courses.inc
+++ b/classroom.courses.inc
@@ -521,6 +521,7 @@ function _classroom_course_nodeapi_view(&$node, $op, $a3, $a4)
   );
 
 
+
 }
 
 /**
@@ -594,3 +595,25 @@ function classroom_course_calculate_finalgrade($course, $student = null){
     return NULL;
   }
 }
+
+/**
+ * Get the course links that are provided using the 'classroom_course_links'
+ * hook.
+ *
+ * @param $course
+ *   Course.
+ * @return
+ *   An array containing the links. It uses the Drupal l() function to
+ *   generate each link.
+ */
+function classroom_course_links($course) {
+  $links = module_invoke_all('classroom_course_links', $course);
+  foreach ($links as $module => $module_links) {
+    if ($module_links) {
+      foreach ($module_links as $link) {
+        $actions[] = l($link['title'], $link['href']);
+      }
+    }
+  }
+  return $actions;
+}
diff --git a/classroom.module b/classroom.module
index bd8fd5e..d78691e 100644
--- a/classroom.module
+++ b/classroom.module
@@ -30,6 +30,7 @@ function classroom_init() {
   module_load_include('inc', 'classroom', 'classroom.responses');
   module_load_include('inc', 'classroom', 'classroom.topics');
   module_load_include('inc', 'classroom', 'classroom.users');
+  module_load_include('inc', 'classroom', 'classroom.themes');
 }
 
 /**
@@ -488,6 +489,14 @@ function classroom_theme() {
     'classroom_assignment_responses_form' => array(
       'arguments' => array('form' => NULL),
     ),
+    'classroom_courses_list_item' => array(
+      'template' => 'classroom-courses-list-item',
+      'arguments' => array('course' => NULL),
+    ),
+    'classroom_users_list_item' => array(
+      'template' => 'classroom-users-list-item',
+      'arguments' => array('a_user' => NULL, 'links' => NULL),
+    ),
   );
 }
 
@@ -531,3 +540,21 @@ function classroom_block($op = 'list', $delta = 0, $edit = array()) {
     }
   }
 }
+
+/**
+ * Implementation of hook_classroom_course_links().
+ */
+function classroom_classroom_course_links($course, $user = NULL) {
+  if (classroom_check_access($course->nid)) {
+    return array(
+      'classroom' => array(
+        array(
+          'title' => t('Go classroom'),
+          'href' => "classroom/course/$course->nid",
+        ),
+      ),
+    );
+  } else {
+    return false;
+  }
+}
diff --git a/classroom.pages.inc b/classroom.pages.inc
index f14ae56..d0239e5 100644
--- a/classroom.pages.inc
+++ b/classroom.pages.inc
@@ -33,34 +33,13 @@ function classroom_courses_page() {
   $rows = array();
   while ($row = db_fetch_object($result)) {
     $course = node_load($row->nid);
-    $row = array();
-    $row['title'] = l($course->title, "node/$course->nid");
-    $row['start_t'] = _classroom_format_date($course->classroom_course['start_t']);
-    $row['end_t'] = _classroom_format_date($course->classroom_course['end_t']);
-
-    $actions = array();
-    if (classroom_check_access($course->nid)) {
-      array_push($actions,
-        l(t('Go classroom'), "classroom/course/$course->nid"));
-    }
-
-    // Additional links provided by other modules
-    $links = module_invoke_all('classroom_course_links', $course);
-    foreach ($links as $module => $module_links) {
-      if ($module_links) {
-        foreach ($module_links as $link) {
-          $actions[] = l($link['title'], $link['href']);
-        }
-      }
-    }
-    $row['links'] = implode(' ', $actions);
-    $rows[] = $row;
+    $rows[] = theme('classroom_courses_list_item', $course);
   }
 
   if (empty($rows)) {
     $output = "<p>" . t("There are no planned or running courses.") . "</p>";
   } else {
-    $output = theme('table', $headers, $rows);
+    $output = theme('item_list', $rows);
     $output .= theme('pager');
   }
 
@@ -741,8 +720,8 @@ function classroom_assignment_responses_form($form, $assignment_nid) {
 
   // Query
   $order_sql = tablesort_sql($form['#headers']);
-  $qry = "SELECT nid, uid, name, grade FROM {node} LEFT JOIN {classroom_response} "
-    ."USING (nid) LEFT JOIN {users} USING (uid) "
+  $qry = "SELECT {node}.nid, {users}.uid, name, grade FROM {node} LEFT JOIN {classroom_response} "
+    ."USING (nid) LEFT JOIN {users} ON ({users}.uid = {node}.uid) "
     ."WHERE type IN ($types_sql) AND assignment_nid = %d $order_sql";
   $pager_limit = variable_get('classroom_pager_limit', CLASSROOM_PAGER_LIMIT_DEFAULT);
   $result = pager_query($qry, $pager_limit, 0, NULL, $assignment_nid);
@@ -997,13 +976,9 @@ function _classroom_course_users_page($course_nid, $users_role = NULL) {
   $pager_limit = variable_get('classroom_pager_limit', CLASSROOM_PAGER_LIMIT_DEFAULT);
   $result = pager_query($qry, $pager_limit, 0, NULL, $conds);
 
-  // Display users in a table
+  // Display users in a list
   $rows = array();
   while ($user = db_fetch_object($result)) {
-    $row = array(
-      'name' => l($user->name, "user/$user->uid"),
-    );
-
     // Additional links provided by other modules
     $actions = array();
     $links = module_invoke_all('classroom_user_links', $user, "classroom/course/$course_nid/$users_role");
@@ -1012,14 +987,13 @@ function _classroom_course_users_page($course_nid, $users_role = NULL) {
         $actions[] = $link;
       }
     }
-    $row['links'] = implode(' ', $actions);
-    $rows[] = $row;
+    $rows[] = theme('classroom_users_list_item', $user, $actions);
   }
 
   if (empty($rows)) {
     $output = "<p>" . t("There are no $target assigned to this course.") . "</p>";
   } else {
-    $output = theme('table', $headers, $rows);
+    $output = theme('item_list', $rows);
     $output .= theme('pager');
   }
   return $output;
@@ -1098,119 +1072,6 @@ function _classroom_topic_page_title($topic_tid) {
 
 
 /**
- * Theme functions
- *
- * Some of the next functions (theme_*) are almost identical and
- * maybe they must implemented in other way.
- */
-function theme_classroom_course_add_teachers_form($form) {
-  return _classroom_theme_course_users_form($form);
-}
-
-function theme_classroom_course_add_students_form($form) {
-  return _classroom_theme_course_users_form($form);
-}
-
-function theme_classroom_course_remove_teachers_form($form) {
-  return _classroom_theme_course_users_form($form);
-}
-
-function theme_classroom_course_remove_students_form($form) {
-  return _classroom_theme_course_users_form($form);
-}
-
-function theme_classroom_course_add_resources_form($form) {
-  return _classroom_theme_course_resources_form($form);
-}
-
-function theme_classroom_course_remove_resources_form($form) {
-  return _classroom_theme_course_resources_form($form);
-}
-
-function theme_classroom_assignment_responses_form($form) {
-  $headers = $form['#headers'];
-  unset($form['#headers']);
-
-  $rows = array();
-  foreach ($form['responses'] as $name => $element) {
-    if (!isset($element['grade'])) { continue; }
-    $rows[] = array(
-      drupal_render($element['name']),
-      drupal_render($element['grade']),
-      drupal_render($element['view']),
-    );
-    unset($form['responses'][$name]);
-  }
-
-  $output = theme('table', $headers, $rows);
-  $output .= drupal_render($form);
-  return $output;
-
-}
-
-/**
- * Theme function to show the users' form (students or teachers)
- * in a table.
- *
- * @param $form
- *   Form definition.
- * @return
- *   Form in HTML.
- */
-function _classroom_theme_course_users_form($form) {
-  if (isset($form['#headers'])) {
-    $headers = $form['#headers'];
-    unset($form['#headers']);
-  } else {
-    $headers = array();
-  }
-
-  $rows = array();
-  foreach ($form['users'] as $name => $element) {
-    if (!isset($element['uid'])) { continue; }
-    $rows[] = array(
-      drupal_render($element['uid']),
-    );
-    unset($form['users'][$name]);
-  }
-
-  $form['pager'] = array('#value' => theme('pager'));
-  $output = theme('table', $headers, $rows);
-  $output .= drupal_render($form);
-  return $output;
-}
-
-/**
- * Theme function to show the resources' form in a table.
- *
- * @param $form
- *   Form definition.
- * @return
- *   Form in HTML.
- */
-function _classroom_theme_course_resources_form($form) {
-  if (isset($form['#headers'])) {
-    $headers = $form['#headers'];
-    unset($form['#headers']);
-  } else {
-    $headers = array();
-  }
-
-  $rows = array();
-  foreach ($form['resources'] as $name => $element) {
-    if (!isset($element['nid'])) { continue; }
-    $rows[] = array(
-      drupal_render($element['nid']),
-    );
-    unset($form['resources'][$name]);
-  }
-
-  $output = theme('table', $headers, $rows);
-  $output .= drupal_render($form);
-  return $output;
-}
-
-/**
  * Builds a list of recent assignments.
  *
  * @param $course_nid
diff --git a/classroom.themes.inc b/classroom.themes.inc
new file mode 100644
index 0000000..c2e58cd
--- /dev/null
+++ b/classroom.themes.inc
@@ -0,0 +1,131 @@
+<?php
+// $Id$
+
+/**
+ * Theme functions
+ */
+
+/**
+ * Preprocessing for classroom-courses-list-item.tpl.php.
+ */
+function classroom_preprocess_classroom_courses_list_item(&$variables) {
+  $course = $variables['course'];
+  $variables['nid'] = $course->nid;
+  $variables['title'] = check_plain($course->title);
+  $variables['start_t'] = $course->classroom_course['start_t'];
+  $variables['end_t'] = $course->classroom_course['end_t'];
+  $variables['course_links'] = classroom_course_links($course);
+}
+
+/**
+ * Some of the next functions (theme_*) are almost identical and
+ * maybe they must implemented in other way.
+ */
+function theme_classroom_course_add_teachers_form($form) {
+  return _classroom_theme_course_users_form($form);
+}
+
+function theme_classroom_course_add_students_form($form) {
+  return _classroom_theme_course_users_form($form);
+}
+
+function theme_classroom_course_remove_teachers_form($form) {
+  return _classroom_theme_course_users_form($form);
+}
+
+function theme_classroom_course_remove_students_form($form) {
+  return _classroom_theme_course_users_form($form);
+}
+
+function theme_classroom_course_add_resources_form($form) {
+  return _classroom_theme_course_resources_form($form);
+}
+
+function theme_classroom_course_remove_resources_form($form) {
+  return _classroom_theme_course_resources_form($form);
+}
+
+function theme_classroom_assignment_responses_form($form) {
+  $headers = $form['#headers'];
+  unset($form['#headers']);
+
+  $rows = array();
+  foreach ($form['responses'] as $name => $element) {
+    if (!isset($element['grade'])) { continue; }
+    $rows[] = array(
+      drupal_render($element['name']),
+      drupal_render($element['grade']),
+      drupal_render($element['view']),
+    );
+    unset($form['responses'][$name]);
+  }
+
+  $output = theme('table', $headers, $rows);
+  $output .= drupal_render($form);
+  return $output;
+
+}
+
+/**
+ * Theme function to show the users' form (students or teachers)
+ * in a table.
+ *
+ * @param $form
+ *   Form definition.
+ * @return
+ *   Form in HTML.
+ */
+function _classroom_theme_course_users_form($form) {
+  if (isset($form['#headers'])) {
+    $headers = $form['#headers'];
+    unset($form['#headers']);
+  } else {
+    $headers = array();
+  }
+
+  $rows = array();
+  foreach ($form['users'] as $name => $element) {
+    if (!isset($element['uid'])) { continue; }
+    $rows[] = array(
+      drupal_render($element['uid']),
+    );
+    unset($form['users'][$name]);
+  }
+
+  $form['pager'] = array('#value' => theme('pager'));
+  $output = theme('table', $headers, $rows);
+  $output .= drupal_render($form);
+  return $output;
+}
+
+/**
+ * Theme function to show the resources' form in a table.
+ *
+ * @param $form
+ *   Form definition.
+ * @return
+ *   Form in HTML.
+ */
+function _classroom_theme_course_resources_form($form) {
+  if (isset($form['#headers'])) {
+    $headers = $form['#headers'];
+    unset($form['#headers']);
+  } else {
+    $headers = array();
+  }
+
+  $rows = array();
+  foreach ($form['resources'] as $name => $element) {
+    if (!isset($element['nid'])) { continue; }
+    $rows[] = array(
+      drupal_render($element['nid']),
+    );
+    unset($form['resources'][$name]);
+  }
+
+  $output = theme('table', $headers, $rows);
+  $output .= drupal_render($form);
+  return $output;
+}
+
+
