diff --git a/core/Segment.php b/core/Segment.php
index 401c1307a137a9fdeeeeca46165d8fe28de7cc50..e54b7aac3b6409f1d47c88ed6885159db191a9a0 100644
--- a/core/Segment.php
+++ b/core/Segment.php
@@ -5,9 +5,18 @@ class Piwik_Segment
      * @var Piwik_SegmentExpression
      */
     protected $segment = null;
+    
+    /**
+     * Truncate the Segments to 4k  
+     */
+    const SEGMENT_TRUNCATE_LIMIT = 4096;
+    
     public function __construct($string, $idSites)
     {
         $string = trim($string);
+        // As a preventive measure, we restrict the filter size to a safe limit
+        $string = substr($string, 0, self::SEGMENT_TRUNCATE_LIMIT);
+        
         $this->string = $string;
         $this->idSites = $idSites;
         $segment = new Piwik_SegmentExpression($string);
@@ -46,7 +55,8 @@ class Piwik_Segment
     {
         $expressions = $this->segment->parsedSubExpressions;
         $uniqueFields = array();
-        foreach($expressions as $expression) {
+        foreach($expressions as $expression) 
+        {
             $uniqueFields[] = $expression[Piwik_SegmentExpression::INDEX_OPERAND][0];
         }
         return $uniqueFields;
diff --git a/plugins/API/API.php b/plugins/API/API.php
index 2f706fa0b942d08b25054db8bafa18a5cec9e693..995499cec693213529acd2b5063014ba58ce2711 100644
--- a/plugins/API/API.php
+++ b/plugins/API/API.php
@@ -105,8 +105,9 @@ class Piwik_API_API
 		        'category' => 'Visit',
 		        'name' => 'General_VisitorIP',
 		        'segment' => 'visitIp',
+				'acceptedValues' => '13.54.122.1, etc.',
 		        'sqlSegment' => 'location_ip',
-		        'sqlFilter' => array('Piwik_Common', 'long2ip'),
+		        'sqlFilter' => array('Piwik_Common', 'getIp'),
 		        'permission' => Piwik::isUserHasAdminAccess($idSites),
 	    );
 		$segments[] = array(
@@ -160,7 +161,7 @@ class Piwik_API_API
 		$columns = array('type', 'category', 'name', 'segment');
 		foreach($columns as $column)
 		{
-			$compare = strcmp($row1[$column], $row2[$column]);
+			$compare = -1 * strcmp($row1[$column], $row2[$column]);
 			if($compare != 0){
 				return $compare;
 			}
diff --git a/plugins/API/Controller.php b/plugins/API/Controller.php
index 9b2ef803520fb392312d3530336146080ff37a91..9cedb5ed1e455fc4eecbacf2284c6b178979d5d3 100644
--- a/plugins/API/Controller.php
+++ b/plugins/API/Controller.php
@@ -43,4 +43,73 @@ class Piwik_API_Controller extends Piwik_Controller
 		$view->list_api_methods_with_links = $ApiDocumentation->getAllInterfaceString();
 		echo $view->render();
 	}
+	
+	public function listSegments()
+	{
+		$segments = Piwik_API_API::getInstance()->getSegmentsMetadata($this->idSite);
+		
+		$tableDimensions = $tableMetrics = '';
+		$customVariables=0;
+		$lastCategory=array();
+		foreach($segments as $segment)
+		{
+			$customVariableWillBeDisplayed = in_array($segment['segment'], $onlyDisplay = array('customVariableName1', 'customVariableName2', 'customVariableValue1', 'customVariableValue2'));
+			// Don't display more than 4 custom variables name/value rows
+			if($segment['category'] == 'Custom Variables'
+				&& !$customVariableWillBeDisplayed)
+			{ 
+				continue;
+			}
+			
+			$thisCategory = $segment['category'];
+			$output = '';
+			if(empty($lastCategory[$segment['type']]) 
+				|| $lastCategory[$segment['type']] != $thisCategory)
+			{
+				$output .= '<tr><td colspan="2"><b>'.$thisCategory.'</b></td></tr>';
+			}
+			
+			$lastCategory[$segment['type']] = $thisCategory;
+			
+			$exampleValues = isset($segment['acceptedValues']) 
+								? 'Example values: <code>'.$segment['acceptedValues'].'</code>' 
+								: '';
+			$output .= '<tr>
+							<td>'.$segment['segment'].'</td>
+							<td>'.$segment['name'] .'<br/>'.$exampleValues.' </td>
+						</tr>';
+			
+			// Show only 2 custom variables and display message for rest
+			if($customVariableWillBeDisplayed)
+			{
+				$customVariables++;
+    			if($customVariables == 4)
+    			{
+    				$output .= '<tr><td> There are 5 custom variables available, so you can segment across any segment name and value range.
+    						<br/>For example, <code>customVariableName1==Type;customVariableValue1==Customer</code>
+    						<br/>Returns all visitors that have the Custom Variable "Type" set to "Customer".
+    						</td></tr>';
+    			}
+			}
+			
+			
+			if($segment['type'] == 'dimension') {
+				$tableDimensions .= $output;
+			} else {
+				$tableMetrics .= $output;
+			}
+		}
+		
+		echo "
+		<b>Dimensions</b>
+		<table>
+		$tableDimensions
+		</table>
+		<br/>
+		<b>Metrics</b>
+		<table>
+		$tableMetrics
+		</table>
+		";
+	}
 }
diff --git a/plugins/Provider/Provider.php b/plugins/Provider/Provider.php
index 826adc90daaa8eb41e7a6adaae8d78068c5dda58..3985d8f439fa47aa1986dab70af408362c295413 100644
--- a/plugins/Provider/Provider.php
+++ b/plugins/Provider/Provider.php
@@ -63,6 +63,7 @@ class Piwik_Provider extends Piwik_Plugin
 		        'category' => 'Visit',
 		        'name' => Piwik_Translate('Provider_ColumnProvider'),
 		        'segment' => 'provider',
+				'acceptedValues' => 'comcast.net, proxad.net, etc.',
 		        'sqlSegment' => 'location_provider'
        );
 	}
