diff --git a/frameworks/projects/Collections/src/main/royale/org/apache/royale/collections/FlattenedList.as b/frameworks/projects/Collections/src/main/royale/org/apache/royale/collections/FlattenedList.as
index 646ada7..1409971 100644
--- a/frameworks/projects/Collections/src/main/royale/org/apache/royale/collections/FlattenedList.as
+++ b/frameworks/projects/Collections/src/main/royale/org/apache/royale/collections/FlattenedList.as
@@ -23,34 +23,34 @@
 	import org.apache.royale.events.Event;
 	import org.apache.royale.events.EventDispatcher;
 	import org.apache.royale.events.IEventDispatcher;
-    import org.apache.royale.collections.parsers.IInputParser;
-    import org.apache.royale.collections.converters.IItemConverter;
-    
-    
-    /**
-     *  The FlattenedList class takes a HierarchicalData object and "flattens" it
+	import org.apache.royale.collections.parsers.IInputParser;
+	import org.apache.royale.collections.converters.IItemConverter;
+	
+	
+	/**
+	 *  The FlattenedList class takes a HierarchicalData object and "flattens" it
 	 *  using all of the open members.
-     * 
-     *  @langversion 3.0
-     *  @playerversion Flash 10.2
-     *  @playerversion AIR 2.6
-     *  @productversion Royale 0.0
-     * 
-     *  @royalesuppresspublicvarwarning
-     */
+	 * 
+	 *  @langversion 3.0
+	 *  @playerversion Flash 10.2
+	 *  @playerversion AIR 2.6
+	 *  @productversion Royale 0.0
+	 * 
+	 *  @royalesuppresspublicvarwarning
+	 */
 	public class FlattenedList extends ArrayList
 	{
 		public var hdata:IHierarchicalData;
 		public var openNodes:Array;
 		
-        /**
-         *  Constructor.
-         *  
-         *  @langversion 3.0
-         *  @playerversion Flash 10.2
-         *  @playerversion AIR 2.6
-         *  @productversion Royale 0.0
-         */
+		/**
+		 *  Constructor.
+		 *  
+		 *  @langversion 3.0
+		 *  @playerversion Flash 10.2
+		 *  @playerversion AIR 2.6
+		 *  @productversion Royale 0.0
+		 */
 		public function FlattenedList(hdata:IHierarchicalData)
 		{
 			super();
@@ -61,11 +61,11 @@
 		
 		/**
 		 * Resets the list so that only the top root node is open.
-         *  
-         *  @langversion 3.0
-         *  @playerversion Flash 10.2
-         *  @playerversion AIR 2.6
-         *  @productversion Royale 0.0
+		 *  
+		 *  @langversion 3.0
+		 *  @playerversion Flash 10.2
+		 *  @playerversion AIR 2.6
+		 *  @productversion Royale 0.0
 		 */
 		public function reset():void
 		{
@@ -92,11 +92,11 @@
 		
 		/**
 		 * Returns true if the node has children nodes.
-         *  
-         *  @langversion 3.0
-         *  @playerversion Flash 10.2
-         *  @playerversion AIR 2.6
-         *  @productversion Royale 0.0
+		 *  
+		 *  @langversion 3.0
+		 *  @playerversion Flash 10.2
+		 *  @playerversion AIR 2.6
+		 *  @productversion Royale 0.0
 		 */
 		public function hasChildren(node:Object):Boolean
 		{
@@ -105,11 +105,11 @@
 		
 		/**
 		 * Returns true if the node is currently open.
-         *  
-         *  @langversion 3.0
-         *  @playerversion Flash 10.2
-         *  @playerversion AIR 2.6
-         *  @productversion Royale 0.0
+		 *  
+		 *  @langversion 3.0
+		 *  @playerversion Flash 10.2
+		 *  @playerversion AIR 2.6
+		 *  @productversion Royale 0.0
 		 */
 		public function isOpen(node:Object):Boolean
 		{
@@ -118,11 +118,11 @@
 		
 		/**
 		 * Opens the given node. The array data now contains more elements.
-         *  
-         *  @langversion 3.0
-         *  @playerversion Flash 10.2
-         *  @playerversion AIR 2.6
-         *  @productversion Royale 0.0
+		 *  
+		 *  @langversion 3.0
+		 *  @playerversion Flash 10.2
+		 *  @playerversion AIR 2.6
+		 *  @productversion Royale 0.0
 		 */
 		public function openNode(node:Object):void
 		{
@@ -148,10 +148,11 @@
 		 */
 		public function closeNode(node:Object):void
 		{
+			var hasChildren:Boolean = hdata.hasChildren(node);
 			var i:int = openNodes.indexOf(node);
 			if (i != -1) {
 				
-				if (hdata.hasChildren(node)) {
+				if (hasChildren) {
 					var children:Array = hdata.getChildren(node) as Array;
 					var n:int = children.length;
 					for (var j:int=0; j < n; j++) {
@@ -170,7 +171,8 @@
 					super.removeItemAt(i--);
 				}
 			}
-			updateNode(node);
+			if(hasChildren)
+				updateNode(node);
 		}
 		
 		/**
