diff --git a/e107_admin/newspost.php b/e107_admin/newspost.php
index 5445defff..7985ebeb5 100644
--- a/e107_admin/newspost.php
+++ b/e107_admin/newspost.php
@@ -1752,13 +1752,13 @@ class news_form_ui extends e_admin_form_ui
 				}
 			}
 
-
-			$text = $frm->imagepicker('news_thumbnail[0]', varset($thumbTmp[0]), varset($paths[0]), array('media' => 'news+', 'video' => 1, 'legacyPath' => '{e_IMAGE}newspost_images'));
+			$text = "<div class='mediaselector-multi'>";
+			$text .= $frm->imagepicker('news_thumbnail[0]', varset($thumbTmp[0]), varset($paths[0]), array('media' => 'news+', 'video' => 1, 'legacyPath' => '{e_IMAGE}newspost_images'));
 			$text .= $frm->imagepicker('news_thumbnail[1]', varset($thumbTmp[1]), varset($paths[1]), array('media' => 'news+', 'video' => 1, 'legacyPath' => '{e_IMAGE}newspost_images'));
 			$text .= $frm->imagepicker('news_thumbnail[2]', varset($thumbTmp[2]), varset($paths[2]), array('media' => 'news+', 'video' => 1, 'legacyPath' => '{e_IMAGE}newspost_images'));
 			$text .= $frm->imagepicker('news_thumbnail[3]', varset($thumbTmp[3]), varset($paths[3]), array('media' => 'news+', 'video' => 1, 'legacyPath' => '{e_IMAGE}newspost_images'));
 			$text .= $frm->imagepicker('news_thumbnail[4]', varset($thumbTmp[4]), varset($paths[4]), array('media' => 'news+', 'video' => 1, 'legacyPath' => '{e_IMAGE}newspost_images'));
-
+			$text .= "</div>";
 		//	$text .= "<div class='field-help'>Insert image/video into designated area of template.</div>";
 			return $text;
 		}
diff --git a/e107_handlers/e107_class.php b/e107_handlers/e107_class.php
index fd4bef19b..142b9aede 100755
--- a/e107_handlers/e107_class.php
+++ b/e107_handlers/e107_class.php
@@ -324,30 +324,30 @@ class e107
 	 * @param $e107_paths
 	 * @param $e107_root_path
 	 * @param array $e107_config_override
-	 * @return object|false  e107
+	 * @return e107
 	 */
 	public function initInstall($e107_paths, $e107_root_path, $e107_config_override = array())
 	{
 
 		$e107_config = 'e107_config.php';
-		if (!file_exists($e107_config))  // prevent blank-page with missing file during install. 
-		{	
+		if (!file_exists($e107_config))  // prevent blank-page with missing file during install.
+		{
 			if(file_put_contents($e107_config, '')===false)
 			{
 				return false;
 			}
-		}	
-				
+		}
+
 		// Do some security checks/cleanup, prepare the environment
 		$this->prepare_request();
-		
-		//generated from mysql data at stage 5 of install. 
+
+		//generated from mysql data at stage 5 of install.
 		$this->site_path = isset($e107_config_override['site_path']) ? $e107_config_override['site_path'] : "[hash]"; // placeholder
-		
+
 		// folder info
 		//$this->e107_dirs = $e107_paths;
 		$this->setDirs($e107_paths, $e107_config_override);
-	
+
 		// build all paths
 		$this->set_paths();
 		$this->file_path = $this->fix_windows_paths($e107_root_path)."/";
@@ -360,7 +360,7 @@ class e107
 
 		// set some core URLs (e_LOGIN/SIGNUP)
 		$this->set_urls();
-		
+
 		return $this;
 	}
 
@@ -396,7 +396,7 @@ class e107
 
 		// Set default folder (and override paths) if missing from e107_config.php
 		$this->setDirs($e107_paths, $e107_config_override);
-			
+
 		// various constants - MAGIC_QUOTES_GPC, MPREFIX, ...
 		$this->set_constants();
 
@@ -460,7 +460,7 @@ class e107
 
 		// override all
 		$this->e107_dirs = array_merge($this->defaultDirs($override), $override);
-		
+
 		// Required for e_MEDIA_BASE, e_SYSTEM_BASE (free of site path constants);
 	//	$this->e107_dirs['MEDIA_BASE_DIRECTORY'] = $this->e107_dirs['MEDIA_DIRECTORY'];
 	//	$this->e107_dirs['SYSTEM_BASE_DIRECTORY'] = $this->e107_dirs['SYSTEM_BASE_DIRECTORY'];
@@ -469,22 +469,22 @@ class e107
 		// $this->site_path is appended to MEDIA_DIRECTORY in defaultDirs(), which is called above.
 		if(strpos($this->e107_dirs['MEDIA_DIRECTORY'],$this->site_path) === false)
 		{
-			$this->e107_dirs['MEDIA_DIRECTORY'] .= $this->site_path."/"; // multisite support.  
+			$this->e107_dirs['MEDIA_DIRECTORY'] .= $this->site_path."/"; // multisite support.
 		}
 
 		// FIXME - remove this condition because:
 		// $this->site_path is appended to SYSTEM_DIRECTORY in defaultDirs(), which is called above.
 		if(strpos($this->e107_dirs['SYSTEM_DIRECTORY'],$this->site_path) === false)
 		{
-			$this->e107_dirs['SYSTEM_DIRECTORY'] .= $this->site_path."/"; // multisite support.  
+			$this->e107_dirs['SYSTEM_DIRECTORY'] .= $this->site_path."/"; // multisite support.
 		}
 
-		// FIXME Quick fix - override base cache folder for legacy configs (e.g. e107_files/cache), discuss 
+		// FIXME Quick fix - override base cache folder for legacy configs (e.g. e107_files/cache), discuss
 		if(strpos($this->e107_dirs['CACHE_DIRECTORY'], $this->site_path) === false)
 		{
-			$this->e107_dirs['CACHE_DIRECTORY'] = $this->e107_dirs['SYSTEM_DIRECTORY']."cache/"; // multisite support.  
+			$this->e107_dirs['CACHE_DIRECTORY'] = $this->e107_dirs['SYSTEM_DIRECTORY']."cache/"; // multisite support.
 		}
-		
+
 		return $this;
 	}
 
@@ -550,25 +550,25 @@ class e107
 
 		$ret['MEDIA_BASE_DIRECTORY'] = $ret['MEDIA_DIRECTORY'];
 		$ret['SYSTEM_BASE_DIRECTORY'] = $ret['SYSTEM_DIRECTORY'];
-		$ret['MEDIA_DIRECTORY'] 	.= $this->site_path."/"; // multisite support. 
-		$ret['SYSTEM_DIRECTORY'] 	.= $this->site_path."/"; // multisite support. 
-				
+		$ret['MEDIA_DIRECTORY'] 	.= $this->site_path."/"; // multisite support.
+		$ret['SYSTEM_DIRECTORY'] 	.= $this->site_path."/"; // multisite support.
+
 		if($return_root) return $ret;
-		
+
 		$ret['HELP_DIRECTORY'] 				= $ret['DOCS_DIRECTORY'].'help/';
 
 		$ret['MEDIA_IMAGES_DIRECTORY'] 		= $ret['MEDIA_DIRECTORY'].'images/';
 		$ret['MEDIA_ICONS_DIRECTORY'] 		= $ret['MEDIA_DIRECTORY'].'icons/';
-		
+
 		$ret['MEDIA_VIDEOS_DIRECTORY'] 		= $ret['MEDIA_DIRECTORY'].'videos/';
 		$ret['MEDIA_FILES_DIRECTORY'] 		= $ret['MEDIA_DIRECTORY'].'files/';