diff --git a/plugins/Referers/Referers.php b/plugins/Referers/Referers.php
index 43986d1b77ff7cedf4e92af949c7ef88cd15a53b..b012f81b4a28492d78f9dd174cb6481b85d69dff 100644
--- a/plugins/Referers/Referers.php
+++ b/plugins/Referers/Referers.php
@@ -110,6 +110,7 @@ class Piwik_Referers extends Piwik_Plugin
 		        'category' => 'Referers_Referers',
 		        'name' => 'Referers_ColumnKeyword',
 		        'segment' => 'referrerKeyword',
+		        'acceptedValues' => 'Encoded%20Keyword, keyword',
 		        'sqlSegment' => 'referer_keyword',
 	    );
 		$segments[] = array(
@@ -117,12 +118,14 @@ class Piwik_Referers extends Piwik_Plugin
 		        'category' => 'Referers_Referers',
 		        'name' => 'Referers_RefererName',
 		        'segment' => 'referrerName',
+		        'acceptedValues' => 'twitter.com, www.facebook.com, Bing, Google, Yahoo, CampaignName',
 		        'sqlSegment' => 'referer_name',
 	    );
 	    $segments[] = array(
 		        'type' => 'dimension',
 		        'category' => 'Referers_Referers',
 		        'name' => 'Live_Referrer_URL',
+	    		'acceptedValues' => 'http%3A%2F%2Fwww.example.org%2Freferer-page.htm',
 		        'segment' => 'referrerUrl',
 		        'sqlSegment' => 'referer_url',
 	    );
