private void Organize()
        {
            var qualified =
                _shells.Where(x => !string.IsNullOrEmpty(x.GetRequestUrlHost()) || !string.IsNullOrEmpty(x.GetRequestUrlPrefix()));

            var unqualified = _shells
                .Where(x => string.IsNullOrEmpty(x.GetRequestUrlHost()) && string.IsNullOrEmpty(x.GetRequestUrlPrefix()))
                .ToList();

            _shellsByHost = qualified
                .SelectMany(s => s.GetRequestUrlHost() == null || s.GetRequestUrlHost().IndexOf(',') == -1 ? new[] { s } :
                    s.GetRequestUrlHost().Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries)
                     .Select(h =>
                     {
                         var settings = new ShellSettings(s);
                         settings.SetRequestUrlHost(h);
                         return settings;
                     }))
                .GroupBy(s => s.GetRequestUrlHost() ?? string.Empty)
                .OrderByDescending(g => g.Key.Length)
                .ToDictionary(x => x.Key, x => x.AsEnumerable(), StringComparer.OrdinalIgnoreCase);

            if (unqualified.Count() == 1)
            {
                _fallback = unqualified.Single();
            }
            else if (unqualified.Any())
            {
                _fallback = unqualified.SingleOrDefault(x => x.Name == ShellSettings.DefaultName);
            }
            else
            {
                _fallback = null;
            }

            _shellsByHostAndPrefix.Clear();
        }