diff --git a/lib/Haanga/lib/Haanga/Extension/Filter/D3circlepacking.php b/lib/Haanga/lib/Haanga/Extension/Filter/D3circlepacking.php
index 2cfb60bf9ca3b3e1e754e12136a4d1ad4225c68b..46a1e3e9bbc6a04b8a53ea51fb46daa965557c09 100644
--- a/lib/Haanga/lib/Haanga/Extension/Filter/D3circlepacking.php
+++ b/lib/Haanga/lib/Haanga/Extension/Filter/D3circlepacking.php
@@ -12,7 +12,6 @@ class Haanga_Extension_Filter_D3CirclePacking{
   	$names = explode(",", $varname);
   	$varList = array();
   	$randId = uniqid("_ID_");
-
   	foreach($names as $v){
   	  if(strpos($v,"=")){
   	    break;
@@ -51,25 +50,26 @@ class Haanga_Extension_Filter_D3CirclePacking{
 
   	$maps = array();
   	$quantities = array();
+  	$links = array();
   	$rootNode = NULL;
   	$id = $varList[0]['name'];
   	$quantity  = $varList[2]['name'];
+  	$link  = $varList[3]['name'];
   	$parentId = $varList[1]['name'];
-  	foreach($obj as $k){
-  	  if(!isset($k->$parentId)){
-  	    //root
-  	    $rootNode = $k->$id->value;
-  	  }else{
+
+    foreach($obj as $k){
   	    if(!isset($maps[$k->$parentId->value])){
   	      $maps[$k->$parentId->value] = array();
   	    }
   	    if(isset($k->$quantity)){
   	      $quantities[$k->$id->value] = $k->$quantity->value;
   	    }
+  	    if(isset($k->$link)){
+  	      $links[$k->$id->value] = $k->$link->value;
+  	    }
   	    array_push($maps[$k->$parentId->value], $k->$id->value);
-  	  }
   	}  
-  	function travelCirclePacking($node, $tree, $quantities){
+  	function travelCirclePacking($node, $tree, $quantities, $links){
   	  $total = array();
   	  foreach($tree[$node] as $v){
   	    $branch = array();
@@ -77,8 +77,11 @@ class Haanga_Extension_Filter_D3CirclePacking{
   	      if(isset($quantities[$v])){
   	        $branch['size'] = $quantities[$v];
   	      }
+  	      if(isset($links[$v])){
+  	        $branch['link'] = $links[$v];
+  	      }
   	    }else{
-  	      $branch['children'] = travelCirclePacking($v, $tree, $quantities);
+  	      $branch['children'] = travelCirclePacking($v, $tree, $quantities, $links);
   	    }
   	    $branch['name'] = $v;
   	    array_push($total, $branch);
@@ -87,7 +90,7 @@ class Haanga_Extension_Filter_D3CirclePacking{
   	}
   	
   	$json['name'] = $rootNode;
-  	$json['children'] = travelCirclePacking($rootNode, $maps, $quantities);
+  	$json['children'] = travelCirclePacking($rootNode, $maps, $quantities, $links);
   	
   	
   	$pre = '<div id="clusterpacking'.$randId.'"><div id="name'.$randId.'" style="font-family:sans-serif;font-size:15px;height:25px"><h2> </h2></div></div><script src="http://d3js.org/d3.v2.min.js?2.9.3"></script>
@@ -123,10 +126,16 @@ var vis = d3.select("#clusterpacking'.$randId.'").append("svg")
       .style("stroke", "rgb(31, 119, 180)").style("stroke-width", "1px")
       .attr("r", function(d) { return d.r; });
 
-  node.filter(function(d) { return !d.children; }).append("text")
+  node.filter(function(d) { return !d.children && !d.link; }).append("text")
       .attr("text-anchor", "middle")
       .attr("dy", ".3em")
       .text(function(d) { return d.name.substring(0, d.r / 3); });
+      
+  node.filter(function(d) { return !d.children && d.link; }).append("a").attr("xlink:href", function(d){return d.link}).append("text")
+      .attr("text-anchor", "middle")
+      .attr("dy", ".3em")
+      .text(function(d) { return d.name.substring(0, d.r / 3); });
+
 
 }