diff --git a/plugins/VisitTime/VisitTime.php b/plugins/VisitTime/VisitTime.php
index 8a28162afff964beefc53f2f9a80e445381aecb3..b65d060c8c565381660a81103a49d2a46eda11ea 100644
--- a/plugins/VisitTime/VisitTime.php
+++ b/plugins/VisitTime/VisitTime.php
@@ -85,13 +85,14 @@ class Piwik_VisitTime extends Piwik_Plugin
 	public function getSegmentsMetadata($notification)
 	{
 		$segments =& $notification->getNotificationObject();
+		$acceptedValues = "0, 1, 2, 3, ..., 20, 21, 22, 23";
 		$segments[] = array(
 		        'type' => 'dimension',
 		        'category' => 'Visit',
 		        'name' => Piwik_Translate('VisitTime_ColumnServerTime'),
 		        'segment' => 'visitServerHour',
 		        'sqlSegment' => 'HOUR(visit_last_action_time)',
-				'acceptedValues' => implode(',', range(0, 23, 1))
+				'acceptedValues' => $acceptedValues
        );
        $segments[] = array(
 		        'type' => 'dimension',
@@ -99,7 +100,7 @@ class Piwik_VisitTime extends Piwik_Plugin
 		        'name' => Piwik_Translate('VisitTime_ColumnLocalTime'),
 		        'segment' => 'visitLocalHour',
 		        'sqlSegment' => 'HOUR(visitor_localtime)',
-       			'acceptedValues' => implode(',', range(0, 23, 1))
+       			'acceptedValues' => $acceptedValues
        );
 	}
 	
diff --git a/tests/integration/expected/test_apiGetReportMetadata__API.getSegmentsMetadata.xml b/tests/integration/expected/test_apiGetReportMetadata__API.getSegmentsMetadata.xml
index aab6df6964fe5fc83af48aab57c7d4df00cffb95..1f68948137ba8950c5ab882fdba3857acc25e91b 100644
--- a/tests/integration/expected/test_apiGetReportMetadata__API.getSegmentsMetadata.xml
+++ b/tests/integration/expected/test_apiGetReportMetadata__API.getSegmentsMetadata.xml
@@ -1,200 +1,205 @@
 <?xml version="1.0" encoding="utf-8" ?>
 <result>
 	<row>
-		<type>dimension</type>
-		<category>Actions</category>
-		<name>Entry Page URL</name>
-		<segment>entryPageUrl</segment>
+		<type>metric</type>
+		<category>Visit</category>
+		<name>Visit Duration (in seconds)</name>
+		<segment>visitDuration</segment>
 	</row>
 	<row>
-		<type>dimension</type>
-		<category>Actions</category>
-		<name>Entry Page title</name>
-		<segment>entryPageTitle</segment>
+		<type>metric</type>
+		<category>Visit</category>
+		<name>Number of Actions</name>
+		<segment>actions</segment>
 	</row>
 	<row>
 		<type>dimension</type>
-		<category>Actions</category>
-		<name>Exit Page Title</name>
-		<segment>exitPageTitle</segment>
+		<category>Visit</category>
+		<name>Visitor type</name>
+		<segment>visitorType</segment>
+		<acceptedValues>new, returning</acceptedValues>
 	</row>
 	<row>
 		<type>dimension</type>
-		<category>Actions</category>
-		<name>Exit Page URL</name>
-		<segment>exitPageUrl</segment>
+		<category>Visit</category>
+		<name>Visitor IP</name>
+		<segment>visitIp</segment>
+		<acceptedValues>13.54.122.1, etc.</acceptedValues>
+		<permission>1</permission>
 	</row>
 	<row>
 		<type>dimension</type>
-		<category>Custom Variables</category>
-		<name>Custom Variable name 1</name>
-		<segment>customVariableName1</segment>
+		<category>Visit</category>
+		<name>Server time</name>
+		<segment>visitServerHour</segment>
+		<acceptedValues>0, 1, 2, 3, ..., 20, 21, 22, 23</acceptedValues>
 	</row>
 	<row>
 		<type>dimension</type>
-		<category>Custom Variables</category>
-		<name>Custom Variable name 2</name>
-		<segment>customVariableName2</segment>
+		<category>Visit</category>
+		<name>Resolution</name>
+		<segment>resolution</segment>
+		<acceptedValues>1280x1024, 800x600, etc.</acceptedValues>
 	</row>
 	<row>
 		<type>dimension</type>
-		<category>Custom Variables</category>
-		<name>Custom Variable name 3</name>
-		<segment>customVariableName3</segment>
+		<category>Visit</category>
+		<name>Provider</name>
+		<segment>provider</segment>
+		<acceptedValues>comcast.net, proxad.net, etc.</acceptedValues>
 	</row>
 	<row>
 		<type>dimension</type>
