diff --git a/samples/quickstart/WEB-INF/web.xml b/samples/quickstart/WEB-INF/web.xml
index 04c68a3..de10557 100644
--- a/samples/quickstart/WEB-INF/web.xml
+++ b/samples/quickstart/WEB-INF/web.xml
@@ -16,7 +16,6 @@
             # http://www.jsecurity.org/api/org/jsecurity/web/servlet/JSecurityFilter.html
             
             [main]
-            sessionMode = jsecurity
             [interceptors]
 
             [urls]
diff --git a/samples/quickstart/account/index.jsp b/samples/quickstart/account/index.jsp
index b9dab63..1c74127 100644
--- a/samples/quickstart/account/index.jsp
+++ b/samples/quickstart/account/index.jsp
@@ -10,5 +10,9 @@
 
   <p>You have successfully logged in.</p>
 
+  <p><a href="<c:url value="/home.jsp"/>">Return to the home page.</a></p>
+
+  <p><a href="<c:url value="/logoutjsp"/>">Log out.</a></p>
+
 </body>
 </html>
\ No newline at end of file
diff --git a/samples/quickstart/home.jsp b/samples/quickstart/home.jsp
index de2dd3d..ddb3618 100644
--- a/samples/quickstart/home.jsp
+++ b/samples/quickstart/home.jsp
@@ -8,14 +8,41 @@
 
   <h1>JSecurity Quickstart</h1>
 
-  <p>Hi! Welcome to the JSecurity Quickstart sample application.</p>
+  <p>Hi <jsec:guest>Guest</jsec:guest><jsec:user><jsec:principal/></jsec:user>!
+      ( <jsec:user><a href="<c:url value="/logout.jsp"/>">Log out</a></jsec:user>
+        <jsec:guest><a href="<c:url value="/account/"/>">Log in</a></jsec:guest> )
+  </p>
 
-  <p>This page represents the home page of any web application.</p>
+  <p>Welcome to the JSecurity Quickstart sample application.
+      This page represents the home page of any web application.</p>
 
   <h2>Roles</h2>
   
-  <p>This part of the webpage shows the roles you currently have.  If you have't logged in yet, you will only have
-  the 'guest' role. </p>
+  <p>To show some taglibs, here are the roles you have and don't have.  Log out and log back in under different user
+      accounts to see different roles.</p>
+
+  <h3>Roles you have</h3>
+
+  <p>
+      <jsec:hasRole name="guest">guest<br/></jsec:hasRole>
+      <jsec:hasRole name="root">root<br/></jsec:hasRole>
+      <jsec:hasRole name="president">president<br/></jsec:hasRole>
+      <jsec:hasRole name="darklord">darklord<br/></jsec:hasRole>
+      <jsec:hasRole name="goodguy">goodguy<br/></jsec:hasRole>
+      <jsec:hasRole name="schwartz">schwartz<br/></jsec:hasRole>
+  </p>
+
+  <h3>Roles you DON'T have</h3>
+
+  <p>
+      <jsec:lacksRole name="guest">guest<br/></jsec:lacksRole>
+      <jsec:lacksRole name="root">root<br/></jsec:lacksRole>
+      <jsec:lacksRole name="president">president<br/></jsec:lacksRole>
+      <jsec:lacksRole name="darklord">darklord<br/></jsec:lacksRole>
+      <jsec:lacksRole name="goodguy">goodguy<br/></jsec:lacksRole>
+      <jsec:lacksRole name="schwartz">schwartz<br/></jsec:lacksRole>
+  </p>
+
 
 </body>
 </html>
\ No newline at end of file
diff --git a/samples/quickstart/include.jsp b/samples/quickstart/include.jsp
index 9551fec..f47865d 100644
--- a/samples/quickstart/include.jsp
+++ b/samples/quickstart/include.jsp
@@ -1,3 +1,4 @@
+<%@ page import="org.jsecurity.SecurityUtils" %>
 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
 <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
-<%@ taglib prefix="jsecurity" uri="http://www.jsecurity.org/tags" %>
\ No newline at end of file
+<%@ taglib prefix="jsec" uri="http://www.jsecurity.org/tags" %>
\ No newline at end of file
diff --git a/samples/quickstart/logout.jsp b/samples/quickstart/logout.jsp
index 4b83fb7..305e973 100644
--- a/samples/quickstart/logout.jsp
+++ b/samples/quickstart/logout.jsp
@@ -45,7 +45,7 @@
 
 <h2>Log out</h2>
 
-<p>You have succesfully logged out.</p>
+<p>You have succesfully logged out.  <a href="<c:url value="/home.jsp"/>">Return to the home page.</a></p>
 
 </body>
 </html>
