diff --git a/zipcart-block-downloads.tpl.php b/zipcart-block-downloads.tpl.php
index 849f823..00d0983 100644
--- a/zipcart-block-downloads.tpl.php
+++ b/zipcart-block-downloads.tpl.php
@@ -8,5 +8,7 @@
  */
  ?>
 <div class="zipcart-block-downloads">
-  <?php print l(t('My Downloads (<span class="zipcart-download-count">!count</span> files)', array('!count' => $count)), 'zipcart/get', array('html' => TRUE, 'query' => _zipcart_get_destination_alias())); ?>
-</div>
\ No newline at end of file
+  <p><?php print t('<span class="zipcart-download-count">!count</span> files', array('!count' => $count)); ?></p>
+  <?php print l(t('Download'), 'zipcart/get', array('html' => TRUE, 'query' => _zipcart_get_destination_alias())) ; ?>
+  <?php print l(t('View cart'), 'zipcart/view', array('html' => TRUE/*, 'query' => _zipcart_get_destination_alias()*/)) ; ?>
+</div>
diff --git a/zipcart.module b/zipcart.module
index 962bd2b..1425c91 100644
--- a/zipcart.module
+++ b/zipcart.module
@@ -45,6 +45,13 @@ function zipcart_menu() {
     'type' => MENU_CALLBACK,
     'access arguments' => array('access zipcart downloads'),
   );
+  $items['zipcart/view'] = array(
+    'title' => 'Download Cart',
+    'description' => t('View/modify the contents of your download cart or proceed to download.'),
+    'page callback' => 'zipcart_view_cart',
+    'access arguments' => user_access('access content'),
+    'file' => 'zipcart.pages.inc',
+  );
   return $items;
 }
 
@@ -67,6 +74,15 @@ function zipcart_theme($existing, $type, $theme, $path) {
         'options' => array(),
       ),
     ),
+    'zipcart_empty_cart' => array(
+      'arguments' => array(),
+      'file' => 'zipcart.theme.inc',
+    ),
+    'zipcart_view_cart_form' => array(
+      'arguments' => array(
+        'form' => NULL,
+      ),
+    ),
   );
 }
 
@@ -195,10 +211,10 @@ function zipcart_add_file_to_cart($ajax = FALSE) {
   }
   else {
     if ( $success ) {
-      drupal_set_message(t('The file %filename has been added to your cart. !download', array('%filename' => check_plain($filename), '!download' => l('Click here to download', 'zipcart/get'))));
+      drupal_set_message(t('The file %filename has been added to your cart. !download !list', array('%filename' => $filename, '!download' => l('Click here to download', 'zipcart/get'), '!list' => l('View cart', 'zipcart/view'))));
     }
     else {
-      drupal_set_message(t('The file !filename could not be added to your cart.', array('!filename' => check_plain($filename))));
+      drupal_set_message(t('The file !filename could not be added to your cart.', array('!filename' => $filename)));
     }
     drupal_goto();
   }
@@ -370,4 +386,4 @@ function zipcart_preprocess_zipcart_block_downloads(&$variables) {
   drupal_add_js(array('zipcart' => array('path_add' => ZIPCART_PATH_ADD, 'path_add_ajax' => ZIPCART_PATH_ADD .'/AJAX')), 'setting');
   $variables['count'] = (!empty($_SESSION['zipcart']['files'])) ? sizeof($_SESSION['zipcart']['files']) : 0;
   $variables['files'] = (!empty($_SESSION['zipcart']['files'])) ? $_SESSION['zipcart']['files'] : NULL;
-}
\ No newline at end of file
+}
diff --git a/zipcart.pages.inc b/zipcart.pages.inc
new file mode 100644
index 0000000..7b99921
--- /dev/null
+++ b/zipcart.pages.inc
@@ -0,0 +1,109 @@
+<?php
+/**
+ * @file
+ * User page callbacks for the zipcart module.
+ */
+
+/**
+ * Displays download cart list page with form to adjust download cart
+ * contents or go to download.
+ */
+function zipcart_view_cart() {
+  $output = '';
+  $files = $_SESSION['zipcart']['files'];
+
+  if (empty($files)) {
+    return theme('zipcart_empty_cart');
+  }
+
+  $files = module_invoke_all('filterzip', $files);
+  $output .= drupal_get_form('zipcart_view_cart_form', $files);
+
+  return $output;
+}
+
+/**
+ * Display a page allowing the user to view the contents of his or her cart.
+ */
+function zipcart_view_cart_form(&$form_state, $files = NULL) {
+  $form['items'] = array('#tree' => TRUE);
+
+  foreach ($files as $key => $file) {
+    $form['items'][$key]['remove'] = array(
+      '#type' => 'checkbox',
+    );
+
+    $form['items'][$key]['title'] = array(
+      '#value' => check_plain(basename($file)),
+    );
+  }
+
+  $form['update'] = array(
+    '#type' => 'submit',
+    '#value' => t('Update cart'),
+  );
+  $form['download'] = array(
+    '#type' => 'submit',
+    '#value' => t('Download'),
+  );
+
+  $form['#theme'] = 'zipcart_view_cart_form';
+
+  return $form;
+}
+
+/**
+ * Returns the themed download cart.
+ */
+function theme_zipcart_view_cart_form($form) {
+  $header = array('Remove', 'File name');
+  $rows = array();
+
+  if ($form['items']) {
+    foreach (element_children($form['items']) as $key) {
+      if (is_array($form['items'][$key])) {
+        $rows[] = array(
+          drupal_render($form['items'][$key]['remove']),
+          drupal_render($form['items'][$key]['title']),
+        );
+      }
+    }
+  }
+
+  $output = theme('table', $header, $rows);
+  $output .= drupal_render($form['update']);
+  $output .= drupal_render($form['download']);
+  $output .= drupal_render($form);
+
+  return $output;
+}
+
+/**
+ * Form submit callback.
+ */
+function zipcart_view_cart_form_submit($form, &$form_state) {
+  $form_values = $form_state['values'];
+  switch ($form_values['op']) {
+    case t('Update cart'):
+      $updated = FALSE;
+      if ($form_values['items']) {
+        foreach (element_children($form_values['items']) as $key) {
+          if (is_array($form_values['items'][$key]) && $form_values['items'][$key]['remove']) {
+            unset($_SESSION['zipcart']['files'][$key]);
+            $updated = TRUE;
+          }
+        }
+      }
+
+      if ($updated) {
+        drupal_set_message(t('Your download cart has been updated.'));
+      }
+      $form_state['redirect'] = 'zipcart/view';
+      break;
+
+    case t('Download'):
+      $form_state['redirect'] = 'zipcart/get';
+      break;
+  }
+}
+
diff --git a/zipcart.theme.inc b/zipcart.theme.inc
new file mode 100644
index 0000000..e5b41d2
--- /dev/null
+++ b/zipcart.theme.inc
@@ -0,0 +1,13 @@
+<?php
+/**
+ * @file
+ * Theme functions for zipcart module.
+ */
+
+/**
+ * Returns the text displayed for an empty download cart.
+ */
+function theme_zipcart_empty_cart() {
+  return '<p>'. t('There are no files in your download cart.') .'</p>';
+}
+
