 						}
 						sessionState = diffValue;
 					}
+					else
+					{
+						sessionState = copyObject(sessionState);
+					}
 					
 					// save in new array and remove from lookup
 					result.push(DynamicState.create(objectName || null, className, sessionState)); // convert empty string to null

		
		public static const DIFF_DELETE:String = 'delete';
		
		/**
		 * @inheritDoc
		 */

				{
					if (StandardLib.compare(oldState, newState) == 0)
						return undefined; // no diff
					return ObjectUtil.copy(newState);
				}
				
				// create an array of new DynamicState objects for all new names followed by missing old names
