diff --git a/classes/BasicSpecialFunction.php b/classes/BasicSpecialFunction.php
index e87f2c97c553a833042ee73c370bf5f733a46e9d..fe5daa22f6042768f1555b8f6c191fa2661bfc2a 100644
--- a/classes/BasicSpecialFunction.php
+++ b/classes/BasicSpecialFunction.php
@@ -6,7 +6,7 @@ class SpecialFunction extends AbstractSpecialFunction{
   protected function getFunction($uri){
   	global $conf;
   	$count = 1;
-  	$prefixUri = $conf['basedir'].$conf['special']['uri']."/";
+  	$prefixUri = $conf['basedir'];
   	$aux = str_replace($prefixUri, '', $uri, $count);
   	$functionAndParams = explode('/', $aux);
   	return $functionAndParams[0];
@@ -15,7 +15,7 @@ class SpecialFunction extends AbstractSpecialFunction{
   protected function getParams($uri){
   	global $conf;
   	$count = 1;
-  	$prefixUri = $conf['basedir'].$conf['special']['uri'];
+  	$prefixUri = $conf['basedir'];
   	$functionAndParams = explode('/', str_replace($prefixUri, '', $uri, $count));
   	if(sizeof($functionAndParams) > 1){
   	  array_shift($functionAndParams);
@@ -33,15 +33,15 @@ class SpecialFunction extends AbstractSpecialFunction{
   	$f = $this->getFunction($uri);
   	$params = array();
   	$params = $this->getParams($uri);
-  	$params[] = $context;
+  	//$params[] = $context;
   	$acceptContentType = Utils::getBestContentType($_SERVER['HTTP_ACCEPT']);
   	$extension = Utils::getExtension($acceptContentType); 
   	$args = array();
   	try{
-  	  $viewFile = $conf['special']['uri'].".".$f.$conf['view']['extension'].".".$extension;
-  	  $modelFile = $conf['special']['uri'].".".$f.$conf['model']['extension'].".".$extension;
+  	  $viewFile = $conf['service']['prefix'].$f."/".$extension.".template";
+  	  $modelFile = $conf['service']['prefix'].$f."/".$extension.".queries";
   	  if(!(is_dir($conf['model']['directory'].$modelFile) || is_file($conf['model']['directory'].$modelFile))){
-  	  	$msg = '<h1>Method does not exist!</h1><br/>This means that <tt>'.$conf['model']['directory'].$modelFile."</tt> doesn't exist.<br/>Please refer to this tutorial to create one.<br/>";
+  	  	$msg = '<h1>Method does not exist!</h1><br/>This means that <tt>'.$modelFile."</tt> doesn't exist.<br/>Please refer to this tutorial to create one.<br/>";
   	  	throw new Exception($msg);
   	  }
   	  if(!is_file($conf['view']['directory'].$viewFile)){
@@ -49,10 +49,11 @@ class SpecialFunction extends AbstractSpecialFunction{
   	  	  throw new Exception($msg);
   	  }
   	  $endpoints = $context['endpoints'];
-  	  array_pop($params);
-  	  array_shift($params);
+  	  //array_pop($params);
+  	  //array_shift($params);
   	  
   	  $prefixHeader = array();
+
   	  for($i=0;$i<sizeof($params);$i++){
   	  	if($conf['mirror_external_uris']){
   	  	  $altUri = Utils::curie2uri($params[$i]);
@@ -60,14 +61,15 @@ class SpecialFunction extends AbstractSpecialFunction{
   	  	  $params[$i] = Utils::uri2curie($altUri);
   	  	}
   	  }
-  	  
-  	  for($i=0;$i<sizeof($params);$i++){  	  	
+
+  	  for($i=0;$i<sizeof($params);$i++){  
   	  	$auxPrefix = Utils::getPrefix($params[$i]);
   	  	if($auxPrefix['ns'] != NULL){
   	  	  $prefixHeader[] = $auxPrefix;
   	  	}
   	  	$args["arg".$i]=$params[$i];
   	  }
+  	  
  	  $results['params'] = $params;
  	  $base = $conf['view']['standard'];
  	  $base['type'] = $modelFile;
@@ -86,11 +88,10 @@ class SpecialFunction extends AbstractSpecialFunction{
   	  $base['baseUrl'] = $conf['basedir'];
   	  $base['this']['value'] = $uri;
   	  $base['this']['contentType'] = $acceptContentType;
-  	  $base['view']['directory'] = $conf['home'].$conf['view']['directory'];
+  	  $base['view']['directory'] = $conf['home'].$conf['view']['directory'].$conf['service']['prefix'].$f.'/';
   	  $base['model']['directory'] = $conf['home'].$conf['model']['directory'];
   	  chdir($conf['model']['directory']);
   	  $first = array();
-  	  $results = array();
   	  Utils::queryFile($modelFile, $endpoints['local'], $results, $first);
   	  chdir($conf['home']);
   	  $results = Utils::internalize($results);
@@ -98,7 +99,11 @@ class SpecialFunction extends AbstractSpecialFunction{
   	  if(is_array($results)){
   	  	$results = Convert::array_to_object($results);
   	  }
-  	  Utils::processDocument($viewFile, $base, $results);  	
+  	  
+  	  //Need to redefine viewFile as 'local' i.e., inside service.foo/ so I can load files with the relative path correctly
+  	  $viewFile = $extension.".template";
+  	  Utils::processDocument($viewFile, $base, $results);  
+  	  
   	}catch (Exception $ex){
   	  echo $ex->getMessage();
   	  trigger_error($ex->getMessage(), E_ERROR);
diff --git a/classes/Utils.php b/classes/Utils.php
index 2c7581fd54bca5b4accc910fee429ab5075d4802..7e49e97b9c2e396641cecf5507553c677f2342b1 100644
--- a/classes/Utils.php
+++ b/classes/Utils.php
@@ -18,7 +18,7 @@ class Utils{
   
   public static function send406($uri){
   	header("HTTP/1.0 406 Not Acceptable");
-  	echo "I can't find a representation suitable for the content type you accept\n\n";
+  	echo "LODSPeaKr can't find a representation suitable for the content type you accept\n\n";
   	exit(0);
   }
   
@@ -287,7 +287,8 @@ class Utils{
   	global $first;
   	$uri = $base['this']['value'];
   	$data = array();
-  	
+  	$strippedModelFile = str_replace('.query', '',$modelFile); 	  
+
   	
  	if(!is_dir($modelFile)){
   	  require_once($conf['home'].'lib/Haanga/lib/Haanga.php');
@@ -315,25 +316,25 @@ class Utils{
   	  	echo $query;
   	  }
   	  trigger_error("Running query on endpoint", E_USER_NOTICE);
-  	  $aux = $e->query($query, Utils::getResultsType($query));  	  
+  	  $aux = $e->query($query, Utils::getResultsType($query)); 
   	  if($modelFile != $base['type']){
-  	  	if(!isset($rPointer[$modelFile])){
-  	  	  $rPointer[$modelFile] = array();
-  	  	  $first[$modelFile] = array();
+  	  	if(!isset($rPointer[$strippedModelFile])){
+  	  	  $rPointer[$strippedModelFile] = array();
+  	  	  $first[$strippedModelFile] = array();
   	  	}
   	  	if(Utils::getResultsType($query) == $conf['output']['select']){
-  	  	  $rPointer[$modelFile] = Utils::sparqlResult2Obj($aux);
-  	  	  $fPointer[$modelFile] = $rPointer[$modelFile][0];
+  	  	  $rPointer[$strippedModelFile] = Utils::sparqlResult2Obj($aux);
+  	  	  $fPointer[$strippedModelFile] = $rPointer[$strippedModelFile][0];
   	  	  /*if(sizeof($rPointer)>0){
   	  	  $rPointer[$modelFile]['first'] = $rPointer[$modelFile][0];
   	  	  }*/
   	  	}else{
-  	  	  $rPointer[$modelFile] = $aux;
+  	  	  $rPointer[$strippedModelFile] = $aux;
   	  	}
   	  }else{
   	  	if(Utils::getResultsType($query) == $conf['output']['select']){
   	  	  $rPointer = Utils::sparqlResult2Obj($aux);
-  	  	  $fPointer[$modelFile] = $rPointer[0];
+  	  	  $fPointer[$strippedModelFile] = $rPointer[0];
   	  	  /*if(sizeof($rPointer)>0){
   	  	  $rPointer['first'] = $rPointer[0];
   	  	  }*/
@@ -342,12 +343,12 @@ class Utils{
   	  	}  	 
   	  }
   	}else{
-  	  trigger_error("$modelFile is a directory, will process it later", E_USER_NOTICE);  	  
+  	  trigger_error("$modelFile is a directory, will process it later", E_USER_NOTICE);
   	  if($modelFile != $base['type']){
-  	  	if(!isset($rPointer[$modelFile])){
-  	  	  $rPointer[$modelFile] = array();
+  	  	if(!isset($rPointer[$strippedModelFile])){
+  	  	  $rPointer[$strippedModelFile] = array();
   	  	}
-  	  	Utils::queryDir($modelFile, $rPointer[$modelFile], $fPointer[$modelFile]);
+  	  	Utils::queryDir($modelFile, $rPointer[$strippedModelFile], $fPointer[$strippedModelFile]);
   	  }else{
   	  	Utils::queryDir($modelFile, $rPointer, $fPointer);
   	  }
@@ -420,40 +421,7 @@ class Utils{
   	
   }
   
-  public static function getModelandView($t, $extension){  	
-  	global $conf;
-  	//Defining default views and models
-  	$curieType="";
-  	$modelFile = $conf['model']['default'].$conf['model']['extension'].".".$extension;
-  	$viewFile = $conf['view']['default'].$conf['view']['extension'].".".$extension;
-  	
-  	//Get the first class available
-  	/* TODO: Allow user to priotize 
-  	* which class should be used
-  	* Example: URI is foaf:Person and ex:Student
-  	*          If both, prefer ex:Student
-  	*/
-  	$typesAndValues = array();
-  	foreach($t as $v){
-  	  $curie = Utils::uri2curie($v);
-  	  $typesAndValues[$curie] = 0;
-  	  if(isset($conf['types']['priorities'][$curie]) && $conf['types']['priorities'][$curie] >= 0){
-  	  	$typesAndValues[$curie] = $conf['types']['priorities'][$curie];
-  	  }
-  	}
-  	arsort($typesAndValues);
-  	foreach($typesAndValues as $v => $w){
-  	  $auxViewFile  = $conf['view']['directory'].$v.$conf['view']['extension'].".".$extension;
-  	  $auxModelFile = $conf['model']['directory'].$v.$conf['model']['extension'].".".$extension;
-  	  if(file_exists($auxModelFile) && file_exists($auxViewFile) && $v != null){
-  	  	$viewFile = $v.$conf['view']['extension'].".".$extension;
-  	  	$modelFile = $v.$conf['model']['extension'].".".$extension;
-  	  	break;
-  	  }
-  	}
-  	return array($modelFile, $viewFile);
-  }
-  
+    
 }
 
 ?>
diff --git a/common.inc.php b/common.inc.php
index 5f443ea60be8a22eb0b4b75cf1848d00db45594d..c4e9256411a473b05500a84eedff6e2af9b59a57 100644
--- a/common.inc.php
+++ b/common.inc.php
@@ -32,8 +32,11 @@ $conf['http_accept']['json'] = array('application/json', 'application/x-javascri
 $conf['http_accept']['nt']   = array('text/plain');
 
 
-$conf['special']['uri'] = 'special';
-$conf['special']['class'] = 'classes/BasicSpecialFunction.php';
+$conf['service']['prefix'] = 'service.';
+$conf['service']['class'] = 'classes/BasicSpecialFunction.php';
+
+$conf['class']['prefix'] = 'class.';
+$conf['uri']['prefix'] = 'uri.';
 
 //Frontpage when user goes to http://example.org/
 $conf['root'] = 'index.html';
@@ -45,6 +48,11 @@ $conf['types']['priorities']['rdfs:Resource'] = -1;
 //Debug
 $conf['debug'] = false;
 
+//Modules: LODSPeaKr will try to match the requested URI
+//using the modules in the following order
+$conf['modules'] = array();
+$conf['modules']['directory'] = 'modules/';
+$conf['modules']['available'] = array('static','uri', 'class', 'service');
 
 include_once('settings.inc.php');
 $conf['view']['standard']['baseUrl'] = $conf['basedir'];
diff --git a/index.php b/index.php
index 577d3a83e5d78bc7aef666291fefc3da08990317..7bd8b7fc1fcb446a7347d0fa4b3a20fa89138cbe 100755
--- a/index.php
+++ b/index.php
@@ -22,29 +22,25 @@ if($conf['debug']){
   error_reporting(E_ERROR);
 }
 
-
-
 include_once('classes/Utils.php');
 include_once('classes/Queries.php');
 include_once('classes/Endpoint.php');
-include_once('classes/MetaDb.php');
 include_once('classes/Convert.php');
 $results = array();
 $first = array();
 $endpoints = array();
 $endpoints['local'] = new Endpoint($conf['endpoint']['local'], $conf['endpointParams']['config']);
-$metaDb = new MetaDb($conf['metadata']['db']['location']);
 
 $acceptContentType = Utils::getBestContentType($_SERVER['HTTP_ACCEPT']);
 $extension = Utils::getExtension($acceptContentType); 
 
+
+//Check content type is supported by LODSPeaKr
 if($acceptContentType == NULL){
   Utils::send406($uri);
 }
-if(sizeof($_GET['q'])>0 && file_exists($conf['static']['directory'].$_GET['q'])){
-  echo file_get_contents($conf['static']['directory'].$_GET['q']);
-  exit(0);
-}
+
+//Export
 if($conf['export'] && $_GET['q'] == 'export'){
   include_once('settings.inc.php');
   include_once('classes/Exporter.php');
@@ -54,87 +50,37 @@ if($conf['export'] && $_GET['q'] == 'export'){
   exit(0);
 }
 
-
+//Redirect to root URL if necessary
 $uri = $conf['basedir'].$_GET['q'];
 $localUri = $uri;
 if($uri == $conf['basedir']){
   header('Location: '.$conf['root']);
   exit(0);
-}elseif(preg_match("|^".$conf['basedir'].$conf['special']['uri']."|", $uri)){
-  include_once($conf['special']['class']);
-  $context = array();
-  $context['contentType'] = $acceptContentType;
-  $context['endpoints'] = $endpoints;
-  $sp = new SpecialFunction();
-  $sp->execute($uri, $context);
-  exit(0);
 }
+
+//Configure external URIs if necessary
 if($conf['mirror_external_uris']){
   $uri = $conf['ns']['local'].$_GET['q'];
   $localUri = $conf['basedir'].$_GET['q'];
-} 
-
-$pair = Queries::getMetadata($localUri, $acceptContentType, $metaDb);
-
-if($pair == NULL){ // Original URI is not in metadata
-  if(Queries::uriExist($uri, $endpoints['local'])){
-  	$page = Queries::createPage($uri, $localUri, $acceptContentType, $metaDb);
-  	if($page == NULL){
-  	  Utils::send500(NULL);
-  	}
-  	Utils::send303($page, $acceptContentType);
-  }else{
-  	Utils::send404($uri);
-  }
-}
-list($res, $page, $format) = $pair;
-
-//If resource is not the page, send a 303 to the document
-if($res == $localUri){
-  Utils::send303($page, $acceptContentType);
-}
-
-$uri = $res;
-if($conf['mirror_external_uris']){
-  $localUri = preg_replace("|^".$conf['ns']['local']."|", $conf['basedir'], $res);
 }
-$extension = Utils::getExtension($format); 
-
-/*Redefine Content type based on the
-* dcterms:format for this page
-*/
-$acceptContentType = $format;
-
-//Check if files for model and view exist
-$t=Queries::getClass($uri, $endpoints['local']);
-
-list($modelFile, $viewFile) = Utils::getModelandView($t, $extension);
 
-$base = $conf['view']['standard'];
-$base['type'] = $modelFile;
-$base['this']['value'] = $uri;
-$base['this']['curie'] = Utils::uri2curie($uri);
-$base['thislocal']['value'] = $localUri;
-$base['thislocal']['curie'] = Utils::uri2curie($localUri);
 
-$base['this']['contentType'] = $acceptContentType;
-$base['model']['directory'] = $conf['model']['directory'];
-$base['view']['directory'] = $conf['view']['directory'];
-$base['ns'] = $conf['ns'];
-
-
-chdir($conf['model']['directory']);
-
-Utils::queryFile($modelFile, $endpoints['local'], $results, $first);
-$results = Utils::internalize($results); 
-$base['first'] = Utils::getFirsts($results);
-chdir($conf['home']);
-if(is_array($results)){
-  $resultsObj = Convert::array_to_object($results);
-}else{
-  $resultsObj = $results;
+//Modules
+foreach($conf['modules']['available'] as $i){
+  $className = $i.'Module';
+  $currentModule = $conf['modules']['directory'].$className.'.php';
+  if(!is_file($currentModule)){
+  	Utils::send500("<br/>Can't load or error in module <tt>".$currentModule."</tt>" );
+  	exit(1);
+  }
+  require_once($currentModule);
+  $module = new $className();
+  $matching = $module->match($uri) ;
+  if($matching != FALSE){
+  	$module->execute($matching);
+  	exit(0);
+  }
 }
-Utils::processDocument($viewFile, $base, $resultsObj);
-//}
 
+Utils::send404($uri);
 ?>
diff --git a/models/class.rdfs:Resource/html.queries/main.query b/models/class.rdfs:Resource/html.queries/main.query
new file mode 100644
index 0000000000000000000000000000000000000000..107b0b99b6106b2b56b3292423c6824477325017
--- /dev/null
+++ b/models/class.rdfs:Resource/html.queries/main.query
@@ -0,0 +1,7 @@
+SELECT ?s2 ?p2 ?s1 ?p1  WHERE {
+        {
+                <{{uri}}> ?s1 ?p1 .
+        }UNION{
+                ?s2 ?p2 <{{uri}}> .
+        }
+}
diff --git a/models/class.rdfs:Resource/json.queries/main.query b/models/class.rdfs:Resource/json.queries/main.query
new file mode 100644
index 0000000000000000000000000000000000000000..fbb7078a7f79be8481dba37143d62038ef36366d
--- /dev/null
+++ b/models/class.rdfs:Resource/json.queries/main.query
@@ -0,0 +1,3 @@
+DESCRIBE ?resource WHERE {
+  	[] a ?resource .
+}
diff --git a/models/class.rdfs:Resource/nt.queries/main.query b/models/class.rdfs:Resource/nt.queries/main.query
new file mode 100644
index 0000000000000000000000000000000000000000..fbb7078a7f79be8481dba37143d62038ef36366d
--- /dev/null
+++ b/models/class.rdfs:Resource/nt.queries/main.query
@@ -0,0 +1,3 @@
+DESCRIBE ?resource WHERE {
+  	[] a ?resource .
+}
diff --git a/models/class.rdfs:Resource/rdf.queries/main.query b/models/class.rdfs:Resource/rdf.queries/main.query
new file mode 100644
index 0000000000000000000000000000000000000000..fbb7078a7f79be8481dba37143d62038ef36366d
--- /dev/null
+++ b/models/class.rdfs:Resource/rdf.queries/main.query
@@ -0,0 +1,3 @@
+DESCRIBE ?resource WHERE {
+  	[] a ?resource .
+}
diff --git a/models/class.rdfs:Resource/ttl.queries/main.query b/models/class.rdfs:Resource/ttl.queries/main.query
new file mode 100644
index 0000000000000000000000000000000000000000..fbb7078a7f79be8481dba37143d62038ef36366d
--- /dev/null
+++ b/models/class.rdfs:Resource/ttl.queries/main.query
@@ -0,0 +1,3 @@
+DESCRIBE ?resource WHERE {
+  	[] a ?resource .
+}
diff --git a/models/rdfs:Resource.model.html b/models/rdfs:Resource.model.html
deleted file mode 100644
index 5e8f44e2f6e46c5d1bb4858707c27526d1b5e405..0000000000000000000000000000000000000000
--- a/models/rdfs:Resource.model.html
+++ /dev/null
@@ -1,8 +0,0 @@
-SELECT ?s2 ?p2 ?s1 ?p1  WHERE {
-	{
-		<{{uri}}> ?s1 ?p1 .
-	}UNION{
-		?s2 ?p2 <{{uri}}> .
-	}
-}
-
diff --git a/models/rdfs:Resource.model.rdf b/models/rdfs:Resource.model.rdf
deleted file mode 100644
index 61df9dc82ae823fb1ebafe746788f4ebecb6f20c..0000000000000000000000000000000000000000
--- a/models/rdfs:Resource.model.rdf
+++ /dev/null
@@ -1 +0,0 @@
-DESCRIBE <{{uri}}>
diff --git a/models/special.classes.model.html b/models/service.classes/html.queries/main.query
similarity index 100%
rename from models/special.classes.model.html
rename to models/service.classes/html.queries/main.query
diff --git a/models/special.instances.model.html b/models/service.instances/html.queries/main.query
similarity index 51%
rename from models/special.instances.model.html
rename to models/service.instances/html.queries/main.query
index d7de13cc16c4e8ec8619293db9b4a9cf8a1a76fb..c5a3510267a2bd0da1fcdb78870c4aec09c1f0f2 100644
--- a/models/special.instances.model.html
+++ b/models/service.instances/html.queries/main.query
@@ -1,6 +1,6 @@
 {%for h in base.header %}
-PREFIX {{h.prefix}}: <{{h.ns}}> 
+PREFIX {{h.prefix}}: <{{h.ns}}>
 {%endfor%}
 SELECT DISTINCT ?resource WHERE {
-  	?resource a {{base.args.arg0}} .
+  ?resource a {{base.args.arg0}}
 }
diff --git a/models/special.namedGraphs.model.html b/models/service.namedGraphs/html.queries/main.query
similarity index 68%
rename from models/special.namedGraphs.model.html
rename to models/service.namedGraphs/html.queries/main.query
index b73ae66e3f2a16aed3d8342b2b913e4984f7885a..3c0f060c416a4a36a8ecc8d21ad23581ab05f660 100644
--- a/models/special.namedGraphs.model.html
+++ b/models/service.namedGraphs/html.queries/main.query
@@ -1,5 +1,5 @@
 SELECT DISTINCT ?g WHERE {
   GRAPH ?g{
-  	?s ?p ?o .
+  	[] ?p ?resource .
   }
 }
diff --git a/modules/abstractModule.php b/modules/abstractModule.php
new file mode 100644
index 0000000000000000000000000000000000000000..a9169d452dc2b32ea13f86498fc9f306dab7aed7
--- /dev/null
+++ b/modules/abstractModule.php
@@ -0,0 +1,9 @@
+<?
+abstract class AbstractModule{
+  
+  abstract protected function match($uri);
+  abstract protected function execute($params);
+
+}
+
+?>
diff --git a/modules/classModule.php b/modules/classModule.php
new file mode 100644
index 0000000000000000000000000000000000000000..66ae43d9f7415738af93833fb2461caad8195ee7
--- /dev/null
+++ b/modules/classModule.php
@@ -0,0 +1,126 @@
+<?
+require_once('abstractModule.php');
+class ClassModule extends abstractModule{
+  //Class module
+  
+  public function match($uri){
+  	global $conf;
+  	global $localUri;
+  	global $uri;
+  	global $acceptContentType;
+  	global $endpoints;
+  	global $base;
+  	
+  	require_once('classes/MetaDb.php');
+  	$metaDb = new MetaDb($conf['metadata']['db']['location']);
+  	
+  	$pair = Queries::getMetadata($localUri, $acceptContentType, $metaDb);
+  	
+  	if($pair == NULL){ // Original URI is not in metadata
+  	  if(Queries::uriExist($uri, $endpoints['local'])){
+  	  	$page = Queries::createPage($uri, $localUri, $acceptContentType, $metaDb);
+  	  	if($page == NULL){
+  	  	  Utils::send500("Can't write sqlite database.");
+  	  	}
+  	  	Utils::send303($page, $acceptContentType);
+  	  	exit(0);
+  	  }else{
+  	  	return false; //Utils::send404($uri);
+  	  }
+  	}
+  	return $pair;
+  }
+  
+  public function execute($pair){
+  	global $conf;
+  	global $localUri;
+  	global $uri;
+  	global $acceptContentType;
+  	global $endpoints;
+  	global $base;
+  	global $results;
+  	global $first;
+  	list($res, $page, $format) = $pair;
+  	//If resource is not the page, send a 303 to the document
+  	if($res == $localUri){
+  	  Utils::send303($page, $acceptContentType);
+  	}
+  	
+  	$uri = $res;
+  	if($conf['mirror_external_uris']){
+  	  $localUri = preg_replace("|^".$conf['ns']['local']."|", $conf['basedir'], $res);
+  	}
+
+  	$extension = Utils::getExtension($format); 
+  	
+  	/*Redefine Content type based on the
+  	* dcterms:format for this page
+  	*/
+  	$acceptContentType = $format;
+  	
+  	//Check if files for model and view exist
+  	$t=Queries::getClass($uri, $endpoints['local']);
+  	
+  	list($modelFile, $viewFile) = $this::getModelandView($t, $extension);
+  	$base = $conf['view']['standard'];
+  	$base['type'] = $modelFile;
+  	$base['this']['value'] = $uri;
+  	$base['this']['curie'] = Utils::uri2curie($uri);
+  	$base['thislocal']['value'] = $localUri;
+  	$base['thislocal']['curie'] = Utils::uri2curie($localUri);
+  	
+  	$base['this']['contentType'] = $acceptContentType;
+  	$base['model']['directory'] = $conf['model']['directory'];
+  	$base['view']['directory'] = $conf['view']['directory'];
+  	$base['ns'] = $conf['ns'];
+  	
+  	
+  	chdir($conf['home'].$conf['model']['directory']);
+  	
+  	Utils::queryFile($modelFile, $endpoints['local'], $results, $first);
+  	$results = Utils::internalize($results); 
+
+  	$base['first'] = Utils::getFirsts($results);
+  	chdir($conf['home']);
+  	if(is_array($results)){
+  	  $resultsObj = Convert::array_to_object($results);
+  	}else{
+  	  $resultsObj = $results;
+  	}
+  	Utils::processDocument($viewFile, $base, $resultsObj);
+  	
+  }
+  
+  private static function getModelandView($t, $extension){  	
+  	global $conf;
+  	global $results;
+  	global $rPointer;
+  	//Defining default views and models
+  	$curieType="";
+  	$modelFile = 'class.rdfs:Resource/'.$extension.'.queries';
+  	$viewFile = 'class.rdfs:Resource/'.$extension.'.template';
+  	
+  	//Get the first class available
+  	$typesAndValues = array();
+  	foreach($t as $v){
+  	  $curie = Utils::uri2curie($v);
+  	  $typesAndValues[$curie] = 0;
+  	  if(isset($conf['types']['priorities'][$curie]) && $conf['types']['priorities'][$curie] >= 0){
+  	  	$typesAndValues[$curie] = $conf['types']['priorities'][$curie];
+  	  }
+  	}
+  	arsort($typesAndValues);
+  	foreach($typesAndValues as $v => $w){
+  	  $auxViewFile  = $conf['view']['directory'].$conf['class']['prefix'].$v.'/'.$extension.'.template';
+  	  $auxModelFile = $conf['model']['directory'].$conf['class']['prefix'].$v.'/'.$extension.'.queries';
+  	  if(file_exists($auxModelFile) && file_exists($auxViewFile) && $v != null){
+  	  	$viewFile = $conf['class']['prefix'].$v.'/'.$extension.'.template';
+  	  	$modelFile = $conf['class']['prefix'].$v.'/'.$extension.'.queries';
+  	  	break;
+  	  }
+  	}
+  	return array($modelFile, $viewFile);
+  }
+
+}
+?>
diff --git a/modules/serviceModule.php b/modules/serviceModule.php
new file mode 100644
index 0000000000000000000000000000000000000000..841e180ee68980ac1946efd11429d7ee143be249
--- /dev/null
+++ b/modules/serviceModule.php
@@ -0,0 +1,50 @@
+<?
+require_once('abstractModule.php');
+class ServiceModule extends abstractModule{
+  //Service module
+  
+  public function match($uri){
+  	global $conf; 
+  	global $acceptContentType;
+
+  	$q = preg_replace('|^'.$conf['basedir'].'|', '', $uri);
+  	$qArr = explode('/', $q);
+  	if(sizeof($qArr)==0){
+  	  return FALSE;
+  	}
+  	$extension = Utils::getExtension($acceptContentType); 
+  	$auxViewFile  = $conf['home'].$conf['view']['directory'].$conf['service']['prefix'].$qArr[0]."/".$extension.".template";
+  	$auxModelFile = $conf['home'].$conf['model']['directory'].$conf['service']['prefix'].$qArr[0]."/".$extension.".queries";
+  	if(is_dir($auxModelFile) && is_file($auxViewFile)){
+  	  return $uri;// $qArr[0];
+  	}
+  	$auxViewFile  = $conf['home'].$conf['view']['directory'].$conf['service']['prefix'].$qArr[0];
+  	$auxModelFile = $conf['home'].$conf['model']['directory'].$conf['service']['prefix'].$qArr[0];
+  	if(is_dir($auxModelFile) && is_dir($auxViewFile)){
+  	  Utils::send406($uri);// $qArr[0];
+  	}
+  	if(is_dir($auxModelFile) && is_file($auxViewFile)){
+  	  return $uri;// $qArr[0];
+  	}
+
+  	return FALSE;
+  }
+  
+  public function execute($service){
+  	global $conf;
+  	global $localUri;
+  	global $uri;
+  	global $acceptContentType;
+  	global $endpoints;
+  	global $base;
+  	require_once($conf['home'].$conf['service']['class']);
+  	$context = array();
+  	$context['contentType'] = $acceptContentType;
+  	$context['endpoints'] = $endpoints;
+  	$sp = new SpecialFunction();
+  	$sp->execute($uri, $context);
+  	exit(0);	
+  }
+  
+}
+?>
diff --git a/modules/staticModule.php b/modules/staticModule.php
new file mode 100644
index 0000000000000000000000000000000000000000..520085176b0bbe61ee1c705630f473637d56dd50
--- /dev/null
+++ b/modules/staticModule.php
@@ -0,0 +1,31 @@
+<?
+require_once('abstractModule.php');
+class StaticModule extends abstractModule{
+  //Static module
+  
+  public function match($uri){
+  	global $conf;
+  	global $localUri;
+  	global $uri;
+  	global $acceptContentType;
+  	global $endpoints;
+  	global $base;
+  	$q = preg_replace('|^'.$conf['basedir'].'|', '', $uri);
+  	if(sizeof($q)>0 && file_exists($conf['home'].$conf['static']['directory'].$q)){
+  	  return $q;
+  	}
+  	return FALSE;
+  }
+  
+  public function execute($file){
+  	global $conf;
+  	global $localUri;
+  	global $uri;
+  	global $acceptContentType;
+  	global $endpoints;
+  	global $base;
+  	echo file_get_contents($conf['static']['directory'].$file);
+  }
+  
+}
+?>
diff --git a/modules/uriModule.php b/modules/uriModule.php
new file mode 100644
index 0000000000000000000000000000000000000000..492306c7160feca3ead2f6a080d653d5ff711188
--- /dev/null
+++ b/modules/uriModule.php
@@ -0,0 +1,119 @@
+<?
+require_once('abstractModule.php');
+class UriModule extends abstractModule{
+  //Uri module
+  
+  public function match($uri){
+  	global $conf;
+  	global $localUri;
+  	global $uri;
+  	global $acceptContentType;
+  	global $endpoints;
+  	global $base;
+  	
+  	require_once('classes/MetaDb.php');
+  	$metaDb = new MetaDb($conf['metadata']['db']['location']);
+  	
+  	$pair = Queries::getMetadata($localUri, $acceptContentType, $metaDb);
+  	
+  	if($pair == NULL){ // Original URI is not in metadata
+  	  if(Queries::uriExist($uri, $endpoints['local'])){
+  	  	$page = Queries::createPage($uri, $localUri, $acceptContentType, $metaDb);
+  	  	if($page == NULL){
+  	  	  Utils::send500("Can't write sqlite database.");
+  	  	}
+  	  	Utils::send303($page, $acceptContentType);
+  	  	exit(0);
+  	  }else{
+  	  	return false; //Utils::send404($uri);
+  	  }
+  	}
+  	$extension = Utils::getExtension($pair[2]); 
+  	$curie = Utils::uri2curie($pair[0]);
+  	list($modelFile, $viewFile) = $this::getModelandView($curie, $extension);
+  	
+  	if($modelFile == NULL){
+  	  return FALSE;
+  	}
+  	return $pair;
+  }
+  
+  public function execute($pair){
+  	global $conf;
+  	global $localUri;
+  	global $uri;
+  	global $acceptContentType;
+  	global $endpoints;
+  	global $base;
+  	global $results;
+  	global $first;
+  	list($res, $page, $format) = $pair;
+  	$uri = $res;
+  	$curie = Utils::uri2curie($res);
+
+  	//If resource is not the page, send a 303 to the document
+  	if($res == $localUri){
+  	  Utils::send303($page, $acceptContentType);
+  	}
+  	
+  	$uri = $res;
+  	if($conf['mirror_external_uris']){
+  	  $localUri = preg_replace("|^".$conf['ns']['local']."|", $conf['basedir'], $res);
+  	}
+  	
+  	$extension = Utils::getExtension($format); 
+  	
+  	/*Redefine Content type based on the
+  	* dcterms:format for this page
+  	*/
+  	$acceptContentType = $format;
+
+  	$curie = Utils::uri2curie($uri);
+  	list($modelFile, $viewFile) = $this::getModelandView($curie, $extension);
+  	if($modelFile == NULL){
+  	  return;
+  	}
+  	
+  	$base = $conf['view']['standard'];
+  	$base['type'] = $modelFile;
+  	$base['this']['value'] = $uri;
+  	$base['this']['curie'] = Utils::uri2curie($uri);
+  	$base['thislocal']['value'] = $localUri;
+  	$base['thislocal']['curie'] = Utils::uri2curie($localUri);
+  	
+  	$base['this']['contentType'] = $acceptContentType;
+  	$base['model']['directory'] = $conf['model']['directory'];
+  	$base['view']['directory'] = $conf['view']['directory'];
+  	$base['ns'] = $conf['ns'];
+  	
+  	
+  	chdir($conf['home'].$conf['model']['directory']);
+  	
+  	Utils::queryFile($modelFile, $endpoints['local'], $results, $first);
+  	$results = Utils::internalize($results); 
+  	
+  	$base['first'] = Utils::getFirsts($results);
+  	chdir($conf['home']);
+  	if(is_array($results)){
+  	  $resultsObj = Convert::array_to_object($results);
+  	}else{
+  	  $resultsObj = $results;
+  	}
+  	Utils::processDocument($viewFile, $base, $resultsObj);
+  	
+  }
+  
+  private static function getModelandView($uri, $extension){  	
+  	global $conf;
+  	$auxViewFile  = $conf['view']['directory'].$conf['uri']['prefix'].$uri.'/'.$extension.'.template';
+  	$auxModelFile = $conf['model']['directory'].$conf['uri']['prefix'].$uri.'/'.$extension.'.queries';
+  	if(file_exists($auxModelFile) && file_exists($auxViewFile) ){
+  	  $viewFile = $conf['uri']['prefix'].$uri.'/'.$extension.'.template';
+  	  $modelFile = $conf['uri']['prefix'].$uri.'/'.$extension.'.queries';
+  	  return array($modelFile, $viewFile);
+  	}
+  	return array(NULL, NULL);
+  }
+  
+}
+?>
diff --git a/static/index.html b/static/index.html
index 7a29d7e7569c5b9b554bbd8ef752c5c68cf4b90f..6a3920ee269d09f04adf97cc9ffbaabebf5b00ab 100644
--- a/static/index.html
+++ b/static/index.html
@@ -10,8 +10,8 @@
   <body>
     <h1>Services available</h1>
 	<ul>
-        <li><a href='special/classes'>List of classes in the triple store</a></li>
-        <li><a href='special/namedGraphs'>Named graphs in the triple store</a></li>
+        <li><a href='classes'>List of classes in the triple store</a></li>
+        <li><a href='namedGraphs'>Named graphs in the triple store</a></li>
     </ul>
   </body>
 </html>
diff --git a/utils/ldspk.sh b/utils/ldspk.sh
new file mode 100755
index 0000000000000000000000000000000000000000..15c92808d609d414c8b796f912a41840ec38d67f
--- /dev/null
+++ b/utils/ldspk.sh
@@ -0,0 +1,55 @@
+#!/bin/bash
+
+DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
+
+formats=( html rdf ttl nt json all )
+operations=( create delete )
+modules=( class service uri )
+
+currentOperation=
+currentFormat=
+currentModule=
+
+if [[ ${operations[@]} =~ $1 ]]
+then
+  currentOperation=$1
+else
+  echo "Operation \"$1\" not valid"
+  exit 1
+fi
+
+if [[ ${modules[@]} =~ $2 ]]
+then
+  currentModule=$2
+else
+  echo "Module \"$2\" not valid"
+  exit 1
+fi
+
+if [[ ${formats[@]} =~ $4 ]]
+then
+  currentFormat=$4 
+else
+  if [ -z "$4" ]
+  then
+    currentFormat="all"
+  else
+    echo "Format \"$4\" not valid"
+    exit 1
+  fi
+fi
+
+
+currentUnit=$3
+
+
+if [[ $currentOperation == "create" ]]
+then
+      $DIR/modules/create-$currentModule.sh "$currentUnit" "$currentFormat"
+fi
+if [[ $currentOperation == "delete" ]]
+then
+      $DIR/modules/delete-$currentModule.sh "$currentUnit" "$currentFormat"
+fi
+
+
diff --git a/utils/modules/create-class.sh b/utils/modules/create-class.sh
new file mode 100755
index 0000000000000000000000000000000000000000..bf86e068b9aac12456651e27ff76e4d85ac0ae9d
--- /dev/null
+++ b/utils/modules/create-class.sh
@@ -0,0 +1,153 @@
+#!/bin/bash
+
+DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
+
+initToken='class'
+
+modelHtml=$(cat <<QUERY
+SELECT ?s2 ?p2 ?s1 ?p1  WHERE {
+        {
+                <{{uri}}> ?s1 ?p1 .
+        }UNION{
+                ?s2 ?p2 <{{uri}}> .
+        }
+}
+QUERY
+)
+
+
+viewHtml=$(cat <<VIEW
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML+RDFa 1.0//EN"
+    "http://www.w3.org/MarkUp/DTD/xhtml-rdfa-1.dtd">
+    <html xmlns="http://www.w3.org/1999/xhtml" {% for i, ns in base.ns %}xmlns:{{i}}="{{ns}}" 
+    {%endfor%}version="XHTML+RDFa 1.0" xml:lang="en">
+    <head>
+    <title>Page about {{base.this.value}}</title>
+    <link href="{{base.baseUrl}}/lodspeakr/css/basic.css" rel="stylesheet" type="text/css" media="screen" />
+    <link rel="alternate" type="application/rdf+xml" title="RDF/XML Version" href="{{base.this.value}}.rdf" />
+    <link rel="alternate" type="text/turtle" title="Turtle Version" href="{{base.this.value}}.ttl" />
+    <link rel="alternate" type="text/plain" title="N-Triples Version" href="{{base.this.value}}.nt" />
+    <link rel="alternate" type="application/json" title="RDFJSON Version" href="{{base.this.value}}.json" />
+  </head>
+  <body about="{{base.this.value}}">
+    <h1>Page about <a href='{{base.this.value}}'>{{base.this.curie}}</a></h1>
+  <div>
+    <h2>Information from {{base.this.curie}}</h2>
+    <table>
+    {% for row in r.main %}
+
+      {% if row.s1%}
+      <tr>
+        <td><a href='{{row.s1.value}}'>{{row.s1.curie}}</a></td>
+
+        {% if row.p1.uri == 1 %}
+        <td><a rel='{{row.s1.curie}}' href='{{row.p1.value}}'>{{row.p1.curie}}</a></td>
+        {% else %}
+        <td><span property='{{row.s1.curie}}'>{{row.p1.value}}</span></td>
+        {% endif %}
+
+        </tr>
+      {% endif %}
+    {% endfor %}
+    </table>
+
+    <br/><br/>
+    <h2>Information pointing to {{base.this.curie}}</h2>
+    <table>
+    {% for row in r.main %}
+      {% if row.s2%}
+     <tr>
+        <td><a href='{{row.s2.value}}'>{{row.s2.curie}}</a></td>
+        <td><a rev='[{{row.p2.curie}}]' href='{{row.s2.value}}'>{{row.p2.curie}}</a></td>
+    </tr>
+    {%endif %}
+    {% endfor %}
+    </table>
+    </div>
+  </body>
+</html>
+VIEW)
+
+modelRdf=$(cat <<QUERY
+DESCRIBE ?resource WHERE {
+  	[] a ?resource .
+}
+QUERY)
+
+viewRdf=$(cat <<VIEW
+{{r|safe}}
+VIEW)
+
+modelTtl=$modelRdf
+viewTtl=$viewRdf
+modelNt=$modelRdf
+viewNt=$viewRdf
+modelJson=$modelRdf
+viewJson=$viewJson
+
+#Check models
+mainModelDir=$DIR/../../models/$initToken.$1
+
+if [ -e "$mainModelDir" ]
+then
+  echo "WARNING: At least one model for $1 exists." >&2
+else
+  mkdir $mainModelDir
+fi
+
+obj=( )
+if [ "$2" == "all" ]
+then
+  obj=( html rdf ttl nt json )
+else
+  obj=( $2 )
+fi
+
+for i in ${obj[@]}
+do
+  if [ -e $mainModelDir/$i.queries ]
+  then
+    echo ERROR: $initToken.$1/$i.queries exists in models. Operation aborted >&2
+    exit 1
+  fi
+done
+
+
+#Check views
+mainViewDir=$DIR/../../views/$initToken.$1
+
+if [ -e "$mainViewDir" ]
+then
+  echo "WARNING: At least one view for $1 exists." >&2
+else
+  mkdir $mainViewDir
+fi
+
+
+for i in ${obj[@]}
+do
+  if [ -e $mainViewDir/$i.template ]
+  then
+    echo ERROR: $initToken.$1/$i already exist in views. Operation aborted >&2
+    exit 1
+  fi
+done
+
+
+#Create  file structure
+
+for i in ${obj[@]}
+do
+  mkdir $mainModelDir/$i.queries
+  if [ "$i" == "html" ]
+  then
+    echo "$modelHtml" > $mainModelDir/$i.queries/main.query
+    echo "$viewHtml" > $mainViewDir/$i.template
+  else
+    echo "$modelRdf" > $mainModelDir/$i.queries/main.query
+    echo "$viewRdf" > $mainViewDir/$i.template   
+  fi
+done
+
+echo $initToken.$1 created/modified successfully! >&2
diff --git a/utils/modules/create-service.sh b/utils/modules/create-service.sh
new file mode 100755
index 0000000000000000000000000000000000000000..29ff6e9c413de8660e205017a1b227b00497fbf1
--- /dev/null
+++ b/utils/modules/create-service.sh
@@ -0,0 +1,120 @@
+#!/bin/bash
+
+DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
+
+initToken='service'
+
+modelHtml=$(cat  <<QUERY
+{%for h in base.header %}
+PREFIX {{h.prefix}}: <{{h.ns}}>
+{%endfor%}
+SELECT DISTINCT ?resource WHERE {
+  {%if base.args.arg0 %}GRAPH <{{base.args.arg0}}>{ {%endif%}
+  	[] a ?resource .
+  {%if base.args.arg0 %} } {%endif%}
+}
+QUERY)
+
+viewHtml=$(cat  <<VIEW
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML+RDFa 1.0//EN"
+    "http://www.w3.org/MarkUp/DTD/xhtml-rdfa-1.dtd">
+    <html xmlns="http://www.w3.org/1999/xhtml" {% for i, ns in base.ns %}xmlns:{{i}}="{{ns}}" 
+    {%endfor%}version="XHTML+RDFa 1.0" xml:lang="en">
+  <head>
+    <title>My new Service</title>
+    <link href="{{base.baseUrl}}/lodspeakr/css/basic.css" rel="stylesheet" type="text/css" media="screen" />
+  </head>
+  <body>
+    <h1>Classes available</h1>
+	<ul>
+    {% for row in r.main %}
+        <li><a href="{{base.baseUrl}}special/instances/{{ row.resource.curie }}">{{row.resource.curie}}</a></li>
+    {% endfor %}
+    </ul>
+  </body>
+</html>
+VIEW)
+
+modelRdf=$(cat  <<QUERY
+DESCRIBE ?resource WHERE {
+  	[] a ?resource .
+}
+QUERY)
+
+viewRdf=$(cat  <<QUERY
+{{r|safe}}
+QUERY)
+
+modelTtl=$modelRdf
+viewTtl=$viewRdf
+modelNt=$modelRdf
+viewNt=$viewRdf
+modelJson=$modelRdf
+viewJson=$viewJson
+
+#Check models
+mainModelDir=$DIR/../../models/$initToken.$1
+
+if [ -e "$mainModelDir" ]
+then
+  echo "WARNING: At least one model for $1 exists." >&2
+else
+  mkdir $mainModelDir
+fi
+
+obj=( )
+if [ "$2" == "all" ]
+then
+  obj=( html rdf ttl nt json )
+else
+  obj=( $2 )
+fi
+
+for i in ${obj[@]}
+do
+  if [ -e $mainModelDir/$i.queries ]
+  then
+    echo ERROR: $initToken.$1/$i.queries exists in models. Operation aborted >&2
+    exit 1
+  fi
+done
+
+
+#Check views
+mainViewDir=$DIR/../../views/$initToken.$1
+
+if [ -e "$mainViewDir" ]
+then
+  echo "WARNING: At least one view for $1 exists." >&2
+else
+  mkdir $mainViewDir
+fi
+
+
+for i in ${obj[@]}
+do
+  if [ -e $mainViewDir/$i.template ]
+  then
+    echo ERROR: $initToken.$1/$i already exist in views. Operation aborted >&2
+    exit 1
+  fi
+done
+
+
+#Create  file structure
+
+for i in ${obj[@]}
+do
+  mkdir $mainModelDir/$i.queries
+  if [ "$i" == "html" ]
+  then
+    echo "$modelHtml" > $mainModelDir/$i.queries/main.query
+    echo "$viewHtml" > $mainViewDir/$i.template
+  else
+    echo "$modelRdf" > $mainModelDir/$i.queries/main.query
+    echo "$viewRdf" > $mainViewDir/$i.template   
+  fi
+done
+
+echo $initToken.$1 created/modified successfully! >&2
diff --git a/utils/modules/create-uri.sh b/utils/modules/create-uri.sh
new file mode 100755
index 0000000000000000000000000000000000000000..8562599817abccfb3d50a3ac03c6f37c99066946
--- /dev/null
+++ b/utils/modules/create-uri.sh
@@ -0,0 +1,153 @@
+#!/bin/bash
+
+DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
+
+initToken='uri'
+
+modelHtml=$(cat <<QUERY
+SELECT ?s2 ?p2 ?s1 ?p1  WHERE {
+        {
+                <{{uri}}> ?s1 ?p1 .
+        }UNION{
+                ?s2 ?p2 <{{uri}}> .
+        }
+}
+QUERY
+)
+
+
+viewHtml=$(cat <<VIEW
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML+RDFa 1.0//EN"
+    "http://www.w3.org/MarkUp/DTD/xhtml-rdfa-1.dtd">
+    <html xmlns="http://www.w3.org/1999/xhtml" {% for i, ns in base.ns %}xmlns:{{i}}="{{ns}}" 
+    {%endfor%}version="XHTML+RDFa 1.0" xml:lang="en">
+    <head>
+    <title>Page about {{base.this.value}}</title>
+    <link href="{{base.baseUrl}}/lodspeakr/css/basic.css" rel="stylesheet" type="text/css" media="screen" />
+    <link rel="alternate" type="application/rdf+xml" title="RDF/XML Version" href="{{base.this.value}}.rdf" />
+    <link rel="alternate" type="text/turtle" title="Turtle Version" href="{{base.this.value}}.ttl" />
+    <link rel="alternate" type="text/plain" title="N-Triples Version" href="{{base.this.value}}.nt" />
+    <link rel="alternate" type="application/json" title="RDFJSON Version" href="{{base.this.value}}.json" />
+  </head>
+  <body about="{{base.this.value}}">
+    <h1>Page about <a href='{{base.this.value}}'>{{base.this.curie}}</a></h1>
+  <div>
+    <h2>Information from {{base.this.curie}}</h2>
+    <table>
+    {% for row in r.main %}
+
+      {% if row.s1%}
+      <tr>
+        <td><a href='{{row.s1.value}}'>{{row.s1.curie}}</a></td>
+
+        {% if row.p1.uri == 1 %}
+        <td><a rel='{{row.s1.curie}}' href='{{row.p1.value}}'>{{row.p1.curie}}</a></td>
+        {% else %}
+        <td><span property='{{row.s1.curie}}'>{{row.p1.value}}</span></td>
+        {% endif %}
+
+        </tr>
+      {% endif %}
+    {% endfor %}
+    </table>
+
+    <br/><br/>
+    <h2>Information pointing to {{base.this.curie}}</h2>
+    <table>
+    {% for row in r.main %}
+      {% if row.s2%}
+     <tr>
+        <td><a href='{{row.s2.value}}'>{{row.s2.curie}}</a></td>
+        <td><a rev='[{{row.p2.curie}}]' href='{{row.s2.value}}'>{{row.p2.curie}}</a></td>
+    </tr>
+    {%endif %}
+    {% endfor %}
+    </table>
+    </div>
+  </body>
+</html>
+VIEW)
+
+modelRdf=$(cat <<QUERY
+DESCRIBE ?resource WHERE {
+  	[] a ?resource .
+}
+QUERY)
+
+viewRdf=$(cat <<VIEW
+{{r|safe}}
+VIEW)
+
+modelTtl=$modelRdf
+viewTtl=$viewRdf
+modelNt=$modelRdf
+viewNt=$viewRdf
+modelJson=$modelRdf
+viewJson=$viewJson
+
+#Check models
+mainModelDir=$DIR/../../models/$initToken.$1
+
+if [ -e "$mainModelDir" ]
+then
+  echo "WARNING: At least one model for $1 exists." >&2
+else
+  mkdir $mainModelDir
+fi
+
+obj=( )
+if [ "$2" == "all" ]
+then
+  obj=( html rdf ttl nt json )
+else
+  obj=( $2 )
+fi
+
+for i in ${obj[@]}
+do
+  if [ -e $mainModelDir/$i.queries ]
+  then
+    echo ERROR: $initToken.$1/$i.queries exists in models. Operation aborted >&2
+    exit 1
+  fi
+done
+
+
+#Check views
+mainViewDir=$DIR/../../views/$initToken.$1
+
+if [ -e "$mainViewDir" ]
+then
+  echo "WARNING: At least one view for $1 exists." >&2
+else
+  mkdir $mainViewDir
+fi
+
+
+for i in ${obj[@]}
+do
+  if [ -e $mainViewDir/$i.template ]
+  then
+    echo ERROR: $initToken.$1/$i already exist in views. Operation aborted >&2
+    exit 1
+  fi
+done
+
+
+#Create  file structure
+
+for i in ${obj[@]}
+do
+  mkdir $mainModelDir/$i.queries
+  if [ "$i" == "html" ]
+  then
+    echo "$modelHtml" > $mainModelDir/$i.queries/main.query
+    echo "$viewHtml" > $mainViewDir/$i.template
+  else
+    echo "$modelRdf" > $mainModelDir/$i.queries/main.query
+    echo "$viewRdf" > $mainViewDir/$i.template   
+  fi
+done
+
+echo $initToken.$1 created/modified successfully! >&2
diff --git a/utils/modules/delete-class.sh b/utils/modules/delete-class.sh
new file mode 100755
index 0000000000000000000000000000000000000000..87a8441ecd2bddb35d93a6eb406156ae846a284d
--- /dev/null
+++ b/utils/modules/delete-class.sh
@@ -0,0 +1,65 @@
+#!/bin/bash
+
+DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
+
+initToken='class'
+
+
+#Check models
+mainModelDir=$DIR/../../models/$initToken.$1
+
+if [ ! -e "$mainModelDir" ]
+then
+  echo "ERROR: $initToken.$1 doesn't exist in models. Operation aborted" >&2
+  exit 1
+fi
+
+obj=( )
+if [ "$2" == "all" ]
+then
+  obj=( html rdf ttl nt json )
+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
+mainViewDir=$DIR/../../views/$initToken.$1
+
+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
+echo $initToken.$1 deleted successfully! >&2
diff --git a/utils/modules/delete-service.sh b/utils/modules/delete-service.sh
new file mode 100755
index 0000000000000000000000000000000000000000..780ebab235081cc7386e529afdedf673b604d9e4
--- /dev/null
+++ b/utils/modules/delete-service.sh
@@ -0,0 +1,65 @@
+#!/bin/bash
+
+DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
+
+initToken='service'
+
+
+#Check models
+mainModelDir=$DIR/../../models/$initToken.$1
+
+if [ ! -e "$mainModelDir" ]
+then
+  echo "ERROR: $initToken.$1 doesn't exist in models. Operation aborted" >&2
+  exit 1
+fi
+
+obj=( )
+if [ "$2" == "all" ]
+then
+  obj=( html rdf ttl nt json )
+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
+mainViewDir=$DIR/../../views/$initToken.$1
+
+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
+echo $initToken.$1 deleted successfully! >&2
diff --git a/utils/modules/delete-uri.sh b/utils/modules/delete-uri.sh
new file mode 100755
index 0000000000000000000000000000000000000000..eaf82c3c06e3c62cacd542536575d2cbaa19d530
--- /dev/null
+++ b/utils/modules/delete-uri.sh
@@ -0,0 +1,65 @@
+#!/bin/bash
+
+DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
+
+initToken='uri'
+
+
+#Check models
+mainModelDir=$DIR/../../models/$initToken.$1
+
+if [ ! -e "$mainModelDir" ]
+then
+  echo "ERROR: $initToken.$1 doesn't exist in models. Operation aborted" >&2
+  exit 1
+fi
+
+obj=( )
+if [ "$2" == "all" ]
+then
+  obj=( html rdf ttl nt json )
+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
+mainViewDir=$DIR/../../views/$initToken.$1
+
+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
+echo $initToken.$1 deleted successfully! >&2
diff --git a/views/rdfs:Resource.view.html b/views/class.rdfs:Resource/html.template
similarity index 93%
rename from views/rdfs:Resource.view.html
rename to views/class.rdfs:Resource/html.template
index 59f3631899154cb32d0456a682340ac5adfff40f..2cd8b212289059e162fb8c58b6c688b7739f9368 100644
--- a/views/rdfs:Resource.view.html
+++ b/views/class.rdfs:Resource/html.template
@@ -11,32 +11,32 @@
     <link rel="alternate" type="text/plain" title="N-Triples Version" href="{{base.this.value}}.nt" />
     <link rel="alternate" type="application/json" title="RDFJSON Version" href="{{base.this.value}}.json" />
   </head>
-  <body about="{{base.this.value}}"> 
+  <body about="{{base.this.value}}">
     <h1>Page about <a href='{{base.this.value}}'>{{base.this.curie}}</a></h1>
   <div>
     <h2>Information from {{base.this.curie}}</h2>
-    <table> 
-    {% for row in r %}
+    <table>
+    {% for row in r.main %}
 
       {% if row.s1%}
       <tr>
         <td><a href='{{row.s1.value}}'>{{row.s1.curie}}</a></td>
-    
+
         {% if row.p1.uri == 1 %}
         <td><a rel='{{row.s1.curie}}' href='{{row.p1.value}}'>{{row.p1.curie}}</a></td>
         {% else %}
         <td><span property='{{row.s1.curie}}'>{{row.p1.value}}</span></td>
         {% endif %}
-     
+
         </tr>
       {% endif %}
     {% endfor %}
     </table>
-    
+
     <br/><br/>
     <h2>Information pointing to {{base.this.curie}}</h2>
-    <table> 
-    {% for row in r %}
+    <table>
+    {% for row in r.main %}
       {% if row.s2%}
      <tr>
         <td><a href='{{row.s2.value}}'>{{row.s2.curie}}</a></td>
@@ -48,4 +48,3 @@
     </div>
   </body>
 </html>
-
diff --git a/views/class.rdfs:Resource/json.template b/views/class.rdfs:Resource/json.template
new file mode 100644
index 0000000000000000000000000000000000000000..f6451d60b03e01731a9e01adfacf9c9cbdc5cfda
--- /dev/null
+++ b/views/class.rdfs:Resource/json.template
@@ -0,0 +1 @@
+{{r.main|safe}}
diff --git a/views/rdfs:Resource.view.rdf b/views/class.rdfs:Resource/nt.template
similarity index 100%
rename from views/rdfs:Resource.view.rdf
rename to views/class.rdfs:Resource/nt.template
diff --git a/views/class.rdfs:Resource/rdf.template b/views/class.rdfs:Resource/rdf.template
new file mode 100644
index 0000000000000000000000000000000000000000..f6451d60b03e01731a9e01adfacf9c9cbdc5cfda
--- /dev/null
+++ b/views/class.rdfs:Resource/rdf.template
@@ -0,0 +1 @@
+{{r.main|safe}}
diff --git a/views/class.rdfs:Resource/ttl.template b/views/class.rdfs:Resource/ttl.template
new file mode 100644
index 0000000000000000000000000000000000000000..ca994557126054d192c1e40eca4f28f5e635bab8
--- /dev/null
+++ b/views/class.rdfs:Resource/ttl.template
@@ -0,0 +1 @@
+{{r|safe}}
diff --git a/views/header.inc b/views/header.inc
index adbefad22dc773222ab0ae36e0d78cecb89e691f..7bb8c2e42f98d125a2d831f9fe0e386938a29419 100644
--- a/views/header.inc
+++ b/views/header.inc
@@ -1,5 +1,5 @@
 <h4>Endpoint: {{base.endpoint.local}}</h4>
 <div style='float:center'>
-<a href='{{base.home}}'>Home</a> | <a href='{{base.home}}special/classes'>Classes</a> | <a href='{{base.home}}special/namedGraphs'>Named Graphs</a>
+<a href='{{base.home}}'>Home</a> | <a href='{{base.home}}classes'>Classes</a> | <a href='{{base.home}}namedGraphs'>Named Graphs</a>
 </div>
 
diff --git a/views/special.classes.view.html b/views/service.classes/html.template
similarity index 72%
rename from views/special.classes.view.html
rename to views/service.classes/html.template
index 8a7777fe863303235d9f846e0be11cfbb70b9f00..bdda75d1c01e1d837ca57dbb8ea2cdd2b9c84595 100644
--- a/views/special.classes.view.html
+++ b/views/service.classes/html.template
@@ -4,17 +4,16 @@
     <html xmlns="http://www.w3.org/1999/xhtml" {% for i, ns in base.ns %}xmlns:{{i}}="{{ns}}" 
     {%endfor%}version="XHTML+RDFa 1.0" xml:lang="en">
   <head>
-    <title>Classes available</title>
+    <title>My new Service</title>
     <link href="{{base.baseUrl}}/lodspeakr/css/basic.css" rel="stylesheet" type="text/css" media="screen" />
   </head>
   <body>
     <h1>Classes available</h1>
-{%include "header.inc"%}
+{%include "../header.inc"%}
 	<ul>
-    {% for row in r %}
-        <li><a href='{{base.baseUrl}}special/instances/{{ row.resource.curie }}'>{{row.resource.curie}}</a></li>
+    {% for row in r.main %}
+        <li><a href="{{base.baseUrl}}instances/{{ row.resource.curie }}">{{row.resource.curie}}</a></li>
     {% endfor %}
     </ul>
   </body>
 </html>
-
diff --git a/views/special.instances.view.html b/views/service.instances/html.template
similarity index 65%
rename from views/special.instances.view.html
rename to views/service.instances/html.template
index b164024cf0adbbd522503ca1bd7e72e2066057ae..6f0a319a3b59c753cc6ec2ebb2a9943011ce7e70 100644
--- a/views/special.instances.view.html
+++ b/views/service.instances/html.template
@@ -3,18 +3,17 @@
     "http://www.w3.org/MarkUp/DTD/xhtml-rdfa-1.dtd">
     <html xmlns="http://www.w3.org/1999/xhtml" {% for i, ns in base.ns %}xmlns:{{i}}="{{ns}}" 
     {%endfor%}version="XHTML+RDFa 1.0" xml:lang="en">
-    <head>
-   <title>Instance of {{base.args.arg0}}</title>
+  <head>
+    <title>Instances of {{base.args.arg0}}</title>
     <link href="{{base.baseUrl}}/lodspeakr/css/basic.css" rel="stylesheet" type="text/css" media="screen" />
   </head>
   <body>
-    <h1>Instances of {{base.args.arg0}}</h1>
-{%include "header.inc"%}
+    <h1>Instances of class {{base.args.arg0}}</h1>
+{%include "../header.inc"%}
 	<ul>
-	{% for row in r %}
-        <li><a href='{{ row.resource.value }}'>{{row.resource.curie}}</a></li>
-        {% endfor %}
+    {% for row in r.main %}
+        <li><a href="{{ row.resource.value }}">{{row.resource.curie}}</a></li>
+    {% endfor %}
     </ul>
   </body>
 </html>
-
diff --git a/views/special.namedGraphs.view.html b/views/service.namedGraphs/html.template
similarity index 74%
rename from views/special.namedGraphs.view.html
rename to views/service.namedGraphs/html.template
index 65ee0d422589ded5522de1f6a0330367f293fefc..70eaa0b4c3d3a1b03ca12fa1efd09855ca88c7b6 100644
--- a/views/special.namedGraphs.view.html
+++ b/views/service.namedGraphs/html.template
@@ -4,17 +4,16 @@
     <html xmlns="http://www.w3.org/1999/xhtml" {% for i, ns in base.ns %}xmlns:{{i}}="{{ns}}" 
     {%endfor%}version="XHTML+RDFa 1.0" xml:lang="en">
   <head>
-    <title>Graphs available in the triple store</title>
+    <title>Named Graphs</title>
     <link href="{{base.baseUrl}}/lodspeakr/css/basic.css" rel="stylesheet" type="text/css" media="screen" />
   </head>
   <body>
-    <h1>Graphs available</h1>
-{%include "header.inc"%}
+    <h1>Named graphs available</h1>
+{%include "../header.inc"%}
 	<ul>
-    {% for row in r %}
-        <li>{{row.g.curie}}</li>
+    {% for row in r.main %}
+        <li>{{row.g.value}}</li>
     {% endfor %}
     </ul>
   </body>
 </html>
-