-		<category>Custom Variables</category>
-		<name>Custom Variable name 4</name>
-		<segment>customVariableName4</segment>
+		<category>Visit</category>
+		<name>Operating system</name>
+		<segment>operatingSystem</segment>
+		<acceptedValues>WXP, WI7, MAC, LIN, AND, IPD, etc.</acceptedValues>
 	</row>
 	<row>
 		<type>dimension</type>
-		<category>Custom Variables</category>
-		<name>Custom Variable name 5</name>
-		<segment>customVariableName5</segment>
+		<category>Visit</category>
+		<name>Local time</name>
+		<segment>visitLocalHour</segment>
+		<acceptedValues>0, 1, 2, 3, ..., 20, 21, 22, 23</acceptedValues>
 	</row>
 	<row>
 		<type>dimension</type>
-		<category>Custom Variables</category>
-		<name>Custom Variable value 1</name>
-		<segment>customVariableValue1</segment>
+		<category>Visit</category>
+		<name>Country</name>
+		<segment>country</segment>
+		<acceptedValues>de, us, fr, in, es, etc.</acceptedValues>
 	</row>
 	<row>
 		<type>dimension</type>
-		<category>Custom Variables</category>
-		<name>Custom Variable value 2</name>
-		<segment>customVariableValue2</segment>
+		<category>Visit</category>
+		<name>Continent</name>
+		<segment>continent</segment>
+		<acceptedValues>eur, asi, amc, amn, ams, afr, ant, oce</acceptedValues>
 	</row>
 	<row>
 		<type>dimension</type>
-		<category>Custom Variables</category>
-		<name>Custom Variable value 3</name>
-		<segment>customVariableValue3</segment>
+		<category>Visit</category>
+		<name>Browser version</name>
+		<segment>browserVersion</segment>
+		<acceptedValues>1.0, 8.0, etc.</acceptedValues>
 	</row>
 	<row>
 		<type>dimension</type>
-		<category>Custom Variables</category>
-		<name>Custom Variable value 4</name>
-		<segment>customVariableValue4</segment>
+		<category>Visit</category>
+		<name>Browser</name>
+		<segment>browserName</segment>
+		<acceptedValues>FF, IE, CH, SF, OP, etc.</acceptedValues>
 	</row>
 	<row>
 		<type>dimension</type>
-		<category>Custom Variables</category>
-		<name>Custom Variable value 5</name>
-		<segment>customVariableValue5</segment>
+		<category>Referrers</category>
+		<name>Referrer URL</name>
+		<acceptedValues>http%3A%2F%2Fwww.example.org%2Freferer-page.htm</acceptedValues>
+		<segment>referrerUrl</segment>
 	</row>
 	<row>
 		<type>dimension</type>
 		<category>Referrers</category>
-		<name>Keyword</name>
-		<segment>referrerKeyword</segment>
+		<name>Referrer Type</name>
+		<segment>referrerType</segment>
+		<acceptedValues>direct, search, website, campaign</acceptedValues>
 	</row>
 	<row>
 		<type>dimension</type>
 		<category>Referrers</category>
 		<name>Referrer Name</name>
 		<segment>referrerName</segment>
+		<acceptedValues>twitter.com, www.facebook.com, Bing, Google, Yahoo, CampaignName</acceptedValues>
 	</row>
 	<row>
 		<type>dimension</type>
 		<category>Referrers</category>
-		<name>Referrer Type</name>
-		<segment>referrerType</segment>
-		<acceptedValues>direct, search, website, campaign</acceptedValues>
+		<name>Keyword</name>
+		<segment>referrerKeyword</segment>
+		<acceptedValues>Encoded%20Keyword, keyword</acceptedValues>
 	</row>
 	<row>
 		<type>dimension</type>
-		<category>Referrers</category>
-		<name>Referrer URL</name>
-		<segment>referrerUrl</segment>
+		<category>Custom Variables</category>
+		<name>Custom Variable value 5</name>
+		<segment>customVariableValue5</segment>
 	</row>
 	<row>
 		<type>dimension</type>
-		<category>Visit</category>
-		<name>Browser</name>
-		<segment>browserName</segment>
-		<acceptedValues>FF, IE, CH, SF, OP, etc.</acceptedValues>
+		<category>Custom Variables</category>
+		<name>Custom Variable value 4</name>
+		<segment>customVariableValue4</segment>
 	</row>
 	<row>
 		<type>dimension</type>
