diff --git a/e107_admin/plugin.php b/e107_admin/plugin.php
index 8e9ba154f..7164579b6 100644
--- a/e107_admin/plugin.php
+++ b/e107_admin/plugin.php
@@ -52,6 +52,7 @@ $pman->pluginObserver();
 require_once("footer.php");
 exit;
 
+// FIXME switch to admin UI
 class pluginManager{
 
 	var $plugArray;
@@ -193,11 +194,15 @@ class pluginManager{
 
 
 	}
-
+	// FIXME - move it to plugin handler, similar to install_plugin() routine
 	function pluginUninstall()
 	{
-         global $plugin,$admin_log,$pref,$tp,$sql;
-
+			$pref = e107::getPref();
+			$admin_log = e107::getAdminLog();
+			$plugin = e107::getPlugin();
+			$tp = e107::getParser();
+			$sql = e107::getDb();
+			
 			if(!isset($_POST['uninstall_confirm']))
 			{	// $id is already an integer
 				$this->pluginConfirmUninstall($this->id);
@@ -285,23 +290,18 @@ class pluginManager{
 					$plugin->manage_search('remove', $eplug_folder);
 
 					$plugin->manage_notify('remove', $eplug_folder);
+					
+					// it's done inside install_plugin_xml(), required only here
+					if (isset($pref['plug_installed'][$plug['plugin_path']]))
+					{
+						unset($pref['plug_installed'][$plug['plugin_path']]);
+					}
+					e107::getConfig('core')->setPref($pref);
+					$plugin->rebuildUrlConfig();
+					e107::getConfig('core')->save();
 				}
 
 				$admin_log->log_event('PLUGMAN_03', $plug['plugin_path'], E_LOG_INFORMATIVE, '');
-
-				if (isset($pref['plug_installed'][$plug['plugin_path']]))
-				{
-
-					unset($pref['plug_installed'][$plug['plugin_path']]);
-					if(save_prefs())
-					{
-                    	// echo "WORKED";
-					}
-					else
-					{
-                    	// echo "FAILED";
-					}
-				}
 			}
 
 			if($_POST['delete_files'])
@@ -449,136 +449,93 @@ class pluginManager{
 
 // -----------------------------------------------------------------------------
 
-   function pluginUpgrade()
-   {
-       global $plugin,$pref,$admin_log;
+	function pluginUpgrade()
+	{
+		$pref = e107::getPref();
+		$admin_log = e107::getAdminLog();
+		$plugin = e107::getPlugin();
 
-	   $sql = e107::getDb();
+	  	$sql = e107::getDb();
 
-	   		$emessage = eMessage::getInstance();
+   		$emessage = eMessage::getInstance();
 
-			$plug = $plugin->getinfo($this->id);
+		$plug = $plugin->getinfo($this->id);
 
-			$_path = e_PLUGIN.$plug['plugin_path'].'/';
-			if(file_exists($_path.'plugin.xml'))
+		$_path = e_PLUGIN.$plug['plugin_path'].'/';
+		if(file_exists($_path.'plugin.xml'))
+		{
+			$plugin->install_plugin_xml($this->id, 'upgrade');
+		}
+		else
+		{
+			include(e_PLUGIN.$plug['plugin_path'].'/plugin.php');
+
+			$func = $eplug_folder.'_upgrade';
+			if (function_exists($func))
 			{
-				$plugin->install_plugin_xml($this->id, 'upgrade');
-			}
-			else
-			{
-				include(e_PLUGIN.$plug['plugin_path'].'/plugin.php');
-
-				$func = $eplug_folder.'_upgrade';
-				if (function_exists($func))
-				{
-					$text .= call_user_func($func);
-				}
-
-				if (is_array($upgrade_alter_tables))
-				{
-					$result = $plugin->manage_tables('upgrade', $upgrade_alter_tables);
-					if (true !== $result)
-					{
-						//$text .= EPL_ADLAN_9.'<br />';
-						$emessage->addWarning(EPL_ADLAN_9)
-							->addDebug($result);
-					}
-					else
-					{
-						$text .= EPL_ADLAN_7."<br />";
-					}
-				}
-
-		/* Not used in 0.8
-				if ($eplug_module)
-				{
-					$plugin->manage_plugin_prefs('add', 'modules', $eplug_folder);
-				}
-				else
-				{
-					$plugin->manage_plugin_prefs('remove', 'modules', $eplug_folder);
-				}
-
-				if ($eplug_status)
-				{
-					$plugin->manage_plugin_prefs('add', 'plug_status', $eplug_folder);
-				}
-				else
-				{
-					$plugin->manage_plugin_prefs('remove', 'plug_status', $eplug_folder);
-				}
-
-				if ($eplug_latest)
-				{
-					$plugin->manage_plugin_prefs('add', 'plug_latest', $eplug_folder);
-				}
-				else
-				{
-					$plugin->manage_plugin_prefs('remove', 'plug_latest', $eplug_folder);
-				}
-
-				if (is_array($upgrade_add_eplug_sc))
-				{
-					$plugin->manage_plugin_prefs('add', 'plug_sc', $eplug_folder, $eplug_sc);
-				}
-
-				if (is_array($upgrade_remove_eplug_sc))
-				{
-					$plugin->manage_plugin_prefs('remove', 'plug_sc', $eplug_folder, $eplug_sc);
-				}
-
-				if (is_array($upgrade_add_eplug_bb))
-				{
-					$plugin->manage_plugin_prefs('add', 'plug_bb', $eplug_folder, $eplug_bb);
-				}
-
-				if (is_array($upgrade_remove_eplug_bb))
-				{
-					$plugin->manage_plugin_prefs('remove', 'plug_bb', $eplug_folder, $eplug_bb);
-				}
-		*/
-				if (is_array($upgrade_add_prefs))
-				{
-					$plugin->manage_prefs('add', $upgrade_add_prefs);
-					$text .= EPL_ADLAN_8.'<br />';
-				}
-
-				if (is_array($upgrade_remove_prefs))
-				{
-					$plugin->manage_prefs('remove', $upgrade_remove_prefs);
-				}
-
-				if (is_array($upgrade_add_array_pref))
-				{
-					foreach($upgrade_add_array_pref as $key => $val)
-					{
-						$plugin->manage_plugin_prefs('add', $key, $eplug_folder, $val);
-					}
-				}
-
-				if (is_array($upgrade_remove_array_pref))
-				{
-					foreach($upgrade_remove_array_pref as $key => $val)
-					{
-						$plugin->manage_plugin_prefs('remove', $key, $eplug_folder, $val);
-					}
-				}
-
-				$plugin->manage_search('upgrade', $eplug_folder);
-				$plugin->manage_notify('upgrade', $eplug_folder);
-
-				$eplug_addons = $plugin -> getAddons($eplug_folder);
-
-				$admin_log->log_event('PLUGMAN_02', $eplug_folder, E_LOG_INFORMATIVE, '');
-				$text .= (isset($eplug_upgrade_done)) ? '<br />'.$eplug_upgrade_done : "<br />".LAN_UPGRADE_SUCCESSFUL;
-				$sql->db_Update('plugin', "plugin_version ='{$eplug_version}', plugin_addons='{$eplug_addons}' WHERE plugin_id='$this->id' ");
-				$pref['plug_installed'][$plug['plugin_path']] = $eplug_version; 			// Update the version
-				save_prefs();
+				$text .= call_user_func($func);
 			}
 
+			if (is_array($upgrade_alter_tables))
+			{
+				$result = $plugin->manage_tables('upgrade', $upgrade_alter_tables);
+				if (true !== $result)
+				{
+					//$text .= EPL_ADLAN_9.'<br />';
+					$emessage->addWarning(EPL_ADLAN_9)
+						->addDebug($result);
+				}
+				else
+				{
+					$text .= EPL_ADLAN_7."<br />";
+				}
+			}
 
-			$emessage->add($text, E_MESSAGE_SUCCESS);
-			$plugin->save_addon_prefs();
+			if (is_array($upgrade_add_prefs))
+			{
+				$plugin->manage_prefs('add', $upgrade_add_prefs);
+				$text .= EPL_ADLAN_8.'<br />';
+			}
+
+			if (is_array($upgrade_remove_prefs))
+			{
+				$plugin->manage_prefs('remove', $upgrade_remove_prefs);
+			}
+
+			if (is_array($upgrade_add_array_pref))
+			{
+				foreach($upgrade_add_array_pref as $key => $val)
+				{
+					$plugin->manage_plugin_prefs('add', $key, $eplug_folder, $val);
+				}
+			}
+
+			if (is_array($upgrade_remove_array_pref))
+			{
+				foreach($upgrade_remove_array_pref as $key => $val)
+				{
+					$plugin->manage_plugin_prefs('remove', $key, $eplug_folder, $val);
+				}
+			}
+
+			$plugin->manage_search('upgrade', $eplug_folder);
+			$plugin->manage_notify('upgrade', $eplug_folder);
+
+			$eplug_addons = $plugin -> getAddons($eplug_folder);
+
+			$admin_log->log_event('PLUGMAN_02', $eplug_folder, E_LOG_INFORMATIVE, '');
+			$text .= (isset($eplug_upgrade_done)) ? '<br />'.$eplug_upgrade_done : "<br />".LAN_UPGRADE_SUCCESSFUL;
+			$sql->db_Update('plugin', "plugin_version ='{$eplug_version}', plugin_addons='{$eplug_addons}' WHERE plugin_id='$this->id' ");
+			$pref['plug_installed'][$plug['plugin_path']] = $eplug_version; 			// Update the version
+			
+			e107::getConfig('core')->setPref($pref);
+			$plugin->rebuildUrlConfig();
+			e107::getConfig('core')->save();
+		}
+
+
+		$emessage->add($text, E_MESSAGE_SUCCESS);
+		$plugin->save_addon_prefs();
 
    }
 
diff --git a/e107_core/xml/default_install.xml b/e107_core/xml/default_install.xml
index d704cca08..3eb35cde5 100644
--- a/e107_core/xml/default_install.xml
+++ b/e107_core/xml/default_install.xml
@@ -29,22 +29,22 @@
 		<core name="contact_emailcopy">0</core>
 		<core name="cookie_name">e107cookie</core>
 		<core name="core-infopanel-default"><![CDATA[array (
-  0 => "e-administrator",
-  1 => "e-cpage",
-  2 => "e-filemanager",
-  3 => "e-frontpage",
-  4 => "e-image",
-  5 => "e-mailout",
-  6 => "e-menus",
-  7 => "e-meta",
-  8 => "e-newspost",
-  9 => "e-plugin",
-  10 => "e-prefs",
-  11 => "e-links",
-  12 => "e-theme",
-  13 => "e-userclass2",
-  14 => "e-users",
-  15 => "e-wmessage",
+  0 => 'e-administrator',
+  1 => 'e-cpage',
+  2 => 'e-filemanager',
+  3 => 'e-frontpage',
+  4 => 'e-image',
+  5 => 'e-mailout',
+  6 => 'e-menus',
+  7 => 'e-meta',
+  8 => 'e-newspost',
+  9 => 'e-plugin',
+  10 => 'e-prefs',
+  11 => 'e-links',
+  12 => 'e-theme',
+  13 => 'e-userclass2',
+  14 => 'e-users',
+  15 => 'e-wmessage',
 )]]></core>
 		<core name="developer">0</core>
 		<core name="disable_emailcheck">0</core>
@@ -58,10 +58,10 @@
 		<core name="download_email">0</core>
 		<core name="e_jslib_browser_cache">0</core>
 		<core name="e_jslib_core"><![CDATA[array (
-  "prototype/prototype.js" => "all",
-  "scriptaculous/scriptaculous.js" => "all",
-  "scriptaculous/effects.js" => "all",
-  "e107.js.php" => "all",
+  'prototype/prototype.js' => 'all',
+  'scriptaculous/scriptaculous.js' => 'all',
+  'scriptaculous/effects.js' => 'all',
+  'e107.js.php' => 'all',
 )]]></core>
 		<core name="e_jslib_plugin"><![CDATA[array ()]]></core>
 		<core name="e_jslib_theme"><![CDATA[array ()]]></core>
@@ -77,10 +77,10 @@
 		<core name="forumdate">%a %b %d %Y, %I:%M%p</core>
 		<core name="fpwcode">0</core>
 		<core name="frontpage"><![CDATA[array (
-  0 => "news.php",
+  0 => 'index.php',
 )]]></core>
 		<core name="frontpage_force"><![CDATA[array (
-  0 => "",
+  0 => '',
 )]]></core>
 		<core name="im_height">100</core>
 		<core name="im_path">/usr/X11R6/bin/</core>
@@ -108,14 +108,14 @@
 		<core name="memberlist_access">253</core>
 		<core name="membersonly_enabled">0</core>
 		<core name="membersonly_exceptions"><![CDATA[array (
-  0 => "",
+  0 => '',
 )]]></core>
 		<core name="menu_wordwrap"></core>
 		<core name="menuconfig_list"><![CDATA[array (
-  "login_menu" => 
+  'login_menu' => 
   array (
-    "name" => "Login",
-    "link" => "login_menu/config.php",
+    'name' => 'Login',
+    'link' => 'login_menu/config.php',
   ),
 )]]></core>
 		<core name="meta_tag"></core>
@@ -180,24 +180,24 @@ City, State, Country
 		<core name="sitetheme_custompages"></core>
 		<core name="sitetheme_deflayout">3_column</core>
 		<core name="sitetheme_layouts"><![CDATA[array (
-  "3_column" => 
+  '3_column' => 
   array (
-    "@attributes" => 
+    '@attributes' => 
     array (
-      "title" => "3 Columns",
-      "preview" => "preview.jpg",
-      "default" => "true",
+      'title' => '3 Columns',
+      'preview' => 'preview.jpg',
+      'default' => 'true',
     ),
-    0 => "",
+    0 => '',
   ),
-  "2_column" => 
+  '2_column' => 
   array (
-    "@attributes" => 
+    '@attributes' => 
     array (
-      "title" => "2 Columns",
-      "preview" => "preview.jpg",
+      'title' => '2 Columns',
+      'preview' => 'preview.jpg',
     ),
-    0 => "",
+    0 => '',
   ),
 )]]></core>
 		<core name="sitetheme_pref"></core>
@@ -216,6 +216,10 @@ City, State, Country
 		<core name="upload_class">255</core>
 		<core name="upload_enabled">0</core>
 		<core name="upload_maxfilesize"></core>
+		<core name="url_aliases"><![CDATA[array()]]></core>
+		<core name="url_config"><![CDATA[array()]]></core>
+		<core name="url_locations"><![CDATA[array()]]></core>
+		<core name="url_modules"><![CDATA[array()]]></core>
 		<core name="useGeshi">0</core>
 		<core name="use_coppa">1</core>
 		<core name="user_reg">1</core>
@@ -271,64 +275,64 @@ City, State, Country
 		<menu name="newforumposts_title">0</menu>
 		<menu name="update_menu">Update menu Settings</menu>
 		<search name="comments_handlers"><![CDATA[array (
-  "news" => 
+  'news' => 
   array (
-    "id" => 0,
-    "dir" => "core",
-    "class" => "0",
+    'id' => 0,
+    'dir' => 'core',
+    'class' => '0',
   ),
-  "download" => 
+  'download' => 
   array (
-    "id" => 2,
-    "dir" => "core",
-    "class" => "0",
+    'id' => 2,
+    'dir' => 'core',
+    'class' => '0',
   ),
 )]]></search>
 		<search name="core_handlers"><![CDATA[array (
-  "news" => 
+  'news' => 
   array (
-    "class" => "0",
-    "pre_title" => "0",
-    "pre_title_alt" => "",
-    "chars" => "150",
-    "results" => "10",
-    "order" => "1",
+    'class' => '0',
+    'pre_title' => '0',
+    'pre_title_alt' => '',
+    'chars' => '150',
+    'results' => '10',
+    'order' => '1',
   ),
-  "comments" => 
+  'comments' => 
   array (
-    "class" => "0",
-    "pre_title" => "1",
-    "pre_title_alt" => "",
-    "chars" => "150",
-    "results" => "10",
-    "order" => "2",
+    'class' => '0',
+    'pre_title' => '1',
+    'pre_title_alt' => '',
+    'chars' => '150',
+    'results' => '10',
+    'order' => '2',
   ),
-  "users" => 
+  'users' => 
   array (
-    "class" => "0",
-    "pre_title" => "1",
-    "pre_title_alt" => "",
-    "chars" => "150",
-    "results" => "10",
-    "order" => "3",
+    'class' => '0',
+    'pre_title' => '1',
+    'pre_title_alt' => '',
+    'chars' => '150',
+    'results' => '10',
+    'order' => '3',
   ),
-  "downloads" => 
+  'downloads' => 
   array (
-    "class" => "0",
-    "pre_title" => "1",
-    "pre_title_alt" => "",
-    "chars" => "150",
-    "results" => "10",
-    "order" => "4",
+    'class' => '0',
+    'pre_title' => '1',
+    'pre_title_alt' => '',
+    'chars' => '150',
+    'results' => '10',
+    'order' => '4',
   ),
-  "pages" => 
+  'pages' => 
   array (
-    "class" => "0",
-    "chars" => "150",
-    "results" => "10",
-    "pre_title" => "0",
-    "pre_title_alt" => "",
-    "order" => "5",
+    'class' => '0',
+    'chars' => '150',
+    'results' => '10',
+    'pre_title' => '0',
+    'pre_title_alt' => '',
+    'order' => '5',
   ),
 )]]></search>
 		<search name="google">0</search>
@@ -341,50 +345,50 @@ City, State, Country
 		<search name="time_secs">60</search>
 		<search name="user_select">1</search>
 		<notify name="event"><![CDATA[array (
-  "usersup" => 
+  'usersup' => 
   array (
-    "class" => "254",
-    "email" => "",
+    'class' => '254',
+    'email' => '',
   ),
-  "userveri" => 
+  'userveri' => 
   array (
-    "class" => "254",
-    "email" => "",
+    'class' => '254',
+    'email' => '',
   ),
-  "login" => 
+  'login' => 
   array (
-    "class" => "254",
-    "email" => "",
+    'class' => '254',
+    'email' => '',
   ),
-  "logout" => 
+  'logout' => 
   array (
-    "class" => "254",
-    "email" => "",
+    'class' => '254',
+    'email' => '',
   ),
-  "flood" => 
+  'flood' => 
   array (
-    "class" => "254",
-    "email" => "",
+    'class' => '254',
+    'email' => '',
   ),
-  "subnews" => 
+  'subnews' => 
   array (
-    "class" => "254",
-    "email" => "",
+    'class' => '254',
+    'email' => '',
   ),
-  "newspost" => 
+  'newspost' => 
   array (
-    "class" => "254",
-    "email" => "",
+    'class' => '254',
+    'email' => '',
   ),
-  "newsupd" => 
+  'newsupd' => 
   array (
-    "class" => "254",
-    "email" => "",
+    'class' => '254',
+    'email' => '',
   ),
-  "newsdel" => 
+  'newsdel' => 
   array (
-    "class" => "254",
-    "email" => "",
+    'class' => '254',
+    'email' => '',
   ),
 )]]></notify>
 	</prefs>
diff --git a/e107_handlers/application.php b/e107_handlers/application.php
index 0bbe1e4a7..341eb4b71 100644
--- a/e107_handlers/application.php
+++ b/e107_handlers/application.php
@@ -437,7 +437,6 @@ class eDispatcher
 		{
 			case 'plugin':
 				if(!$plugin) return null;
-				$location = $tmp[1];
 				return $sc ? '{e_PLUGIN}'.$plugin.'/controllers/' : e_PLUGIN.$plugin.'/controllers/';
 			break;
 			
@@ -1036,6 +1035,7 @@ class eRouter
 					{
 						$ret['plugin'][] = $plugin;
 					}
+					continue;
 				}
 				
 				// Register only those who don't need install and may be dispatchable
@@ -1066,6 +1066,19 @@ class eRouter
 				}
 			}
 			sort($ret['override']);
+			
+			// remove not installed plugin locations, possible only for 'all' type
+			if($type == 'all')
+			{
+				foreach ($ret['override'] as $i => $l) 
+				{
+					// it's a plugin override, but not listed in current plugin array - remove
+					if(in_array($l, $plugins) && !in_array($l, $ret['plugin']))
+					{
+						unset($ret['override'][$i]);
+					}
+				}
+			}
 		}
 		
 		return $ret;
diff --git a/e107_handlers/plugin_class.php b/e107_handlers/plugin_class.php
index 8727d46f2..cb84764f2 100644
--- a/e107_handlers/plugin_class.php
+++ b/e107_handlers/plugin_class.php
@@ -277,9 +277,10 @@ class e107plugin
 				//			echo "Updated: ".$plug_path."<br />";
 				}
 		}