\ No newline at end of file
diff --git a/samples/quickstart/style.css b/samples/quickstart/style.css
index 0a46bd4..e84e207 100644
--- a/samples/quickstart/style.css
+++ b/samples/quickstart/style.css
@@ -1,7 +1,7 @@
 body {
-    margin: 1px;
+    margin: 15px 0 0 15px;
     padding: 1px;
-    background: #2370cf;
+    /*background: #2370cf;*/
     font: 12px 'Lucida Grande', Geneva, Verdana, Arial, sans-serif;
     color: #000;
 }
diff --git a/src/org/jsecurity/web/RedirectView.java b/src/org/jsecurity/web/RedirectView.java
index ca4d071..88dac3e 100644
--- a/src/org/jsecurity/web/RedirectView.java
+++ b/src/org/jsecurity/web/RedirectView.java
@@ -66,6 +66,7 @@
  * @author Juergen Hoeller
  * @author Colin Sampaleanu
  */
+@SuppressWarnings({"deprecation"})
 public class RedirectView {
 
 	/** The default encoding scheme: UTF-8 */
@@ -245,14 +246,12 @@
 	 * @see java.net.URLEncoder#encode(String, String)
 	 * @see java.net.URLEncoder#encode(String)
 	 */
-    @SuppressWarnings("deprecated")
     protected String urlEncode(String input, String encodingScheme) throws UnsupportedEncodingException {
         if ( !JavaEnvironment.isAtLeastVersion14() ) {
 			if (log.isDebugEnabled()) {
 				log.debug("Only JDK 1.3 URLEncoder available: using platform default encoding " +
 						"instead of the requested scheme '" + encodingScheme + "'");
 			}
-            //noinspection deprecation
             return URLEncoder.encode(input);
 		}
 		return URLEncoder.encode(input, encodingScheme);
diff --git a/src/org/jsecurity/web/servlet/JSecurityHttpServletRequest.java b/src/org/jsecurity/web/servlet/JSecurityHttpServletRequest.java
index 718cd67..2bd3cd9 100644
--- a/src/org/jsecurity/web/servlet/JSecurityHttpServletRequest.java
+++ b/src/org/jsecurity/web/servlet/JSecurityHttpServletRequest.java
@@ -31,6 +31,7 @@
  * @author Les Hazlewood
  * @since 0.2
  */
+@SuppressWarnings({"deprecated", "deprecation"})
 public class JSecurityHttpServletRequest extends HttpServletRequestWrapper {
 
     //The following 7 constants support the JSecurity's implementation of the Servlet Specification
diff --git a/src/org/jsecurity/web/servlet/JSecurityHttpServletResponse.java b/src/org/jsecurity/web/servlet/JSecurityHttpServletResponse.java
index de15057..f41766c 100644
--- a/src/org/jsecurity/web/servlet/JSecurityHttpServletResponse.java
+++ b/src/org/jsecurity/web/servlet/JSecurityHttpServletResponse.java
@@ -40,6 +40,7 @@
  * @author Les Hazlewood
  * @since 0.2
  */
+@SuppressWarnings({"deprecated", "deprecation"})
 public class JSecurityHttpServletResponse extends HttpServletResponseWrapper {
 
     private static final String DEFAULT_SESSION_ID_PARAMETER_NAME = JSecurityHttpSession.DEFAULT_SESSION_ID_NAME;
diff --git a/src/org/jsecurity/web/servlet/JSecurityHttpSession.java b/src/org/jsecurity/web/servlet/JSecurityHttpSession.java
index 5cb0b32..4c40949 100644
--- a/src/org/jsecurity/web/servlet/JSecurityHttpSession.java
+++ b/src/org/jsecurity/web/servlet/JSecurityHttpSession.java
@@ -31,7 +31,7 @@
  * @since 0.2
  * @author Les Hazlewood
  */
-@SuppressWarnings("deprecated")
+@SuppressWarnings({"deprecated", "deprecation"})
 public class JSecurityHttpSession implements HttpSession {
 
     public static final String DEFAULT_SESSION_ID_NAME = "JSESSIONID";
@@ -127,6 +127,7 @@
         return getAttribute( s );
     }
 
+    @SuppressWarnings({"unchecked"})
     protected Set<String> getKeyNames() {
         Collection<Object> keySet = null;
         try {
diff --git a/src/org/jsecurity/web/tags/AuthenticatedTag.java b/src/org/jsecurity/web/tags/AuthenticatedTag.java
index c413a6e..004029d 100644
--- a/src/org/jsecurity/web/tags/AuthenticatedTag.java
+++ b/src/org/jsecurity/web/tags/AuthenticatedTag.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2005-2008 Jeremy Haile
+ * Copyright 2005-2008 Jeremy Haile, Les Hazlewood
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -19,24 +19,31 @@
 import javax.servlet.jsp.tagext.TagSupport;
 
 /**
- * JSP tag that renders the tag body if the current user is authenticated.  If the
- * user is not authenticated, the tag body is skipped.
+ * JSP tag that renders the tag body only if the current user has executed a <b>successful</b> authentication attempt
+ * <em>during their current session</em>.
+ *
+ * <p>This is more restrictive than the {@link UserTag}, which only
+ * ensures the current user is known to the system, either via a current login or from Remember Me services,
+ * which only makes the assumption that the current user is who they say they are, and does not guarantee it like
+ * this tag does.
+ *
+ * <p>The logically opposite tag of this one is the {@link NotAuthenticatedTag}
  *
  * @since 0.2
  * @author Jeremy Haile
+ * @author Les Hazlewood
  */
 public class AuthenticatedTag extends SecureTag {
 
     public int onDoStartTag() throws JspException {
         if ( getSubject() != null && getSubject().isAuthenticated() ) {
             if ( log.isTraceEnabled() ) {
-                log.trace( "Subject exists and is authenticated.  'authenticated tag body will be evaluated." );
+                log.trace( "Subject exists and is authenticated.  Tag body will be evaluated." );
             }
             return TagSupport.EVAL_BODY_INCLUDE;
         } else {
             if ( log.isTraceEnabled() ) {
-                log.trace( "Subject does not exist or is not authenticated.  'authenticated' tag " +
-                    "body will not be evaluated." );
+                log.trace( "Subject does not exist or is not authenticated.  Tag body will not be evaluated." );
             }
             return TagSupport.SKIP_BODY;
         }
diff --git a/src/org/jsecurity/web/tags/GuestTag.java b/src/org/jsecurity/web/tags/GuestTag.java
new file mode 100644
index 0000000..6b39117
--- /dev/null
+++ b/src/org/jsecurity/web/tags/GuestTag.java
@@ -0,0 +1,49 @@
+/*
+ * Copyright 2005-2008 Les Hazlewood
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.jsecurity.web.tags;
+
+import javax.servlet.jsp.JspException;
+import javax.servlet.jsp.tagext.TagSupport;
+
+/**
+ * JSP tag that renders the tag body if the current user <em>is not</em> known to the system, either because they
+ * haven't logged in yet, or because they have no 'RememberMe' identity.
+ *
+ * <p>The logically opposite tag of this one is the {@link UserTag}.  Please read that class's JavaDoc as it explains
+ * more about the differences between Authenticated/Unauthenticated and User/Guest semantic differences.
+ *
+ * @author Les Hazlewood
+ * @since 0.9
+ */
+public class GuestTag extends SecureTag {
+
+    public int onDoStartTag() throws JspException {
+        if ( getSubject() == null || getSubject().getPrincipal() == null ) {
+            if ( log.isTraceEnabled() ) {
+                log.trace( "Subject does not exist or does not have a known identity (aka 'principal').  " +
+                    "Tag body will be evaluated." );
+            }
+            return TagSupport.EVAL_BODY_INCLUDE;
+        } else {
+            if ( log.isTraceEnabled() ) {
+                log.trace( "Subject exists or has a known identity (aka 'principal').  " +
+                    "Tag body will not be evaluated." );
+            }
+            return TagSupport.SKIP_BODY;
+        }
+    }
+
+}
diff --git a/src/org/jsecurity/web/tags/NotAuthenticatedTag.java b/src/org/jsecurity/web/tags/NotAuthenticatedTag.java
index f44c5cc..61a7fda 100644
--- a/src/org/jsecurity/web/tags/NotAuthenticatedTag.java
+++ b/src/org/jsecurity/web/tags/NotAuthenticatedTag.java
@@ -19,8 +19,10 @@
 import javax.servlet.jsp.tagext.TagSupport;
 
 /**
- * JSP tag that renders the tag body if the current user is not authenticated.  If the
- * user is authenticated, the tag body is skipped.
+ * JSP tag that renders the tag body only if the current user has <em>not</em> executed a successful authentication
+ * attempt <em>during their current session</em>.
+ *
+ * <p>The logically opposite tag of this one is the {@link AuthenticatedTag}.
  *
  * @since 0.2
  * @author Jeremy Haile
@@ -30,14 +32,12 @@
     public int onDoStartTag() throws JspException {
         if ( getSubject() == null || !getSubject().isAuthenticated() ) {
             if ( log.isTraceEnabled() ) {
-                log.trace( "Subject does not exist or is not authenticated.  'notAuthenticated' tag body " +
-                    "will be evaluated." );
+                log.trace( "Subject does not exist or is not authenticated.  Tag body will be evaluated." );
             }
             return TagSupport.EVAL_BODY_INCLUDE;
         } else {
             if ( log.isTraceEnabled() ) {
-                log.trace( "Subject exists and is authenticated.  'notAuthenticated' tag body " +
-                    "will not be evaluated." );
+                log.trace( "Subject exists and is authenticated.  Tag body will not be evaluated." );
             }
             return TagSupport.SKIP_BODY;
         }
diff --git a/src/org/jsecurity/web/tags/UserTag.java b/src/org/jsecurity/web/tags/UserTag.java
new file mode 100644
index 0000000..a1e2b17
--- /dev/null
+++ b/src/org/jsecurity/web/tags/UserTag.java
@@ -0,0 +1,54 @@
+/*
+ * Copyright 2005-2008 Les Hazlewood
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.jsecurity.web.tags;
+
+import javax.servlet.jsp.JspException;
+import javax.servlet.jsp.tagext.TagSupport;
+
+/**
+ * JSP tag that renders the tag body if the current user known to the system, either from a successful login attempt
+ * (not necessarily during the current session) or from 'RememberMe' services.
+ *
+ * <p><b>Note:</b> This is <em>less</em> restrictive than the <code>AuthenticatedTag</code> since it only assumes
+ * the user is who they say they are, either via a current session login <em>or</em> via Remember Me services, which
+ * makes no guarantee the user is who they say they are.  The <code>AuthenticatedTag</code> however
+ * guarantees that the current user has logged in <em>during their current session</em>, proving they really are
+ * who they say they are.
+ *
+ * <p>The logically opposite tag of this one is the {@link GuestTag}.
+ *
+ * @author Les Hazlewood
+ * @since 0.9
+ */
+public class UserTag extends SecureTag {
+
+    public int onDoStartTag() throws JspException {
+        if ( getSubject() != null && getSubject().getPrincipal() != null ) {
+            if ( log.isTraceEnabled() ) {
+                log.trace( "Subject has known identity (aka 'principal').  " +
+                    "Tag body will be evaluated." );
+            }
+            return TagSupport.EVAL_BODY_INCLUDE;
+        } else {
+            if ( log.isTraceEnabled() ) {
+                log.trace( "Subject does not exist or have a known identity (aka 'principal').  " +
+                    "Tag body will not be evaluated." );
+            }
+            return TagSupport.SKIP_BODY;
+        }
+    }
+
+}
diff --git a/src/org/jsecurity/web/tags/jsecurity.tld b/src/org/jsecurity/web/tags/jsecurity.tld
index 2aa47ce..22fca8a 100644
--- a/src/org/jsecurity/web/tags/jsecurity.tld
+++ b/src/org/jsecurity/web/tags/jsecurity.tld
@@ -104,14 +104,36 @@
         <name>authenticated</name>
         <tag-class>org.jsecurity.web.tags.AuthenticatedTag</tag-class>
         <body-content>JSP</body-content>
-        <description>Displays body content only if the current user is authenticated.</description>
+        <description>Displays body content only if the current user has successfully authenticated
+            _during their current session_.  It is more restrictive than the 'user' tag.
+            It is logically opposite to the 'notAuthenticated' tag.</description>
     </tag>
 
     <tag>
         <name>notAuthenticated</name>
         <tag-class>org.jsecurity.web.tags.NotAuthenticatedTag</tag-class>
         <body-content>JSP</body-content>
-        <description>Displays body content only if the current user is not authenticated.</description>
+        <description>Displays body content only if the current user has NOT succesfully authenticated
+            _during their current session_.  It is logically opposite to the 'authenticated' tag.</description>
+    </tag>
+
+    <tag>
+        <name>user</name>
+        <tag-class>org.jsecurity.web.tags.UserTag</tag-class>
+        <body-content>JSP</body-content>
+        <description>Displays body content only if the current Subject has a known identity, either
+            from a previous login or from 'RememberMe' services.  Note that this is semantically different
+            from the 'authenticated' tag, which is more restrictive.  It is logically
+            opposite to the 'guest' tag.</description>
+    </tag>
+
+    <tag>
+        <name>guest</name>
+        <tag-class>org.jsecurity.web.tags.GuestTag</tag-class>
+        <body-content>JSP</body-content>
+        <description>Displays body content only if the current Subject IS NOT known to the system, either
+            because they have not logged in or they have no corresponding 'RememberMe' identity.  It is logically
+            opposite to the 'user' tag.</description>
     </tag>
 
     <tag>
