diff --git a/modules/Bio/EnsEMBL/DBSQL/BaseFeatureAdaptor.pm b/modules/Bio/EnsEMBL/DBSQL/BaseFeatureAdaptor.pm
index 4cc56046e6c404117c4d2b88df9078743544a1c2..309ad6ab7bb41ceeee208477edc362b7f4b4a553 100644
--- a/modules/Bio/EnsEMBL/DBSQL/BaseFeatureAdaptor.pm
+++ b/modules/Bio/EnsEMBL/DBSQL/BaseFeatureAdaptor.pm
@@ -65,11 +65,15 @@ sub new {
 
   my $self = $class->SUPER::new(@_);
 
-  #initialize an LRU cache
-  my %cache;
-  tie( %cache, 'Bio::EnsEMBL::Utils::Cache',
-       { Debug => 0, MaxCount => $SLICE_FEATURE_CACHE_SIZE } );
-  $self->{'_slice_feature_cache'} = \%cache;
+  if (defined $self->db->no_cache && $self->db->no_cache){
+      warning("You are using the API without caching most recent features. Performance might be affected.");
+  }
+  else{
+      #initialize an LRU cache
+      my %cache;
+      tie(%cache, 'Bio::EnsEMBL::Utils::Cache', $SLICE_FEATURE_CACHE_SIZE);
+      $self->{'_slice_feature_cache'} = \%cache;
+  }
 
   return $self;
 }
@@ -211,10 +215,12 @@ sub fetch_all_by_Slice_constraint {
   #check the cache and return if we have already done this query
   my $key = uc(join(':', $slice->name, $constraint));
 
-  if(exists($self->{'_slice_feature_cache'}->{$key})) {
-    return $self->{'_slice_feature_cache'}->{$key};
+  #will only use feature_cache if hasn't been no_cache attribute set
+  if (!defined $self->db->no_cache || !$self->db->no_cache){
+      if(exists($self->{'_slice_feature_cache'}->{$key})) {
+	  return $self->{'_slice_feature_cache'}->{$key};
+      }
   }
-
   my $sa = $slice->adaptor();
 
   # Hap/PAR support: retrieve normalized 'non-symlinked' slices
@@ -281,11 +287,13 @@ sub fetch_all_by_Slice_constraint {
     else {
       push @result, @$features;
     }
-  }
-
-  $self->{'_slice_feature_cache'}->{$key} = \@result;
-
+}
 
+  #will only use feature_cache when set attribute no_cache in DBAdaptor
+  if (!defined $self->db->no_cache || !$self->db->no_cache){
+      $self->{'_slice_feature_cache'}->{$key} = \@result;
+  }
+  
   return \@result;
 }
 
diff --git a/modules/Bio/EnsEMBL/DBSQL/DBAdaptor.pm b/modules/Bio/EnsEMBL/DBSQL/DBAdaptor.pm
index fcc84cd23e73d3b213560289c0a90696e40a507f..fd0b5b3f229f1b8d84c19e7fcdb73c04ac8ecada 100755
--- a/modules/Bio/EnsEMBL/DBSQL/DBAdaptor.pm
+++ b/modules/Bio/EnsEMBL/DBSQL/DBAdaptor.pm
@@ -58,6 +58,13 @@ my $reg = "Bio::EnsEMBL::Registry";
   Arg [-DNADB]: (optional) Bio::EnsEMBL::DBSQL::DBAdaptor DNADB 
                All sequence, assembly, contig information etc, will be
                retrieved from this database instead.
