Index: site/site-tool/.classpath
===================================================================
--- site/site-tool/.classpath	(revision 36265)
+++ site/site-tool/.classpath	(working copy)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
 	<classpathentry excluding="**/.DS_Store" kind="src" path="tool/src/java"/>
-	<classpathentry sourcepath="JRE_SRC" kind="var" path="JRE_LIB"/>
+	<classpathentry kind="var" path="JRE_LIB" sourcepath="JRE_SRC"/>
 	<classpathentry kind="var" path="MAVEN_REPO/commons-logging/jars/commons-logging-1.0.4.jar"/>
 	<classpathentry kind="var" path="MAVEN_REPO/servletapi/jars/servletapi-2.4.jar"/>
 	<classpathentry combineaccessrules="false" kind="src" path="/site-api"/>
@@ -14,5 +14,6 @@
 	<classpathentry combineaccessrules="false" kind="src" path="/entity-api"/>
 	<classpathentry combineaccessrules="false" kind="src" path="/util-api"/>
 	<classpathentry combineaccessrules="false" kind="src" path="/util-util"/>
+	<classpathentry combineaccessrules="false" kind="src" path="/user-api"/>
 	<classpathentry kind="output" path="bin"/>
 </classpath>
Index: site/site-tool/tool/project.xml
===================================================================
--- site/site-tool/tool/project.xml	(revision 36265)
+++ site/site-tool/tool/project.xml	(working copy)
@@ -88,6 +88,12 @@
 
 		<dependency>
 			<groupId>sakaiproject</groupId>
+			<artifactId>sakai-user-api</artifactId>
+			<version>${sakai.version}</version>
+		</dependency>
+
+		<dependency>
+			<groupId>sakaiproject</groupId>
 			<artifactId>sakai-util-api</artifactId>
 			<version>${sakai.version}</version>
 		</dependency>
Index: site/site-tool/tool/src/java/org/sakaiproject/site/tool/AdminSitesAction.java
===================================================================
--- site/site-tool/tool/src/java/org/sakaiproject/site/tool/AdminSitesAction.java	(revision 36265)
+++ site/site-tool/tool/src/java/org/sakaiproject/site/tool/AdminSitesAction.java	(working copy)
@@ -64,6 +64,9 @@
 import org.sakaiproject.tool.api.ToolSession;
 import org.sakaiproject.tool.cover.SessionManager;
 import org.sakaiproject.tool.cover.ToolManager;
+import org.sakaiproject.user.api.User;
+import org.sakaiproject.user.api.UserNotDefinedException;
+import org.sakaiproject.user.cover.UserDirectoryService;
 import org.sakaiproject.util.ResourceLoader;
 import org.sakaiproject.util.StringUtil;
 
@@ -118,16 +121,12 @@
 		else if (userId != null)
 		{
 			List rv = new Vector();
-			try
-			{
-				Site userSite = SiteService.getSite(SiteService.getUserSiteId(userId));
-				rv.add(userSite);
-			}
-			catch (IdUnusedException e)
-			{
-			}
-
-			return rv;
+            Site userSite = findUserSiteByUserIdCriteria(userId);
+            if ( userSite == null ) {
+                return rv;
+            }
+            rv.add(userSite);
+            return rv;
 		}
 
 		// search for non-user sites, using the criteria
@@ -172,16 +171,11 @@
 
 		else if (userId != null)
 		{
-			try
-			{
-				Site userSite = SiteService.getSite(SiteService.getUserSiteId(userId));
-				return 1;
-			}
-			catch (IdUnusedException e)
-			{
-			}
-
-			return 0;
+		    Site userSite = findUserSiteByUserIdCriteria(userId);
+            if ( userSite == null ) {
+                return 0;
+            }
+            return 1;
 		}
 
 		else if (search != null)
@@ -195,6 +189,108 @@
 		}
 	}
 
+    /**
+     * Searches for a user's workspace site by resolving the given ID to
+     * a {@link User} object and calculating the target {@link Site}'s
+     * ID from that object. As implemented, supports user PK and EID
+     * inputs. Be aware that searching for users by EID can result in
+     * the lazy creation of Sakai user records, or at least user ID
+     * mapping records.
+     * 
+     * @see #findUserByPk(String)
+     * @see #findUserByEid(String)
+     * @see #findUserSite(User)
+     * @param formSubmittedUserId typically end-user provided search
+     *   criteria; must not be <code>null</code>
+     * @return the user's workspace site or <code>null</code> if no
+     *   such user or no such site
+     */
+    protected Site findUserSiteByUserIdCriteria(String formSubmittedUserId) {
+        
+        User user = findUserByPk(formSubmittedUserId);
+        if ( user == null ) {
+            user = findUserByEid(formSubmittedUserId); // be warned, this might lazily create a user record
+        }
+        
+        if ( user == null ) {
+            return null;
+        }
+        
+        Site userSite = findUserSite(user);
+        return userSite;
+        
+    }
+	
+    /**
+     * Search for a {@link User} object by primary key (i.e. <code>User.id</code>).
+     * 
+     * @see UserDirectoryService#getUser(String)
+     * @param userPk a String to be treated as a user's Sakai-internal primary key;
+     *   must not be <code>null</code>
+     * @return a resolved {@link User} or <code>null</code>, signifying no results
+     */
+    protected User findUserByPk(String userPk) {
+        
+        try {
+            User user = UserDirectoryService.getUser(userPk);
+            return user;
+        } catch ( UserNotDefinedException e ) {
+            if ( Log.isDebugEnabled() ) {
+                Log.debug("chef", "Failed to find a user record by PK [pk = " + userPk + "]", 
+                        e);
+            }
+            return null;
+        }
+        
+    }
+
+    /**
+     * Search for a {@link User} object by user "enterprise identifier", 
+     * (i.e. <code>User.eid</code>).
+     * 
+     * @see UserDirectoryService#getUserByEid(String)
+     * @param eid a String to be treated as a user's "enterprise identifier";
+     *   must not be <code>null</code>
+     * @return a resolved {@link User} or <code>null</code>, signifying no results
+     */
+    protected User findUserByEid(String eid) {
+        
+        try {
+            User user = UserDirectoryService.getUserByEid(eid);
+            return user;
+        } catch ( UserNotDefinedException e ) {
+            if ( Log.isDebugEnabled() ) {
+                Log.debug("chef", "Failed to find a user record by EID [eid = " + eid + "]", 
+                        e);
+            }
+            return null;
+        }
+        
+    }    
+    /**
+     * Search for the given {@link User}'s workspace {@link Site}.
+     * 
+     * @param knownUser user having a Sakai primary key (doesn't necessarily
+     *   mean the user has actually signed in yet). Must not be <code>null</code>
+     * @return the user's workspace site or <code>null<code> if no such thing, e.g.
+     *   if the user has not yet logged in.
+     */
+    protected Site findUserSite(User knownUser) {
+        String userDbId =  knownUser.getId();
+        String userEid = knownUser.getEid();
+        String userMyWorkspaceSiteDbId = SiteService.getUserSiteId(userDbId);
+        try {
+            Site userSite = SiteService.getSite(userMyWorkspaceSiteDbId); // exceptional if no results
+            return userSite;
+        } catch ( IdUnusedException e ) {
+            if ( Log.isDebugEnabled() ) {
+                Log.debug("chef", "Failed to locate a workspace for user [user id = " + userDbId + 
+                        "][user eid = " + userEid + "][site id = " + userMyWorkspaceSiteDbId + "]", e);
+            }
+            return null;
+        }
+    }    
+    
 	/**
 	 * Populate the state object, if needed.
 	 */
