diff --git a/doc/examples/originalComponents/static/admin/img/wordcloud.png b/doc/examples/originalComponents/static/admin/img/wordcloud.png
new file mode 100644
index 0000000000000000000000000000000000000000..f21dedbee1498475d0ef91cc0b4d58aef0ee96fc
Binary files /dev/null and b/doc/examples/originalComponents/static/admin/img/wordcloud.png differ
diff --git a/doc/examples/originalComponents/static/admin/js/editor.js b/doc/examples/originalComponents/static/admin/js/editor.js
index 7f5af9bd59533f9caf4f26e7395242e9944bb3f7..ae7329c8a2c25a43278f0ad8b38976c210cb436e 100644
--- a/doc/examples/originalComponents/static/admin/js/editor.js
+++ b/doc/examples/originalComponents/static/admin/js/editor.js
@@ -47,6 +47,7 @@ $(document).ready(function(){
                                   {name: 'D3Dendrogram',  params: "childNode,parentNode", img: "dendrogram.png"},
                                   {name: 'D3ForceGraph',  params: "sourceNode,TargetNode", img: "graph.png"},
                                   {name: 'D3ParallelCoordinates',  params: "label,value1,value2,...,valueN", img: "parallelcoordinates.png"},
+                                  {name: 'D3WordCloud', params: "textVariable", img: "wordcloud.png"},
                                   {name: 'GoogleMaps',  params: "latitude,longitude,label", img: "maps.png"},
                                   {name: 'GoogleVizBarChart', params: "valuesInAxisX,valuesInAxisY", img: "barchart.png"},
                                   {name: 'GoogleVizColumnChart', params: "valuesInAxisX,valuesInAxisY", img: "columnchart.png"},
diff --git a/lib/Haanga/lib/Haanga/Extension/Filter/D3wordcloud.php b/lib/Haanga/lib/Haanga/Extension/Filter/D3wordcloud.php
new file mode 100644
index 0000000000000000000000000000000000000000..4d96dfccf4f7e908c98bdf03785ebde34c7098fa
--- /dev/null
+++ b/lib/Haanga/lib/Haanga/Extension/Filter/D3wordcloud.php
@@ -0,0 +1,110 @@
+<?php
+
+class Haanga_Extension_Filter_D3WordCloud{
+  public $is_safe = TRUE;
+  static function main($obj, $varname){
+  	$names = explode(",", $varname);
+  	$varList = array();
+  	$randId = uniqid("_ID_");
+  	$words = array();
+    $fieldCounter=0;  
+  	foreach($names as $v){
+  	  if(strpos($v,"=")){
+  	    break;
+  	  }
+  	  $variable['name'] = $v;
+  	  $variable['value'] = 'value';
+  	  if(strpos($v, ".")){
+  	    $aux = explode(".", $v);
+  	    $variable['name'] = $aux[0];
+  	    $variable['value'] = $aux[1];
+  	  }
+  	  $fieldCounter++;
+  	  array_push($varList, $variable);
+  	}
+
+  	//options
+  	$options = array();
+  	$options['width'] = 960;
+  	$options['height'] = 500;
+  	$options['color'] = '#aec7e8';
+  	$options['radius'] = 10;
+  	for($z=1; $z < count($names); $z++){
+      $pair = explode("=", $names[$z]);
+      $key = trim($pair[0], "\" '");
+      $value = trim($pair[1], "\" '");
+      $options[$key] = $value;     
+    }
+
+  	
+  	foreach($obj as $k){
+  	  foreach($varList as $var){
+  	    $name = $var['name'];
+  	    $val = $var['value'];
+  	    $words = array_merge($words, preg_split("/[\s,\.]+/", $k->$name->$val));
+   	  }
+  	}  	
+
+  	$pre = '<div id="wordcloud'.$randId.'"></div>
+<script src="http://d3js.org/d3.v2.min.js?2.9.3"></script>
+<script src="https://raw.github.com/jasondavies/d3-cloud/master/d3.layout.cloud.js"></script>
+<script>
+// Based on http://www.jasondavies.com/wordcloud 
+function D3WordCloud'.$randId.'(words, newcfg){
+  var cfg = {width: 300,
+             height: 300,
+             font: "sans-serif",
+             color: "black"
+  };
+  for(i in newcfg){
+    cfg[i] = newcfg[i];
+  }
+  var countingWords = {};
+  for(i in words){
+    var d = words[i];
+    if(countingWords[d] != undefined){ 
+      countingWords[d] += 1
+    }else{
+      countingWords[d] = 1
+    }
+  }
+  var totalWords = new Array();
+  for(i in countingWords){
+    totalWords.push({name: i, total: countingWords[i]});
+  }
+  d3.layout.cloud().size([cfg.width, cfg.height])
+      .words(totalWords.map(function(d) {
+              return {text: d.name, size: 10 + 10*(d.total-1)};
+      }))
+      .rotate(function() { return ~~(Math.random() * 2) * 90; })
+      .padding(1)
+      .font("arial")
+      .fontSize(function(d) { return d.size; })
+      .on("end", draw)
+      .start();
+
+  function draw(words) {
+    d3.select("body").append("svg")
+        .attr("width", cfg.width)
+        .attr("height", cfg.height)
+      .append("g")
+        .attr("transform", "translate("+cfg.width/2+","+cfg.height/2+")")
+      .selectAll("text")
+        .data(words)
+      .enter().append("text")
+        .style("font-family", cfg.font)
+        .style("font-size", function(d) { return d.size + "px"; })
+        .attr("text-anchor", "middle")
+        .attr("transform", function(d) {
+          return "translate(" + [d.x, d.y] + ")rotate(" + d.rotate + ")";
+        })
+        .text(function(d) { return d.text; });
+  }
+}
+var words'.$randId.' = '.json_encode($words).';
+var options'.$randId.' = '.json_encode($options).'
+D3WordCloud'.$randId.'(words'.$randId.', options'.$randId.');
+</script>';
+  	return $pre;
+  }
+}