+  Arg [-NO_CACHE]: (optional) int 1
+               This option will turn off caching for slice features, so, 
+               every time a set of features is retrieved, they will come from
+               the database instead of the cache. This option is only recommended
+               for advanced users, specially if you need to store and retrieve
+               features. It might reduce performance when querying the database if 
+               not used properly. If in doubt, do not use it or ask in ensembl-dev               
   Arg [..]   : Other args are passed to superclass
                Bio::EnsEMBL::DBSQL::DBConnection
   Example    : $db = new Bio::EnsEMBL::DBSQL::DBAdaptor(
@@ -85,9 +92,9 @@ sub new {
 
   my $self = bless {}, $class;
 
-  my ( $is_multispecies, $species, $species_id, $group, $con, $dnadb ) =
+  my ( $is_multispecies, $species, $species_id, $group, $con, $dnadb, $no_cache ) =
     rearrange(
-            [qw(MULTISPECIES_DB SPECIES SPECIES_ID GROUP DBCONN DNADB)],
+            [qw(MULTISPECIES_DB SPECIES SPECIES_ID GROUP DBCONN DNADB NO_CACHE)],
             @args );
 
   if ( defined($con) ) { $self->dbc($con) }
@@ -106,7 +113,13 @@ sub new {
 
   $self = Bio::EnsEMBL::Utils::ConfigRegistry::gen_load($self);
 
-  if ( defined $dnadb ) { $self->dnadb($dnadb) }
+  if(defined $dnadb) {
+    $self->dnadb($dnadb);
+  }
+ 
+  if (defined $no_cache){
+      $self->no_cache($no_cache);
+  }
 
   return $self;
 }
@@ -707,6 +720,35 @@ sub species_id {
 }
 
 
+=head2 no_cache
+
+  Arg [1]    : (optional) int $arg
+               The new value of the no cache attribute used by this DBAdaptor. 
+  Example    : $no_cache = $dba->no_cache();
+  Description: Getter/Setter for the no_cache to use for 
+               this connection.  There is currently no point in setting 
+               this value after the connection has already been established 
+               by the constructor.
+  Returntype : int
+  Exceptions : none
+  Caller     : new
+  Status     : Stable
+
+=cut
+
+sub no_cache {
+  my ($self, $arg ) = @_;
+
+  if ( defined $arg ){
+      if ($arg != 1 && $arg != 0){
+	  throw("$arg is not allowed for this attribute. Only value 1|0 is allowed");
+      }
+      $self->{_no_cache} = $arg;
+  }
+  $self->{_no_cache};
+}
+
+
 =head2 group
 
   Arg [1]    : (optional) string $arg
diff --git a/modules/Bio/EnsEMBL/Registry.pm b/modules/Bio/EnsEMBL/Registry.pm
index 74e582d2e57d95526278773fa96e6c470e92c706..cdb6c98e1da9190e5f87e44daadb0b2cb82f1d3e 100644
--- a/modules/Bio/EnsEMBL/Registry.pm
+++ b/modules/Bio/EnsEMBL/Registry.pm
@@ -143,6 +143,13 @@ my $API_VERSION = 51;
                If not 0, the db connection will not be cleared, if 0 or
                if not set the db connections will be cleared (this is
                the default).
+  Arg [4]:     (optional) int 1
+               This option will turn off caching for slice features, so, 
+               every time a set of features is retrieved, they will come from
+               the database instead of the cache. This option is only recommended
+               for advanced users, specially if you need to store and retrieve
+               features. It might reduce performance when querying the database if 
+               not used properly. If in doubt, do not use it or ask in ensembl-dev            
   Example    : Bio::EnsEMBL::Registry->load_all();
   Returntype : none
   Exceptions : none
@@ -152,13 +159,14 @@ my $API_VERSION = 51;
 
 sub load_all {
     my $class = shift;
-    my ( $config_file, $verbose, $no_clear ) = @_;
+    my ( $config_file, $verbose, $no_clear, $no_cache ) = @_;
 
     $config_file ||= $ENV{ENSEMBL_REGISTRY}
       || $ENV{HOME} . "/.ensembl_init";
 
     $verbose  ||= 0;
     $no_clear ||= 0;
+    $no_cache ||= 0;
 
     if ( !defined($config_file) ) {
         if ($verbose) {
@@ -302,6 +310,10 @@ sub load_all {
                 foreach my $parameter ( $cfg->Parameters($section) ) {
                     $adaptor_args{ '-' . $parameter } =
                       $cfg->val( $section, $parameter );
+		    #when set, do not use the feature cache in the different adaptors
+		    if ($no_cache){
+			$adaptor_args{'-no_cache'} = 1;
+		    }
                 }
 
                 if ($verbose) {
@@ -1080,6 +1092,15 @@ my $self = shift;
 =head2 load_registry_from_url
 
   Arg [1] : string $url
+  Arg [2] : (optional) integer
+               If not 0, will print out all information.
+  Arg [3] : (optional) integer
+               This option will turn off caching for slice features, so, 
+               every time a set of features is retrieved, they will come from
+               the database instead of the cache. This option is only recommended
+               for advanced users, specially if you need to store and retrieve
+               features. It might reduce performance when querying the database if 
+               not used properly. If in doubt, do not use it or ask in ensembl-dev           
   Example : load_registry_from_url(mysql://anonymous@ensembldb.ensembl.org:3306);
   Description: Will load the correct versions of the ensembl databases for the
                software release it can find on a database instance into the 
@@ -1094,7 +1115,7 @@ my $self = shift;
 =cut
 
 sub load_registry_from_url {
-  my ($self, $url, $verbose) = @_;
+  my ($self, $url, $verbose, $no_cache) = @_;
 
   if ($url =~ /mysql\:\/\/([^\@]+\@)?([^\:\/]+)(\:\d+)?(\/\d+)?/) {
     my $user_pass = $1;
@@ -1114,7 +1135,8 @@ sub load_registry_from_url {
         -pass => $pass,
         -port => $port,
         -db_version => $version,
-        -verbose => $verbose);
+        -verbose => $verbose,
+	-no_cache => $no_cache);
   } else {
     throw("Only MySQL URLs are accepted at the moment");
   }
@@ -1143,6 +1165,13 @@ sub load_registry_from_url {
                  the connection is deleted if not used. By default this is 28800 (8 hours)
                  So set this to greater than this if your connection are getting deleted.
                  Only set this if you are having problems and know what you are doing.
+   Arg [-NO_CACHE]: (optional) int 1
+                 This option will turn off caching for slice features, so, 
+                 every time a set of features is retrieved, they will come from
+                 the database instead of the cache. This option is only recommended
+                 for advanced users, specially if you need to store and retrieve
+                 features. It might reduce performance when querying the database if 
+                 not used properly. If in doubt, do not use it or ask in ensembl-dev       
 
   Example : load_registry_from_db( -host => 'ensembldb.ensembl.org',
 				   -user => 'anonymous',
@@ -1161,9 +1190,9 @@ sub load_registry_from_db {
   my ( $self, @args ) = @_;
 
   my ( $host, $port, $user, $pass, $verbose, $db_version,
-       $wait_timeout ) =
+       $wait_timeout, $no_cache ) =
     rearrange(
-             [qw(HOST PORT USER PASS VERBOSE DB_VERSION WAIT_TIMEOUT )],
+             [qw(HOST PORT USER PASS VERBOSE DB_VERSION WAIT_TIMEOUT NO_CACHE)],
              @args );
 
   my $go_version = 0;
@@ -1250,7 +1279,8 @@ sub load_registry_from_db {
                                           -pass         => $pass,
                                           -port         => $port,
                                           -dbname       => $coredb,
-                                          -wait_timeout => $wait_timeout
+                                          -wait_timeout => $wait_timeout,
+					  -no_cache     => $no_cache
       );
 
     ( my $sp = $species ) =~ s/_/ /g;
@@ -1289,7 +1319,8 @@ sub load_registry_from_db {
                                           -pass            => $pass,
                                           -port            => $port,
                                           -dbname          => $multidb,
-                                          -wait_timeout => $wait_timeout
+                                          -wait_timeout => $wait_timeout,
+					  -no_cache     => $no_cache
         );
 
       ( my $sp = $species ) =~ s/_/ /g;
@@ -1317,7 +1348,8 @@ sub load_registry_from_db {
                                           -pass         => $pass,
                                           -port         => $port,
                                           -dbname       => $cdnadb,
-                                          -wait_timeout => $wait_timeout
+                                          -wait_timeout => $wait_timeout,
+					  -no_cache     => $no_cache
       );
     ( my $sp = $species ) =~ s/_/ /g;
     $self->add_alias( $species, $sp );
@@ -1338,7 +1370,8 @@ sub load_registry_from_db {
                                          -pass         => $pass,
                                          -port         => $port,
                                          -wait_timeout => $wait_timeout,
-                                         -dbname       => $vegadb );
+                                         -dbname       => $vegadb,
+					 -no_cache     => $no_cache);
     ( my $sp = $species ) =~ s/_/ /g;
     $self->add_alias( $species, $sp );
     print $vegadb. " loaded\n" if ($verbose);
@@ -1360,7 +1393,8 @@ sub load_registry_from_db {
                                          -pass    => $pass,
                                          -port    => $port,
                                          -wait_timeout => $wait_timeout,
-                                         -dbname       => $other_db );
+                                         -dbname       => $other_db,
+					 -no_cache     => $no_cache );
     ( my $sp = $species ) =~ s/_/ /g;
     $self->add_alias( $species, $sp );
     print $other_db. " loaded\n" if ($verbose);
@@ -1379,7 +1413,8 @@ sub load_registry_from_db {
 	-pass => $pass,
 	-port => $port,
         -wait_timeout => $wait_timeout,
-	-dbname => $userupload_db
+	-dbname => $userupload_db,
+	-no_cache     => $no_cache
       );
       (my $sp = $species ) =~ s/_/ /g;
       $self->add_alias( $species, $sp );
@@ -1410,7 +1445,8 @@ sub load_registry_from_db {
                                          -pass         => $pass,
                                          -port         => $port,
                                          -wait_timeout => $wait_timeout,
-                                         -dbname       => $variation_db
+                                         -dbname       => $variation_db,
+					 -no_cache     => $no_cache
         );
       print $variation_db. " loaded\n" if ($verbose);
     }
@@ -1437,7 +1473,8 @@ sub load_registry_from_db {
                                          -pass         => $pass,
                                          -port         => $port,
                                          -wait_timeout => $wait_timeout,
-                                         -dbname       => $funcgen_db );
+                                         -dbname       => $funcgen_db,
+					 -no_cache     => $no_cache );
       print $funcgen_db. " loaded\n" if ($verbose);
     }
   }
@@ -1466,7 +1503,8 @@ sub load_registry_from_db {
                                          -pass         => $pass,
                                          -port         => $port,
                                          -wait_timeout => $wait_timeout,
-                                         -dbname       => $compara_db );
+                                         -dbname       => $compara_db,
+					 -no_cache     => $no_cache );
       if ($verbose) {
         printf( "%s loaded\n", $compara_db );
       }
@@ -1488,7 +1526,8 @@ sub load_registry_from_db {
                                       -pass    => $pass,
                                       -port    => $port,
                                       -wait_timeout => $wait_timeout,
-                                      -dbname       => $ancestral_db );
+                                      -dbname       => $ancestral_db,
+				      -no_cache     => $no_cache);
     print $ancestral_db. " loaded\n" if ($verbose);
   } else {
     print "No Ancestral database found" if ($verbose);
@@ -1515,7 +1554,8 @@ sub load_registry_from_db {
                                                     -user    => $user,
                                                     -pass    => $pass,
                                                     -port    => $port,
-                                                    -dbname  => $go_db
+                                                    -dbname  => $go_db,
+						    -no_cache     => $no_cache
         );
       print $go_db. " loaded\n" if ($verbose);
     }