diff --git a/modules/Bio/EnsEMBL/DBSQL/DensityFeatureAdaptor.pm b/modules/Bio/EnsEMBL/DBSQL/DensityFeatureAdaptor.pm
index 31f80d70aaea82a86193ba823eee5ba2a6de82d2..31c5f8a0f22ec58986c7f807cb722ccb0f80b552 100644
--- a/modules/Bio/EnsEMBL/DBSQL/DensityFeatureAdaptor.pm
+++ b/modules/Bio/EnsEMBL/DBSQL/DensityFeatureAdaptor.pm
@@ -404,8 +404,16 @@ sub _objs_from_sth {
 
       my $len = $seq_region_end - $seq_region_start + 1;
 
-      my @coords =
-        $mapper->map($sr_name, $seq_region_start, $seq_region_end,1, $sr_cs);
+      my @coords;
+
+      if (defined $dest_slice && $mapper->isa('Bio::EnsEMBL::ChainedAssemblyMapper')  ) {
+	    
+	  @coords = $mapper->map( $sr_name, $seq_region_start, $seq_region_end,
+                          1, $sr_cs, 0, $dest_slice);
+
+      } else {
+	  @coords = $mapper->map($sr_name, $seq_region_start, $seq_region_end,1, $sr_cs);
+      }
 
       #filter out gaps
       @coords = grep {!$_->isa('Bio::EnsEMBL::Mapper::Gap')} @coords;
diff --git a/modules/Bio/EnsEMBL/DBSQL/DnaAlignFeatureAdaptor.pm b/modules/Bio/EnsEMBL/DBSQL/DnaAlignFeatureAdaptor.pm
index 0af606583e3daa199c0620a68c457645c7cc8669..ab725f2b3e0f7c2588f412023191fe93268d8135 100644
--- a/modules/Bio/EnsEMBL/DBSQL/DnaAlignFeatureAdaptor.pm
+++ b/modules/Bio/EnsEMBL/DBSQL/DnaAlignFeatureAdaptor.pm
@@ -466,11 +466,22 @@ FEATURE:
     # Remap the feature coordinates to another coord system
     # if a mapper was provided.
     if ( defined($mapper) ) {
-      ( $seq_region_id,  $seq_region_start,
-        $seq_region_end, $seq_region_strand )
-        =
-        $mapper->fastmap( $sr_name, $seq_region_start, $seq_region_end,
+
+	if (defined $dest_slice && $mapper->isa('Bio::EnsEMBL::ChainedAssemblyMapper')  ) {
+	    ( $seq_region_id,  $seq_region_start,
+	      $seq_region_end, $seq_region_strand )
+		=
+		$mapper->map( $sr_name, $seq_region_start, $seq_region_end,
+                          $seq_region_strand, $sr_cs, 1, $dest_slice);
+
+	} else {
+
+	    ( $seq_region_id,  $seq_region_start,
+	      $seq_region_end, $seq_region_strand )
+		=
+		$mapper->fastmap( $sr_name, $seq_region_start, $seq_region_end,
                           $seq_region_strand, $sr_cs );
+	}
 
       # Skip features that map to gaps or coord system boundaries.
       if ( !defined($seq_region_id) ) { next FEATURE }
diff --git a/modules/Bio/EnsEMBL/DBSQL/ExonAdaptor.pm b/modules/Bio/EnsEMBL/DBSQL/ExonAdaptor.pm
index 5c1e447b6a14e7a04afed9ee7b7b2a44a12deeed..6748fadbbcf3bc3c53176e97f2faf13dd2c6f45e 100644
--- a/modules/Bio/EnsEMBL/DBSQL/ExonAdaptor.pm
+++ b/modules/Bio/EnsEMBL/DBSQL/ExonAdaptor.pm
@@ -617,11 +617,22 @@ FEATURE: while ( $sth->fetch() ) {
     # was provided.
     #
     if ( defined($dest_mapper) ) {
-      ( $seq_region_id,  $seq_region_start,
-        $seq_region_end, $seq_region_strand )
-        = $dest_mapper->fastmap( $sr_name, $seq_region_start,
+
+      if (defined $dest_slice && $dest_mapper->isa('Bio::EnsEMBL::ChainedAssemblyMapper')  ) {
+	    ( $seq_region_id,  $seq_region_start,
+	      $seq_region_end, $seq_region_strand )
+		=
+		$dest_mapper->map( $sr_name, $seq_region_start, $seq_region_end,
+                          $seq_region_strand, $sr_cs, 1, $dest_slice);
+
+      } else {
+
+	    ( $seq_region_id,  $seq_region_start,
+	      $seq_region_end, $seq_region_strand )
+		= $dest_mapper->fastmap( $sr_name, $seq_region_start,
                                  $seq_region_end, $seq_region_strand,
                                  $sr_cs );
+      }
 
       # Skip features that map to gaps or coord system boundaries.
       if ( !defined($seq_region_id) ) { next FEATURE }
diff --git a/modules/Bio/EnsEMBL/DBSQL/GeneAdaptor.pm b/modules/Bio/EnsEMBL/DBSQL/GeneAdaptor.pm
index e3250dfe85f446defae5f41cf23e176f6a122df2..81f0452d528de940fbd007bf7abac32c43dc2998 100644
--- a/modules/Bio/EnsEMBL/DBSQL/GeneAdaptor.pm
+++ b/modules/Bio/EnsEMBL/DBSQL/GeneAdaptor.pm
@@ -1681,9 +1681,21 @@ sub _objs_from_sth {
     #
     if($mapper) {
 
-      ($seq_region_id,$seq_region_start,$seq_region_end,$seq_region_strand) =
-        $mapper->fastmap($sr_name, $seq_region_start, $seq_region_end,
-			 $seq_region_strand, $sr_cs);
+	if (defined $dest_slice && $mapper->isa('Bio::EnsEMBL::ChainedAssemblyMapper')  ) {
+	    ( $seq_region_id,  $seq_region_start,
+	      $seq_region_end, $seq_region_strand )
+		=
+		$mapper->map( $sr_name, $seq_region_start, $seq_region_end,
+                          $seq_region_strand, $sr_cs, 1, $dest_slice);
+
+	} else {
+
+	    ( $seq_region_id,  $seq_region_start,
+	      $seq_region_end, $seq_region_strand )
+		=
+		$mapper->fastmap( $sr_name, $seq_region_start, $seq_region_end,
+                          $seq_region_strand, $sr_cs );
+	}
 
       #skip features that map to gaps or coord system boundaries
       next FEATURE if(!defined($seq_region_id));
diff --git a/modules/Bio/EnsEMBL/DBSQL/MiscFeatureAdaptor.pm b/modules/Bio/EnsEMBL/DBSQL/MiscFeatureAdaptor.pm
index 3e9c9ee8f5d223cbd0fc30f1cce7868dec6cce87..851eeb8799647f271b26ada3b9e1e3a8167aba87 100644
--- a/modules/Bio/EnsEMBL/DBSQL/MiscFeatureAdaptor.pm
+++ b/modules/Bio/EnsEMBL/DBSQL/MiscFeatureAdaptor.pm
@@ -437,9 +437,17 @@ sub _objs_from_sth {
       #
       if ($mapper) {
 
-        ($seq_region_id,$seq_region_start,$seq_region_end,$seq_region_strand) =
-          $mapper->fastmap($sr_name, $seq_region_start, $seq_region_end,
-                           $seq_region_strand, $sr_cs);
+
+	if (defined $dest_slice && $mapper->isa('Bio::EnsEMBL::ChainedAssemblyMapper')  ) {
+	    ( $seq_region_id,  $seq_region_start,$seq_region_end, $seq_region_strand ) =
+	       $mapper->map( $sr_name, $seq_region_start, $seq_region_end,
+                          $seq_region_strand, $sr_cs, 1, $dest_slice);
+
+	} else {
+
+	    ( $seq_region_id,  $seq_region_start,$seq_region_end, $seq_region_strand ) =
+	       $mapper->fastmap( $sr_name, $seq_region_start, $seq_region_end,$seq_region_strand, $sr_cs );
+	}
 
         #skip features that map to gaps or coord system boundaries
         if(!defined($seq_region_id)) {
diff --git a/modules/Bio/EnsEMBL/DBSQL/OperonAdaptor.pm b/modules/Bio/EnsEMBL/DBSQL/OperonAdaptor.pm
index 95304ffff01cc1b22f87a41170d401e9736ab837..f9cad35fa006cfb48981ea1d23e67e8152de1438 100644
--- a/modules/Bio/EnsEMBL/DBSQL/OperonAdaptor.pm
+++ b/modules/Bio/EnsEMBL/DBSQL/OperonAdaptor.pm
@@ -708,10 +708,22 @@ sub _objs_from_sth {
 		#
 		if ($mapper) {
 
-			(  $seq_region_id,  $seq_region_start,
-			   $seq_region_end, $seq_region_strand )
-			  = $mapper->fastmap( $sr_name, $seq_region_start, $seq_region_end,
-								  $seq_region_strand, $sr_cs );
+
+		    if (defined $dest_slice && $mapper->isa('Bio::EnsEMBL::ChainedAssemblyMapper')  ) {
+			( $seq_region_id,  $seq_region_start,
+			  $seq_region_end, $seq_region_strand )
+			    =
+			    $mapper->map( $sr_name, $seq_region_start, $seq_region_end,
+					  $seq_region_strand, $sr_cs, 1, $dest_slice);
+
+		    } else {
+
+			( $seq_region_id,  $seq_region_start,
+			  $seq_region_end, $seq_region_strand )
+			    =
+			    $mapper->fastmap( $sr_name, $seq_region_start, $seq_region_end,
+					      $seq_region_strand, $sr_cs );
+		    }
 
 			#skip features that map to gaps or coord system boundaries
 			next OPERON if ( !defined($seq_region_id) );
diff --git a/modules/Bio/EnsEMBL/DBSQL/OperonTranscriptAdaptor.pm b/modules/Bio/EnsEMBL/DBSQL/OperonTranscriptAdaptor.pm
index 2770f3b278232b11bb121c89f4861f4012c197d1..4c061bb197f16b3cab146ce4bae823cda79939f1 100644
--- a/modules/Bio/EnsEMBL/DBSQL/OperonTranscriptAdaptor.pm
+++ b/modules/Bio/EnsEMBL/DBSQL/OperonTranscriptAdaptor.pm
@@ -790,11 +790,23 @@ sub _objs_from_sth {
 		#
 		if ($mapper) {
 
-			(  $seq_region_id,  $seq_region_start,
-			   $seq_region_end, $seq_region_strand )
-			  = $mapper->fastmap( $sr_name, $seq_region_start, $seq_region_end,
-								  $seq_region_strand, $sr_cs );
-
+		    if (defined $dest_slice && $mapper->isa('Bio::EnsEMBL::ChainedAssemblyMapper')  ) {
+			( $seq_region_id,  $seq_region_start,
+			  $seq_region_end, $seq_region_strand )
+			    =
+			    $mapper->map( $sr_name, $seq_region_start, $seq_region_end,
+					  $seq_region_strand, $sr_cs, 1, $dest_slice);
+
+		    } else {
+
+			( $seq_region_id,  $seq_region_start,
+			  $seq_region_end, $seq_region_strand )
+			    =
+			    $mapper->fastmap( $sr_name, $seq_region_start, $seq_region_end,
+					      $seq_region_strand, $sr_cs );
+		    }
+
+		
 			#skip features that map to gaps or coord system boundaries
 			next OPERON if ( !defined($seq_region_id) );
 
diff --git a/modules/Bio/EnsEMBL/DBSQL/PredictionExonAdaptor.pm b/modules/Bio/EnsEMBL/DBSQL/PredictionExonAdaptor.pm
index 4a7530ad673edbd263408ebe621b14fe987ac077..8b26fa27ae8e29d40b84582637a8fe2976460ef2 100644
--- a/modules/Bio/EnsEMBL/DBSQL/PredictionExonAdaptor.pm
+++ b/modules/Bio/EnsEMBL/DBSQL/PredictionExonAdaptor.pm
@@ -389,9 +389,21 @@ sub _objs_from_sth {
     #
     if($dest_mapper) {
 
-      ($seq_region_id,$seq_region_start,$seq_region_end,$seq_region_strand) =
-        $dest_mapper->fastmap($sr_name, $seq_region_start, $seq_region_end,
-                              $seq_region_strand, $sr_cs);
+      if (defined $dest_slice && $dest_mapper->isa('Bio::EnsEMBL::ChainedAssemblyMapper')  ) {
+	    ( $seq_region_id,  $seq_region_start,
+	      $seq_region_end, $seq_region_strand )
+		=
+		$dest_mapper->map( $sr_name, $seq_region_start, $seq_region_end,
+                          $seq_region_strand, $sr_cs, 1, $dest_slice);
+
+      } else {
+
+	    ( $seq_region_id,  $seq_region_start,
+	      $seq_region_end, $seq_region_strand )
+		= $dest_mapper->fastmap( $sr_name, $seq_region_start,
+                                 $seq_region_end, $seq_region_strand,
+                                 $sr_cs );
+      }
 
       #skip features that map to gaps or coord system boundaries
       next FEATURE if(!defined($seq_region_id));
diff --git a/modules/Bio/EnsEMBL/DBSQL/PredictionTranscriptAdaptor.pm b/modules/Bio/EnsEMBL/DBSQL/PredictionTranscriptAdaptor.pm
index 349043376ac01e8573319edbb01c328f6c2f8f55..3602188b7e25a150e9eec3bc32a07b70d7896ff2 100644
--- a/modules/Bio/EnsEMBL/DBSQL/PredictionTranscriptAdaptor.pm
+++ b/modules/Bio/EnsEMBL/DBSQL/PredictionTranscriptAdaptor.pm
@@ -351,9 +351,21 @@ sub _objs_from_sth {
     #
     if($mapper) {
 
-      ($seq_region_id,$seq_region_start,$seq_region_end,$seq_region_strand) =
-        $mapper->fastmap($sr_name, $seq_region_start, $seq_region_end,
-			 $seq_region_strand, $sr_cs);
+      if (defined $dest_slice && $mapper->isa('Bio::EnsEMBL::ChainedAssemblyMapper')  ) {
+	    ( $seq_region_id,  $seq_region_start,
+	      $seq_region_end, $seq_region_strand )
+		=
+		$mapper->map( $sr_name, $seq_region_start, $seq_region_end,
+                          $seq_region_strand, $sr_cs, 1, $dest_slice);
+
+      } else {
+
+	    ( $seq_region_id,  $seq_region_start,
+	      $seq_region_end, $seq_region_strand )
+		=
+		$mapper->fastmap( $sr_name, $seq_region_start, $seq_region_end,
+                          $seq_region_strand, $sr_cs );
+      }
 
       #skip features that map to gaps or coord system boundaries
       next FEATURE if(!defined($seq_region_id));
diff --git a/modules/Bio/EnsEMBL/DBSQL/ProteinAlignFeatureAdaptor.pm b/modules/Bio/EnsEMBL/DBSQL/ProteinAlignFeatureAdaptor.pm
index 99c2ebca24dcfe7146fd0f9671aee6c4021a5ace..b1a3d10952414dc9c8f6dbf4285f458d139fa572 100644
--- a/modules/Bio/EnsEMBL/DBSQL/ProteinAlignFeatureAdaptor.pm
+++ b/modules/Bio/EnsEMBL/DBSQL/ProteinAlignFeatureAdaptor.pm
@@ -255,9 +255,21 @@ sub _objs_from_sth {
     #
     if($mapper) {
 
-      ($seq_region_id,$seq_region_start,$seq_region_end,$seq_region_strand) =
-        $mapper->fastmap($sr_name, $seq_region_start, $seq_region_end,
-                          $seq_region_strand, $sr_cs);
+	if (defined $dest_slice && $mapper->isa('Bio::EnsEMBL::ChainedAssemblyMapper')  ) {
+	    ( $seq_region_id,  $seq_region_start,
+	      $seq_region_end, $seq_region_strand )
+		=
+		$mapper->map( $sr_name, $seq_region_start, $seq_region_end,
+                          $seq_region_strand, $sr_cs, 1, $dest_slice);
+
+	} else {
+
+	    ( $seq_region_id,  $seq_region_start,
+	      $seq_region_end, $seq_region_strand )
+		=
+		$mapper->fastmap( $sr_name, $seq_region_start, $seq_region_end,
+                          $seq_region_strand, $sr_cs );
+	}
 
       #skip features that map to gaps or coord system boundaries
       next FEATURE if(!defined($seq_region_id));
diff --git a/modules/Bio/EnsEMBL/DBSQL/RepeatFeatureAdaptor.pm b/modules/Bio/EnsEMBL/DBSQL/RepeatFeatureAdaptor.pm
index 4e8363faf46ae676ab53d479ba9f7497fc5b96c2..d8d97ccd0e83f64050d601a76c190f9612396303 100644
--- a/modules/Bio/EnsEMBL/DBSQL/RepeatFeatureAdaptor.pm
+++ b/modules/Bio/EnsEMBL/DBSQL/RepeatFeatureAdaptor.pm
@@ -273,9 +273,21 @@ sub _objs_from_sth {
     #
     if($mapper) {
 
-      ($seq_region_id,$seq_region_start,$seq_region_end,$seq_region_strand) =
-        $mapper->fastmap($sr_name, $seq_region_start, $seq_region_end,
-                          $seq_region_strand, $sr_cs);
+      if (defined $dest_slice && $mapper->isa('Bio::EnsEMBL::ChainedAssemblyMapper')  ) {
+	    ( $seq_region_id,  $seq_region_start,
+	      $seq_region_end, $seq_region_strand )
+		=
+		$mapper->map( $sr_name, $seq_region_start, $seq_region_end,
+                          $seq_region_strand, $sr_cs, 1, $dest_slice);
+
+      } else {
+
+	    ( $seq_region_id,  $seq_region_start,
+	      $seq_region_end, $seq_region_strand )
+		=
+		$mapper->fastmap( $sr_name, $seq_region_start, $seq_region_end,
+                          $seq_region_strand, $sr_cs );
+      }
 
       #skip features that map to gaps or coord system boundaries
       next FEATURE if(!defined($seq_region_id));
diff --git a/modules/Bio/EnsEMBL/DBSQL/SimpleFeatureAdaptor.pm b/modules/Bio/EnsEMBL/DBSQL/SimpleFeatureAdaptor.pm
index d974a44852289bcd81ebb993d7e2470e07f1218c..82871dc92d5eac47a492f98da63fd1a58d72604b 100644
--- a/modules/Bio/EnsEMBL/DBSQL/SimpleFeatureAdaptor.pm
+++ b/modules/Bio/EnsEMBL/DBSQL/SimpleFeatureAdaptor.pm
@@ -260,9 +260,21 @@ sub _objs_from_sth {
     #
     if($mapper) {
 
-      ($seq_region_id,$seq_region_start,$seq_region_end,$seq_region_strand) =
-        $mapper->fastmap($sr_name, $seq_region_start, $seq_region_end,
-                          $seq_region_strand, $sr_cs);
+      if (defined $dest_slice && $mapper->isa('Bio::EnsEMBL::ChainedAssemblyMapper')  ) {
+	    ( $seq_region_id,  $seq_region_start,
+	      $seq_region_end, $seq_region_strand )
+		=
+		$mapper->map( $sr_name, $seq_region_start, $seq_region_end,
+                          $seq_region_strand, $sr_cs, 1, $dest_slice);
+
+      } else {
+
+	    ( $seq_region_id,  $seq_region_start,
+	      $seq_region_end, $seq_region_strand )
+		=
+		$mapper->fastmap( $sr_name, $seq_region_start, $seq_region_end,
+                          $seq_region_strand, $sr_cs );
+      }
 
       #skip features that map to gaps or coord system boundaries
       next FEATURE if(!defined($seq_region_id));
diff --git a/modules/Bio/EnsEMBL/DBSQL/SplicingEventAdaptor.pm b/modules/Bio/EnsEMBL/DBSQL/SplicingEventAdaptor.pm
index 0e71118ed2dd9eafad539356b78da613755a694d..14a1e28f2425615621aeceab2e62fcec1ab90ad8 100644
--- a/modules/Bio/EnsEMBL/DBSQL/SplicingEventAdaptor.pm
+++ b/modules/Bio/EnsEMBL/DBSQL/SplicingEventAdaptor.pm
@@ -459,11 +459,22 @@ FEATURE:
     # Remap the feature coordinates to another coord system if a mapper
     # was provided.
     if ( defined($dest_mapper) ) {
-      ( $seq_region_id,  $seq_region_start,
-        $seq_region_end, $seq_region_strand )
-        = $dest_mapper->fastmap( $sr_name, $seq_region_start,
+
+      if (defined $dest_slice && $dest_mapper->isa('Bio::EnsEMBL::ChainedAssemblyMapper')  ) {
+	    ( $seq_region_id,  $seq_region_start,
+	      $seq_region_end, $seq_region_strand )
+		=
+		$dest_mapper->map( $sr_name, $seq_region_start, $seq_region_end,
+                          $seq_region_strand, $sr_cs, 1, $dest_slice);
+
+      } else {
+
+	    ( $seq_region_id,  $seq_region_start,
+	      $seq_region_end, $seq_region_strand )
+		= $dest_mapper->fastmap( $sr_name, $seq_region_start,
                                  $seq_region_end, $seq_region_strand,
                                  $sr_cs );
+      }
 
       # Skip features that map to gaps or coord system boundaries.
       if ( !defined($seq_region_id) ) { next FEATURE }
diff --git a/modules/Bio/EnsEMBL/DBSQL/TranscriptAdaptor.pm b/modules/Bio/EnsEMBL/DBSQL/TranscriptAdaptor.pm
index 4427e7e5a6e7c30fc17338aa32e2833b7fd28f3b..3993b728ae3cdb5445a4a0e6e0c73f47dabd36e6 100644
--- a/modules/Bio/EnsEMBL/DBSQL/TranscriptAdaptor.pm
+++ b/modules/Bio/EnsEMBL/DBSQL/TranscriptAdaptor.pm
@@ -1539,9 +1539,21 @@ sub _objs_from_sth {
     #
     if($dest_mapper) {
 
-      ($seq_region_id,$seq_region_start,$seq_region_end,$seq_region_strand) =
-        $dest_mapper->fastmap($sr_name, $seq_region_start, $seq_region_end,
-                              $seq_region_strand, $sr_cs);
+      if (defined $dest_slice && $dest_mapper->isa('Bio::EnsEMBL::ChainedAssemblyMapper')  ) {
+	    ( $seq_region_id,  $seq_region_start,
+	      $seq_region_end, $seq_region_strand )
+		=
+		$dest_mapper->map( $sr_name, $seq_region_start, $seq_region_end,
+                          $seq_region_strand, $sr_cs, 1, $dest_slice);
+
+      } else {
+
+	    ( $seq_region_id,  $seq_region_start,
+	      $seq_region_end, $seq_region_strand )
+		= $dest_mapper->fastmap( $sr_name, $seq_region_start,
+                                 $seq_region_end, $seq_region_strand,
+                                 $sr_cs );
+      }
 
       #skip features that map to gaps or coord system boundaries
       next FEATURE if(!defined($seq_region_id));