-		if ($sp && vartrue($p_installed))
+		if ($sp/* && vartrue($p_installed)*/)
 		{
 			e107::getConfig('core')->setPref('plug_installed', $p_installed);
+			$this->rebuildUrlConfig();
 			e107::getConfig('core')->save();
 		}
 	}
@@ -1074,6 +1075,30 @@ class e107plugin
 		$notify_prefs->save(false);
 	}
 
+	/**
+	 * Rebuild URL configuration values
+	 * Note - new core system pref values will be set, but not saved
+	 * e107::getConfig()->save() is required outside after execution of this method 
+	 * @return void
+	 */
+	public function rebuildUrlConfig()
+	{
+		
+		$modules = eRouter::adminReadModules(); // get all available locations, non installed plugins will be ignored
+		$config = eRouter::adminBuildConfig(e107::getPref('url_config'), $modules); // merge with current config
+		$locations = eRouter::adminBuildLocations($modules); // rebuild locations pref
+		$aliases = eRouter::adminSyncAliases(e107::getPref('url_aliases'), $config); // rebuild aliases
+			
+		// set new values, changes should be saved outside this methods
+		e107::getConfig()
+			->set('url_aliases', $aliases)
+			->set('url_config', $config)
+			->set('url_modules', $modules)
+			->set('url_locations', $locations);
+				
+		eRouter::clearCache();
+	}
+
 	function displayArray(&$array, $msg = '')
 	{
 		$txt = ($msg ? $msg.'<br />' : '');
@@ -1283,7 +1308,7 @@ class e107plugin
 			$p_installed[$plug['plugin_path']] = $plug_vars['@attributes']['version'];
 
 			e107::getConfig('core')->setPref('plug_installed', $p_installed);
-			e107::getConfig('core')->save();
+			//e107::getConfig('core')->save(); - save triggered below
 		}
 
 		if ($function == 'uninstall')
