diff --git a/README.md b/README.md
index 3ed806b975501f5f66a790513b7de6954ad97b55..17d036d323290638d223ff8a6924987836f723f3 100644
--- a/README.md
+++ b/README.md
@@ -3,7 +3,7 @@ LODSPeaKr
 
 author: Alvaro Graves (alvaro@graves.cl)
 
-version: 20130611
+version: 20130612
 
 
 [LODSPeaKr](http://lodspeakr.org) is a framework for creating Linked Data applications in a simple and easy way. You can see [several applications](http://alangrafu.github.com/lodspeakr/applications.html) created using LODSPeaKr.
diff --git a/classes/Utils.php b/classes/Utils.php
index 64edc8be6e35cd0ca8ff68aab260fea9edf7008d..6dcda771c781b064787636be44e28ef4865c9324 100644
--- a/classes/Utils.php
+++ b/classes/Utils.php
@@ -279,19 +279,10 @@ class Utils{
   	      }
   	      $data['rdf']->$subjectMethod->mirroredUri = $subject;
   	      $data['rdf']->$subjectMethod->mirroredCurie = $subjectCurie;
-  	      if(isset($conf['mirror_external_uris']) && $conf['mirror_external_uris'] != false){  	  	  	
-  	        if(is_bool($conf['mirror_external_uris'])){
-  	          $data['rdf']->$subjectMethod->value = preg_replace("|^".$conf['ns']['local']."|", $conf['basedir'], $subject);
-  	          $data['rdf']->$subjectMethod->curie = Utils::uri2curie(preg_replace("|^".$conf['ns']['local']."|", $conf['basedir'], $subject));
-  	        }elseif(is_string($conf['mirror_external_uris'])){
-  	          $data['rdf']->$subjectMethod->value = preg_replace("|^".$conf['mirror_external_uris']."|", $conf['basedir'], $subject);
-  	          $data['rdf']->$subjectMethod->curie = Utils::uri2curie(preg_replace("|^".$conf['mirror_external_uris']."|", $conf['basedir'], $subject));
-  	        }else{
-  	          HTTPStatus::send500("Error in mirroring configuration");
-  	          exit(1);
-  	        }
-  	      }
-  	        	      
+  	      
+  	      $data['rdf']->$subjectMethod->value = Utils::getUnMirroredUri($subject);
+  	      $data['rdf']->$subjectMethod->curie = Utils::uri2curie( $data['rdf']->$subjectMethod->value);
+  	        	        	      
   	      if(!isset($data['rdf']->subjects->$subjectMethod)){
   	        $data['rdf']->subjects->$subjectMethod = $data['rdf']->$subjectMethod;
   	      }
@@ -310,18 +301,9 @@ class Utils{
   	      
   	      $data['rdf']->$subjectMethod->$predicateMethod->mirroredUri = $predicate;
   	      $data['rdf']->$subjectMethod->$predicateMethod->mirroredCurie = $predicateCurie;
-  	      if(isset($conf['mirror_external_uris']) && $conf['mirror_external_uris'] != false){  	  	  	
-  	        if(is_bool($conf['mirror_external_uris'])){
-  	          $data['rdf']->$subjectMethod->$predicateMethod->value = preg_replace("|^".$conf['ns']['local']."|", $conf['basedir'], $predicate);
-  	          $data['rdf']->$subjectMethod->$predicateMethod->curie = Utils::uri2curie(preg_replace("|^".$conf['ns']['local']."|", $conf['basedir'], $predicate));
-  	        }elseif(is_string($conf['mirror_external_uris'])){
-  	          $data['rdf']->$subjectMethod->$predicateMethod->value = preg_replace("|^".$conf['mirror_external_uris']."|", $conf['basedir'], $predicate);
-  	          $data['rdf']->$subjectMethod->$predicateMethod->curie = Utils::uri2curie(preg_replace("|^".$conf['mirror_external_uris']."|", $conf['basedir'], $predicate));
-  	        }else{
-  	          HTTPStatus::send500("Error in mirroring configuration");
-  	          exit(1);
-  	        }
-  	      }
+  	      $data['rdf']->$subjectMethod->$predicateMethod->value = Utils::getUnMirroredUri($predicate);
+  	      $data['rdf']->$subjectMethod->$predicateMethod->curie = Utils::uri2curie( $data['rdf']->$subjectMethod->$predicateMethod->value);
+
   	        	      
   	      if(!isset($data['rdf']->$subjectMethod->predicates)){
   	        $data['rdf']->$subjectMethod->predicates = new stdClass();
@@ -355,18 +337,9 @@ class Utils{
   	      $obj = new stdClass();
   	      $obj->mirroredUri = $object;
   	      $obj->mirroredCurie = $objectCurie;
-  	      if(isset($conf['mirror_external_uris']) && $conf['mirror_external_uris'] != false){  	  	  	
-  	        if(is_bool($conf['mirror_external_uris'])){
-  	          $obj->value = preg_replace("|^".$conf['ns']['local']."|", $conf['basedir'], $object);
-  	          $obj->curie = Utils::uri2curie(preg_replace("|^".$conf['ns']['local']."|", $conf['basedir'], $object));
-  	        }elseif(is_string($conf['mirror_external_uris'])){
-  	          $obj->value = preg_replace("|^".$conf['mirror_external_uris']."|", $conf['basedir'], $object);
-  	          $obj->curie = Utils::uri2curie(preg_replace("|^".$conf['mirror_external_uris']."|", $conf['basedir'], $object));
-  	        }else{
-  	          HTTPStatus::send500("Error in mirroring configuration");
-  	          exit(1);
-  	        }
-  	      }
+  	      $obj->value = Utils::getUnMirroredUri($object);
+  	      $obj->curie = Utils::uri2curie($obj->value);
+
   	        	      
   	      if(!isset($spCounter[$subjectMethod." ".$predicateMethod])){
   	        $spCounter[$subjectMethod." ".$predicateMethod] = 0;
@@ -649,16 +622,9 @@ class Utils{
   	  	  $value['mirroredUri'] = $value['value'];
   	  	  $value['mirroredCurie'] = Utils::uri2curie($value['value']);
   	  	  if(isset($conf['mirror_external_uris']) && $conf['mirror_external_uris'] != false){  	  	  	
-  	  	  	if(is_bool($conf['mirror_external_uris'])){
-  	  	  	  $value['value'] = preg_replace("|^".$conf['ns']['local']."|", $conf['basedir'], $value['value']);
-  	  	  	}elseif(is_string($conf['mirror_external_uris'])){
-  	  	  	  $value['value'] = preg_replace("|^".$conf['mirror_external_uris']."|", $conf['basedir'], $value['value']);
-  	  	  	}else{
-  	  	  	  HTTPStatus::send500("Error in mirroring configuration");
-  	  	  	  exit(1);
-  	  	  	}
+  	  	  	$value['value'] = Utils::getUnMirroredUri($value['value']);
   	  	  }
-  	  	  $value['curie'] = $value['mirroredCurie'];
+  	  	  $value['curie'] = Utils::uri2curie($value['value']);
   	  	  $array[$key] = $value;
   	  	}  	  	  	  	
   	  } 
@@ -790,6 +756,54 @@ class Utils{
     return $result;
   }
   
+  public static function getMirroredUri($localUri){
+    global $conf;
+    $uri = $localUri;
+    if(isset($conf['mirror_external_uris']) && $conf['mirror_external_uris'] != false){      
+      if(is_bool($conf['mirror_external_uris'])){
+        $uri = preg_replace("|^".$conf['ns']['local']."|", $conf['ns']['base'], $localUri);
+      }elseif(is_string($conf['mirror_external_uris'])){
+        $uri = preg_replace("|^".$conf['ns']['local']."|", $conf['mirror_external_uris'], $localUri);
+      }elseif(is_array($conf['mirror_external_uris'])){
+        $defaultKey = ""; //Default namespace is empty string ""
+        $namespaceFragment = array_shift(split("/", str_replace($conf['basedir'], "", $localUri)));
+        $uri = preg_replace("|^".$conf['basedir']."|",$conf['mirror_external_uris'][$defaultKey], $localUri);
+        foreach($conf['mirror_external_uris'] as $k => $v){
+          if($namespaceFragment == $k){
+            $uri = preg_replace("|^".$conf['basedir'].$k."/"."|",$conf['mirror_external_uris'][$k], $localUri);
+            break;    
+          }
+        }
+      }else{
+        HTTPStatus::send500("Error in mirroring configuration");
+        exit(1);
+      }      
+    }
+    return $uri;
+  }
+  
+  public static function getUnMirroredUri($uri){
+    global $conf;
+    $localUri = $uri;
+    if(is_bool($conf['mirror_external_uris'])){
+      $localUri = preg_replace("|^".$conf['ns']['local']."|", $conf['basedir'], $uri);
+    }elseif(is_string($conf['mirror_external_uris'])){
+      $localUri = preg_replace("|^".$conf['mirror_external_uris']."|", $conf['basedir'], $uri);
+    }elseif(is_array($conf['mirror_external_uris'])){
+      //Instead of doing expensive regex, jsut use str_replace
+      foreach($conf['mirror_external_uris'] as $k => $v){
+        if(strlen(str_replace($v, "", $uri)) != strlen($uri)){
+          $fragment = ($k == "")?$k: $k."/";
+          $localUri = preg_replace("|^".$v."|",$conf['basedir'].$fragment, $uri);
+          break;    
+        }
+      }
+    }else{
+      HTTPStatus::send500("Error in mirroring configuration");
+      exit(1);
+    }
+    return $localUri;
+  }
 }
 
 ?>
diff --git a/common.inc.php b/common.inc.php
index f272c7a5a588c58c65a19746ac8001ffb6d12d53..dad2a927bea1031ed3e8defc2a8a100a980b745b 100644
--- a/common.inc.php
+++ b/common.inc.php
@@ -1,6 +1,6 @@
 <?php
 
-$conf['version'] = '20130611';
+$conf['version'] = '20130612';
 $conf['output']['select'] = 'json';
 $conf['output']['ask'] = 'json';
 $conf['output']['describe'] = 'rdf';
diff --git a/index.php b/index.php
index bb5b0573d62a71b8889f0780dca8c1e344426b36..cebf6d55822657bf3680929888c90414f6717b24 100755
--- a/index.php
+++ b/index.php
@@ -70,19 +70,9 @@ if($uri == $conf['basedir']){
 
 
 //Configure external URIs if necessary
-if(isset($conf['mirror_external_uris']) && $conf['mirror_external_uris'] != false){
-  $localUri = $conf['basedir'].$_GET['q'];
-  
-  if(is_bool($conf['mirror_external_uris'])){
-  	$uri = $conf['ns']['local'].$_GET['q'];
-  }elseif(is_string($conf['mirror_external_uris'])){
-  	$uri = $conf['mirror_external_uris'].$_GET['q'];
-  }else{
-  	HTTPStatus::send500("Error in mirroring configuration");
-  	exit(1);
-  }
-  
-}
+$localUri = $conf['basedir'].$_GET['q'];
+
+$uri = Utils::getMirroredUri($localUri);
 
 
 //Modules