void RefreshDocklets ()
		{
			if (DockletsTileview == null)
				return;
			
			AbstractDockItemProvider selectedProvider = null;
			DockletTile selectedTile = (DockletTile) DockletsTileview.CurrentTile ();
			if (selectedTile != null)
				selectedProvider = selectedTile.Provider;
			
			DockletsTileview.Clear ();
			docklettiles.ForEach (tile => tile.Dispose ());
			docklettiles.Clear ();
			
			if (ActiveDock == null)
				return;
			
			string query = DockletSearch.InnerEntry.Text.ToLower ();
			// build a list of DockletTiles, starting with the currently active tiles for the active dock,
			// and the available addins
			DockletTile currentTile = null;
			
			foreach (AbstractDockItemProvider provider in ActiveDock.Preferences.ItemProviders) {
				string providerID = PluginManager.AddinIDFromProvider (provider);
				if (string.IsNullOrEmpty (providerID))
					continue;
				
				docklettiles.Add (new DockletTile (providerID, provider));
				if (provider == selectedProvider)
					currentTile = docklettiles.Last ();
			}
			
			docklettiles = docklettiles.Concat (PluginManager.AvailableProviderIDs.Select (id => new DockletTile (id))).ToList ();
			
			if (docklet_show_cmb.Active == (int) DockletShowStates.Active)
				docklettiles = docklettiles.Where (t => t.Enabled).ToList ();
			else if (docklet_show_cmb.Active == (int) DockletShowStates.Disabled)
				docklettiles = docklettiles.Where (t => !t.Enabled).ToList ();
			
			docklettiles = docklettiles.Where (t => t.Description.ToLower ().Contains (query) || t.Name.ToLower ().Contains (query)).ToList ();
			
			foreach (DockletTile docklet in docklettiles)
				DockletsTileview.AppendTile (docklet);
			
			if (currentTile != null)
				DockletsTileview.Select (docklettiles.IndexOf (currentTile));
		}
		void RefreshHelpers ()
		{
			if (HelpersTileview == null)
				return;
			
			HelpersTileview.Clear ();
			
			List<Helper> helpers = DockServices.Helpers.Helpers;
			
			foreach (HelperTile tileobject in helpertiles.Where (to => !helpers.Contains (to.Helper))) {
				helpertiles.Remove (tileobject);
				tileobject.Dispose ();					
			}
			helpertiles = helpers.Where (helper => !helpertiles.Exists (to => helper == to.Helper))
				.Select (h => new HelperTile (h))
				.Union (helpertiles).ToList ();

			string query = HelperSearch.InnerEntry.Text.ToLower ();
			IEnumerable<HelperTile> showinghelpertiles = helpertiles
				.Where (hto => hto.Name.ToLower ().Contains (query) || hto.Description.ToLower ().Contains (query))
				.OrderBy (hto => hto.Name);
			
			if (helper_show_cmb.Active == (uint) HelperShowStates.Usable)
				showinghelpertiles = showinghelpertiles.Where (hto => hto.Helper.IsAppAvailable);
			else if (helper_show_cmb.Active == (uint) HelperShowStates.Enabled)
				showinghelpertiles = showinghelpertiles.Where (hto => hto.Enabled);
			else if (helper_show_cmb.Active == (uint) HelperShowStates.Disabled)
				showinghelpertiles = showinghelpertiles.Where (hto => !hto.Enabled);
			
			foreach (HelperTile tileobject in showinghelpertiles)
				HelpersTileview.AppendTile (tileobject);
			
			SetupHelperAlignment ();
		}