-		$ret['MEDIA_UPLOAD_DIRECTORY'] 		= $ret['SYSTEM_DIRECTORY'].'temp/'; // security measure. Media is public, system is private. 
+		$ret['MEDIA_UPLOAD_DIRECTORY'] 		= $ret['SYSTEM_DIRECTORY'].'temp/'; // security measure. Media is public, system is private.
 		$ret['AVATARS_DIRECTORY'] 			= $ret['MEDIA_DIRECTORY'].'avatars/';
 
 		$ret['WEB_JS_DIRECTORY'] 			= $ret['WEB_DIRECTORY'].'js/';
 	//	$ret['WEB_JS_DIRECTORY'] 			= $ret['FILES_DIRECTORY'].'jslib/';
-		
-		
+
+
 		$ret['WEB_CSS_DIRECTORY'] 			= $ret['WEB_DIRECTORY'].'css/';
 		$ret['WEB_IMAGES_DIRECTORY'] 		= $ret['WEB_DIRECTORY'].'images/';
 	//	$ret['WEB_PACKS_DIRECTORY'] 		= $ret['WEB_DIRECTORY'].'packages/';
@@ -590,7 +590,7 @@ class e107
 
 		$ret['CACHE_DB_DIRECTORY'] 			= $ret['CACHE_DIRECTORY'].'db/';
 		$ret['CACHE_URL_DIRECTORY'] 		= $ret['CACHE_DIRECTORY'].'url/';
-		
+
 		$ret['AVATARS_UPLOAD_DIRECTORY'] 	= $ret['AVATARS_DIRECTORY'].'upload/';
 		$ret['AVATARS_DEFAULT_DIRECTORY'] 	= $ret['AVATARS_DIRECTORY'].'default/';
 
@@ -731,28 +731,28 @@ class e107
 	 * Replaces all $mySQL(*) globals
 	 * Example: <code>$e107->getMySQLConfig('prefix');</code>
 	 *
-	 * @param string $for prefix|server|user|password|defaultdb - leave blank for full array. 
+	 * @param string $for prefix|server|user|password|defaultdb - leave blank for full array.
 	 * @return string or array
 	 */
 	public static function getMySQLConfig($for='')
 	{
 		$key = 'mySQL'.$for;
 		$self = self::getInstance();
-		
+
 		if($for == '')
 		{
 			return 	$self->e107_config_mysql_info;
 		}
-		
+
 		return (isset($self->e107_config_mysql_info[$key]) ? $self->e107_config_mysql_info[$key] : '');
 	}
