public override void Stop()
        {
            foreach (var system in _liveSystems.Values)
            {
                Stop(system);
            }

            IAsynchQueueFactory _queueFactory = _k.Get <IAsynchQueueFactory>();

            _queueFactory.ShutdownAll();
            Console.WriteLine(_queueFactory.Queues.Count + " Queues:");
            foreach (IAsynchQueue q in _queueFactory.Queues)
            {
                Console.WriteLine("{0,-40} - Active: {1,7:0.###}% - Mean time per task: {2,8:0.###}ms - Helpers (Max: {3,2}, Tot: {4,6}) - {5,-40}" /* - Time: {6,-18} - Helper Time: {7,17}"*/,
                                  q.IsRunning ? q.Name : "(" + q.Name + ")",
                                  q.Statistics.PercentageActive,
                                  q.Statistics.MeanProcessTime,
                                  q.Statistics.MaxHelperThreads,
                                  q.Statistics.TotalHelpersSpawned,
                                  string.Format(q.Statistics.UnprocessedTasks > 0 ?
                                                "# Tasks: {0,-6} - # Unprocessed Tasks: {1}" :
                                                "# Tasks: {0}",
                                                q.Statistics.QueuedTasks,
                                                q.Statistics.UnprocessedTasks)/*,
                                                                               * q.Statistics.Time,
                                                                               * q.Statistics.TotalHelperTime*/
                                  );
            }
        }
        public override void Stop()
        {
            try {
                _shutdown = true;
                Util.Wake(this);
                if (_controller != null)
                {
                    _controller.Stop();
                }
                if (_primFactory != null)
                {
                    if (_clearCreated)
                    {
                        _primFactory.ClearCreated();
                    }
                    _primFactory.Shutdown();
                }
                if (_queueFactory != null && _stopQueues)
                {
                    _queueFactory.ShutdownAll();
                    Console.WriteLine(_queueFactory.Queues.Count + " Queues:");
                    foreach (IAsynchQueue q in _queueFactory.Queues)
                    {
                        Console.WriteLine("{0,-40} - Active: {1,7:0.###}% - Mean time per task: {2,8:0.###}ms - Helpers (Max: {3,2}, Tot: {4,6}) - {5,-40}" /* - Time: {6,-18} - Helper Time: {7,17}"*/,
                                          q.IsRunning ? q.Name : "(" + q.Name + ")",
                                          q.Statistics.PercentageActive,
                                          q.Statistics.MeanProcessTime,
                                          q.Statistics.MaxHelperThreads,
                                          q.Statistics.TotalHelpersSpawned,
                                          string.Format(q.Statistics.UnprocessedTasks > 0 || q.Statistics.FailedTasks > 0 ?
                                                        q.Statistics.FailedTasks > 0 ?
                                                        "# Tasks: {0,-6} - # Failed Tasks: {2}" :
                                                        "# Tasks: {0,-6} - # Unprocessed Tasks: {1}" :
                                                        "# Tasks: {0}",
                                                        q.Statistics.QueuedTasks,
                                                        q.Statistics.UnprocessedTasks,
                                                        q.Statistics.FailedTasks)/*,
                                                                                  * q.Statistics.Time,
                                                                                  * q.Statistics.TotalHelperTime*/
                                          );
                    }
                    foreach (var task in _queueFactory.Statistics.UnprocessedTaskNames)
                    {
                        Console.WriteLine(task);
                    }
                }
                if (Host.Object.Exists)
                {
                    Host.Object.Say(AppDomain.CurrentDomain.FriendlyName + " stopped.");
                }

                foreach (var pair in BindableWorld.CallCounts.OrderBy <KeyValuePair <string, int>, int>(pair => pair.Value))
                {
                    Console.WriteLine("World.{0,-50} Call Count: {1}", pair.Key, pair.Value);
                }
                foreach (var pair in BindableHost.CallCounts.OrderBy <KeyValuePair <string, int>, int>(pair => pair.Value))
                {
                    Console.WriteLine("Host.{0,-51} Call Count: {1}", pair.Key, pair.Value);
                }
                foreach (var pair in TrackedObjectAccessor.CallCounts.OrderBy <KeyValuePair <string, int>, int>(pair => pair.Value))
                {
                    Console.WriteLine("Object.{0,-49} Call Count: {1}", pair.Key, pair.Value);
                }
            } catch (Exception e) {
                Console.WriteLine(e + " \n\n " + e.StackTrace);
            }
        }