-		<category>Visit</category>
-		<name>Browser version</name>
-		<segment>browserVersion</segment>
-		<acceptedValues>1.0, 8.0, etc.</acceptedValues>
+		<category>Custom Variables</category>
+		<name>Custom Variable value 3</name>
+		<segment>customVariableValue3</segment>
 	</row>
 	<row>
 		<type>dimension</type>
-		<category>Visit</category>
-		<name>Continent</name>
-		<segment>continent</segment>
-		<acceptedValues>eur, asi, amc, amn, ams, afr, ant, oce</acceptedValues>
+		<category>Custom Variables</category>
+		<name>Custom Variable value 2</name>
+		<segment>customVariableValue2</segment>
 	</row>
 	<row>
 		<type>dimension</type>
-		<category>Visit</category>
-		<name>Country</name>
-		<segment>country</segment>
-		<acceptedValues>de, us, fr, in, es, etc.</acceptedValues>
+		<category>Custom Variables</category>
+		<name>Custom Variable value 1</name>
+		<segment>customVariableValue1</segment>
 	</row>
 	<row>
 		<type>dimension</type>
-		<category>Visit</category>
-		<name>Local time</name>
-		<segment>visitLocalHour</segment>
-		<acceptedValues>0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23</acceptedValues>
+		<category>Custom Variables</category>
+		<name>Custom Variable name 5</name>
+		<segment>customVariableName5</segment>
 	</row>
 	<row>
 		<type>dimension</type>
-		<category>Visit</category>
-		<name>Operating system</name>
-		<segment>operatingSystem</segment>
-		<acceptedValues>WXP, WI7, MAC, LIN, AND, IPD, etc.</acceptedValues>
+		<category>Custom Variables</category>
+		<name>Custom Variable name 4</name>
+		<segment>customVariableName4</segment>
 	</row>
 	<row>
 		<type>dimension</type>
-		<category>Visit</category>
-		<name>Provider</name>
-		<segment>provider</segment>
+		<category>Custom Variables</category>
+		<name>Custom Variable name 3</name>
+		<segment>customVariableName3</segment>
 	</row>
 	<row>
 		<type>dimension</type>
-		<category>Visit</category>
-		<name>Resolution</name>
-		<segment>resolution</segment>
-		<acceptedValues>1280x1024, 800x600, etc.</acceptedValues>
+		<category>Custom Variables</category>
+		<name>Custom Variable name 2</name>
+		<segment>customVariableName2</segment>
 	</row>
 	<row>
 		<type>dimension</type>
-		<category>Visit</category>
-		<name>Server time</name>
-		<segment>visitServerHour</segment>
-		<acceptedValues>0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23</acceptedValues>
+		<category>Custom Variables</category>
+		<name>Custom Variable name 1</name>
+		<segment>customVariableName1</segment>
 	</row>
 	<row>
 		<type>dimension</type>
-		<category>Visit</category>
-		<name>Visitor IP</name>
-		<segment>visitIp</segment>
-		<permission>1</permission>
+		<category>Actions</category>
+		<name>Exit Page URL</name>
+		<segment>exitPageUrl</segment>
 	</row>
 	<row>
 		<type>dimension</type>
-		<category>Visit</category>
-		<name>Visitor type</name>
-		<segment>visitorType</segment>
-		<acceptedValues>new, returning</acceptedValues>
+		<category>Actions</category>
+		<name>Exit Page Title</name>
+		<segment>exitPageTitle</segment>
 	</row>
 	<row>
-		<type>metric</type>
-		<category>Visit</category>
-		<name>Number of Actions</name>
-		<segment>actions</segment>
+		<type>dimension</type>
+		<category>Actions</category>
+		<name>Entry Page title</name>
+		<segment>entryPageTitle</segment>
 	</row>
 	<row>
-		<type>metric</type>
-		<category>Visit</category>
-		<name>Visit Duration (in seconds)</name>
-		<segment>visitDuration</segment>
+		<type>dimension</type>
+		<category>Actions</category>
+		<name>Entry Page URL</name>
+		<segment>entryPageUrl</segment>
 	</row>
 </result>
\ No newline at end of file