diff --git a/classes/Exporter.php b/classes/Exporter.php
index 3bdc70bec4df72a33ffb2633a6909e580b0251f2..fb70f55cbd233dfafaa6f6dafe185effdcef5cf8 100644
--- a/classes/Exporter.php
+++ b/classes/Exporter.php
@@ -31,7 +31,11 @@ class Exporter{
   	array_push($triples, $t);
   	$t['o']      = LS.'Application';	
   	array_push($triples, $t);
-  	
+  	if($conf['parentApp'] != NULL){
+  	 	$t['p'] = OPMV.'wasDerivedFrom';
+  	 	$t['o'] = $conf['parentApp'];
+  	 	array_push($triples, $t);
+  	}
   	
   	$t['p']      = LS.'usedParameter';
   	$t['o']      = uniqid("_:b");
diff --git a/classes/Importer.php b/classes/Importer.php
index 3fddb06dc8b8b7db28cc84c26db80eed24c98a1e..e774e55f2b1eb8af0dc6c138378737fb5a736797 100644
--- a/classes/Importer.php
+++ b/classes/Importer.php
@@ -58,7 +58,7 @@ class Importer{
 	//$arr = explode("lodspeakr/benegesserit", $this->basedir);
 	//$this->basedir = $arr[0];
 	$content .= "\$conf['basedir'] = \"$this->basedir\";\n";
-	
+	$content .= "\$conf['parentApp'] = \"$app\";\n";
 	$pwd = getcwd();
 	$content .= "\$conf['home'] = \"$pwd/\";\n";
 	
@@ -78,7 +78,12 @@ class Importer{
 	foreach($appParams  as $k => $v){
 	  $content .= "\$conf['$k'] = \"$v\";\n";
 	}
-	
+	$content .= "/*ATTENTION: By default this application is available to
+ * be exported and copied (its configuration)
+ * by others. If you do not want that, 
+ * turn the next option as false
+ */ 
+\$conf['export'] = true;\n\n";
 	//Components
   	foreach($compArr as $v){
   	  $component = $v['s'];
diff --git a/classes/Queries.php b/classes/Queries.php
index a9b860eb4fd8ae9471cb7ae6d097e54e3b5e078f..3d4a47540f1f86ef6a11e7bb860cd8b141ef9d20 100644
--- a/classes/Queries.php
+++ b/classes/Queries.php
@@ -63,10 +63,10 @@ QUERY;
 		$ext = 'html';
 		$inserts = "";
 		foreach($conf['http_accept'] as $extension => $f){
-		  $page = $localUri.".".$extension;
+		  $page = $localUri.$conf['extension_connector'].$extension;
 			foreach($f as $v){
 			  if($contentType == $v){
-				$returnPage = $localUri.".".$extension;
+				$returnPage = $localUri.$conf['extension_connector'].$extension;
 			  }
 			  if($inserts != ""){
 				$inserts .= "UNION ";
diff --git a/classes/Utils.php b/classes/Utils.php
index bc99e1d0b1b547ec3790d756accec611b9c85dc8..a183372089f932f58d76c575a58810ba63839a47 100644
--- a/classes/Utils.php
+++ b/classes/Utils.php
@@ -217,7 +217,7 @@ class Utils{
   	$handle = opendir('.');
   	
   	while (false !== ($modelFile = readdir($handle))) {
-  	  if($modelFile != "." && $modelFile != ".."){
+  	  if($modelFile != "." && $modelFile != ".." && strpos($modelFile, ".") !== 0){
   	  	if(is_dir($modelFile)){
   	  	  //Save it for later, after all the queries in the current directory has been resolved
   	  	  $subDirs[]=$modelFile;
diff --git a/common.inc.php b/common.inc.php
index 6a089af2dd23be626c6557dd35b9c6243a0b7499..80682e783d2d9ee7244dc9f942968cbbbb6721f4 100644
--- a/common.inc.php
+++ b/common.inc.php
@@ -41,7 +41,9 @@ $conf['root'] = 'special/index';
 //Debug
 $conf['debug'] = false;
 
+$conf['extension_connector'] = '.';
+
+
 include_once('settings.inc.php');
 $conf['view']['standard']['baseUrl'] = $conf['basedir'];
-
 ?>
diff --git a/index.php b/index.php
index 0a0b415cf6b7ecf98e8c60db9ef45d42b5a3de21..9777501ee691caa2c235dda2c227e9294c09ffed 100755
--- a/index.php
+++ b/index.php
@@ -41,7 +41,7 @@ $extension = Utils::getExtension($acceptContentType);
 if($acceptContentType == NULL){
   Utils::send406($uri);
 }
-if(file_exists($conf['static']['directory'].$_GET['q']) && sizeof($_GET['q'])>0){
+if(sizeof($_GET['q'])>0 && file_exists($conf['static']['directory'].$_GET['q'])){
   echo file_get_contents($conf['static']['directory'].$_GET['q']);
   exit(0);
 }
diff --git a/lib/Haanga/lib/Haanga/Extension/Filter/Alert.php b/lib/Haanga/lib/Haanga/Extension/Filter/Alert.php
new file mode 100644
index 0000000000000000000000000000000000000000..14b1e7a135fd817041b649de30e1950d113a1c08
--- /dev/null
+++ b/lib/Haanga/lib/Haanga/Extension/Filter/Alert.php
@@ -0,0 +1,18 @@
+<?php
+
+class Haanga_Extension_Filter_Alert
+{
+public $is_safe = TRUE;
+    static function generator($compiler, $args)
+    {
+        if (count($args) != 1) {
+            $compiler->Error("alert filter only needs one parameter");
+        }
+        $x = $args[0];
+        $pre = '<script type="text/javascript">alert("';
+        $post = '");</script>';
+        return hexec('html_entity_decode', 
+          hexec('preg_replace', '/$/', $post, 
+          	hexec('preg_replace', '/^/', $pre, $x)));
+    }
+}
diff --git a/lib/Haanga/lib/Haanga/Extension/Filter/D3ForceGraph.php b/lib/Haanga/lib/Haanga/Extension/Filter/D3ForceGraph.php
new file mode 100644
index 0000000000000000000000000000000000000000..a163702196058e9e191f4e34478e55bb4206db7b
--- /dev/null
+++ b/lib/Haanga/lib/Haanga/Extension/Filter/D3ForceGraph.php
@@ -0,0 +1,46 @@
+<?php
+
+class Haanga_Extension_Filter_D3ForceGraph{
+  public $is_safe = TRUE;
+  static function main($obj, $varname){
+
+  	$nodesArr = array();
+  	$n=0;
+  	$first="";
+  	$nodes = "";
+  	$links = "";
+  	$names = explode(",", $varname);
+  	if(count($names)==2){
+  	  foreach($obj as $k){
+  	  	if(!isset($nodesArr[$k->$names[0]->value])){
+  	  	  $nodesArr[$k->$names[0]->value] = $n++;
+  	  	  $nodes .= $first."{\"name\": \"".$k->$names[0]->value."\", \"group\": 1}";
+  	  	}
+  	  	if(!isset($nodesArr[$k->$names[1]->value])){
+  	  	  $nodesArr[$k->$names[1]->value] = $n++;
+  	  	  $nodes .= ",\n  {\"name\": \"".$k->$names[1]->value."\", \"group\": 1}";
+  	  	}
+  	  	$links .= $first."{\"source\": ".$nodesArr[$k->$names[0]->value].", \"target\": ".$nodesArr[$k->$names[1]->value].", \"value\": 10}";
+  	  	$first = ",\n  ";
+  	  } 
+  	}
+  	
+  	  	
+  	$json  ='{"nodes":['.$nodes.'],
+  	"links":['.$links.']}';
+  	
+  	
+  	$pre = '<script type="text/javascript" src="http://lodspeakr.org/extensions/haanga/filters/d3/js/d3.js"></script>
+  	<script type="text/javascript" src="http://lodspeakr.org/extensions/haanga/filters/d3/js/d3.layout.js"></script>
+  	<script type="text/javascript" src="http://lodspeakr.org/extensions/haanga/filters/d3/js/d3.geom.js"></script>
+  	<link href="http://lodspeakr.org/extensions/haanga/filters/d3/css/force.css" rel="stylesheet" type="text/css" />
+  	<script type="text/javascript">
+  	var url = "http://alvaro.graves.cl";
+  	var data = '.$json.';
+  	</script>';
+  	$post = '<div style="float: left;border-width: 1px; border-style: solid;" id="chart"></div>
+  	<script type="text/javascript" src="http://lodspeakr.org/extensions/haanga/filters/d3/js/force.js">
+  	</script>';
+  	return $pre.$post;
+  }
+}
diff --git a/lib/Haanga/lib/Haanga/Extension/Filter/Length.php b/lib/Haanga/lib/Haanga/Extension/Filter/Length.php
index eeeaafc485320e5b0e03b65d945f36ad304a9748..60d40594a35372024dca6706b63a68bcdb435356 100644
--- a/lib/Haanga/lib/Haanga/Extension/Filter/Length.php
+++ b/lib/Haanga/lib/Haanga/Extension/Filter/Length.php
@@ -7,6 +7,7 @@ class Haanga_Extension_Filter_Length
     {
         $count  = hexec('count', $args[0]);
         $strlen = hexec('strlen', $args[0]);
+        $props  = hexec('count', hexec('array_keys', hexec('get_object_vars', $args[0])));
         $guess  = hexpr_cond(hexec('is_array', $args[0]), hexec('count', $args[0]),
                             hexec('strlen', $args[0]));
 
@@ -19,7 +20,7 @@ class Haanga_Extension_Filter_Length
             } else if  (is_string($value)) {
                 return $strlen;
             } else if  (is_object($value)) {
-                return count(array_keys($value));
+                return $props;
             } else {
                 return $guess;
             }