diff --git a/.gitignore b/.gitignore
index 63f65d5f0b3c3d5f65471ce1e149d9381e95482a..5e1185029e392f14f451c3432676b5eb528c3d24 100644
--- a/.gitignore
+++ b/.gitignore
@@ -2,6 +2,8 @@ settings.inc.php
 *~
 views/*
 models/*
+components/*
+static/*
 cache/*
 meta/*
 meta/db.sqlite
diff --git a/classes/Utils.php b/classes/Utils.php
index 95baf1c35b208228abf4d8d076ddb569719f05dd..005f875e3cd23cd5bef1414e385fdabc418f6dcd 100644
--- a/classes/Utils.php
+++ b/classes/Utils.php
@@ -208,7 +208,7 @@ class Utils{
   	  $t = $parser->getTriples();
   	  $triples = array_merge($triples, $t);
   	}
-  	if($lodspk['add_mirrored_uris']){
+  	if($lodspk['mirror_external_uris']){
   	  global $uri;
   	  global $localUri;
   	  $t = array();
@@ -234,8 +234,14 @@ class Utils{
   	case 'rdf':
   	  $ser = ARC2::getRDFXMLSerializer();
   	  break;
+  	default:
+  	  $ser = null;
   	}
+  	if($ser != null){
   	$doc = $ser->getSerializedTriples($triples);
+  	}else{
+  	$doc = var_export($data, true);
+  	}
   	return $doc;
   }
   
@@ -288,29 +294,31 @@ class Utils{
   	  	  	$subDirs[]=$modelFile;
   	  	  }
   	  	}else{
-  	  	  $e = null;
-  	  	  if(!isset($endpoints[$strippedModelDir])){
-  	  	  	trigger_error("Creating endpoint for $strippedModelDir", E_USER_NOTICE);
-  	  	  	if(!isset($conf['endpoint'][$strippedModelDir])){
-  	  	  	  trigger_error("Couldn't find $strippedModelDir as a list of available endpoints. Will continue using local", E_USER_WARNING);
-  	  	  	  $e = $endpoints['local'];
-  	  	  	}else{  
-  	  	  	  $endpoints[$strippedModelDir] = new Endpoint($conf['endpoint'][$strippedModelDir], $conf['endpoint']['config']);
-  	  	  	  $e = $endpoints[$strippedModelDir];
-  	  	  	}
-  	  	  }else{
-  	  	  	$e = $endpoints[$strippedModelDir];
-  	  	  }
-  	  	  if($modelDir != $lodspk['type']){
-  	  	  	if(!isset($r[$strippedModelDir]) ){
-  	  	  	  $r[$strippedModelDir] = array();
-  	  	  	  $f[$strippedModelDir] = array();
-  	  	  	}
-  	  	  	Utils::queryFile($modelFile, $e, $r[$strippedModelDir], $f);
-  	  	  }else{
-  	  	  	Utils::queryFile($modelFile, $e, $r, $f);
+  	  	  if(preg_match('/\.query$/', $modelFile)){
+  	  	    $e = null;
+  	  	    if(!isset($endpoints[$strippedModelDir])){
+  	  	      trigger_error("Creating endpoint for $strippedModelDir", E_USER_NOTICE);
+  	  	      if(!isset($conf['endpoint'][$strippedModelDir])){
+  	  	        trigger_error("Couldn't find $strippedModelDir as a list of available endpoints. Will continue using local", E_USER_WARNING);
+  	  	        $e = $endpoints['local'];
+  	  	      }else{  
+  	  	        $endpoints[$strippedModelDir] = new Endpoint($conf['endpoint'][$strippedModelDir], $conf['endpoint']['config']);
+  	  	        $e = $endpoints[$strippedModelDir];
+  	  	      }
+  	  	    }else{
+  	  	      $e = $endpoints[$strippedModelDir];
+  	  	    }
+  	  	    if($modelDir != $lodspk['type']){
+  	  	      if(!isset($r[$strippedModelDir]) ){
+  	  	        $r[$strippedModelDir] = array();
+  	  	        $f[$strippedModelDir] = array();
+  	  	      }
+  	  	      Utils::queryFile($modelFile, $e, $r[$strippedModelDir], $f);
+  	  	    }else{
+  	  	      Utils::queryFile($modelFile, $e, $r, $f);
+  	  	    }
   	  	  }
- 	  	}
+ 	  	  }
   	  }
   	}
   	closedir($handle);
@@ -435,7 +443,8 @@ class Utils{
 	  	}
 	  }
   	  if($conf['debug']){
-  	  	echo "$modelFile (against ".$e->getSparqlUrl().")\n-------------------------------------------------\n";
+  	  	echo "\n-------------------------------------------------\nIn ".getcwd()."\n";
+  	    echo "$modelFile (against ".$e->getSparqlUrl().")\n-------------------------------------------------\n\n";
   	  	echo $query;
   	  }
   	  trigger_error("Running query from ".$modelFile." on endpoint ".$e->getSparqlURL(), E_USER_NOTICE);
diff --git a/classes/modules/serviceModule.php b/classes/modules/serviceModule.php
index 0e1a0200be752a8eb7c24d0af1616ddf6a0631a4..fc6879c471e61e08dba5ce71dda8492b44c38460 100644
--- a/classes/modules/serviceModule.php
+++ b/classes/modules/serviceModule.php
@@ -13,9 +13,22 @@ class ServiceModule extends abstractModule{
   	if(sizeof($qArr)==0){
   	  return FALSE;
   	}
+
+  	//Use .extension at the end of the service to force a particular content type
+  	if(strpos($qArr[0], '.')>0){
+  	  $aux = explode(".", $qArr[0]);
+  	  if(isset($aux[1])){
+  	    $contentTypes = $conf['http_accept'][$aux[1]];
+  	    if($contentTypes == null){
+  	      Utils::send406("Content type not acceptable\n");
+  	    }
+  	    $acceptContentType = $contentTypes[0];
+  	  }
+  	  $qArr[0] = $aux[0];
+  	}
+
   	$extension = Utils::getExtension($acceptContentType);
   	$viewFile  = null;
-  	
   	$lodspk['model'] = $conf['model']['directory'].'/'.$conf['service']['prefix'].'/'.$qArr[0].'/';
   	$lodspk['view'] = $conf['view']['directory'].'/'.$conf['service']['prefix'].'/'.$qArr[0].'/'.$extension.'.template';
   	$modelFile = $lodspk['model'].$extension.'.queries';
@@ -59,7 +72,7 @@ class ServiceModule extends abstractModule{
   	$params = array();
   	$params = $this->getParams($localUri);
   	//$params[] = $context;
-  	$acceptContentType = Utils::getBestContentType($_SERVER['HTTP_ACCEPT']);
+  	//$acceptContentType = Utils::getBestContentType($_SERVER['HTTP_ACCEPT']);
   	$extension = Utils::getExtension($acceptContentType); 
   	$args = array();
   	list($modelFile, $viewFile) = $service;
@@ -117,14 +130,16 @@ class ServiceModule extends abstractModule{
   	  Utils::queryFile($modelFile, $endpoints['local'], $results, $firstResults);
       if(!$lodspk['resultRdf']){
       	$results = Utils::internalize($results); 
-      	$lodspk['firstResults'] = Utils::getfirstResults($results);
+      	$firstAux = Utils::getfirstResults($results);
       	
     //  	chdir($conf['home']);
       	if(is_array($results)){
       	  $resultsObj = Convert::array_to_object($results);
+      	  $results = $resultsObj;
       	}else{
       	  $resultsObj = $results;
       	}
+      	$lodspk['firstResults'] = Convert::array_to_object($firstAux);
       }else{
       	$resultsObj = $results;
       }
diff --git a/classes/modules/typeModule.php b/classes/modules/typeModule.php
index 0eeae4a9a061ee7c714ecec66ae5888646d60aeb..b745db20e01524d961f7185fae1839153cd26d59 100644
--- a/classes/modules/typeModule.php
+++ b/classes/modules/typeModule.php
@@ -89,14 +89,16 @@ class TypeModule extends abstractModule{
   	Utils::queryFile($modelFile, $endpoints['local'], $results, $firstResults);
     if(!$lodspk['resultRdf']){
   	  $results = Utils::internalize($results); 
-  	  $lodspk['firstResults'] = Utils::getfirstResults($results);
+  	  $firstAux = Utils::getfirstResults($results);
   	  
   	  //chdir($conf['home']);
   	  if(is_array($results)){
   	  	$resultsObj = Convert::array_to_object($results);
+  	  	$results = $resultsObj;
   	  }else{
   	  	$resultsObj = $results;
   	  }
+  	  $lodspk['firstResults'] = Convert::array_to_object($firstAux);
   	}else{
   	  $resultsObj = $results;
   	}
diff --git a/classes/modules/uriModule.php b/classes/modules/uriModule.php
index 67d834a99da7d1a41c1827bcea2133854412606f..182c9aab7ac6e63589fb6b2af2a9bda691e6ee9a 100644
--- a/classes/modules/uriModule.php
+++ b/classes/modules/uriModule.php
@@ -104,14 +104,16 @@ class UriModule extends abstractModule{
   	Utils::queryFile($modelFile, $endpoints['local'], $results, $firstResults);
   	if(!$lodspk['resultRdf']){
   	  $results = Utils::internalize($results); 
-  	  $lodspk['firstResults'] = Utils::getfirstResults($results);
+  	  $firstAux = Utils::getfirstResults($results);
   	  
   	  chdir($conf['home']);
   	  if(is_array($results)){
   	  	$resultsObj = Convert::array_to_object($results);
+  	  	$results = $resultsObj;
   	  }else{
   	  	$resultsObj = $results;
   	  }
+  	  $lodspk['firstResults'] = Convert::array_to_object($firstAux);
   	}else{
   	  $resultsObj = $results;
   	}
diff --git a/common.inc.php b/common.inc.php
index 0c99dd1b4ff986e72c1c71867e2973383fb3b98b..db9883368320353dc71f4e10a0b937a4c66247ab 100644
--- a/common.inc.php
+++ b/common.inc.php
@@ -53,7 +53,7 @@ $conf['debug'] = false;
 $conf['modules'] = array();
 $conf['modules']['directory'] = 'classes/modules/';
 $conf['modules']['available'] = array('static','uri', 'type', 'service');
-
+global $lodspk;
 include_once('settings.inc.php');
 $conf['view']['standard']['baseUrl'] = $conf['basedir'];
 ?>
diff --git a/install.sh b/install.sh
index 08bdc17ee02e5ec432282b953edef50d3b35c918..e08428cf81c370cdd20d1b88f9fc0993596c2b67 100755
--- a/install.sh
+++ b/install.sh
@@ -1,6 +1,5 @@
 #!/usr/bin/env bash
 #
-#
 
 root_htaccess="root.htaccess"
 parent_htaccess="../.htaccess"
@@ -117,9 +116,10 @@ echo "RewriteEngine on" > $parent_htaccess
 echo >> $parent_htaccess
 echo "RewriteRule ^\$ $1/index.php [L]" >> $parent_htaccess
 cat $root_htaccess >> $parent_htaccess
-echo "RewriteRule ^(.+)\$ $lodspeakr_dir/index.php?q=\$1 [L]" >> $parent_htaccess
+echo "RewriteRule ^(.+)\$ $1/index.php?q=\$1 [L]" >> $parent_htaccess
 mkdir cache
 
+
 echo
 echo "                                      *** ATTENTION ***"
 echo
diff --git a/lib/Haanga/lib/Haanga/Extension/Filter/Date.php b/lib/Haanga/lib/Haanga/Extension/Filter/Date.php
index b60b299e17a592dff1ca31d6dd9049961b53848b..b15bdc981df8815d764c2961081f4a638865ee7c 100644
--- a/lib/Haanga/lib/Haanga/Extension/Filter/Date.php
+++ b/lib/Haanga/lib/Haanga/Extension/Filter/Date.php
@@ -4,7 +4,8 @@ class Haanga_Extension_Filter_Date
 {
     static function generator($compiler, $args)
     {
-        return hexec('date', $args[1], $args[0]);
+//        return hexec( 'date', $args[1], hexec('strtotime', $args[1]));
+        return hexec('date', $args[1], hexec('strtotime', $args[0]));
     }
 }
     
diff --git a/lib/Haanga/lib/Haanga/Extension/Filter/Urifragment.php b/lib/Haanga/lib/Haanga/Extension/Filter/Urifragment.php
new file mode 100644
index 0000000000000000000000000000000000000000..72e5ffb13bb6db8a02ac086fa9bef2b43fcea8d9
--- /dev/null
+++ b/lib/Haanga/lib/Haanga/Extension/Filter/Urifragment.php
@@ -0,0 +1,13 @@
+<?php
+
+class Haanga_Extension_Filter_Urifragment
+{
+    static function generator($compiler, $args)
+    {
+        if (count($args) != 1) {
+            $compiler->Error("URIFragment only needs one parameter");
+        }
+
+        return hexec('array_pop', hexec('split', '#', $args[0]));
+    }
+}
diff --git a/lib/Haanga/lib/Haanga/Extension/Tag/Escape.php b/lib/Haanga/lib/Haanga/Extension/Tag/Escape.php
new file mode 100644
index 0000000000000000000000000000000000000000..e4e4a0107114a8a25c7d6ab33abaa7fe5093fe4d
--- /dev/null
+++ b/lib/Haanga/lib/Haanga/Extension/Tag/Escape.php
@@ -0,0 +1,7 @@
+<?php
+
+class Haanga_Extension_Tag_Escape
+{
+  public static $is_block  = TRUE;
+  public $php_alias = "htmlspecialchars";
+}
diff --git a/utils/create_db.sh b/utils/create_db.sh
index 285062c2c4a538399e2bde10b7a66bf33006b6df..f0226b38b568f43b1f318d12676d945d028131b5 100755
--- a/utils/create_db.sh
+++ b/utils/create_db.sh
@@ -14,6 +14,9 @@ if [ ! -e $1 ]; then
   	exit 1
   fi
   $SQLITE3 $1 'CREATE TABLE document (uri varcharg(1000), doc varchar(1000), format varchar(50));'
+  $SQLITE3 $1 'CREATE INDEX IF NOT EXISTS document_uri ON document(uri);'
+  $SQLITE3 $1 'CREATE INDEX IF NOT EXISTS document_uri_format ON document(uri, format);'
+  $SQLITE3 $1 'CREATE INDEX IF NOT EXISTS document_doc ON document(doc);'
 else
   echo "WARNING: SQLite database already exists."
 fi
diff --git a/utils/install b/utils/install
index cd12408b6843c23d73ea9e2cc6b07cf7fe857671..c0bd38ef5aacbd057e281ab1498a23a9bdb404c8 100644
--- a/utils/install
+++ b/utils/install
@@ -8,7 +8,6 @@
 #    http://lodspeakr.org/install 
 #       303 redirects to this script.
 
-lodspeakr_dir="lodspeakr"
 lodspeakr_repository="git://github.com/alangrafu/lodspeakr.git"
 home=`basename $lodspeakr_repository | sed 's/.git//'`
 
@@ -23,7 +22,7 @@ fi
 if [ ! -e "$home" ]; then
    $GIT clone $lodspeakr_repository
    cd $home
-   ./install.sh $lodspeakr_dir
+   ./install.sh $home
  else
    echo "There is already an existing directory called '$home'. Installation cancelled. Remove it first and try again."
 fi
diff --git a/utils/modules/create-service.sh b/utils/modules/create-service.sh
index fc40600107b8bbb04fcb9218040bc9b59e1769f8..8c52a9bbc8494f9cefdaa5489088627968b62433 100755
--- a/utils/modules/create-service.sh
+++ b/utils/modules/create-service.sh
@@ -46,7 +46,7 @@ else
   mkdir -p $mainDir/queries
 fi
 
-echo $modelHtml > $mainDir/queries/main.query
-echo $viewHtml > $mainDir/html.template
+echo -e "$modelHtml" > $mainDir/queries/main.query
+echo -e "$viewHtml" > $mainDir/html.template
 
 echo $initToken.$1 created/modified successfully! >&2
diff --git a/utils/modules/create-type.sh b/utils/modules/create-type.sh
index 4e1b37708f490f0c71a98f182a178a7701edec7a..379e2fe048ca3880addab878db4180274e1bc42f 100755
--- a/utils/modules/create-type.sh
+++ b/utils/modules/create-type.sh
@@ -81,7 +81,8 @@ viewHtml=`cat <<VIEW
     
     <br/>
   </body>
-</html>VIEW`
+</html>
+VIEW`
 
 
 #Check models
@@ -94,8 +95,8 @@ else
   mkdir -p $mainDir/queries
 fi
 
-echo "$modelHtmlSP" > $mainDir/queries/sp.query
-echo "$modelHtmlPO" > $mainDir/queries/po.query
-echo "$viewHtml" > $mainDir/html.template
+echo -e "$modelHtmlSP" > $mainDir/queries/sp.query
+echo -e "$modelHtmlPO" > $mainDir/queries/po.query
+echo -e "$viewHtml" > $mainDir/html.template
 
 echo $1 created successfully! >&2
diff --git a/utils/modules/create-uri.sh b/utils/modules/create-uri.sh
index f14405f3ad012b994094a41a6aedc0bfff94fce8..ae7380fb6334303ffd53a5ec2925d4270f9bde42 100755
--- a/utils/modules/create-uri.sh
+++ b/utils/modules/create-uri.sh
@@ -92,14 +92,14 @@ if [ -e "$mainDir" ]
 then
   echo "WARNING: At least one model for $1 exists." >&2
 else
-  mkdir $mainDir
+  mkdir -p $mainDir
 fi
 
 #Create  file structure
 
 mkdir $mainDir/queries
-echo "$modelHtmlSP" > $mainDir/queries/sp.query
-echo "$modelHtmlPO" > $mainDir/queries/po.query
-echo "$viewHtml" > $mainDir/html.template
+echo -e "$modelHtmlSP" > $mainDir/queries/sp.query
+echo -e "$modelHtmlPO" > $mainDir/queries/po.query
+echo -e "$viewHtml" > $mainDir/html.template
 
 echo $initToken.$1 created/modified successfully! >&2
diff --git a/utils/modules/delete-type.sh b/utils/modules/delete-type.sh
index c934f7e7e41c6c403d48b3a819046409005e09e5..9cddaf897898a3b5d7eb095244fc5ee679da786f 100755
--- a/utils/modules/delete-type.sh
+++ b/utils/modules/delete-type.sh
@@ -2,67 +2,19 @@
 
 DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
 
-initToken='type'
+initToken='types'
 
 
 #Check models
-mainModelDir=$DIR/../../models/$initToken.$1
-mainViewDir=$DIR/../../views/$initToken.$1
+mainDir=$DIR/../../components/$initToken/$1
 
-if [ ! -e "$mainModelDir" ]
+if [ ! -e "$mainDir" ]
 then
-  echo "ERROR: $initToken.$1 doesn't exist in models. Operation aborted" >&2
+  echo "ERROR: $initToken/$1 doesn't exist in models. Operation aborted" >&2
   exit 1
 fi
 
-obj=( )
-if [ "$2" == "all" ]
-then
-  rm -rf $mainModelDir
-  rm -rf $mainViewDir
-  echo $initToken.$1 deleted >&2
-  exit
-else
-  obj=( $2 )
-fi
-
-for i in ${obj[@]}
-do
-  if [ ! -e $mainModelDir/$i.queries ]
-  then
-    echo "WARNING: $initToken.$1/$i.query does not exists in models." >&2
-  fi
-done
-
-
-#Check views
-
-if [ ! -e "$mainViewDir" ]
-then
-  echo "ERROR: $initToken.$1 doesn't exist in views. Operation aborted." >&2
-fi
-
-
-for i in ${obj[@]}
-do
-  if [ ! -e $mainViewDir/$i.template ]
-  then
-    echo "WARNING: $mainViewDir/$i.template doesn't exist in views." >&2
-  fi
-done
-
-
 #Delete  file structure
 
-if [ "$2" == "all" ]
-then
-  rm -rf $mainModelDir
-  rm -rf $mainViewDir
-else
-  for i in ${obj[@]}
-  do
-    rm -rf  $mainModelDir/$i.queries
-    rm -rf  $mainViewDir/$i.template   
-  done
-fi
+rm -rf $mainDir
 echo $initToken.$1 deleted successfully! >&2