-	
+
 
 	/**
-	 * Return a unique path based on database used. ie. multi-site support from single install. 
+	 * Return a unique path based on database used. ie. multi-site support from single install.
 	 *
 	 * @return string
-	 * @author  
+	 * @author
 	 */
 	function getSitePath()
 	{
@@ -998,17 +998,17 @@ class e107
 	 */
 	public static function getConfig($name = 'core', $load = true, $refresh=false)
 	{
-		
-		if(isset(self::$_plug_config_arr[$name])) //FIXME Load pluginPref Object instead - Not quite working with calendar_menu. 
+
+		if(isset(self::$_plug_config_arr[$name])) //FIXME Load pluginPref Object instead - Not quite working with calendar_menu.
 		{
 			return self::getPlugConfig($name);
 		}
-		
-		if(!isset(self::$_core_config_arr[$name]) || ($refresh == true)) // required by update_routines to clear out earlier values. 
+
+		if(!isset(self::$_core_config_arr[$name]) || ($refresh == true)) // required by update_routines to clear out earlier values.
 		{
-			e107_require_once(e_HANDLER.'pref_class.php'); 
-			self::$_core_config_arr[$name] = new e_core_pref($name, $load);		
-			
+			e107_require_once(e_HANDLER.'pref_class.php');
+			self::$_core_config_arr[$name] = new e_core_pref($name, $load);
+
 			if($name === 'core') // prevent loop between pref and cache handlers.
 			{
 				self::getCache()->UserCacheActive = self::getPref('cachestatus');
@@ -1210,11 +1210,11 @@ class e107
 		return !empty($tprefs) ? $tprefs : $default;
 
 	}
-	
+
 	/**
 	 * Set current theme preference. $pref_name is parsed,
 	 * so that $pref_name = 'x/y/z' will set value pref_data[x][y][z]
-	 * 
+	 *
 	 * @param string|array $pref_name
 	 * @param mixed $pref_value
 	 * @return e_pref
@@ -1265,7 +1265,7 @@ class e107
 	/**
 	 * Retrieve text parser singleton object
 	 *
-	 * @return object e_parse
+	 * @return e_parse
 	 */
 	public static function getParser()
 	{
@@ -1275,22 +1275,22 @@ class e107
 	/**
 	 * Retrieve sc parser singleton object
 	 *
-	 * @return object e_parse_shortcode
+	 * @return e_parse_shortcode
 	 */
 	public static function getScParser()
 	{
 		return self::getSingleton('e_parse_shortcode', true);
 	}
-	
-	
+
+
 	/**
 	 * Retrieve secure_image singleton object
 	 *
-	 * @return object secure_image
+	 * @return secure_image
 	 */
 	public static function getSecureImg()
 	{
-		return self::getSingleton('secure_image', true); // more flexible. 
+		return self::getSingleton('secure_image', true); // more flexible.
 		// return self::getObject('secure_image');
 	}
 
@@ -1300,19 +1300,19 @@ class e107
 	 * Override is possible only if class is not already instantiated by shortcode parser
 	 *
 	 * <code><?php
-	 * 
+	 *
 	 * // Core news shortcodes (news_shortcodes.php using class news_shortcodes )
 	 * e107::getScObject('news');
-	 * 
-	 * // Core page shortcodes (page_shortcodes.php.php with class cpage_shortcode)  
-	 * e107::getScObject('page', null,'cpage'); 
-	 * 
+	 *
+	 * // Core page shortcodes (page_shortcodes.php.php with class cpage_shortcode)
+	 * e107::getScObject('page', null,'cpage');
+	 *
 	 * // object of plugin_myplugin_my_shortcodes class -> myplugin/shortcodes/batch/my_shortcodes.php
 	 * e107::getScObject('my', 'myplugin');
-	 * 
+	 *
 	 * // news override - plugin_myplugin_news_shortcodes extends news_shortcodes -> myplugin/shortcodes/batch/news_shortcodes.php
 	 * e107::getScObject('news', 'myplugin', true);
-	 * 
+	 *
 	 * // news override - plugin_myplugin_mynews_shortcodes extends news_shortcodes -> myplugin/shortcodes/batch/mynews_shortcodes.php
 	 * e107::getScObject('news', 'myplugin', 'mynews');
 	 * </code>
@@ -1333,7 +1333,7 @@ class e107
 	 * $instance_id
 	 *
 	 * @param string $instance_id
-	 * @return object e_db_mysql
+	 * @return e_db_mysql
 	 */
 	public static function getDb($instance_id = '')
 	{
@@ -1343,7 +1343,7 @@ class e107
 	/**
 	 * Retrieve cache singleton object
 	 *
-	 * @return object ecache
+	 * @return ecache
 	 */
 	public static function getCache()
 	{
@@ -1353,7 +1353,7 @@ class e107
 	/**
 	 * Retrieve bbcode singleton object
 	 *
-	 * @return object e_bbcode
+	 * @return e_bbcode
 	 */
 	public static function getBB()
 	{
@@ -1363,7 +1363,7 @@ class e107
 	/**
 	 * Retrieve user-session singleton object
 	 *
-	 * @return object UserHandler
+	 * @return UserHandler
 	 */
 	public static function getUserSession()
 	{
@@ -1374,7 +1374,7 @@ class e107
 	 * Retrieve core session singleton object(s)
 	 *
 	 * @param null $namespace
-	 * @return object e_core_session
+	 * @return e_core_session
 	 */
 	public static function getSession($namespace = null)
 	{
@@ -1391,18 +1391,18 @@ class e107
 	/**
 	 * Retrieve redirection singleton object
 	 *
-	 * @return object redirection
+	 * @return redirection
 	 */
 	public static function getRedirect()
 	{
 		return self::getSingleton('redirection', true);
 	}
-	
-	
+
+
 	/**
 	 * Retrieve rater singleton object
 	 *
-	 * @return object rater
+	 * @return rater
 	 */
 	public static function getRate()
 	{
@@ -1412,7 +1412,7 @@ class e107
 	/**
 	 * Retrieve sitelinks singleton object
 	 *
-	 * @return object sitelinks
+	 * @return sitelinks
 	 */
 	public static function getSitelinks()
 	{
@@ -1423,7 +1423,7 @@ class e107
 	/**
 	 * Retrieve render singleton object
 	 *
-	 * @return object e107table
+	 * @return e107table
 	 */
 	public static function getRender()
 	{
@@ -1433,7 +1433,7 @@ class e107
 	/**
 	 * Retrieve e107Email singleton object
 	 *
-	 * @return object e107Email
+	 * @return e107Email
 	 */
 	public static function getEmail($overrides=null)
 	{
@@ -1444,7 +1444,7 @@ class e107
 	/**
 	 * Retrieve e107Email mail mailer object.
 	 *
-	 * @return object e107MailManager
+	 * @return e107MailManager
 	 */
 	public static function getBulkEmail()
 	{
@@ -1454,7 +1454,7 @@ class e107
 	/**
 	 * Retrieve event singleton object
 	 *
-	 * @return object e107_event
+	 * @return e107_event
 	 */
 	public static function getEvent()
 	{
@@ -1464,7 +1464,7 @@ class e107
 	/**
 	 * Retrieve array storage singleton object
 	 *
-	 * @return object e_array
+	 * @return e_array
 	 */
 	public static function getArrayStorage()
 	{
@@ -1474,7 +1474,7 @@ class e107
 	/**
 	 * Retrieve menu handler singleton object
 	 *
-	 * @return object e_menu
+	 * @return e_menu
 	 */
 	public static function getMenu()
 	{
@@ -1484,7 +1484,7 @@ class e107
 
 	/**
 	 * Retrieve e_theme singleton object
-	 * @return object e_theme
+	 * @return e_theme
 	 */
 	public static function getTheme($themedir='front', $clearCache=false)
 	{
@@ -1524,7 +1524,7 @@ class e107
 	/**
 	 * Retrieve URL singleton object
 	 *
-	 * @return object eURL
+	 * @return eURL
 	 */
 	public static function getUrl()
 	{
@@ -1535,7 +1535,7 @@ class e107
 	 * Retrieve file handler singleton or new fresh object
 	 *
 	 * @param boolean $singleton default true
-	 * @return object e_file
+	 * @return e_file
 	 */
 	public static function getFile($singleton = false)
 	{
@@ -1551,7 +1551,7 @@ class e107
 	 *
 	 * @param boolean $singleton default false
 	 * @param boolean $tabindex passed to e_form when initialized as an object (not singleton)
-	 * @return object e_form
+	 * @return e_form
 	 */
 	public static function getForm($singleton = false, $tabindex = false)
 	{
@@ -1565,7 +1565,7 @@ class e107
 	/**
 	 * Retrieve admin log singleton object
 	 * @Deprecated - use e107::getLog();
-	 * @return object e_admin_log
+	 * @return e_admin_log
 	 */
 	public static function getAdminLog()
 	{
@@ -1575,7 +1575,7 @@ class e107
 	/**
 	 * Retrieve admin log singleton object
 	 *
-	 * @return object e_admin_log
+	 * @return e_admin_log
 	 */
 	public static function getLog()
 	{
@@ -1585,17 +1585,17 @@ class e107
 	/**
 	 * Retrieve date handler singleton object
 	 *
-	 * @return object convert
+	 * @return convert
 	 */
 	public static function getDateConvert()
 	{
 		return self::getSingleton('e_date', true);
 	}
-	
+
 	/**
-	 * Retrieve date handler singleton object - preferred method. 
+	 * Retrieve date handler singleton object - preferred method.
 	 *
-	 * @return object convert
+	 * @return convert
 	 */
 	public static function getDate()
 	{
@@ -1604,9 +1604,9 @@ class e107
 
 
     /**
-     * Retrieve date handler singleton object - preferred method. 
+     * Retrieve date handler singleton object - preferred method.
      *
-     * @return object e107_db_debug
+     * @return e107_db_debug
      */
     public static function getDebug() //XXX Discuss  - possible with current setup?
     {
@@ -1616,7 +1616,7 @@ class e107
 	/**
 	 * Retrieve notify handler singleton object
 	 *
-	 * @return object notify
+	 * @return notify
 	 */
 	public static function getNotify()
 	{
@@ -1627,7 +1627,7 @@ class e107
 	/**
 	 * Retrieve override handler singleton object
 	 *
-	 * @return object override
+	 * @return override
 	 */
 	public static function getOverride()
 	{
@@ -1639,7 +1639,7 @@ class e107
 	/**
 	 * Retrieve Language handler singleton object
 	 *
-	 * @return object language
+	 * @return language
 	 */
 	public static function getLanguage()
 	{
@@ -1649,7 +1649,7 @@ class e107
 	/**
 	 * Retrieve IP/ban handler singleton object
 	 *
-	 * @return object eIPHandler
+	 * @return eIPHandler
 	 */
 	public static function getIPHandler()
 	{
@@ -1659,7 +1659,7 @@ class e107
 	/**
 	 * Retrieve Xml handler singleton or new instance object
 	 * @param mixed $singleton false - new instance, true - singleton from default registry location, 'string' - registry path
-	 * @return object xmlClass
+	 * @return xmlClass
 	 */
 	public static function getXml($singleton = true)
 	{
@@ -1669,7 +1669,7 @@ class e107
 		}
 		return self::getObject('xmlClass', null, true);
 	}
-	
+
 	/**
 	 * Retrieve HybridAuth object
 	 *
@@ -1692,7 +1692,7 @@ class e107
 	/**
 	 * Retrieve userclass singleton object
 	 *
-	 * @return object user_class
+	 * @return user_class
 	 */
 	public static function getUserClass()
 	{
@@ -1705,7 +1705,7 @@ class e107
 	 * @param integer $user_id target user
 	 * @param boolean $checkIfCurrent if tru user_id will be compared to current user, if there is a match
 	 * 	current user object will be returned
-	 * @return object e_system_user
+	 * @return e_system_user
 	 */
 	public static function getSystemUser($user_id, $checkIfCurrent = true)
 	{
@@ -1713,9 +1713,9 @@ class e107
 		{
 			return self::getUser();
 		}
-		
+
 		if(!$user_id) return self::getObject('e_system_user');
-		
+
 		$user = self::getRegistry('core/e107/user/'.$user_id);
 		if(null === $user)
 		{
@@ -1727,28 +1727,28 @@ class e107
 
 	/**
 	 * Simple replacement for deprecated get_user_data(). e107::user();
-	 * @param $uid integer user_id or leave empty for currently logged in user. 
-	 * @return array|bool of user data
+	 * @param $uid integer user_id or leave empty for currently logged in user.
+	 * @return array of user data
 	 */
 	public static function user($uid=null)
 	{
 		$uid = intval($uid);
-		
+
 		if(empty($uid)){ return false; }
-			
+
 		$user = self::getSystemUser($uid, true);
 		$var = array();
 		if($user)
 		{
 			$var = $user->getUserData();
 		}
-		
+
 		return $var;
 	}
 
 
   /**
-    * Return a string containg exported array data. - preferred. 
+    * Return a string containg exported array data. - preferred.
     *
     * @param array $ArrayData array to be stored
     * @param bool|string $mode true = var_export with addedslashes, false = var_export (default), 'json' = json encoded
@@ -1758,26 +1758,26 @@ class e107
     {
     	if(empty($ArrayData))
 		{
-			return array();	
-		}			
-		       
+			return array();
+		}
+
 		return self::getArrayStorage()->serialize($ArrayData, $mode);
     }
-	
+
 	  /**
     * Returns an array from stored array data.
     *
     * @param string $ArrayData
     * @return array stored data
     */
-    public static function unserialize($ArrayData) 
+    public static function unserialize($ArrayData)
     {
     	if(empty($ArrayData))
 		{
-			return array();	
-		}	
-		       
-		return self::getArrayStorage()->unserialize($ArrayData); 
+			return array();
+		}
+
+		return self::getArrayStorage()->unserialize($ArrayData);
     }
 
 
@@ -1817,7 +1817,7 @@ class e107
 	 * Retrieve user model object.
 	 *
 	 * @param integer $user_id target user
-	 * @return object e_user_extended_structure_tree
+	 * @return e_user_extended_structure_tree
 	 */
 	public static function getUserStructure()
 	{
@@ -1826,7 +1826,7 @@ class e107
 
 	/**
 	 * Retrieve User Extended handler singleton object
-	 * @return object e107_user_extended
+	 * @return e107_user_extended
 	 */
 	public static function getUserExt()
 	{
@@ -1835,7 +1835,7 @@ class e107
 
 	/**
 	 * Retrieve User Perms (admin perms) handler singleton object
-	 * @return object e_userperms
+	 * @return e_userperms
 	 */
 	public static function getUserPerms()
 	{
@@ -1844,16 +1844,16 @@ class e107
 
 	/**
 	 * Retrieve online users handler singleton object
-	 * @return object e_ranks
+	 * @return e_ranks
 	 */
 	public static function getRank()
 	{
 		return self::getSingleton('e_ranks', true);
 	}
-	
+
 	/**
 	 * Retrieve plugin handler singleton object
-	 * @return object e107plugin
+	 * @return e107plugin
 	 */
 	public static function getPlugin()
 	{
@@ -1864,7 +1864,7 @@ class e107
 
 	/**
 	 * Retrieve plugin class singleton object
-	 * @return object e_plugin
+	 * @return e_plugin
 	 */
 	public static function getPlug()
 	{
@@ -1873,7 +1873,7 @@ class e107
 
 	/**
 	 * Retrieve online users handler singleton object
-	 * @return object e_online
+	 * @return e_online
 	 */
 	public static function getOnline()
 	{
@@ -1883,7 +1883,7 @@ class e107
 
 	/**
 	 * Retrieve chart handler singleton object
-	 * @return object e_chart
+	 * @return e_chart
 	 */
 	public static function getChart()
 	{
@@ -1893,7 +1893,7 @@ class e107
 
 	/**
 	 * Retrieve comments handler singleton object
-	 * @return object comment
+	 * @return comment
 	 */
 	public static function getComment()
 	{
@@ -1902,7 +1902,7 @@ class e107
 
 	/**
 	 * Retrieve comments handler singleton object
-	 * @return object e_customfields
+	 * @return e_customfields
 	 */
 	public static function getCustomFields()
 	{
@@ -1911,16 +1911,16 @@ class e107
 
 	/**
 	 * Retrieve Media handler singleton object
-	 * @return object e_media
+	 * @return e_media
 	 */
 	public static function getMedia()
 	{
 		return self::getSingleton('e_media', true);
 	}
-	
+
 	/**
 	 * Retrieve Navigation Menu handler singleton object
-	 * @return object e_navigation
+	 * @return e_navigation
 	 */
 	public static function getNav()
 	{
@@ -1929,7 +1929,7 @@ class e107
 
 	/**
 	 * Retrieve message handler singleton
-	 * @return object eMessage
+	 * @return eMessage
 	 */
 	public static function getMessage()
 	{
@@ -1946,7 +1946,7 @@ class e107
 	/**
 	 * Retrieve ajax singleton object
 	 *
-	 * @return object e_ajax_class
+	 * @return e_ajax_class
 	 */
 	public static function getAjax()
 	{
@@ -1956,7 +1956,7 @@ class e107
 	/**
 	 * Retrieve Library Manager singleton object (internal use only. Use e107::library())
 	 *
-	 * @return object e_library_manager
+	 * @return e_library_manager
 	 */
 	public static function getLibrary()
 	{
@@ -2085,7 +2085,7 @@ class e107
 	 * @param string $type core|theme|footer|inline|footer-inline|url or any existing plugin_name
 	 * @param string $data depends on the type - path/url or inline js source
 	 * @param integer $zone [optional] leave it null for default zone
-	 * @param string $dep dependence :  null | prototype | jquery 
+	 * @param string $dep dependence :  null | prototype | jquery
 	 */
 	public static function js($type, $data, $dep = null, $zone = null, $pre = '', $post = '')
 	{
@@ -2096,8 +2096,8 @@ class e107
 
 		$jshandler = self::getJs();
 		$jshandler->setDependency($dep);
-		
-		switch ($type) 
+
+		switch ($type)
 		{
 			case 'settings':
 				$jshandler->jsSettings($data);
@@ -2109,41 +2109,41 @@ class e107
 				else $jshandler->requireCoreLib($data);
 			break;
 
-			case 'bootstrap': //TODO Eventually add own method and render for bootstrap. 
+			case 'bootstrap': //TODO Eventually add own method and render for bootstrap.
 				if(null !== $zone) $jshandler->requireCoreLib('bootstrap/js/'.$data, $zone);
 				else $jshandler->requireCoreLib('bootstrap/js/'.$data);
 			break;
-				
+
 			case 'theme':
 				// data is e.g. 'jslib/mytheme.js'
 				if(null !== $zone) $jshandler->headerTheme($data, $zone, $pre, $post);
 				else $jshandler->footerTheme($data, 5, $pre, $post);
 			break;
-				
+
 			case 'inline':
 				// data is JS source (without script tags)
 				if(null !== $zone) $jshandler->headerInline($data, $zone);
 				else $jshandler->headerInline($data);
 			break;
-			
+
 			case 'footer-inline':
 				// data is JS source (without script tags)
 				if(null !== $zone) $jshandler->footerInline($data, $zone);
 				else $jshandler->footerInline($data);
 			break;
-				
+
 			case 'url':
 				// data is e.g. 'http://cdn.somesite.com/some.js'
 				if(null !== $zone) $jshandler->headerFile($data, $zone, $pre, $post);
 				else $jshandler->headerFile($data, 5, $pre, $post);
 			break;
-			
+
 			case 'footer':
 				// data is e.g. '{e_PLUGIN}myplugin/jslib/myplug.js'
 				if(null !== $zone) $jshandler->footerFile($data, $zone, $pre, $post);
 				else $jshandler->footerFile($data, 5, $pre, $post);
 			break;
-			
+
 			// $type is plugin name
 			default:
 				// data is e.g. 'jslib/myplug.js'
@@ -2185,14 +2185,14 @@ class e107
 
 		if((strpos($data,'bootstrap.css')!==false || strpos($data,'bootstrap.min.css')!==false) && !defined("BOOTSTRAP")) // detect bootstrap is enabled. - used in nextprev.sc and forum currently.
 		{
-			define("BOOTSTRAP", true);	
+			define("BOOTSTRAP", true);
 		}
 
 		if(self::$_css_enabled === false)
 		{
 			return null;
 		}
-		
+
 		$jshandler = self::getJs();
 		$jshandler->setDependency($dep);
 
@@ -2200,34 +2200,34 @@ class e107
 		{
 			$type = 'url';
 		}
-		
-		switch ($type) 
+
+		switch ($type)
 		{
 			case 'core':
 				// data is path relative to e_FILE/jslib/
 				$jshandler->coreCSS($data, $media, $preComment, $postComment);
 			break;
-			
+
 			case 'bootstrap':
 				// data is path relative to e_FILE/jslib/
 				$jshandler->coreCSS('bootstrap/css/'.$data, $media, $preComment, $postComment);
-			break;			
-				
+			break;
+
 			case 'theme':
 				// data is path relative to current theme
 				$jshandler->themeCSS($data, $media, $preComment, $postComment);
 			break;
-				
+
 			case 'inline':
 				// data is CSS source (without style tags)
 				$jshandler->inlineCSS($data, $media);
 			break;
-				
+
 			case 'url':
 				// data is e.g. 'http://cdn.somesite.com/some.css'
 				$jshandler->otherCSS($data, $media, $preComment, $postComment);
 			break;
-			
+
 			// $type is plugin name
 			default:
 				// data is e.g. 'css/myplug.css'
@@ -2328,7 +2328,7 @@ class e107
 	 * Retrieve JS Helper object
 	 *
 	 * @param boolean|string $singleton if true return singleton, if string return singleton object, use string as namespace, default false
-	 * @return object e_jshelper
+	 * @return e_jshelper
 	 */
 	public static function getJshelper($singleton = false)
 	{
@@ -2354,7 +2354,7 @@ class e107
 		{
 			$response->addMetaDescription($content);	//Cam: TBD
 		}
-		
+
 		if($name === 'keywords')
 		{
 			$response->addMetaKeywords($content);	//Cam: TBD
@@ -2379,7 +2379,7 @@ class e107
 	/**
 	 * Retrieves class Object for specific plugin's addon such as e_url.php, e_cron.php, e_sitelink.php
 	 * FIXME override from e.g. core/override/addons/
-	 * 
+	 *
 	 * @param string $pluginName e.g. faq, page
 	 * @param string $addonName eg. e_cron, e_url, e_module
 	 * @param mixed $className [optional] true - use default name, false - no object is returned (include only), any string will be used as class name
@@ -2388,7 +2388,7 @@ class e107
 	public static function getAddon($pluginName, $addonName, $className = true)
 	{
 		$filename = $addonName; // e.g. 'e_cron';
-		
+
 		// fixme, temporary adding 's' to className, should be core fixed, better naming
 		if(true === $className) $className = $pluginName.'_'.substr($addonName, 2); // remove 'e_'
 
@@ -2402,7 +2402,7 @@ class e107
 		{
 			if(!isset($elist[$pluginName])) return null;
 		}
-		
+
 		// TODO override check comes here
 		$path = e_PLUGIN.$pluginName.'/'.$filename.'.php';
 		// e.g. include e_module, e_meta etc
@@ -2412,7 +2412,7 @@ class e107
 		{
 			include_once($path);
 		}
-		
+
 		if(!class_exists($className, false))
 		{
 			return null;
@@ -2440,7 +2440,7 @@ class e107
 		}
 
 		$elist = self::getPref($filename.'_list');
-		
+
 		if(!empty($elist))
 		{
 			foreach(array_keys($elist) as $key)
@@ -2479,17 +2479,17 @@ class e107
 
 		if(is_object($class_name) || class_exists($class_name))
 		{
-			
+
 			if(is_object($class_name))
 			{
 				$obj = $class_name;
 				$class_name = get_class($obj);
 			}
-			else 
+			else
 			{
-				$obj = new $class_name;	
+				$obj = new $class_name;
 			}
-			
+
 			if(method_exists($obj, $method_name))
 			{
 				if(E107_DBG_INCLUDES)
@@ -2664,27 +2664,27 @@ class e107
 	{
 		$id 						= str_replace('..', '', $id); //simple security, '/' is allowed
 		$curTheme 					= self::getThemeInfo($override, 'rel');
-		
-		$override_path 				= $override ? $curTheme.'templates/'.$id.'_template.php' : null;	
-		$legacy_override_path 		= $override ? $curTheme.$id.'_template.php' : null;	
+
+		$override_path 				= $override ? $curTheme.'templates/'.$id.'_template.php' : null;
+		$legacy_override_path 		= $override ? $curTheme.$id.'_template.php' : null;
 
 		$legacy_core_path 			= e_THEME.'templates/'.$id.'_template.php';
 		$core_path 					= e_CORE.'templates/'.$id.'_template.php';
-		
-		if($override_path && is_readable($override_path)) // v2 override template. 
+
+		if($override_path && is_readable($override_path)) // v2 override template.
 		{
 			return $override_path;
 		}
-		elseif($legacy_override_path && is_readable($legacy_override_path)) //v1 override template. 
+		elseif($legacy_override_path && is_readable($legacy_override_path)) //v1 override template.
 		{
 			return $legacy_override_path;
 		}
-		elseif(is_readable($legacy_core_path)) //v1 core template. 
+		elseif(is_readable($legacy_core_path)) //v1 core template.
 		{
 		//	return $legacy_core_path; // just asking for trouble.
 		}
 
-		return $core_path; 
+		return $core_path;
 	}
 
 	/**
@@ -2736,7 +2736,7 @@ class e107
 	 *
 	 * @param string $id - file prefix, e.g. user for user_template.php
 	 * @param string|null $key
-	 * @param mixed $override see {@link getThemeInfo()} true/false,  front or admin. 
+	 * @param mixed $override see {@link getThemeInfo()} true/false,  front or admin.
 	 * @param boolean $merge merge theme with core templates, default is false
 	 * @param boolean $info retrieve template info only
 	 * @return string|array
@@ -2748,18 +2748,18 @@ class e107
 		$id = str_replace('/', '_', $id);
 		$ret = self::_getTemplate($id, $key, $reg_path, $path, $info);
 
-		### Attempt to fix merge issues; in case we override - template array not found in theme, 
+		### Attempt to fix merge issues; in case we override - template array not found in theme,
 		### so we need to continue and merge with core templates
 		if($merge && $override && empty($ret))
 		{
 			$ret = array();
 		}
-		
+
 		if((!$merge && !$override) || is_string($ret))
 		{
 			 return $ret;
 		}
-		
+
 		// merge
 		$reg_path = 'core/e107/templates/'.$id;
 		$path = self::coreTemplatePath($id, false);
@@ -2808,12 +2808,12 @@ class e107
 		}
 		$reg_path = 'plugin/'.$plug_name.'/templates/'.$id.($override ? '/ext' : '');
 		$path = self::templatePath($plug_name, $id, $override);
-		
+
 		if(ADMIN && E107_DBG_INCLUDES)
 		{
 			self::getMessage()->addDebug( "Attempting to load Template File: ".$path );
 		}
-		
+
 		$id = str_replace('/', '_', $id);
 		$ret = self::_getTemplate($id, $key, $reg_path, $path, $info);
 
@@ -2842,19 +2842,19 @@ class e107
 
 		return (is_array($ret_plug) ? array_merge($ret_plug, $ret) : $ret);
 	}
-	
+
 	/**
 	 * Register sc_style registry
 	 * @param string $templateId e.g. 'contact/form' or 'contact' for all contact template wrappers
-	 * @param string $scName [optional] shortcode name - if provided, wrapper (string) for the corresponding code will be returned 
+	 * @param string $scName [optional] shortcode name - if provided, wrapper (string) for the corresponding code will be returned
 	 * @return array|string
 	 */
 	public static function templateWrapper($templateId, $scName = null)
 	{
 		if(!$templateId) return array();
-		
+
 		list($templateId, $templateKey) = explode('/', $templateId, 2);
-		
+
 		$wrapperRegPath = 'templates/wrapper/'.$templateId;
 
 		$wrapper = self::getRegistry($wrapperRegPath);
@@ -2874,7 +2874,7 @@ class e107
 			if($templateKey) $wrapper = (isset($wrapper[$templateKey])  ? $wrapper[$templateKey] : array());
 		}
 
-		if(null !== $scName) 
+		if(null !== $scName)
 		{
 			$scName = strtoupper($scName);
 			return isset($wrapper[$scName]) ? $wrapper[$scName] : '';
@@ -2882,7 +2882,7 @@ class e107
 
 		return $wrapper;
 	}
-	
+
 	/**
 	 * Retrieve/set sc_style array (global shortcode wrapper)
 	 * @param array $set template defined $sc_style, will be merged with current registry content
@@ -2896,7 +2896,7 @@ class e107
 		{
 			self::setRegistry('shortcodes/sc_style', array_merge($_sc_style, $set));
 		}
-		
+
 		return $_sc_style;
 	}
 
@@ -2911,7 +2911,7 @@ class e107
 	 * @param boolean $merge
 	 * @return array
 	 */
-	public static function getTemplateInfo($plug_name = null, $id=null, $key = null, $override = true, $merge = false)
+	public static function getTemplateInfo($plug_name = null, $id, $key = null, $override = true, $merge = false)
 	{
 		if($plug_name)
 		{
@@ -3009,19 +3009,19 @@ class e107
 		$var = strtoupper($id).'_TEMPLATE';
 		$regPathInfo = $reg_path.'/info';
 		$var_info = strtoupper($id).'_INFO';
-		
+
 		$wrapper = strtoupper($id).'_WRAPPER'; // see contact_template.php
 		$wrapperRegPath = 'templates/wrapper/'.$id;
 
-		// Use: list($pre,$post) = explode("{---}",$text,2); 
-		
-		$tp = self::getParser(); // BC FIx - avoid breaking old templates due to missing globals. 
+		// Use: list($pre,$post) = explode("{---}",$text,2);
+
+		$tp = self::getParser(); // BC FIx - avoid breaking old templates due to missing globals.
 
 		if(null === self::getRegistry($regPath))
 		{
 			(deftrue('E107_DEBUG_LEVEL') ? include_once($path) : @include_once($path));
 			self::setRegistry($regPath, (isset($$var) ? $$var : array()));
-			
+
 			// sc_style not a global anymore and uppercase
 
             // Fix template merge issue - no-wrapper sent to avoid sc wrappers confusions
@@ -3058,7 +3058,7 @@ class e107
 		{
 			return $ret;
 		}
-			
+
 		return ($ret && is_array($ret) && isset($ret[$key]) ? $ret[$key] : false);
 	}
 
@@ -3077,7 +3077,7 @@ class e107
 			{
 				return false;
 			}
-			
+
 
 			$path = str_replace(e_LANGUAGE, 'English', $path);
 
@@ -3088,14 +3088,14 @@ class e107
 				return false;
 			}
 		}
-		
+
 		$adminLanguage = self::getPref('adminlanguage');
-		
+
 		if(e_ADMIN_AREA && vartrue($adminLanguage))
 		{
-			$path = str_replace(e_LANGUAGE, $adminLanguage, $path);	
+			$path = str_replace(e_LANGUAGE, $adminLanguage, $path);
 		}
-				
+
 		$ret = ($force) ? include($path) : include_once($path);
 		return (isset($ret)) ? $ret : "";
 	}
@@ -3146,7 +3146,7 @@ class e107
 	 *
 	 * 	// import defeinitions from /e107_plugins/myplug/languages/[CurrentLanguage]_front.php
 	 * 	e107::plugLan('myplug');
-	 * 
+	 *
 	 * 	// import defeinitions from /e107_plugins/myplug/languages/[CurrentLanguage]_admin.php
 	 * 	e107::plugLan('myplug', true);
 	 *
@@ -3174,7 +3174,7 @@ class e107
 		{
 			 $fname = e_LANGUAGE.($flat ? '_' : '/').preg_replace('#[^\w/]#', '', trim($fname, '/'));
 		}
-		elseif($fname === true) // admin file. 
+		elseif($fname === true) // admin file.
 		{
 			//$fname = "admin/".e_LANGUAGE;
 			 $fname = e_LANGUAGE."_admin";
@@ -3187,24 +3187,24 @@ class e107
 
 		if($flat === true) // support for alt_auth/languages/English/English_log.php etc.
 		{
-			$path = e_PLUGIN.$plugin.'/languages/'.e_LANGUAGE.'/'.$fname.'.php';	
-		} 
+			$path = e_PLUGIN.$plugin.'/languages/'.e_LANGUAGE.'/'.$fname.'.php';
+		}
 		else
 		{
-			$path = e_PLUGIN.$plugin.'/languages/'.$fname.'.php';	
+			$path = e_PLUGIN.$plugin.'/languages/'.$fname.'.php';
 		}
-		
+
 		if(deftrue('E107_DBG_INCLUDES'))
 		{
 			self::getMessage()->addDebug("Attempting to Load: ".$path);
-		}	
-		
-		
+		}
+
+
 		self::setRegistry($cstring, true);
 
 		return self::includeLan($path, false);
 	}
-	
+
 	/**
 	 * Simplify importing of theme Language files (following e107 plugin structure standards).
 	 * All inputs are sanitized.
@@ -3222,7 +3222,7 @@ class e107
 	 *
 	 * 	// import defeinitions from /e107_themes/[currentTheme]/languages/[CurrentLanguage]/admin/lan.php
 	 * 	e107::themeLan('admin/lan');
-	 * 
+	 *
 	 * 	// import defeinitions from /e107_themes/some_theme/languages/[CurrentLanguage].php
 	 * 	e107::themeLan('', 'some_theme');
 	 * </code>
@@ -3236,7 +3236,7 @@ class e107
 	{
 		if(null === $theme) $theme = THEME.'languages/';
 		else $theme = e_THEME.preg_replace('#[^\w/]#', '', $theme).'/languages/';
-		
+
 		$cstring  = 'themelan/'.$theme.$fname.($flat ? '_1' : '_0');
 		if(self::getRegistry($cstring)) return;
 
@@ -3244,11 +3244,11 @@ class e107
 		else $fname = e_LANGUAGE;
 
 		$path = $theme.$fname.'.php';
-		
+
 		if(deftrue('E107_DBG_INCLUDES'))
 		{
 			self::getMessage()->addDebug("Attempting to Load: ".$path);
-		}	
+		}
 
 		self::setRegistry($cstring, true);
 
@@ -3258,7 +3258,7 @@ class e107
 
 
 	/**
-	 * PREFERRED Generic Language File Loading Function for use by theme and plugin developers. 
+	 * PREFERRED Generic Language File Loading Function for use by theme and plugin developers.
 	 * Language-file equivalent to e107::js, e107::meta and e107::css
 	 *
 	 * FIXME disallow themes and plugins named 'core' and 'theme'
@@ -3289,15 +3289,15 @@ class e107
 			case 'core' :
 				self::coreLan($fname, $options);
 			break;
-	
+
 			case 'theme' :
 				self::themeLan($fname, null,  $options);
 				break;
 			default :
 				self::plugLan($type, $fname, $options);
 				break;
-		}	
-		
+		}
+
 	}
 
 
@@ -3310,22 +3310,22 @@ class e107
 	 */
 	public static function pref($type = 'core', $pname = null, $default = null)
 	{
-		 
+
 		switch ($type)
 		{
 			case 'core' :
 				return self::getPref($pname, $default);
 			break;
-		
+
 			case 'theme' :
-				return self::getThemePref($pname, $default);	
+				return self::getThemePref($pname, $default);
 			break;
-			
-			default: 
+
+			default:
 				return self::getPlugPref($type, $pname, $default);
 			break;
-		}	
-		
+		}
+
 	}
 
 	/**
@@ -3568,20 +3568,20 @@ class e107
 	/**
 	 * Retrieve error page handler.
 	 *
-	 * @return object  error_page
+	 * @return error_page
 	 */
 	public static function getError()
 	{
 		return self::getSingleton('error_page', true);
 	}
-	
+
 
 	/**
 	 * Parses an array into a valid, rawurlencoded query string. This differs from http_build_query() as we need to
 	 * rawurlencode() (instead of urlencode()) all query parameters.
 	 * @param array $query The query parameter array to be processed, e.g. $_GET.
 	 * @param string $parent Internal use only. Used to build the $query array key for nested items.
-	 * @return string A rawurlencoded string which can be used as or appended to the URL query string.
+	 * @return array A rawurlencoded string which can be used as or appended to the URL query string.
 	 */
 	public static function httpBuildQuery(array $query, $parent = '')
 	{
@@ -3612,13 +3612,7 @@ class e107
 	}
 
 
-	/**
-	 * @param       $js
-	 * @param array $options
-	 * @return bool|null|string
-	 * @throws Exception
-	 */
-	public static function minify($js, $options=array())
+	public static function minify($js,$options=array())
 	{
 		if(empty($js))
 		{
@@ -3717,13 +3711,13 @@ class e107
 
 				$aLangPref = self::getPref('adminlanguage');
 				$adminLan = vartrue($aLangPref, e_LANGUAGE);
-						
-				$searchPath[1] = e_PLUGIN.$unitName.'/languages/'.$adminLan.'_admin_'.$unitName.'.php'; 
-				$searchPath[2] = e_PLUGIN.$unitName.'/languages/'.$adminLan.'/'.'admin_'.$unitName.'.php'; 
+
+				$searchPath[1] = e_PLUGIN.$unitName.'/languages/'.$adminLan.'_admin_'.$unitName.'.php';
+				$searchPath[2] = e_PLUGIN.$unitName.'/languages/'.$adminLan.'/'.'admin_'.$unitName.'.php';
 				$searchPath[3] = e_PLUGIN.$unitName.'/languages/'.$adminLan.'/admin/'.$adminLan.'.php';
-				$searchPath[4] = e_PLUGIN.$unitName.'/languages/'.$adminLan.'/'.$adminLan.'_admin.php'; // Preferred. 
-				$searchPath[5] = e_PLUGIN.$unitName.'/languages/'.$adminLan.'_admin.php'; // consistent with English_global.php, English_log.php etc. 
-				
+				$searchPath[4] = e_PLUGIN.$unitName.'/languages/'.$adminLan.'/'.$adminLan.'_admin.php'; // Preferred.
+				$searchPath[5] = e_PLUGIN.$unitName.'/languages/'.$adminLan.'_admin.php'; // consistent with English_global.php, English_log.php etc.
+
 				break;
 			case 'theme' :
 				$searchPath[1] = e_THEME.$unitName.'/languages/'.e_LANGUAGE.'_'.$unitName.'.php';
@@ -3786,7 +3780,7 @@ class e107
 		}
 		else
 		{
-			define('e_AJAX_REQUEST', isset($_REQUEST['ajax_used']));	
+			define('e_AJAX_REQUEST', isset($_REQUEST['ajax_used']));
 		}
 
 		unset($_REQUEST['ajax_used']); // removed because it's auto-appended from JS (AJAX), could break something...
@@ -3865,7 +3859,7 @@ class e107
 		{
 			return '';
 		}
-		
+
 		if (is_array($input))
 		{
 			return array_walk($input, array('self', 'filter_request'), $type);
@@ -3878,7 +3872,7 @@ class e107
 			{
 				$input = preg_replace("/(\[code\])(.*?)(\[\/code\])/is","",$input);
 			}
-		
+
 			$regex = "/(base64_decode|chr|php_uname|fwrite|fopen|fputs|passthru|popen|proc_open|shell_exec|exec|proc_nice|proc_terminate|proc_get_status|proc_close|pfsockopen|apache_child_terminate|posix_kill|posix_mkfifo|posix_setpgid|posix_setsid|posix_setuid|phpinfo) *?\((.*) ?\;?/i";
 			if(preg_match($regex,$input))
 			{
@@ -3921,9 +3915,9 @@ class e107
 				{
 					echo "Bad Request: ".__METHOD__." : ". __LINE__;
 				}
-				exit();	
+				exit();
 			}
-			
+
 			$regex = "/(wget |curl -o |lwp-download|onmouse)/i";
 			if(preg_match($regex,$input))
 			{
@@ -3934,7 +3928,7 @@ class e107
 				}
 				exit();
 			}
-		
+
 		}
 
 		if($type === '_GET') // Basic XSS check.
@@ -3950,18 +3944,18 @@ class e107
 			}
 
 		}
-		
+
 		if($type == "_SERVER")
 		{
 
 			if(($key == "QUERY_STRING") && (
-				strpos(strtolower($input),"../../")!==FALSE 
+				strpos(strtolower($input),"../../")!==FALSE
 				|| stripos($input,"php:")!==FALSE
 				|| stripos($input,"data:")!==FALSE
 				|| stripos($input,"%3cscript")!==FALSE
 				))
 			{
-	
+
 				header('HTTP/1.0 400 Bad Request', true, 400);
 				if(deftrue('e_DEBUG'))
 				{
@@ -3983,7 +3977,7 @@ class e107
 				}
 				exit();
 			}
-						
+
 			if(($key == "HTTP_USER_AGENT") && strpos($input,"libwww-perl")!==FALSE)
 			{
 				header('HTTP/1.0 400 Bad Request', true, 400);
@@ -3991,12 +3985,12 @@ class e107
 				{
 					echo "Bad Request: ".__METHOD__." : ". __LINE__;
 				}
-				exit();	
+				exit();
 			}
-			
-							
+
+
 		}
-			
+
 		if(strpos(str_replace('.', '', $input), '22250738585072011') !== FALSE) // php-bug 53632
 		{
 			header('HTTP/1.0 400 Bad Request', true, 400);
@@ -4005,8 +3999,8 @@ class e107
 				echo "Bad Request: ".__METHOD__." : ". __LINE__;
 			}
 			exit();
-		} 
-		
+		}
+
 		if($base64 != true)
 		{
 			self::filter_request(base64_decode($input),$key,$type,true);
@@ -4087,7 +4081,7 @@ class e107
 
 		define("e_DOMAIN", $domain);
 		define("e_SUBDOMAIN", ($subdomain) ? $subdomain : false);
-		
+
 		define('e_UC_PUBLIC', 0);
 		define('e_UC_MAINADMIN', 250);
 		define('e_UC_READONLY', 251);
@@ -4113,7 +4107,7 @@ class e107
 		}
 		$ret = e_BASE.$this->e107_dirs[$dir.'_DIRECTORY'];
 
-		
+
 		return $ret;
 	}
 
@@ -4298,21 +4292,21 @@ class e107
 
 		// XXX DISCUSSS - e_JS_ABS, e_CSS_ABS etc is not following the naming standards but they're more usable.
 		// Example: e_JS_ABS vs e_WEB_JS_ABS
-		
-		//XXX Absolute is assumed. 
+
+		//XXX Absolute is assumed.
 		define('e_WEB_ABS', $this->get_override_http('WEB'));
 		define('e_JS_ABS', $this->get_override_http('WEB_JS'));
 		define('e_CSS_ABS', $this->get_override_http('WEB_CSS'));
 //		define('e_PACK_ABS', $this->get_override_http('WEB_PACKS'));
 		define('e_WEB_IMAGE_ABS', $this->get_override_http('WEB_IMAGES'));
-		
-		define('e_JS', $this->get_override_http('WEB_JS')); // ABS Alias 
-		define('e_CSS', $this->get_override_http('WEB_CSS')); // ABS Alias 
-		
+
+		define('e_JS', $this->get_override_http('WEB_JS')); // ABS Alias
+		define('e_CSS', $this->get_override_http('WEB_CSS')); // ABS Alias
+
 		define('e_AVATAR', $this->get_override_rel('AVATARS'));
 		define('e_AVATAR_UPLOAD', $this->get_override_rel('AVATARS_UPLOAD'));
 		define('e_AVATAR_DEFAULT', $this->get_override_rel('AVATARS_DEFAULT'));
-		
+
 		define('e_AVATAR_ABS', $this->get_override_http('AVATARS'));
 		define('e_AVATAR_UPLOAD_ABS', $this->get_override_http('AVATARS_UPLOAD'));
 		define('e_AVATAR_DEFAULT_ABS', $this->get_override_http('AVATARS_DEFAULT'));
@@ -4321,9 +4315,9 @@ class e107
 		{
 			define('e_CACHE_IMAGE_ABS', $this->get_override_http('CACHE_IMAGE'));
 		}
-		
+
 		// Special
-		
+
 		define('e_BOOTSTRAP', e_WEB."bootstrap/");
 
 		return $this;
@@ -4378,7 +4372,7 @@ class e107
 		$eSelf = $_SERVER['PHP_SELF'] ? $_SERVER['PHP_SELF'] : $_SERVER['SCRIPT_FILENAME'];
 		$_self = $this->HTTP_SCHEME.'://'.$_SERVER['HTTP_HOST'].$eSelf;
 
-		
+
 
 		// START New - request uri/url detection, XSS protection
 		// TODO - move it to a separate method
@@ -4431,10 +4425,10 @@ class e107
 
 		$tmp = explode('?', e_REQUEST_URL);
 		$requestSelf =  array_shift($tmp);
-		
+
 		if(substr($requestSelf,-4) !== '.php' && substr($requestSelf,-1) !== '/')
 		{
-			$requestSelf .= '/'; // Always include a trailing slash on SEF Urls so that e_REQUEST_SELF."?".e_QUERY doesn't break. 	
+			$requestSelf .= '/'; // Always include a trailing slash on SEF Urls so that e_REQUEST_SELF."?".e_QUERY doesn't break.
 		}
 
 		// the last anti-XSS measure, XHTML compliant URL to be used in forms instead e_SELF
@@ -4541,10 +4535,10 @@ class e107
 
 		// login/signup
 		define('e_SIGNUP', SITEURL.(file_exists(e_BASE.'customsignup.php') ? 'customsignup.php' : 'signup.php'));
-		
+
 		if(!defined('e_LOGIN'))
 		{
-			define('e_LOGIN', SITEURL.(file_exists(e_BASE.'customlogin.php') ? 'customlogin.php' : 'login.php'));	
+			define('e_LOGIN', SITEURL.(file_exists(e_BASE.'customlogin.php') ? 'customlogin.php' : 'login.php'));
 		}
 
 		return $this;
@@ -4570,7 +4564,7 @@ class e107
 			}
 		}
 
-		$eMENUQry = str_replace(array('%5B','%5D'),array('[',']'),$_SERVER['QUERY_STRING']); //FIX for urlencoded QUERY_STRING without breaking the '+' used by debug. 
+		$eMENUQry = str_replace(array('%5B','%5D'),array('[',']'),$_SERVER['QUERY_STRING']); //FIX for urlencoded QUERY_STRING without breaking the '+' used by debug.
 		if (strpos($eMENUQry, ']') && preg_match('#\[(.*?)](.*)#', $eMENUQry, $matches))
 		{
 			define('e_MENU', $matches[1]);
@@ -4583,21 +4577,21 @@ class e107
 		}
 
 		if ($no_cbrace)	$e_QUERY = str_replace(array('{', '}', '%7B', '%7b', '%7D', '%7d'), '', rawurldecode($e_QUERY));
-		
+
 	//	$e_QUERY = htmlentities(self::getParser()->post_toForm($e_QUERY)); //@see https://github.com/e107inc/e107/issues/719
-		$e_QUERY = htmlspecialchars(self::getParser()->post_toForm($e_QUERY)); 
-		
+		$e_QUERY = htmlspecialchars(self::getParser()->post_toForm($e_QUERY));
+
 		// e_QUERY SHOULD NOT BE DEFINED IF IN SNIGLE ENTRY MODE OR ALL URLS WILL BE BROKEN - it's defined later within the the router
 		if(!deftrue("e_SINGLE_ENTRY"))
 		{
 			define('e_QUERY', filter_var($e_QUERY, FILTER_SANITIZE_URL));
-			$_SERVER['QUERY_STRING'] = e_QUERY;	
+			$_SERVER['QUERY_STRING'] = e_QUERY;
 		}
 		else
 		{
 		//	 define('e_QUERY', ''); // breaks news sef-urls and possibly others. Moved to index.php.
 		}
-		
+
 
 		define('e_TBQS', $_SERVER['QUERY_STRING']);
 	}
diff --git a/e107_handlers/form_handler.php b/e107_handlers/form_handler.php
index 2304fb4ab..a6fb7f2e8 100644
--- a/e107_handlers/form_handler.php
+++ b/e107_handlers/form_handler.php
@@ -5871,6 +5871,8 @@ class e_form
 				$label = varset($parms['label'], 'LAN_EDIT');
 				$max = varset($parms['max'],5);
 
+				$ret .= "<div class='mediaselector-multi field-element-images'>";
+
 				for ($i=0; $i < $max; $i++)
 				{				
 					$k 		= $key.'['.$i.'][path]';
@@ -5878,7 +5880,8 @@ class e_form
 					
 					$ret .=  $this->imagepicker($k, $ival, defset($label, $label), $parms);		
 				}
-				
+
+				$ret .= "</div>";
 			break;
 
 			/** Generic Media Pick for combinations of images, audio, video, glyphs, files, etc. Field Type = json */
@@ -5886,7 +5889,7 @@ class e_form
 
 				$max = varset($parms['max'],1);
 
-				$ret = '';
+				$ret = "<div class='mediaselector-multi field-element-media'>";
 				for ($i=0; $i < $max; $i++)
 				{
 					$k 		= $key.'['.$i.'][path]';
@@ -5895,6 +5898,8 @@ class e_form
 					$ret .=  $this->mediapicker($k, $ival, $parms);
 				}
 
+				$ret .= "</div>";
+
 				return $ret;
 			break;
 			
diff --git a/e107_themes/bootstrap3/admin_style.css b/e107_themes/bootstrap3/admin_style.css
index 763fe2f02..8b2ed5c1e 100644
--- a/e107_themes/bootstrap3/admin_style.css
+++ b/e107_themes/bootstrap3/admin_style.css
@@ -303,6 +303,7 @@ td.right, th.right 			{ text-align:right }
 .mediaselector-container-icon .mediaselector-preview { height: auto; padding: 0; text-align: center; }
 
 td .mediaselector-container { margin-bottom:0 }
+td .mediaselector-multi .mediaselector-container { margin-bottom: 20px }
 
 
 /* dropzone new in v2.1.9 */