diff --git a/modules/Bio/EnsEMBL/Chromosome.pm b/modules/Bio/EnsEMBL/Chromosome.pm
index 9363b5531705fd2033fc68b5da0569128d2f9a31..7a8e7699893662a723e706b2ed34dcf48fbb715f 100755
--- a/modules/Bio/EnsEMBL/Chromosome.pm
+++ b/modules/Bio/EnsEMBL/Chromosome.pm
@@ -53,6 +53,7 @@ use Bio::EnsEMBL::Root;
                                      -adaptor       => $adaptor,
                                      -length        => $length,
                                      -known_genes   => $known_genes,
+                                     -xref_genes    => $xref_genes,
                                      -unknown_genes => $unknown_genes,
                                      -snps          => $snps);
   Description: Creates a new chromosome object
@@ -70,12 +71,13 @@ sub new {
     bless($self, $class);
 	 
     my ( $chr_name, $chromosome_id, $adaptor, $length, 
-	 $known_genes, $unknown_genes, $snps) = 
+	 $known_genes, $xref_genes, $unknown_genes, $snps) = 
 	 $self->_rearrange([qw(CHR_NAME
 			       DBID
 			       ADAPTOR 
 			       LENGTH 
 			       KNOWN_GENES
+			       XREF_GENES
 			       UNKNOWN_GENES
 			       SNPS)], 
 			   @args);