@@ -1293,6 +1318,8 @@ class e107plugin
 			e107::getConfig('core')->setPref('plug_installed', $p_installed);
 
 		}
+		
+		$this->rebuildUrlConfig();
 
 		e107::getConfig('core')->save();
 
@@ -1870,7 +1897,11 @@ class e107plugin
 		$p_installed = e107::getPref('plug_installed', array()); // load preference;
 		$p_installed[$plug['plugin_path']] = $plug['plugin_version'];
 
-		e107::getConfig('core')->setPref('plug_installed', $p_installed)->save();
+		e107::getConfig('core')->setPref('plug_installed', $p_installed);
+		
+		$this->rebuildUrlConfig();
+		
+		e107::getConfig('core')->save();
 
 		$text .= (isset($eplug_done) ? "<br />{$eplug_done}" : "<br />".LAN_INSTALL_SUCCESSFUL);
 		if ($eplug_conffile)
diff --git a/e107_handlers/pref_class.php b/e107_handlers/pref_class.php
index 19036816a..ef87dad64 100644
--- a/e107_handlers/pref_class.php
+++ b/e107_handlers/pref_class.php
@@ -195,11 +195,11 @@ class e_pref extends e_front_model
 	public function set($pref_name, $value)
 	{
 		global $pref;
-		if(empty($pref_name))
+		if(empty($pref_name) || !is_string($pref_name))
 		{
 			return $this;
 		}
-		parent::set((string) $pref_name, $value, false);
+		$this->_data[$pref_name] = $value;
 
 		//BC
 		if($this->alias === 'core')
@@ -220,11 +220,11 @@ class e_pref extends e_front_model
 	public function update($pref_name, $value)
 	{
 		global $pref;
-		if(empty($pref_name))
+		if(empty($pref_name) || !is_string($pref_name))
 		{
 			return $this;
 		}
-		parent::set((string) $pref_name, $value, true);
+		if(isset($this->_data[$pref_name])) $this->_data[$pref_name] = $value;
 
 		//BC
 		if($this->alias === 'core')
@@ -249,8 +249,13 @@ class e_pref extends e_front_model
 		{
 			return $this;
 		}
-
-		$this->addData($pref_name, $value);
+		if(!isset($this->_data[$pref_name])) $this->_data[$pref_name] = $value;
+		
+		//BC
+		if($this->alias === 'core')
+		{
+			$pref = $this->getData();
+		}
 		return $this;
 	}
 
@@ -633,7 +638,7 @@ class e_pref extends e_front_model
 	 * @param boolean $runtime clear runtime cache as well ($this->pref_cache)
 	 * @return e_pref
 	 */
-	protected function clearPrefCache($cache_name = '', $runtime = true)
+	public function clearPrefCache($cache_name = '', $runtime = true)
 	{
 		if($runtime)
 		{
diff --git a/e107_handlers/xml_class.php b/e107_handlers/xml_class.php
index 57ec76db3..5439da686 100644
--- a/e107_handlers/xml_class.php
+++ b/e107_handlers/xml_class.php
@@ -807,13 +807,20 @@ class xmlClass
 			return array();
 		}
 
-		$mes = eMessage::getInstance();
+		//$mes = eMessage::getInstance();
 
 		$pref = array();
 		foreach($XMLData['prefs'][$prefType] as $val)
 		{
 			$name = $val['@attributes']['name'];
-			$value = (substr($val['@value'],0,7) == "array (") ? e107::getArrayStorage()->ReadArray($val['@value']) : $val['@value'];
+			// if(strpos($val['@value'], 'array (') === 0)
+			// {
+				// echo '<pre>'.$val['@value'];
+				// echo "\n";
+				// var_dump(e107::getArrayStorage()->ReadArray($val['@value']));
+				// echo $val['@value'].'</pre>';
+			// }
+			$value = strpos($val['@value'], 'array (') === 0 ? e107::getArrayStorage()->ReadArray($val['@value']) : $val['@value'];
 			$pref[$name] = $value;
 
 			// $mes->add("Setting up ".$prefType." Pref [".$name."] => ".$value, E_MESSAGE_DEBUG);
@@ -839,30 +846,30 @@ class xmlClass
 
 		if($debug)
 		{
-			// $message = print_r($xmlArray);
-		//	echo "<pre>".print_r($xmlArray,TRUE)."</pre>";
+			//$message = print_r($xmlArray);
+			echo "<pre>".var_export($xmlArray,TRUE)."</pre>";
 			return;
 		}
 
 		$ret = array();
-		//FIXME - doesn't work from install_.php.
+		
 		if(vartrue($xmlArray['prefs'])) // Save Core Prefs
 		{
 			foreach($xmlArray['prefs'] as $type=>$array)
 			{
+				
 				$pArray = $this->e107ImportPrefs($xmlArray,$type);
-
-				if($mode == 'replace')
+				
+				if($mode == 'replace') // merge with existing, add new
 				{
 					e107::getConfig($type)->setPref($pArray);
 				}
-				else // 'add'
+				else // 'add' only new prefs
 				{
 					foreach ($pArray as $pname => $pval)
 					{
 						e107::getConfig($type)->add($pname, $pval); // don't parse x/y/z
 					}
-					// e107::getConfig($type)->addPref($pArray);
 				}
 
 				if($debug == FALSE)