 	
 	import weave.api.WeaveAPI;
 	import weave.api.copySessionState;
+	import weave.api.getSessionState;
+	import weave.api.setSessionState;
 	import weave.api.data.IKeySet;
 	import weave.api.data.IQualifiedKey;
-	import weave.api.getSessionState;
-	import weave.api.setSessionState;
 	import weave.compiler.StandardLib;
 	import weave.core.LinkableVariable;
 	

					if (value[keyTypeProperty] != null && value[keysProperty] != null)
						value = WeaveAPI.CSVParser.createCSVToken(value[keyTypeProperty]) + ',' + value[keysProperty];
			}
			// backwards compatibility -- parse CSV
			if (value is String)
				value = WeaveAPI.CSVParser.parseCSV(value as String);
			
			// expecting a two-dimensional Array at this point
			// TODO: error checking?
			super.setSessionState(value);
		}
		

	{
		public function KeySet()
		{
			super(Array, verifySessionState);
			// The first callback will update the keys from the session state.
			addImmediateCallback(this, updateKeys);
		}
		
		/**
		 * Verifies that the value is a two-dimensional array or null.
		 */		
		private function verifySessionState(value:Array):Boolean
		{
			for each (var row:Object in value)
				if (!(row is Array))
					return false;
			return true;
		}
		
		/**
