 		/**
 		 * This will get a list of column names in the data, which are taken directly from the header row and not guaranteed to be unique.
 		 */		
-		public function getColumnNames():Array
-		{
-			if (parsedRows && parsedRows.length)
-				return parsedRows[0].concat();
-			return [];
+		public function getColumnNames():Array/*/<string>/*/
+		{
+			return getColumnIds().map(asString);
+		}
+		
+		private function asString(value:Object, i:int, a:Array):Boolean
+		{
+			return value as String;
 		}
 
 		/**
 		 * A unique list of identifiers for columns which may be a mix of Strings and Numbers, depending on the uniqueness of column names.
 		 */
-		public function getColumnIds():Array
+		public function getColumnIds():Array/*/<number|string>/*/
 		{
 			return columnIds.concat();
 		}

		 * Convenience function for setting session state of csvData.
		 * @param rows
		 */
		public function setCSVData(rows:Array):void
		{
			if (!verifyRows(rows))
				throw new Error("Invalid data format. Expecting nested Arrays.");
			csvData.setSessionState(rows);
		}
		
		public function getCSVData():Array
		{
			return csvData.getSessionState() as Array;
		}

		private var nullValues:Array = [null, "", "null", "\\N", "NaN"];
		
		// backwards compatibility
		[Deprecated(replacement="keyColumn")] public function set keyColName(value:String):void { keyColumn.state = value; }
		[Deprecated(replacement="csvData")] public function set csvDataString(value:String):void { setCSVDataString(value); }
		[Deprecated(replacement="getColumnById")] public function getColumnByName(name:String):IAttributeColumn { return getColumnById(name); }
	}