@@ -89,6 +91,7 @@ sub new {
     $self->dbID($chromosome_id);
     $self->unknown_genes($unknown_genes);
     $self->length($length);
+    $self->xref_genes($xref_genes);
     $self->known_genes($known_genes);
     $self->snps($snps);
 
@@ -187,6 +190,28 @@ sub length {
 
 
 
+=head2 xref_genes
+
+  Arg [1]    : int $number_of_xref_genes
+  Example    : none
+  Description: get/set for the attribute xref_genes, the number of xref genes
+               on this chromosome
+  Returntype : int
+  Exceptions : none
+  Caller     : general
+
+=cut
+
+sub xref_genes {
+  my ($self, $xref_genes) = @_;
+
+  if(defined $xref_genes) {
+    $self->{'xref_genes'} = $xref_genes;
+  }
+
+  return $self->{'xref_genes'};
+}
+
 =head2 known_genes
 
   Arg [1]    : int $number_of_known_genes
diff --git a/modules/Bio/EnsEMBL/Gene.pm b/modules/Bio/EnsEMBL/Gene.pm
index a4501e917ea70282ae1611d8bf400b6783fd6672..1c1adbc7c1ccea2853f942f407d8bf511f00f9c7 100755
--- a/modules/Bio/EnsEMBL/Gene.pm
+++ b/modules/Bio/EnsEMBL/Gene.pm
@@ -440,6 +440,34 @@ sub external_db {
   }
 }
 
+=head2 external_status
+
+  Arg [1]    : string $external_status
+  Example    : none
+  Description: get/set for attribute external_status. The status of
+               the external db of the one that belongs to the external_name.
+  Returntype : string
+  Exceptions : none
+  Caller     : general
+
+=cut
+
+sub external_status {
+  my ( $self, $ext_status ) = @_;
+
+  return $self->{'_ext_status'} = $ext_status if defined $ext_status;
+  return $self->{'_ext_status'} if exists $self->{'_ext_status'};
+
+  my $display_xref = $self->display_xref();
+
+  if( defined $display_xref ) {
+    return $display_xref->status()
+  } else {
+    return undef;
+  }
+}
+
+
 
 =head2 description
 
diff --git a/modules/Bio/EnsEMBL/Lite/ChromosomeAdaptor.pm b/modules/Bio/EnsEMBL/Lite/ChromosomeAdaptor.pm
index 40bd433e76ddc4cc758a75ed304a612b5529199a..02884b2f0673cd0e5ca44b78fb9d0a5e8ba32ef3 100644
--- a/modules/Bio/EnsEMBL/Lite/ChromosomeAdaptor.pm
+++ b/modules/Bio/EnsEMBL/Lite/ChromosomeAdaptor.pm
@@ -88,14 +88,14 @@ sub fetch_by_dbID {
   # from the database and add it to the cache.
   #
   unless($chr = $self->{'_chr_cache'}->{$id}) {
-    my $sth = $self->prepare( "SELECT name, known_genes, unknown_genes, 
+    my $sth = $self->prepare( "SELECT name, known_genes, unknown_genes, xref_genes, 
                                       snps, length
                                FROM chromosome
                                WHERE chromosome_id = ?" );
     $sth->execute( $id );
     
-    my($name, $known_genes, $unknown_genes, $snps, $length);
-    $sth->bind_columns(\$name,\$known_genes,\$unknown_genes,\$snps,\$length); 
+    my($name, $known_genes, $unknown_genes, $snps, $length, $xref_genes);
+    $sth->bind_columns(\$name,\$known_genes,\$unknown_genes,\$xref_genes, \$snps,\$length); 
     $sth->fetch();
    
 
@@ -112,6 +112,7 @@ sub fetch_by_dbID {
                                          -dbID => $id,
 					 -chr_name => $name,
 					 -known_genes => $known_genes,
+					 -xref_genes => $xref_genes,
 					 -unknown_genes => $unknown_genes,
 					 -snps => $snps,
 					 '-length' => $length );
@@ -156,14 +157,14 @@ sub fetch_by_chr_name{
   # from the database and add it to the cache.
   #
   unless($chr = $self->{'_chr_name_cache'}->{$chr_name}) {
-    my $sth = $self->prepare( "SELECT chromosome_id, known_genes, unknown_genes, 
+    my $sth = $self->prepare( "SELECT chromosome_id, known_genes, unknown_genes, xref_genes,
                                       snps, length
                                FROM chromosome
                                WHERE name = ?" );
     $sth->execute( $chr_name );
     
-    my($dbID, $known_genes, $unknown_genes, $snps, $length);
-    $sth->bind_columns(\$dbID,\$known_genes,\$unknown_genes,\$snps,\$length); 
+    my($name, $known_genes, $unknown_genes, $snps, $length, $xref_genes, $dbID);
+    $sth->bind_columns(\$dbID,\$known_genes,\$unknown_genes,\$xref_genes, \$snps,\$length); 
 
     if ($sth->rows > 0) {
     $sth->fetch();
@@ -172,6 +173,7 @@ sub fetch_by_chr_name{
 					 -dbID => $dbID,
 					 -chr_name => $chr_name,
 					 -known_genes => $known_genes,
+					 -xref_genes => $xref_genes,
 					 -unknown_genes => $unknown_genes,
 					 -snps => $snps,
 					 '-length' => $length );
@@ -201,13 +203,13 @@ sub fetch_all {
   my @chrs = (); 
 
 
-    my $sth = $self->prepare( "SELECT chromosome_id, name, known_genes, 
+    my $sth = $self->prepare( "SELECT chromosome_id, name, known_genes, xref_genes,
                                       unknown_genes, snps, length
                                FROM chromosome" );
     $sth->execute();
     
-    my($chromosome_id, $name, $known_genes, $unknown_genes, $snps, $length);
-    $sth->bind_columns(\$chromosome_id,\$name,\$known_genes,
+    my($chromosome_id, $name, $known_genes, $unknown_genes, $xref_genes, $snps, $length);
+    $sth->bind_columns(\$chromosome_id,\$name,\$known_genes,\$xref_genes,
                        \$unknown_genes,\$snps,\$length); 
 
     while($sth->fetch()) {
@@ -216,6 +218,7 @@ sub fetch_all {
 					 -chr_name => $name,
 					 -dbID => $chromosome_id,
 					 -known_genes => $known_genes,
+					 -xref_genes => $xref_genes,
 					 -unknown_genes => $unknown_genes,
 					 -snps => $snps,
 					 '-length' => $length );
diff --git a/modules/Bio/EnsEMBL/Lite/GeneAdaptor.pm b/modules/Bio/EnsEMBL/Lite/GeneAdaptor.pm
index 327b1db98c0b69af9adbd636704a0406e749a4a3..6e667562fa24d162262b21f485272505c601f8f6 100644
--- a/modules/Bio/EnsEMBL/Lite/GeneAdaptor.pm
+++ b/modules/Bio/EnsEMBL/Lite/GeneAdaptor.pm
@@ -182,10 +182,12 @@ sub fetch_all_by_Slice {
     my $sth = $self->prepare( "SELECT t.id, t.transcript_id, t.chr_name, t.chr_start, t.chr_end, 
               t.chr_strand, t.transcript_name, t.translation_id, 
               t.translation_name, t.gene_id, t.type, t.gene_name, t.db, 
-              t.exon_structure, t.external_name, t.exon_ids, t.external_db, 
+              t.exon_structure, t.external_name, t.external_status, t.exon_ids, t.external_db, 
               t.coding_start, t.coding_end, 
               g.external_name as gene_external_name, 
-              g.external_db as gene_external_db, g.type as gene_type 
+              g.external_db as gene_external_db, 
+              g.external_status as gene_external_status, 
+              g.type as gene_type 
         FROM  transcript t 
     LEFT JOIN gene g 
            ON g.gene_id = t.gene_id
@@ -256,9 +258,10 @@ sub fetch_by_stable_id {
     ( "SELECT t.id, t.transcript_id, t.chr_name, t.chr_start, t.chr_end, 
               t.chr_strand, t.transcript_name, t.translation_id, 
               t.translation_name, t.gene_id, t.type, t.gene_name, 
-              t.db, t.exon_structure, t.external_name, t.exon_ids,
+              t.db, t.exon_structure, t.external_name, t.external_status, t.exon_ids,
               t.external_db, t.coding_start, t.coding_end, 
               g.external_name as gene_external_name, 
+              g.external_status as gene_external_status, 
               g.external_db as gene_external_db, g.type as gene_type 
         FROM  transcript t 
     LEFT JOIN gene g 
@@ -291,9 +294,10 @@ sub fetch_by_transcript_stable_id {
     ( "SELECT t.id, t.transcript_id, t.chr_name, t.chr_start, t.chr_end, 
               t.chr_strand, t.transcript_name, t.translation_id, 
               t.translation_name, t.gene_id, t.type, t.gene_name, t.db, 
-              t.exon_structure, t.external_name, t.exon_ids,
+              t.exon_structure, t.external_name, t.external_status, t.exon_ids,
               t.external_db, t.coding_start, t.coding_end, 
               g.external_name as gene_external_name, 
+              g.external_status as gene_external_status, 
               g.external_db as gene_external_db, g.type as gene_type 
         FROM  transcript t 
     LEFT JOIN gene g 
@@ -346,6 +350,7 @@ sub _objects_from_sth {
       $gene->strand( $hr->{'chr_strand'} );
 
       if( defined $hr->{'gene_type' } ) {
+        $gene->external_name( $hr->{'gene_external_status'} );
 	$gene->external_name( $hr->{'gene_external_name'} );
 	$gene->external_db( $hr->{'gene_external_db'} );
 	$gene->type( $hr->{'gene_type'} );
@@ -482,6 +487,7 @@ sub _objects_from_sth {
     $transcript->coding_end( $coding_end );
     $transcript->stable_id( $hr->{ 'transcript_name' });
     $transcript->type( $hr->{ 'type' } );
+    $transcript->external_status( $hr->{'external_status'} );
     $transcript->external_name( $hr->{'external_name'} );
     $transcript->external_db( $hr->{'external_db' } );
 
@@ -550,7 +556,7 @@ sub _get_empty_Genes {
   
   my $sth = $self->prepare
     ( "SELECT g.db, g.gene_id, g.gene_name, g.chr_name, g.chr_start, 
-              g.chr_end, g.chr_strand, g.type, g.external_name, g.external_db
+              g.chr_end, g.chr_strand, g.type, g.external_name, g.external_db, g.external_status
        FROM   gene g
        WHERE  g.chr_name = ? AND g.chr_start <= ? AND 
               g.chr_start >= ? AND g.chr_end >= ?" );
@@ -576,6 +582,7 @@ sub _get_empty_Genes {
     $gene->strand( $hashref->{'chr_strand'} );
 
     if( defined $hashref->{'type' } ) {
+      $gene->external_status( $hashref->{'external_status'} );
       $gene->external_name( $hashref->{'external_name'} );
       $gene->external_db( $hashref->{'external_db'} );
       $gene->type( $hashref->{'type'} );
@@ -629,10 +636,11 @@ sub fetch_all_by_external_name {
     my $sth = $self->prepare( "SELECT t.id, t.transcript_id, t.chr_name, t.chr_start, t.chr_end,
               t.chr_strand, t.transcript_name, t.translation_id,
               t.translation_name, t.gene_id, t.type, t.gene_name, t.db,
-              t.exon_structure, t.external_name, t.exon_ids, t.external_db,
+              t.exon_structure, t.external_name, t.exon_ids, t.external_db, t.external_status,
               t.coding_start, t.coding_end,
               g.external_name as gene_external_name,
-              g.external_db as gene_external_db, g.type as gene_type
+              g.external_db as gene_external_db, g.external_status as gene_external_status,
+              g.type as gene_type
          FROM transcript t, gene_xref as gx, gene as g
         where g.gene_id = t.gene_id AND g.db = t.db and t.db = ? and gx.external_name = ? and gx.gene_id = g.gene_id
         order by g.gene_name, t.gene_name"
@@ -656,7 +664,7 @@ sub _get_empty_Genes_by_external_name {
 
   my $sth = $self->prepare(
 	 "SELECT distinct g.db, g.gene_id, g.gene_name, g.chr_name, g.chr_start,
-              g.chr_end, g.chr_strand, g.type, g.external_name, g.external_db
+              g.chr_end, g.chr_strand, g.type, g.external_name, g.external_db, g.external_status
        FROM   gene g, gene_xref as gx
        WHERE  g.gene_id = gx.gene_id and g.db = ? and gx.external_name = ?" );
 
@@ -678,6 +686,7 @@ sub _get_empty_Genes_by_external_name {
     $gene->strand( $hashref->{'chr_strand'} );
 
     if( defined $hashref->{'type' } ) {
+      $gene->external_status( $hashref->{'external_status'} );
       $gene->external_name( $hashref->{'external_name'} );
       $gene->external_db( $hashref->{'external_db'} );
       $gene->type( $hashref->{'type'} );
@@ -726,6 +735,7 @@ sub store {
           chr_strand = ?,
           description = ?,
           external_db = ?,
+          external_status = ?,
           external_name = ? " 
     );
 
@@ -733,6 +743,7 @@ sub store {
 		 $gene->type(), $gene->dbID(), $gene->stable_id(),
 		 $gene->chr_name(), $gene->start(), $gene->end(),
 		 $gene->strand(), $gene->description(), $gene->external_db(),
+                 $gene->external_status(), 
 		 $gene->external_name() );
 
  # now store transcripts
@@ -757,7 +768,8 @@ sub store {
         gene_name = ?,
    exon_structure = ?,
          exon_ids = ?,
-      external_db = ?,
+     external_db = ?,
+  external_status = ?,
     external_name = ? " 
     );
 
@@ -791,7 +803,7 @@ sub store {
 		   $tr->start(), $tr->end(), $gene->strand(), $tr->coding_start(),
 		   $tr->coding_end(), $tr->translation->dbID(), 
 		   $tr->translation->stable_id(), $gene->dbID(), $gene->stable_id(),
-		   $exon_structure, $exon_ids, $tr->external_db(),
+		   $exon_structure, $exon_ids, $tr->external_db(), $tr->external_status(),
 		   $tr->external_name() );
   }
 }
diff --git a/modules/Bio/EnsEMBL/Transcript.pm b/modules/Bio/EnsEMBL/Transcript.pm
index 7c37d21bc22a02eb17399dfd3d5381d24e8403aa..a41fb37123f021e1c532f3664e3ee2302c923581 100755
--- a/modules/Bio/EnsEMBL/Transcript.pm
+++ b/modules/Bio/EnsEMBL/Transcript.pm
@@ -182,6 +182,37 @@ sub external_db {
   }
 }
 
+=head2 external_status
+
+ Title   : external_status
+ Usage   : $ext_db = $obj->external_status();
+ Function: external_name if available
+ Returns : the external db link for this transcript
+ Args    : new external db (optional)
+
+=cut
+
+sub external_status { 
+  my ( $self, $ext_status ) = @_;
+
+  if(defined $ext_status) {
+    return ( $self->{'_ext_status'} = $ext_status );
+  }
+
+  if( exists $self->{'_ext_status'} ) {
+    return $self->{'_ext_status'};
+  }
+
+  my $display_xref = $self->display_xref();
+
+  if( defined $display_xref ) {
+    return $display_xref->status()
+  } else {
+    return undef;
+  }
+}
+
+
 
 =head2 external_name