diff --git a/assets/downloads_for_sale.css b/assets/downloads_for_sale.css
index 9420fb266d17146cacfcbf5bce911c3d624bccd8..906764aa26c265419a771b96ee3253acc80e27ec 100644
--- a/assets/downloads_for_sale.css
+++ b/assets/downloads_for_sale.css
@@ -11,4 +11,8 @@ div.downloads-for-sale tr, div.downloads-for-sale td {
 
 .vm-customfield-mod .downloads-for-sale img, .vm-customfield-cart .downloads-for-sale img {
 	width: inherit;
-}
\ No newline at end of file
+}
+
+.downloads-for-sale-page p, .downloads-for-sale-page table {
+	margin-left: 50px;
+}
diff --git a/downloads_for_sale.php b/downloads_for_sale.php
index 07bfd499d720c2f352abf7836710b3d54abbc0bb..e9dea2620c577dd50bf7f20ff21b004c780af6bd 100644
--- a/downloads_for_sale.php
+++ b/downloads_for_sale.php
@@ -119,19 +119,79 @@ class plgVmCustomDownloads_for_Sale extends vmCustomPlugin {
 
 	function plgVmOnSelfCallFE($type,$name,&$render) {
 		if ($name != $this->_name || $type != 'vmcustom') return false;
+		$handled = false;
 		$field_id = JRequest::getInt('customfield_id',0);
-		if (!$field_id) {
-			JFactory::getApplication()->enqueueMessage(JText::_('VMCUSTOM_DLSALE_ERROR_CUSTOMFIELDID'), 'error');
-			return false;
-		}
-		$field = $this->loadCustomfieldData ($field_id);
-		if (!$field) {
-			JFactory::getApplication()->enqueueMessage(JText::_('VMCUSTOM_DLSALE_ERROR_LOAD_FAILURE'), 'error');
-			return false;
+		if ($field_id) {
+			$field = $this->loadCustomfieldData ($field_id);
+			if ($field) {
+				if ($this->checkDownloadable ($field, $render)) {
+					$handled = true;
+					$this->downloadFile ($field->media_id, $render);
+					return true;
+				} else {
+					JFactory::getApplication()->enqueueMessage(JText::_('VMCUSTOM_DLSALE_ERROR_NOT_AUTHORIZED_UNKNOWN'), 'error');
+				}
+			} else {
+				JFactory::getApplication()->enqueueMessage(JText::_('VMCUSTOM_DLSALE_ERROR_LOAD_FAILURE'), 'error');
+			}
 		}
-		
-		if ($this->checkDownloadable ($field, $render)) {
-			$this->downloadFile ($field->media_id, $render);
+		if (!$handled) {
+			// If we have an order number and password, display all downloads of that order, even if the user is not logged in:
+			$field_id = JRequest::getInt('customfield_id',0);
+			$order_number = JRequest::getString('order_number', null);
+			$order_pass = JRequest::getString('order_pass', null);
+			$orders = array();
+			if ($order_number || $order_pass) {
+				$orderModel = VmModel::getModel('orders');
+				$order_id = $orderModel->getOrderIdByOrderPass ($order_number, $order_pass);
+				if ($order_id) {
+					$orders[] = $orderModel->getOrder($order_id);
+				}
+				if (empty($orders)) {
+					JFactory::getApplication()->enqueueMessage(JText::_('VMCUSTOM_DLSALE_ERROR_WRONG_PASSWD'), 'error');
+				}
+			} else {
+				$_currentUser = JFactory::getUser();
+				$cuid = $_currentUser->get('id');
+				if ($cuid>0) {
+					$orderModel = VmModel::getModel('orders');
+					$os = $orderModel->getOrdersList($cuid, true);
+					foreach ($os as $o) {
+						$orders[] = $orderModel->getOrder($o->virtuemart_order_id);
+					}
+				}
+			
+			}
+			
+			$customModel = VmModel::getModel('customfields');
+			$orderdownloads = array();
+			foreach ($orders as $order) {
+				if (!in_array($order['details']['BT']->order_status, $this->status_allowed)) {
+					// Order status does not allow a download in any case, so skip this order
+					continue;
+				}
+				$orderinfo = $order;
+				$orderinfo['download_products']=array();
+				foreach ($order['items'] as $i) {
+					$productinfo=$i;
+					$productinfo->downloads = array();
+					$customs = (array)$customModel->getproductCustomslist ($i->virtuemart_product_id);
+					foreach ($customs as $field) {
+						if ($field->custom_element == $this->_name) {
+							$productinfo->downloads[] = $this->createDownloadLink ($field, 'order', $field->invoice_link_type, $i);
+						}
+					}
+					if (!empty($productinfo->downloads)) {
+						$orderinfo['download_products'][] = $productinfo;
+					}
+				}
+				if (!empty($orderinfo['download_products'])) {
+					$orderdownloads[] = $orderinfo;
+				}
+			}
+			
+			print $this->renderByLayout('downloads', array($orderdownloads));
+			return true;
 		}
 	}
 
diff --git a/downloads_for_sale/tmpl/downloads.php b/downloads_for_sale/tmpl/downloads.php
new file mode 100644
index 0000000000000000000000000000000000000000..566f801e4f2680371b153796de0ac816a6dadbae
--- /dev/null
+++ b/downloads_for_sale/tmpl/downloads.php
@@ -0,0 +1,61 @@
+<?php
+/**
+ *
+ * @author Reinhold Kainhofer
+ * @package VirtueMart
+ * @subpackage custom
+ * @copyright Copyright (C) 2013 RK - All rights reserved.
+ * @license http://www.gnu.org/copyleft/gpl.html GNU/GPL, see LICENSE.php
+ *
+ **/
+ 
+defined('_JEXEC') or die();
+
+if(JFile::exists(JPATH_SITE.DS.'plugins'.DS.'vmcustom'.DS.'downloads_for_sale'.DS.'assets'.DS.'downloads_for_sale.css')) {
+	$doc =& JFactory::getDocument();
+	$doc->addStyleSheet(JURI::root().'plugins/vmcustom/downloads_for_sale/assets/downloads_for_sale.css');  
+}
+?>
+
+<div class="downloads-for-sale-page">
+<h1><?php echo JText::_('VMCUSTOM_DLSALE_DLPAGE_TITLE') ?></h1>
+
+<p>
+	<form action="<?php echo JRoute::_( 'index.php', 1); ?>" method="post" >
+		<div class="width30 floatleft" id="com-form-order-number">
+			<label for="order_number"><?php echo JText::_('COM_VIRTUEMART_ORDER_NUMBER') ?></label><br />
+			<input type="text" id="order_number" name="order_number" class="inputbox" size="18" alt="order_number" />
+		</div>
+		<div class="width30 floatleft" id="com-form-order-pass">
+			<label for="order_pass"><?php echo JText::_('COM_VIRTUEMART_ORDER_PASS') ?></label><br />
+			<input type="text" id="order_pass" name="order_pass" class="inputbox" size="18" alt="order_pass" value="p_"/>
+		</div>
+		<div class="width30 floatleft" id="com-form-order-submit">
+			<input type="submit" name="Submitbuton" class="button" value="<?php echo JText::_('VMCUSTOM_DLSALE_DLPAGE_BUTTON_VIEW') ?>" />
+		</div>
+		<div class="clr"></div>
+		<input type="hidden" name="option" value="com_virtuemart" />
+		<input type="hidden" name="view" value="plugin" />
+		<input type="hidden" name="name" value="downloads_for_sale" />
+		<input type="hidden" name="return" value="" />
+
+	</form>
+</p>
+
+<?php if (empty($viewData[0])) { ?>
+  <h2><?php echo JText::_('VMCUSTOM_DLSALE_DLPAGE_NO_DOWNLOADS'); ?></h2>
+<?php } else { ?>
+
+  <h2><?php echo JText::_('VMCUSTOM_DLSALE_DLPAGE_DOWNLOADS'); ?></h2>
+
+  <?php foreach ($viewData[0] as $order) { ?>
+    <?php foreach ($order['download_products'] as $product) { ?>
+      <h3><?php echo JText::sprintf('VMCUSTOM_DLSALE_DLPAGE_ORDERPRODUCT', $order['details']['BT']->order_number, $product->order_item_name, $product->order_item_sku ) ?></h3>
+      <p><?php echo join("<br/>", $product->downloads); ?> </p>
+<?php
+    }
+  }
+}
+?>
+
+</div>
diff --git a/en-GB.plg_vmcustom_downloads_for_sale.ini b/en-GB.plg_vmcustom_downloads_for_sale.ini
index 07c7ed7feb5d4a6574d50fde72964c105c9d4125..2084039679bd22094558a8e93a1cf442e2640794 100644
--- a/en-GB.plg_vmcustom_downloads_for_sale.ini
+++ b/en-GB.plg_vmcustom_downloads_for_sale.ini
@@ -30,8 +30,16 @@ VMCUSTOM_DLSALE_ERROR_NO_FILE_SET="Media file is not available."
 VMCUSTOM_DLSALE_ERROR_ORDER_NOT_FOUND="Unable to find order data in database."
 VMCUSTOM_DLSALE_ERROR_WRONG_PASSWD="Invalid combination of order number and password."
 VMCUSTOM_DLSALE_ERROR_STATUS_NOT_AUTHORIZED="Order status does not allow download."
+VMCUSTOM_DLSALE_ERROR_NOT_AUTHORIZED_UNKNOWN="Not authorized to download."
+
+VMCUSTOM_DLSALE_DLPAGE_TITLE="Downloads for Sale"
+VMCUSTOM_DLSALE_DLPAGE_BUTTON_VIEW="See Downloads"
+VMCUSTOM_DLSALE_DLPAGE_NO_DOWNLOADS="No Downloads Available"
+VMCUSTOM_DLSALE_DLPAGE_DOWNLOADS="Available Downloads"
+VMCUSTOM_DLSALE_DLPAGE_ORDERPRODUCT="Order number %s: %s (%s)"
 
 VMCUSTOM_DLSALE_FILENAME="Filename"
 VMCUSTOM_DLSALE_MIMETYPE="MIME-Type"
 VMCUSTOM_DLSALE_FILESIZE="File size"
 VMCUSTOM_DLSALE_FILESIZE_BYTES="Bytes"
+
diff --git a/images/downloads_for_sale_-_downloadaread_loggedin.png b/images/downloads_for_sale_-_downloadaread_loggedin.png
new file mode 100644
index 0000000000000000000000000000000000000000..459da1bef4cbbd03a269c0bfc1de1aab0c3ed5a1
Binary files /dev/null and b/images/downloads_for_sale_-_downloadaread_loggedin.png differ
diff --git a/images/downloads_for_sale_-_downloadaread_loggedout.png b/images/downloads_for_sale_-_downloadaread_loggedout.png
new file mode 100644
index 0000000000000000000000000000000000000000..7e6ed78eb400e10d3fd376998c258fe670159be8
Binary files /dev/null and b/images/downloads_for_sale_-_downloadaread_loggedout.png differ
diff --git a/images/downloads_for_sale_-_downloadaread_menuitem.png b/images/downloads_for_sale_-_downloadaread_menuitem.png
new file mode 100644
index 0000000000000000000000000000000000000000..e1fd69ada1a08ea3c83084de4f1bc021207cc90d
Binary files /dev/null and b/images/downloads_for_sale_-_downloadaread_menuitem.png differ
diff --git a/releases/plg_vmcustom_downloads_for_sale_v1.0.zip b/releases/plg_vmcustom_downloads_for_sale_v1.0.zip
index 7f987c14334be8410ad72229f77fb038a1303f0d..7624fd6db3257cc193827c10a950c2dd4cec36a4 100644
Binary files a/releases/plg_vmcustom_downloads_for_sale_v1.0.zip and b/releases/plg_vmcustom_downloads_for_sale_v1.0.zip differ