diff --git a/etemplate/inc/class.etemplate_widget_menupopup.inc.php b/etemplate/inc/class.etemplate_widget_menupopup.inc.php
index ebb9e22087..e38712913d 100644
--- a/etemplate/inc/class.etemplate_widget_menupopup.inc.php
+++ b/etemplate/inc/class.etemplate_widget_menupopup.inc.php
@@ -48,12 +48,13 @@ class etemplate_widget_menupopup extends etemplate_widget
 	 * Reimplemented to parse our differnt attributes
 	 *
 	 * @param string|XMLReader $xml
+	 * @param boolean $cloned=true true: object does NOT need to be cloned, false: to set attribute, set them in cloned object
 	 * @return etemplate_widget_template current object or clone, if any attribute was set
 	 * @todo Use legacy_attributes instead of leaving it to typeOptions method to parse them
 	 */
-	public function set_attrs($xml)
+	public function set_attrs($xml, $cloned=true)
 	{
-		parent::set_attrs($xml);
+		parent::set_attrs($xml, $cloned);
 
 		// set attrs[multiple] from attrs[options], unset options only if it just contains number or rows
 		if ($this->attrs['options'] > 1)
@@ -94,7 +95,7 @@ class etemplate_widget_menupopup extends etemplate_widget
 
 				switch ($widget_type)
 				{
-					case 'select-account':	
+					case 'select-account':
 						// If in allowed options, skip account check to support app-specific options
 						if(count($allowed) > 0 && in_array($val,$allowed)) continue;
 
diff --git a/etemplate/inc/class.etemplate_widget_nextmatch.inc.php b/etemplate/inc/class.etemplate_widget_nextmatch.inc.php
index 9ac912398d..b217ab1a3d 100644
--- a/etemplate/inc/class.etemplate_widget_nextmatch.inc.php
+++ b/etemplate/inc/class.etemplate_widget_nextmatch.inc.php
@@ -175,7 +175,7 @@ class etemplate_widget_nextmatch extends etemplate_widget
 		{
 			$cat_app = $value['cat_app'] ? $value['cat_app'] : $GLOBALS['egw_info']['flags']['current_app'];
 			$value['options-cat_id'] = array();
-			
+
 			// Add 'All', if not already there
 			if(!$value['options-cat_id'][''] && !($value['options-cat_id'][0] && $value['options-cat_id'][0]['value'] == ''))
 			{
@@ -369,7 +369,7 @@ class etemplate_widget_nextmatch extends etemplate_widget
 		if ($knownUids)
 		{
 			// row_id not set for nextmatch --> just skip them, we can't identify the rows
-			if (!$row_id)	
+			if (!$row_id)
 			{
 				foreach($knownUids as $uid)
 				{
@@ -1024,9 +1024,17 @@ class etemplate_widget_nextmatch_filterheader extends etemplate_widget_menupopup
  */
 class etemplate_widget_nextmatch_accountfilter extends etemplate_widget_menupopup
 {
-	public function set_attrs($xml)
+	/**
+	 * Parse and set extra attributes from xml in template object
+	 *
+	 * @param string|XMLReader $xml
+	 * @param boolean $cloned=true true: object does NOT need to be cloned, false: to set attribute, set them in cloned object
+	 * @return etemplate_widget_template current object or clone, if any attribute was set
+	 */
+	public function set_attrs($xml, $cloned=true)
 	{
-		parent::set_attrs($xml);
+		parent::set_attrs($xml, $cloned);
+
 		$this->attrs['type'] = 'select-account';
 	}
 }
diff --git a/etemplate/inc/class.etemplate_widget_textbox.inc.php b/etemplate/inc/class.etemplate_widget_textbox.inc.php
index d3912d89b2..ff3fe70573 100644
--- a/etemplate/inc/class.etemplate_widget_textbox.inc.php
+++ b/etemplate/inc/class.etemplate_widget_textbox.inc.php
@@ -49,11 +49,12 @@ class etemplate_widget_textbox extends etemplate_widget
 	 * Reimplemented to handle legacy read-only by setting size < 0
 	 *
 	 * @param string|XMLReader $xml
-	 * @return etemplate_widget_textbox current object or clone, if any attribute was set
+	 * @param boolean $cloned=true true: object does NOT need to be cloned, false: to set attribute, set them in cloned object
+	 * @return etemplate_widget_template current object or clone, if any attribute was set
 	 */
-	public function set_attrs($xml)
+	public function set_attrs($xml, $cloned=true)
 	{
-		parent::set_attrs($xml);
+		parent::set_attrs($xml, $cloned);
 
 		// Legacy handling only
 		// A negative size triggered the HTML readonly attibute, but not etemplate readonly,
diff --git a/etemplate/inc/class.etemplate_widget_tree.inc.php b/etemplate/inc/class.etemplate_widget_tree.inc.php
index e65e3bcdbc..a962e7e008 100644
--- a/etemplate/inc/class.etemplate_widget_tree.inc.php
+++ b/etemplate/inc/class.etemplate_widget_tree.inc.php
@@ -51,12 +51,13 @@ class etemplate_widget_tree extends etemplate_widget
 	 * Reimplemented to parse our differnt attributes
 	 *
 	 * @param string|XMLReader $xml
+	 * @param boolean $cloned=true true: object does NOT need to be cloned, false: to set attribute, set them in cloned object
 	 * @return etemplate_widget_template current object or clone, if any attribute was set
 	 */
-	public function set_attrs($xml)
+	public function set_attrs($xml, $cloned=true)
 	{
 		$this->attrs['type'] = $xml->localName;
-		parent::set_attrs($xml);
+		parent::set_attrs($xml, $cloned);
 
 		// set attrs[multiple] from attrs[options]
 		if ($this->attrs['options'] > 1)