diff --git a/modules/Bio/EnsEMBL/IdMapping/StableIdMapper.pm b/modules/Bio/EnsEMBL/IdMapping/StableIdMapper.pm
index b294eae3456e745296de53b36959467d638920d0..c742a1060cc83ad18a9eb89ff15cdd1f12861bcd 100644
--- a/modules/Bio/EnsEMBL/IdMapping/StableIdMapper.pm
+++ b/modules/Bio/EnsEMBL/IdMapping/StableIdMapper.pm
@@ -691,13 +691,35 @@ sub generate_mapping_stats {
   my $novel_total = $stats->{'mapped_novel'} + $stats->{'lost_novel'};
 
   # no split into known and novel for exons
-  unless ($type eq 'exon') {
-    $result .= sprintf($fmt2, 'known', $stats->{'mapped_known'},
-      $stats->{'lost_known'}, $stats->{'mapped_known'}/$known_total*100);
-    $result .= sprintf($fmt2, 'novel', $stats->{'mapped_novel'},
-      $stats->{'lost_novel'}, $stats->{'mapped_novel'}/$novel_total*100);
-  }
-  
+  unless ( $type eq 'exon' ) {
+    if ( $known_total > 0 ) {
+      $result .= sprintf( $fmt2,
+                          'known',
+                          $stats->{'mapped_known'},
+                          $stats->{'lost_known'},
+                          $stats->{'mapped_known'}/$known_total*100 );
+    } else {    # Avoid division by zero
+      $result .= sprintf( $fmt2,
+                          'known',
+                          $stats->{'mapped_known'},
+                          $stats->{'lost_known'}, 0 );
+    }
+
+    if ( $novel_total > 0 ) {
+      $result .= sprintf( $fmt2,
+                          'novel',
+                          $stats->{'mapped_novel'},
+                          $stats->{'lost_novel'},
+                          $stats->{'mapped_novel'}/$novel_total*100 );
+    } else {    # Avoid division by zero
+      $result .= sprintf( $fmt2,
+                          'novel',
+                          $stats->{'mapped_novel'},
+                          $stats->{'lost_novel'}, 0 );
+    }
+
+  } ## end unless ( $type eq 'exon' )
+
   $result .= sprintf($fmt2, 'total', $mapped_total, $lost_total,
     $mapped_total/($known_total + $novel_total)*100);