diff --git a/websocket-sharp/Server/HttpServer.cs b/websocket-sharp/Server/HttpServer.cs
index 76f10ca4..7269f7fb 100644
--- a/websocket-sharp/Server/HttpServer.cs
+++ b/websocket-sharp/Server/HttpServer.cs
@@ -390,7 +390,7 @@ namespace WebSocketSharp.Server
       var wsContext = context.AcceptWebSocket ();
 
       IWebSocketServiceHost host;
-      if (!_serviceHosts.TryGetServiceHost (wsContext.Path, out host))
+      if (!_serviceHosts.TryGetServiceHostInternally (wsContext.Path, out host))
       {
         context.Response.StatusCode = (int) HttpStatusCode.NotImplemented;
         return false;
diff --git a/websocket-sharp/Server/IWebSocketServiceHost.cs b/websocket-sharp/Server/IWebSocketServiceHost.cs
index e6b2f883..8732e40f 100644
--- a/websocket-sharp/Server/IWebSocketServiceHost.cs
+++ b/websocket-sharp/Server/IWebSocketServiceHost.cs
@@ -55,6 +55,14 @@ namespace WebSocketSharp.Server
     /// 
     bool KeepClean { get; set; }
 
+    /// 
+    /// Gets the path to the WebSocket service provided by the WebSocket service host.
+    /// 
+    /// 
+    /// A  that contains an absolute path to the WebSocket service.
+    /// 
+    string ServicePath { get; }
+
     /// 
     /// Gets the manager of the sessions to the WebSocket service host.
     /// 
diff --git a/websocket-sharp/Server/WebSocketServer.cs b/websocket-sharp/Server/WebSocketServer.cs
index b4dabce9..0c44bde5 100644
--- a/websocket-sharp/Server/WebSocketServer.cs
+++ b/websocket-sharp/Server/WebSocketServer.cs
@@ -226,7 +226,7 @@ namespace WebSocketSharp.Server
 
       var path = context.Path;
       IWebSocketServiceHost host;
-      if (!_serviceHosts.TryGetServiceHost (path, out host))
+      if (!_serviceHosts.TryGetServiceHostInternally (path, out host))
       {
         websocket.Close (HttpStatusCode.NotImplemented);
         return;
diff --git a/websocket-sharp/Server/WebSocketServiceHost.cs b/websocket-sharp/Server/WebSocketServiceHost.cs
index 65c8dbab..c0680da7 100644
--- a/websocket-sharp/Server/WebSocketServiceHost.cs
+++ b/websocket-sharp/Server/WebSocketServiceHost.cs
@@ -223,7 +223,7 @@ namespace WebSocketSharp.Server
     }
 
     /// 
-    /// Gets the path to the WebSocket service that the WebSocket service host provides.
+    /// Gets the path to the WebSocket service provided by the WebSocket service host.
     /// 
     /// 
     /// A  that contains an absolute path to the WebSocket service.
diff --git a/websocket-sharp/Server/WebSocketServiceHostManager.cs b/websocket-sharp/Server/WebSocketServiceHostManager.cs
index dad24bcc..95ab6e96 100644
--- a/websocket-sharp/Server/WebSocketServiceHostManager.cs
+++ b/websocket-sharp/Server/WebSocketServiceHostManager.cs
@@ -66,44 +66,13 @@ namespace WebSocketSharp.Server
 
     #endregion
 
-    #region Internal Properties
-
-    internal bool KeepClean {
-      get {
-        return _keepClean;
-      }
-
-      set {
-        lock (_sync)
-        {
-          if (_keepClean ^ value)
-          {
-            _keepClean = value;
-            foreach (var host in _serviceHosts.Values)
-              host.KeepClean = value;
-          }
-        }
-      }
-    }
-
-    internal IEnumerable ServiceHosts {
-      get {
-        lock (_sync)
-        {
-          return _serviceHosts.Values.ToList ();
-        }
-      }
-    }
-
-    #endregion
-
     #region Public Properties
 
     /// 
-    /// Gets the connection count to the WebSocket services provided by the WebSocket server.
+    /// Gets the connection count to the every WebSocket service provided by the WebSocket server.
     /// 
     /// 
-    /// An  that contains the connection count to the WebSocket services.
+    /// An  that contains the connection count to the every WebSocket service.
     /// 
     public int ConnectionCount {
       get {
@@ -130,6 +99,76 @@ namespace WebSocketSharp.Server
       }
     }
 
+    /// 
+    /// Gets the WebSocket service host with the specified .
+    /// 
+    /// 
+    /// A  instance that represents the WebSocket service host
+    /// if it is successfully found; otherwise, .
+    /// 
+    /// 
+    /// A  that contains an absolute path to the WebSocket service managed by
+    /// the WebSocket service host to get.
+    /// 
+    public IWebSocketServiceHost this [string servicePath] {
+      get {
+        var msg = servicePath.CheckIfValidServicePath ();
+        if (msg != null)
+        {
+          _logger.Error (msg);
+          return null;
+        }
+
+        IWebSocketServiceHost host;
+        if (!TryGetServiceHostInternally (servicePath, out host))
+          _logger.Error ("The WebSocket service with the specified path not found.\npath: " + servicePath);
+
+        return host;
+      }
+    }
+
+    /// 
+    /// Gets a value indicating whether the manager cleans up periodically the every inactive session
+    /// to the WebSocket services provided by the WebSocket server.
+    /// 
+    /// 
+    /// true if the manager cleans up periodically the every inactive session to the WebSocket
+    /// services; otherwise, false.
+    /// 
+    public bool KeepClean {
+      get {
+        return _keepClean;
+      }
+
+      internal set {
+        lock (_sync)
+        {
+          if (_keepClean ^ value)
+          {
+            _keepClean = value;
+            foreach (var host in _serviceHosts.Values)
+              host.KeepClean = value;
+          }
+        }
+      }
+    }
+
+    /// 
+    /// Gets the collection of the WebSocket service hosts managed by the WebSocket server.
+    /// 
+    /// 
+    /// An IEnumerable<IWebSocketServiceHost> that contains the collection of the WebSocket
+    /// service hosts.
+    /// 
+    public IEnumerable ServiceHosts {
+      get {
+        lock (_sync)
+        {
+          return _serviceHosts.Values.ToList ();
+        }
+      }
+    }
+
     /// 
     /// Gets the collection of every path to the WebSocket services provided by the WebSocket server.
     /// 
@@ -152,20 +191,12 @@ namespace WebSocketSharp.Server
     private Dictionary> broadping (byte [] data)
     {
       var result = new Dictionary> ();
-      foreach (var service in copy ())
-        result.Add (service.Key, service.Value.Sessions.BroadpingInternally (data));
+      foreach (var host in ServiceHosts)
+        result.Add (host.ServicePath, host.Sessions.BroadpingInternally (data));
 
       return result;
     }
 
-    private Dictionary copy ()
-    {
-      lock (_sync)
-      {
-        return new Dictionary (_serviceHosts);
-      }
-    }
-
     #endregion
 
     #region Internal Methods
@@ -190,7 +221,6 @@ namespace WebSocketSharp.Server
     internal bool Remove (string servicePath)
     {
       servicePath = HttpUtility.UrlDecode (servicePath).TrimEndSlash ();
-
       IWebSocketServiceHost host;
       lock (_sync)
       {
@@ -230,7 +260,7 @@ namespace WebSocketSharp.Server
       }
     }
 
-    internal bool TryGetServiceHost (string servicePath, out IWebSocketServiceHost serviceHost)
+    internal bool TryGetServiceHostInternally (string servicePath, out IWebSocketServiceHost serviceHost)
     {
       servicePath = HttpUtility.UrlDecode (servicePath).TrimEndSlash ();
       lock (_sync)
@@ -306,7 +336,7 @@ namespace WebSocketSharp.Server
       }
 
       IWebSocketServiceHost host;
-      if (!TryGetServiceHost (servicePath, out host))
+      if (!TryGetServiceHostInternally (servicePath, out host))
       {
         _logger.Error ("The WebSocket service with the specified path not found.\npath: " + servicePath);
         return false;
@@ -339,7 +369,7 @@ namespace WebSocketSharp.Server
       }
 
       IWebSocketServiceHost host;
-      if (!TryGetServiceHost (servicePath, out host))
+      if (!TryGetServiceHostInternally (servicePath, out host))
       {
         _logger.Error ("The WebSocket service with the specified path not found.\npath: " + servicePath);
         return false;
@@ -412,7 +442,7 @@ namespace WebSocketSharp.Server
       }
 
       IWebSocketServiceHost host;
-      if (!TryGetServiceHost (servicePath, out host))
+      if (!TryGetServiceHostInternally (servicePath, out host))
       {
         _logger.Error ("The WebSocket service with the specified path not found.\npath: " + servicePath);
         return null;
@@ -450,7 +480,7 @@ namespace WebSocketSharp.Server
       }
 
       IWebSocketServiceHost host;
-      if (!TryGetServiceHost (servicePath, out host))
+      if (!TryGetServiceHostInternally (servicePath, out host))
       {
         _logger.Error ("The WebSocket service with the specified path not found.\npath: " + servicePath);
         return null;
@@ -479,7 +509,7 @@ namespace WebSocketSharp.Server
       }
 
       IWebSocketServiceHost host;
-      if (!TryGetServiceHost (servicePath, out host))
+      if (!TryGetServiceHostInternally (servicePath, out host))
       {
         _logger.Error ("The WebSocket service with the specified path not found.\npath: " + servicePath);
         return;
@@ -514,7 +544,7 @@ namespace WebSocketSharp.Server
       }
 
       IWebSocketServiceHost host;
-      if (!TryGetServiceHost (servicePath, out host))
+      if (!TryGetServiceHostInternally (servicePath, out host))
       {
         _logger.Error ("The WebSocket service with the specified path not found.\npath: " + servicePath);
         return;
@@ -549,7 +579,7 @@ namespace WebSocketSharp.Server
       }
 
       IWebSocketServiceHost host;
-      if (!TryGetServiceHost (servicePath, out host))
+      if (!TryGetServiceHostInternally (servicePath, out host))
       {
         _logger.Error ("The WebSocket service with the specified path not found.\npath: " + servicePath);
         return;
@@ -558,64 +588,6 @@ namespace WebSocketSharp.Server
       host.Sessions.CloseSession (code, reason, id);
     }
 
-    /// 
-    /// Gets the connection count to the WebSocket service with the specified .
-    /// 
-    /// 
-    /// An  that contains the connection count if the WebSocket service is successfully
-    /// found; otherwise, -1.
-    /// 
-    /// 
-    /// A  that contains an absolute path to the WebSocket service to find.
-    /// 
-    public int GetConnectionCount (string servicePath)
-    {
-      var msg = servicePath.CheckIfValidServicePath ();
-      if (msg != null)
-      {
-        _logger.Error (msg);
-        return -1;
-      }
-
-      IWebSocketServiceHost host;
-      if (!TryGetServiceHost (servicePath, out host))
-      {
-        _logger.Error ("The WebSocket service with the specified path not found.\npath: " + servicePath);
-        return -1;
-      }
-
-      return host.ConnectionCount;
-    }
-
-    /// 
-    /// Gets the manager of the sessions to the WebSocket service with the specified .
-    /// 
-    /// 
-    /// A  if the WebSocket service is successfully found;
-    /// otherwise, .
-    /// 
-    /// 
-    /// A  that contains an absolute path to the WebSocket service to find.
-    /// 
-    public WebSocketSessionManager GetSessions (string servicePath)
-    {
-      var msg = servicePath.CheckIfValidServicePath ();
-      if (msg != null)
-      {
-        _logger.Error (msg);
-        return null;
-      }
-
-      IWebSocketServiceHost host;
-      if (!TryGetServiceHost (servicePath, out host))
-      {
-        _logger.Error ("The WebSocket service with the specified path not found.\npath: " + servicePath);
-        return null;
-      }
-
-      return host.Sessions;
-    }
-
     /// 
     /// Sends a Ping to the client associated with the specified  and
     /// .
@@ -640,7 +612,7 @@ namespace WebSocketSharp.Server
       }
 
       IWebSocketServiceHost host;
