diff --git a/phpBB/includes/notification/type/base.php b/phpBB/includes/notification/type/base.php
index 9ef0e71009..afd6a9fc9b 100644
--- a/phpBB/includes/notification/type/base.php
+++ b/phpBB/includes/notification/type/base.php
@@ -126,6 +126,17 @@ abstract class phpbb_notification_type_base implements phpbb_notification_type_i
 	*/
 	public function prepare_for_display()
 	{
+		if ($this->get_url())
+		{
+			$u_mark_read = append_sid($this->phpbb_root_path . 'index.' . $this->php_ext, 'mark_notification=' . $this->notification_id);
+		}
+		else
+		{
+			$redirect = (($this->user->page['page_dir']) ? $this->user->page['page_dir'] . '/' : '') . $this->user->page['page_name'] . (($this->user->page['query_string']) ? '?' . $this->user->page['query_string'] : '');
+
+			$u_mark_read = append_sid($this->phpbb_root_path . 'index.' . $this->php_ext, 'mark_notification=' . $this->notification_id . '&redirect=' . urlencode($redirect));
+		}
+
 		return array(
 			'NOTIFICATION_ID'	=> $this->notification_id,
 
@@ -138,7 +149,7 @@ abstract class phpbb_notification_type_base implements phpbb_notification_type_i
 
 			'UNREAD'			=> $this->unread,
 
-			'U_MARK_READ'		=> append_sid($this->phpbb_root_path . 'index.' . $this->php_ext, 'mark_notification=' . $this->notification_id),
+			'U_MARK_READ'		=> ($this->unread) ? $u_mark_read : '',
 		);
 	}
 
diff --git a/phpBB/index.php b/phpBB/index.php
index 7f85879d23..3cb49f1a28 100644
--- a/phpBB/index.php
+++ b/phpBB/index.php
@@ -36,6 +36,11 @@ if (($mark_notification = request_var('mark_notification', 0)))
 
 		$notification->mark_read();
 
+		if (($redirect = request_var('redirect', '')))
+		{
+			redirect(append_sid($phpbb_root_path . $redirect));
+		}
+
 		redirect($notification->get_url());
 	}
 }
diff --git a/phpBB/styles/prosilver/template/overall_header.html b/phpBB/styles/prosilver/template/overall_header.html
index f6bc57fa4b..8fcd595972 100644
--- a/phpBB/styles/prosilver/template/overall_header.html
+++ b/phpBB/styles/prosilver/template/overall_header.html
@@ -137,7 +137,7 @@
 						<ul class="topiclist forums">
 						<!-- BEGIN notifications -->
 							<li class="row<!-- IF notifications.UNREAD --> bg2<!-- ENDIF -->">
-								<!-- IF notifications.URL or notifications.U_MARK_READ --><a href="<!-- IF notifications.UNREAD -->{notifications.U_MARK_READ}<!-- ELSE -->{notifications.URL}<!-- ENDIF -->"><!-- ENDIF -->
+								<!-- IF notifications.URL --><a href="<!-- IF notifications.UNREAD -->{notifications.U_MARK_READ}<!-- ELSE -->{notifications.URL}<!-- ENDIF -->"><!-- ENDIF -->
 								<span>
 										{notifications.AVATAR}
 										<span class="notification_title">
@@ -146,6 +146,11 @@
 										</span>
 								</span>
 								<!-- IF notifications.URL --></a><!-- ENDIF -->
+								<!-- IF not notifications.URL and notifications.UNREAD -->
+									<span class="mark_notification_read">
+										<a href="{notifications.U_MARK_READ}">{L_MARK_READ}</a>
+									</span>
+								<!-- ENDIF -->
 							</li>
 				   			<!-- END notifications -->
 						</ul>
diff --git a/phpBB/styles/prosilver/template/ucp_notifications.html b/phpBB/styles/prosilver/template/ucp_notifications.html
index f71d8698b9..08b5396827 100644
--- a/phpBB/styles/prosilver/template/ucp_notifications.html
+++ b/phpBB/styles/prosilver/template/ucp_notifications.html
@@ -77,7 +77,7 @@
 					<li class="row<!-- IF notification_list.UNREAD --> bg3<!-- ELSE --><!-- IF notification_list.S_ROW_COUNT is odd --> bg1<!-- ELSE --> bg2<!-- ENDIF --><!-- ENDIF -->">
 						<dl>
 							<dt>
-								<!-- IF notification_list.URL or notification_list.U_MARK_READ --><a href="<!-- IF notification_list.UNREAD -->{notification_list.U_MARK_READ}<!-- ELSE -->{notification_list.URL}<!-- ENDIF -->"><!-- ENDIF -->
+								<!-- IF notification_list.URL --><a href="<!-- IF notification_list.UNREAD -->{notification_list.U_MARK_READ}<!-- ELSE -->{notification_list.URL}<!-- ENDIF -->"><!-- ENDIF -->
 								<span>
 										{notification_list.AVATAR}
 										<span class="notification_title">
@@ -86,9 +86,14 @@
 										</span>
 								</span>
 								<!-- IF notification_list.URL --></a><!-- ENDIF -->
+								<!-- IF not notifications.URL and notifications.UNREAD -->
+									<span class="mark_notification_read">
+										<a href="{notifications.U_MARK_READ}">{L_MARK_READ}</a>
+									</span>
+								<!-- ENDIF -->
 							</dt>
 
