 		}
 		
 		/**
-		 * This will get a list of column names in the CSV data.
-		 * @return A list of column names in the CSV data. 
+		 * 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
 		{

			var leafNode:XML = HierarchyUtils.getLeafNodeFromPath(pathInHierarchy);
			proxyColumn.setMetadata(leafNode);

			var colName:String = proxyColumn.getMetadata("csvColumn");
			
			// backwards compatibility
			if (!colName)
				colName = proxyColumn.getMetadata("name");
			if (!proxyColumn.getMetadata(ColumnMetadata.TITLE))
				leafNode['@' + ColumnMetadata.TITLE] = colName;
			if (parsedRows.length == 0)
			{
				throw new Error('no rows!');
			}
			var colIndex:int = (parsedRows[0] as Array).indexOf(colName);
			var keyColIndex:int = (parsedRows[0] as Array).indexOf(keyColName.value); // it is ok if this is -1 because getColumnValues supports -1

			var i:int;
			var csvDataColumn:Vector.<String> = new Vector.<String>();

		
		/**
		 * This function will create a column in an ILinkableHashMap that references a column from this CSVDataSource.
		 * @param columnNameOrIndex Either a column name or zero-based column index.
		 * @param destinationHashMap The hash map to put the column in.
		 * @return The column that was created in the hash map.
		 */		
		public function putColumnInHashMap(columnNameOrIndex:Object, destinationHashMap:ILinkableHashMap):IAttributeColumn
		{
			var sourceOwner:ILinkableHashMap = getLinkableOwner(this) as ILinkableHashMap;
			if (!sourceOwner)