-      if (!TryGetServiceHost (servicePath, out host))
+      if (!TryGetServiceHostInternally (servicePath, out host))
       {
         _logger.Error ("The WebSocket service with the specified path not found.\npath: " + servicePath);
         return false;
@@ -676,7 +648,7 @@ namespace WebSocketSharp.Server
       }
 
       IWebSocketServiceHost host;
-      if (!TryGetServiceHost (servicePath, out host))
+      if (!TryGetServiceHostInternally (servicePath, out host))
       {
         _logger.Error ("The WebSocket service with the specified path not found.\npath: " + servicePath);
         return false;
@@ -711,7 +683,7 @@ namespace WebSocketSharp.Server
       }
 
       IWebSocketServiceHost host;
-      if (!TryGetServiceHost (servicePath, out host))
+      if (!TryGetServiceHostInternally (servicePath, out host))
       {
         _logger.Error ("The WebSocket service with the specified path not found.\npath: " + servicePath);
         return false;
@@ -746,7 +718,7 @@ namespace WebSocketSharp.Server
       }
 
       IWebSocketServiceHost host;
-      if (!TryGetServiceHost (servicePath, out host))
+      if (!TryGetServiceHostInternally (servicePath, out host))
       {
         _logger.Error ("The WebSocket service with the specified path not found.\npath: " + servicePath);
         return false;
@@ -755,6 +727,39 @@ namespace WebSocketSharp.Server
       return host.Sessions.SendTo (data, id);
     }
 
+    /// 
+    /// Tries to get the WebSocket service host with the specified .
+    /// 
+    /// 
+    /// true if the WebSocket service host is successfully found; otherwise, false.
+    /// 
+    /// 
+    /// A  that contains an absolute path to the WebSocket service managed by
+    /// the WebSocket service host to get.
+    /// 
+    /// 
+    /// When this method returns, a  instance that represents
+    /// the WebSocket service host if it is successfully found; otherwise, .
+    /// This parameter is passed uninitialized.
+    /// 
+    public bool TryGetServiceHost (string servicePath, out IWebSocketServiceHost serviceHost)
+    {
+      var msg = servicePath.CheckIfValidServicePath ();
+      if (msg != null)
+      {
+        _logger.Error (msg);
+        serviceHost = null;
+
+        return false;
+      }
+
+      var result = TryGetServiceHostInternally (servicePath, out serviceHost);
+      if (!result)
+        _logger.Error ("The WebSocket service with the specified path not found.\npath: " + servicePath);
+
+      return result;
+    }
+
     #endregion
   }
 }