diff --git a/modules/Bio/EnsEMBL/BaseAlignFeature.pm b/modules/Bio/EnsEMBL/BaseAlignFeature.pm
index dd93bc32ebb99b57725529f4e010c843365e6c7f..37a547575309c2c00baaf22ea4aaf3a8f156e968 100644
--- a/modules/Bio/EnsEMBL/BaseAlignFeature.pm
+++ b/modules/Bio/EnsEMBL/BaseAlignFeature.pm
@@ -183,6 +183,38 @@ sub cigar_string {
 }
 
 
+=head2 alignment_length
+
+  Arg [1]    : None
+  Example    : 
+  Description: return the alignment length (including indels) based on the cigar_string
+  Returntype : int
+  Exceptions : 
+  Caller     : 
+
+=cut
+
+sub alignment_length {
+  my $self = shift;
+
+  if (! defined $self->{'_alignment_length'} && defined $self->cigar_string) {
+    
+    my @pieces = ( $self->cigar_string =~ /(\d*[MDI])/g );
+    unless (@pieces) {
+      print STDERR "Error parsing cigar_string\n";
+    }
+    my $alignment_length = 0;
+    foreach my $piece (@pieces) {
+      my ($length) = ( $piece =~ /^(\d*)/ );
+      if (! defined $length || $length eq "") {
+        $length = 1;
+      }
+      $alignment_length += $length;
+    }
+    $self->{'_alignment_length'} = $alignment_length;
+  }
+  return $self->{'_alignment_length'};
+}
 
 =head2 ungapped_features