-							<dd class="mark"><!-- IF notification_list.UNREAD --><input type="checkbox" name="mark[]" value="{notification_list.NOTIFICATION_ID}" /> <dfn>{L_MARK_READ}</dfn><!-- ENDIF --></dd>
+							<dd class="mark">&nbsp;<!-- IF notification_list.UNREAD --><input type="checkbox" name="mark[]" value="{notification_list.NOTIFICATION_ID}" /> <dfn>{L_MARK_READ}</dfn><!-- ENDIF -->&nbsp;</dd>
 						</dl>
 					</li>
 				<!-- END notification_list -->
diff --git a/phpBB/styles/prosilver/theme/common.css b/phpBB/styles/prosilver/theme/common.css
index c82fa5b7c8..6e825f82ce 100644
--- a/phpBB/styles/prosilver/theme/common.css
+++ b/phpBB/styles/prosilver/theme/common.css
@@ -683,6 +683,10 @@ p.rules a {
 	line-height: 1.5em;
 }
 
+.notification_list ul.topiclist dt {
+	width: 70%;
+}
+
 .notification_list ul li a span img {
 	float: left;
 	max-width: 50px;
@@ -706,3 +710,9 @@ p.rules a {
 .notification_time {
 	margin-top: 0.5em;
 }
+
+.mark_notification_read {
+	clear: both;
+	float: left;
+	margin-top: 0.5em;
+}
diff --git a/phpBB/styles/subsilver2/template/overall_header.html b/phpBB/styles/subsilver2/template/overall_header.html
index e41095ad38..560f6a32b3 100644
--- a/phpBB/styles/subsilver2/template/overall_header.html
+++ b/phpBB/styles/subsilver2/template/overall_header.html
@@ -154,19 +154,22 @@ function marklist(id, name, state)
 					<div id="notification_list" class="notification_list">
 						<table class="tablebg" width="310px" cellspacing="1">
 							<!-- BEGIN notifications -->
-								<tr>
+								<tr class="row<!-- IF notifications.UNREAD -->2<!-- ELSE -->1<!-- ENDIF -->">
 									<!-- IF notifications.AVATAR -->
-										<td class="row1" width="50px">
+										<td width="50px">
 											{notifications.AVATAR}
 										</td>
-										<td class="row1" valign="top">
+										<td valign="top">
 									<!-- ELSE -->
-										<td class="row1" colspan="2" valign="top">
+										<td colspan="2" valign="top">
 									<!-- ENDIF -->
-										<!-- IF notifications.URL or notifications.U_MARK_READ --><a href="<!-- IF notifications.UNREAD -->{notifications.U_MARK_READ}<!-- ELSE -->{notifications.URL}<!-- ENDIF -->"><!-- ENDIF -->
+										<!-- IF notifications.URL --><a href="<!-- IF notifications.UNREAD -->{notifications.U_MARK_READ}<!-- ELSE -->{notifications.URL}<!-- ENDIF -->"><!-- ENDIF -->
 											{notifications.FORMATTED_TITLE}
 										<!-- IF notifications.URL --></a><!-- ENDIF --><br />
 										{notifications.TIME}
+										<!-- IF not notifications.URL and notifications.UNREAD -->
+											<br /><a href="{notifications.U_MARK_READ}">{L_MARK_READ}</a>
+										<!-- ENDIF -->
 									</td>
 				   				</tr>
 				   			<!-- END notifications -->
diff --git a/phpBB/styles/subsilver2/template/ucp_notifications.html b/phpBB/styles/subsilver2/template/ucp_notifications.html
index 7c3a516521..a2dc90c9f3 100644
--- a/phpBB/styles/subsilver2/template/ucp_notifications.html
+++ b/phpBB/styles/subsilver2/template/ucp_notifications.html
@@ -88,22 +88,22 @@
 							<th width="15%">{L_MARK_READ}</th>
 						</tr>
 						<!-- BEGIN notification_list -->
-							<!-- IF notification_list.UNREAD --><tr class="row3"><!-- ELSEIF notification_list.S_ROW_COUNT is even --><tr class="row1"><!-- ELSE --><tr class="row2"><!-- ENDIF -->
+							<tr class="row<!-- IF notification_list.UNREAD -->3<!-- ELSEIF notification_list.S_ROW_COUNT is even -->1<!-- ELSE -->2<!-- ENDIF -->">
 								<!-- IF notification_list.AVATAR -->
-									<td  width="50px">
+									<td width="50px">
 										{notification_list.AVATAR}
 									</td>
 									<td valign="top">
 								<!-- ELSE -->
-									<td colspan="2" valign="top">
+									<td colspan="2" valign="top" height="50px">
 								<!-- ENDIF -->
-									<!-- IF notification_list.URL or notification_list.U_MARK_READ --><a href="<!-- IF notification_list.UNREAD -->{notification_list.U_MARK_READ}<!-- ELSE -->{notification_list.URL}<!-- ENDIF -->"><!-- ENDIF -->
+									<!-- IF notification_list.URL --><a href="<!-- IF notification_list.UNREAD -->{notification_list.U_MARK_READ}<!-- ELSE -->{notification_list.URL}<!-- ENDIF -->"><!-- ENDIF -->
 										{notification_list.FORMATTED_TITLE}
 									<!-- IF notification_list.URL --></a><!-- ENDIF --><br />
 									{notification_list.TIME}
 								</td>
 								<td align="center">
-									<!-- IF not notification_list.UNREAD --><input type="checkbox" name="mark[]" value="{notification_list.NOTIFICATION_ID}" /><!-- ENDIF -->
+									<!-- IF notification_list.UNREAD --><input type="checkbox" name="mark[]" value="{notification_list.NOTIFICATION_ID}" /><!-- ENDIF -->
 								</td>
 							</tr>
 						<!-- END notification_list -->