diff --git a/system/libraries/Table.php b/system/libraries/Table.php
index da7bbbe..01c45c7 100644
--- a/system/libraries/Table.php
+++ b/system/libraries/Table.php
@@ -28,11 +28,12 @@
  */
 class CI_Table {
 
-	var $rows			= array();
-	var $heading		= array();
-	var $template 		= NULL;
-	var $newline		= "\n";
-	var $empty_cells	= "";
+	var $rows				= array();
+	var $heading			= array();
+	var $auto_heading		= TRUE;	
+	var $template 			= NULL;
+	var $newline			= "\n";
+	var $empty_cells		= "";
 	
 	
 	function CI_Table()
@@ -79,6 +80,55 @@
 	// --------------------------------------------------------------------
 
 	/**
+	 * Set columns.  Takes a one-dimensional array as input and creates
+	 * a multi-dimensional array with a depth equal to the number of
+	 * columns.  This allows a single array with many elements to  be
+	 * displayed in a table that has a fixed column count.
+	 *
+	 * @access	public
+	 * @param	array
+	 * @param	int
+	 * @return	void
+	 */
+	function make_columns($array = array(), $col_limit = 0)
+	{
+		if ( ! is_array($array) OR count($array) == 0)
+		{
+			return FALSE;
+		}
+		
+		// Turn off the auto-heading feature since it's doubtful we 
+		// will want headings from a one-dimensional array
+		$this->auto_heading = FALSE;
+		
+		if ($col_limit == 0)
+		{
+			return $array;
+		}
+	
+		$new = array();
+		while(count($array) > 0)
+		{	
+			$temp = array_slice($array, 0, $col_limit);	
+			$array = array_diff($array, $temp);	
+			
+			if (count($temp) < $col_limit)
+			{
+				for ($i = count($temp); $i < $col_limit; $i++)
+				{
+					$temp[] = '&nbsp;';
+				}
+			}
+			
+			$new[] = $temp;
+		}
+		
+		return $new;
+	}
+
+	// --------------------------------------------------------------------
+
+	/**
 	 * Set "empty" cells
 	 *
 	 * Can be passed as an array or discreet params
@@ -130,7 +180,8 @@
 			}
 			elseif (is_array($table_data))
 			{
-				$this->_set_from_array($table_data);
+				$set_heading = (count($this->heading) == 0 AND $this->auto_heading == FALSE) ? FALSE : TRUE;
+				$this->_set_from_array($table_data, $set_heading);
 			}
 		}
 	
@@ -178,14 +229,14 @@
 				}
 			
 				// We use modulus to alternate the row colors
-				$alt = (fmod($i++, 2)) ? '' : 'alt_';
+				$name = (fmod($i++, 2)) ? '' : 'alt_';
 			
-				$out .= $this->template['row_'.$alt.'start'];
+				$out .= $this->template['row_'.$name.'start'];
 				$out .= $this->newline;		
 	
 				foreach($row as $cell)
 				{
-					$out .= $this->template['cell_'.$alt.'start'];
+					$out .= $this->template['cell_'.$name.'start'];
 					
 					if ($cell == "")
 					{
@@ -196,10 +247,10 @@
 						$out .= $cell;
 					}
 					
-					$out .= $this->template['cell_'.$alt.'end'];
+					$out .= $this->template['cell_'.$name.'end'];
 				}
 	
-				$out .= $this->template['row_'.$alt.'end'];
+				$out .= $this->template['row_'.$name.'end'];
 				$out .= $this->newline;	
 			}
 		}
@@ -208,7 +259,7 @@
 	
 		return $out;
 	}
-
+	
 	// --------------------------------------------------------------------
 
 	/**
@@ -256,7 +307,7 @@
 	 * @param	array
 	 * @return	void
 	 */
-	function _set_from_array($data)
+	function _set_from_array($data, $set_heading = TRUE)
 	{
 		if ( ! is_array($data) OR count($data) == 0)
 		{
@@ -273,7 +324,7 @@
 			}
 						
 			// If a heading hasn't already been set we'll use the first row of the array as the heading
-			if ($i == 0 AND count($data) > 1 AND count($this->heading) == 0)
+			if ($i == 0 AND count($data) > 1 AND count($this->heading) == 0 AND $set_heading == TRUE)
 			{
 				$this->heading = $row;
 			}
diff --git a/user_guide/libraries/table.html b/user_guide/libraries/table.html
index abe1a2b..880017a 100644
--- a/user_guide/libraries/table.html
+++ b/user_guide/libraries/table.html
@@ -198,6 +198,36 @@
 <code>$this->table->add_row('Blue', 'Red', 'Green');</code>

 <code>$this->table->add_row(array('Blue', 'Red', 'Green'));</code>

 

+

+<h2>$this->table->make_columns()</h2>

+

+<p>This function takes a one-dimensional array as input and creates

+a multi-dimensional array with a depth equal to the number of

+columns desired.  This allows a single array with many elements to  be

+displayed in a table that has a fixed column count.  Consider this example:</p>

+

+<code>

+$list = array('one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine', 'ten', 'eleven', 'twelve');<br />

+<br />

+$new_list = $this->table->make_columns($list, 3);<br />

+<br />

+$this->table->generate($new_list)<br />

+<br />

+// Generates a table with this prototype<br />

+<br />

+&lt;table border="0" cellpadding="4" cellspacing="0"&gt;<br />

+&lt;tr&gt;<br />

+&lt;td&gt;one&lt;/td&gt;&lt;td&gt;two&lt;/td&gt;&lt;td&gt;three&lt;/td&gt;<br />

+&lt;/tr&gt;&lt;tr&gt;<br />

+&lt;td&gt;four&lt;/td&gt;&lt;td&gt;five&lt;/td&gt;&lt;td&gt;six&lt;/td&gt;<br />

+&lt;/tr&gt;&lt;tr&gt;<br />

+&lt;td&gt;seven&lt;/td&gt;&lt;td&gt;eight&lt;/td&gt;&lt;td&gt;nine&lt;/td&gt;<br />

+&lt;/tr&gt;&lt;tr&gt;<br />

+&lt;td&gt;ten&lt;/td&gt;&lt;td&gt;eleven&lt;/td&gt;&lt;td&gt;twelve&lt;/td&gt;&lt;/tr&gt;<br />

+&lt;/table&gt;</code>

+

+

+

 <h2>$this->table->set_template()</h2>

 

 <p>Permits you to set your template. You can submit a full or partial template.</p>