diff --git a/modules/Bio/EnsEMBL/Transcript.pm b/modules/Bio/EnsEMBL/Transcript.pm
index bc758351385452fd6bd3850ffd5ea7c4873a1cbd..d7f4bfa238285fb034866b6f39718e476de17516 100755
--- a/modules/Bio/EnsEMBL/Transcript.pm
+++ b/modules/Bio/EnsEMBL/Transcript.pm
@@ -1231,17 +1231,17 @@ sub add_Exon {
   if ( @{$ea} ) {
     if ( $exon->strand() == 1 ) {
 
-      if (    ( $exon->start() > $ea->[$#$ea]->end() )
-           && ( $exon->end() > $ea->[$#$ea]->end() ) )
-      {
+      if ( $exon->start() > $ea->[$#$ea]->end() ) {
         push( @{$ea}, $exon );
         $was_added = 1;
       } else {
         # insert it at correct place
         for ( my $i = 0; $i <= $#$ea; $i++ ) {
-          if (    ( $exon->start() < $ea->[$i]->start() )
-               && ( $exon->end() < $ea->[$i]->start() ) )
-          {
+          if ( $exon->start() < $ea->[$i]->start() ) {
+            if ( $exon->end() >= $ea->[$i]->start() ) {
+              # Overlap
+              last;
+            }
             splice( @{$ea}, $i, 0, $exon );
             $was_added = 1;
             last;
@@ -1251,17 +1251,17 @@ sub add_Exon {
 
     } else {
 
-      if (    ( $exon->start() < $ea->[$#$ea]->start() )
-           && ( $exon->end() < $ea->[$#$ea]->start() ) )
-      {
+      if ( $exon->end() < $ea->[$#$ea]->start() ) {
         push( @{$ea}, $exon );
         $was_added = 1;
       } else {
         # insert it at correct place
         for ( my $i = 0; $i <= $#$ea; $i++ ) {
-          if (    ( $exon->start() > $ea->[$i]->end() )
-               && ( $exon->end() > $ea->[$i]->end() ) )
-          {
+          if ( $exon->end() > $ea->[$i]->end() ) {
+            if ( $exon->start() <= $ea->[$i]->end() ) {
+              # Overlap
+              last;
+            }
             splice( @{$ea}, $i, 0, $exon );
             $was_added = 1;
             last;