+/**
+ * gis_plugins_enable:
+ * @plugins: the plugins source
+ * @name: the name of the plugin to load
+ * @viewer: a #GisViewer to pass to the plugins constructor
+ * @prefs: a #GisPrefs to pass to the plugins constructor
+ *
+ * Load a plugin and save it's loaded/unloaded state in the #GisPrefs stored in
+ * #plugins.
+ *
+ * See also: gis_plugins_load()
+ *
+ * Returns: the new plugin
+ */
+GisPlugin *gis_plugins_enable(GisPlugins *plugins, const char *name,
+ GisViewer *viewer, GisPrefs *prefs)
+{
+ GisPlugin *plugin = gis_plugins_load(plugins, name, viewer, prefs);
+ gis_prefs_set_boolean_v(plugins->prefs, "plugins", name, TRUE);
+ return plugin;
+}
+
+/**
+ * gis_plugins_load_enabled:
+ * @plugins: the plugins source
+ * @viewer: a #GisViewer to pass to the plugins constructor
+ * @prefs: a #GisPrefs to pass to the plugins constructor
+ *
+ * Load all enabled which have previously been enabled.
+ *
+ * See also: gis_plugins_load()
+ *
+ * Returns: a list of all loaded plugins
+ */
+GList *gis_plugins_load_enabled(GisPlugins *plugins,
+ GisViewer *viewer, GisPrefs *prefs)
+{
+ GList *loaded = NULL;
+ for (GList *cur = gis_plugins_available(plugins); cur; cur = cur->next) {
+ gchar *name = cur->data;
+ if (gis_prefs_get_boolean_v(plugins->prefs, "plugins", name, NULL)) {
+ GisPlugin *plugin = gis_plugins_load(plugins, name, viewer, prefs);
+ loaded = g_list_prepend(loaded, plugin);
+ }
+ }
+ return loaded;
+}
+
+/**
+ * gis_plugins_unload:
+ * @plugins: the plugins source
+ * @name: the name of the plugin to unload
+ *
+ * Unload a plugin and free any associated data.
+ *
+ * Returns: %FALSE
+ */
+gboolean gis_plugins_unload(GisPlugins *plugins, const char *name)