[med-svn] [bioperl] 02/10: Imported Upstream version 1.7~rc3

Charles Plessy plessy at moszumanska.debian.org
Mon Jul 11 13:09:17 UTC 2016


This is an automated email from the git hooks/post-receive script.

plessy pushed a commit to branch master
in repository bioperl.

commit 1ceb9ac43ba11263d9045e78167dc0c2fad66549
Author: Charles Plessy <plessy at debian.org>
Date:   Mon Jul 11 21:42:46 2016 +0900

    Imported Upstream version 1.7~rc3
---
 .travis.yml                                        |   25 +-
 AUTHORS                                            |    2 +
 Bio/Align/Utilities.pm                             |   11 +-
 Bio/AlignIO/nexml.pm                               |   43 +-
 Bio/AlignIO/phylip.pm                              |    2 +-
 Bio/AlignIO/stockholm.pm                           |    2 +-
 Bio/Coordinate/Chain.pm                            |  151 --
 Bio/Coordinate/Collection.pm                       |  363 ---
 Bio/Coordinate/ExtrapolatingPair.pm                |  185 --
 Bio/Coordinate/GeneMapper.pm                       | 1286 ----------
 Bio/Coordinate/Graph.pm                            |  336 ---
 Bio/Coordinate/MapperI.pm                          |  133 --
 Bio/Coordinate/Pair.pm                             |  381 ---
 Bio/Coordinate/Result.pm                           |  230 --
 Bio/Coordinate/Result/Gap.pm                       |   23 -
 Bio/Coordinate/Result/Match.pm                     |   26 -
 Bio/Coordinate/ResultI.pm                          |   23 -
 Bio/Coordinate/Utils.pm                            |  188 --
 Bio/DB/BioFetch.pm                                 |    6 +-
 Bio/DB/EMBL.pm                                     |    2 +-
 Bio/DB/Fasta.pm                                    |   17 +-
 Bio/DB/Flat.pm                                     |    4 +-
 Bio/DB/IndexedBase.pm                              |   58 +-
 Bio/DB/NCBIHelper.pm                               |    4 +-
 Bio/DB/Qual.pm                                     |    9 +-
 Bio/DB/Query/GenBank.pm                            |    2 +-
 Bio/DB/Registry.pm                                 |    4 +-
 Bio/DB/SeqFeature/Store/DBI/SQLite.pm              |   97 +-
 Bio/DB/SeqFeature/Store/LoadHelper.pm              |    2 +-
 Bio/DB/SeqFeature/Store/Loader.pm                  |    8 +-
 Bio/DB/SeqFeature/Store/memory.pm                  |    7 +-
 Bio/DB/SeqHound.pm                                 |  758 ------
 Bio/DB/Taxonomy/entrez.pm                          |    2 +-
 Bio/DB/Taxonomy/flatfile.pm                        |   27 +-
 Bio/DB/Taxonomy/sqlite.pm                          |  696 ++++++
 Bio/Factory/FTLocationFactory.pm                   |   47 +-
 Bio/Index/Fasta.pm                                 |    3 +-
 Bio/Index/Qual.pm                                  |    3 +-
 Bio/Location/Split.pm                              |  207 +-
 Bio/MolEvol/CodonModel.pm                          |    8 +-
 Bio/NexmlIO.pm                                     |   51 +-
 Bio/Ontology/OBOEngine.pm                          |   14 +-
 Bio/OntologyIO/obo.pm                              |  388 ++-
 Bio/PrimarySeqI.pm                                 |   15 +-
 Bio/Restriction/Enzyme.pm                          |   29 +-
 Bio/Restriction/IO/prototype.pm                    |    9 +-
 Bio/Root/Build.pm                                  |  802 +------
 Bio/Root/Exception.pm                              |    7 +-
 Bio/Root/IO.pm                                     |    9 +-
 Bio/Root/Root.pm                                   |   14 +-
 Bio/Root/RootI.pm                                  |   23 +-
 Bio/Root/Storable.pm                               |    8 +-
 Bio/Root/Test.pm                                   |  241 +-
 {examples/root/lib => Bio/Root}/TestObject.pm      |    8 +-
 Bio/Root/Utilities.pm                              |    7 +-
 Bio/Root/Version.pm                                |   13 +-
 Bio/Search/HSP/HMMERHSP.pm                         |    1 +
 Bio/Search/HSP/ModelHSP.pm                         |   19 +
 Bio/Search/Result/INFERNALResult.pm                |  121 +
 Bio/Search/Tiling/MapTileUtils.pm                  |    1 +
 Bio/SearchIO/Writer/BSMLResultWriter.pm            |  354 ---
 Bio/SearchIO/Writer/GbrowseGFF.pm                  |    2 +-
 Bio/SearchIO/XML/BlastHandler.pm                   |  315 ---
 Bio/SearchIO/XML/PsiBlastHandler.pm                |  312 ---
 Bio/SearchIO/blastxml.pm                           |  475 ----
 Bio/SearchIO/fasta.pm                              |    2 +-
 Bio/SearchIO/hmmer2.pm                             |  199 +-
 Bio/SearchIO/hmmer3.pm                             |  261 +-
 Bio/SearchIO/infernal.pm                           |  412 +++-
 Bio/Seq.pm                                         |   43 +-
 Bio/SeqFeature/Generic.pm                          |   63 +-
 Bio/SeqFeatureI.pm                                 |   19 +-
 Bio/SeqIO/embl.pm                                  |   23 +-
 Bio/SeqIO/embldriver.pm                            |    2 +-
 Bio/SeqIO/entrezgene.pm                            |    2 +-
 Bio/SeqIO/gbdriver.pm                              |    2 +-
 Bio/SeqIO/genbank.pm                               |   30 +-
 Bio/SeqIO/largefasta.pm                            |    2 +-
 Bio/SeqIO/nexml.pm                                 |   58 +-
 Bio/SeqIO/phd.pm                                   |    2 +-
 Bio/SeqIO/swissdriver.pm                           |    2 +-
 Bio/SeqIO/table.pm                                 |   23 +-
 Bio/Taxon.pm                                       |   32 +-
 Bio/Tools/Alignment/Consed.pm                      |    2 +-
 Bio/Tools/Analysis/Protein/GOR4.pm                 |    8 +-
 Bio/Tools/Analysis/Protein/HNN.pm                  |    7 +-
 Bio/Tools/Analysis/Protein/Mitoprot.pm             |    5 +-
 Bio/Tools/Analysis/Protein/Sopma.pm                |    7 +-
 Bio/Tools/CodonTable.pm                            |  194 +-
 Bio/Tools/Run/RemoteBlast.pm                       |   14 +-
 Bio/Tools/Run/StandAloneBlast.pm                   |  634 -----
 Bio/Tools/Run/StandAloneNCBIBlast.pm               |  538 -----
 Bio/Tools/Run/StandAloneWUBlast.pm                 |  299 ---
 Bio/Tools/Run/WrapperBase.pm                       |  511 ----
 Bio/Tools/Run/WrapperBase/CommandExts.pm           | 1385 -----------
 Bio/Tools/Run/hmmer3.pm                            |    0
 Bio/Tools/SiRNA/Ruleset/tuschl.pm                  |    5 +-
 Bio/Tree/Statistics.pm                             |    6 +-
 Bio/TreeIO/nexml.pm                                |   30 +-
 BioPerl.pm                                         |   91 +-
 Build.PL                                           |  531 +++--
 Changes                                            |   40 +
 INSTALL                                            |  446 ----
 INSTALL-WIN.md                                     |  163 ++
 INSTALL.WIN                                        |  672 ------
 INSTALL.md                                         |  176 ++
 MANIFEST                                           |  107 +-
 META.json                                          | 2519 +++++++-------------
 META.yml                                           |  893 +------
 README                                             |  258 --
 README.md                                          |   81 +-
 {doc => deobfuscator}/Deobfuscator/Build.PL        |    0
 {doc => deobfuscator}/Deobfuscator/Changes         |    0
 {doc => deobfuscator}/Deobfuscator/LICENSE         |    0
 {doc => deobfuscator}/Deobfuscator/MANIFEST        |    0
 {doc => deobfuscator}/Deobfuscator/META.yml        |    0
 {doc => deobfuscator}/Deobfuscator/Makefile.PL     |    0
 {doc => deobfuscator}/Deobfuscator/README          |    0
 .../Deobfuscator/bin/deob_index.pl                 |    0
 .../Deobfuscator/bin/run-deobfuscator-update.pl    |    0
 .../Deobfuscator/cgi-bin/deob_detail.cgi           |    0
 .../Deobfuscator/cgi-bin/deob_flowchart.png        |  Bin
 .../Deobfuscator/cgi-bin/deob_help.html            |    0
 .../Deobfuscator/cgi-bin/deob_interface.cgi        |    0
 .../Deobfuscator/excluded_modules.txt              |    0
 .../Deobfuscator/lib/Deobfuscator.pm               |    0
 {doc => deobfuscator}/Deobfuscator/t/00.load.t     |    0
 {doc => deobfuscator}/Deobfuscator/t/pod.t         |    0
 {doc => deobfuscator}/makedoc.PL                   |    0
 doc/README                                         |    2 -
 examples/db/dbfetch                                |    4 +-
 examples/root/lib/TestInterface.pm                 |   37 -
 maintenance/big_split/file_classification.csv      |    2 -
 .../Bio-DB-SeqFeature-Store/bp_seqfeature_load.pl  |   14 +
 scripts/DB/bp_biofetch_genbank_proxy.pl            |    2 +-
 scripts/seq/bp_seqcut.pl                           |  234 +-
 scripts/seq/bp_translate_seq.pl                    |   19 +-
 scripts/taxa/bp_taxid4species.pl                   |   53 +-
 scripts/utilities/bp_find-blast-matches.pl         |  487 ++++
 scripts/utilities/bp_pairwise_kaks.pl              |   82 +-
 scripts/utilities/bp_search2BSML.pl                |   70 -
 t/Align/Utilities.t                                |   10 +-
 t/AlignIO/nexml.t                                  |    3 +-
 t/AlignIO/phylip.t                                 |   31 +-
 t/Coordinate/CoordinateBoundaryTest.t              |  527 ----
 t/Coordinate/CoordinateGraph.t                     |   42 -
 t/Coordinate/CoordinateMapper.t                    |  686 ------
 t/Coordinate/GeneCoordinateMapper.t                |  602 -----
 t/LocalDB/Flat.t                                   |   82 +-
 t/LocalDB/Index/Index.t                            |   37 +-
 t/LocalDB/Taxonomy/sqlite.t                        |  251 ++
 t/Perl.t                                           |    5 +-
 t/RemoteDB/BioFetch.t                              |    9 +-
 t/RemoteDB/EMBL.t                                  |   16 +-
 t/RemoteDB/HIV/HIV.t                               |    6 +-
 t/RemoteDB/HIV/HIVQuery.t                          |    4 +-
 t/RemoteDB/MeSH.t                                  |   20 +-
 t/RemoteDB/SeqHound.t                              |   59 -
 t/RemoteDB/SeqRead_fail.t                          |   16 +-
 t/RemoteDB/SeqVersion.t                            |    4 +-
 t/RemoteDB/SwissProt.t                             |    3 +-
 t/RemoteDB/Taxonomy.t                              |   56 +-
 t/Restriction/IO.t                                 |   56 +-
 t/Root/Exception.t                                 |   10 +-
 t/Root/HTTPget.t                                   |    1 -
 t/Root/IO.t                                        |    1 +
 t/Root/RootI.t                                     |   12 +-
 t/Root/RootIO.t                                    |   21 +
 t/SearchIO/blastxml.t                              |  531 -----
 t/SearchIO/hmmer.t                                 |  192 +-
 t/SearchIO/infernal.t                              |  172 +-
 t/Seq/PrimarySeq.t                                 |   15 +-
 t/Seq/Seq.t                                        |   11 +-
 t/SeqFeature/Generic.t                             |   11 +-
 t/SeqFeature/Location.t                            |   24 +-
 t/SeqFeature/LocationFactory.t                     |  347 ++-
 t/SeqIO/Splicedseq.t                               |   28 +-
 t/SeqIO/embl.t                                     |   20 +-
 t/SeqIO/genbank.t                                  |   63 +-
 t/SeqIO/table.t                                    |   40 +-
 t/SeqTools/CodonTable.t                            |   67 +-
 t/Species.t                                        |   68 +-
 t/Tools/Analysis/Protein/ELM.t                     |    4 +-
 t/Tools/Analysis/Protein/GOR4.t                    |   38 +-
 t/Tools/Analysis/Protein/HNN.t                     |   61 +-
 t/Tools/Analysis/Protein/Mitoprot.t                |   30 +-
 t/Tools/Analysis/Protein/NetPhos.t                 |    1 -
 t/Tools/Analysis/Protein/Sopma.t                   |   63 +-
 t/Tools/Run/Dummy.pm                               |   21 -
 t/Tools/Run/Dummy/Config.pm                        |   75 -
 t/Tools/Run/RemoteBlast.t                          |    1 -
 t/Tools/Run/RemoteBlast_rpsblast.t                 |    4 +-
 t/Tools/Run/StandAloneBlast.t                      |  185 --
 t/Tools/Run/WBCommandExts.t                        |   66 -
 t/Tools/Run/WrapperBase.t                          |  129 -
 t/Tools/SiRNA.t                                    |    6 +-
 t/Tree/TreeIO/nexml.t                              |  115 +-
 t/Tree/TreeIO/nhx.t                                |    6 +-
 t/data/AF222649-rc.gbk                             |   91 +
 t/data/HM138502.gbk                                |   79 +
 t/data/KF527485.gbk                                |   82 +
 t/data/ORTHOMCL2345.cluster.aa.fa.aln.aa.phy.txt   |   19 +
 t/data/U58726.gb                                   |  507 ++--
 t/data/cmsearch.multi.out                          |  243 ++
 t/data/cmsearch.nohit.out                          |   44 +
 t/data/cmsearch_output.txt                         |  102 +
 t/data/dmel_2Lchunk.gb                             |   36 +-
 t/data/ecoli_domains.rps.xml                       |  610 -----
 t/data/hmmscan_qry_stop.txt                        |   63 +
 t/data/hmmscan_sec_struct.out                      |   47 +
 t/data/ids-with-spaces.phy                         |   19 +
 t/data/mus.bls.xml                                 |  660 -----
 t/data/newblast.xml                                | 1219 ----------
 t/data/phmmer.out                                  |  183 ++
 t/data/plague_yeast.bls.xml                        |  383 ---
 t/data/psiblast.xml                                | 1826 --------------
 t/data/test-1.tab                                  |    3 +
 t/data/test-1.tab.gb                               |   16 +
 t/data/test_space.embl                             |   19 +
 travis_scripts/dependency_installs                 |    4 +-
 220 files changed, 7811 insertions(+), 23832 deletions(-)

diff --git a/.travis.yml b/.travis.yml
index 167763f..4befb9b 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,18 +1,26 @@
 language: perl
 perl:
+  - "5.20"
   - "5.18"
   - "5.16"
   - "5.14"
   - "5.12"
   - "5.10"
 
+sudo: false
 env: PERL_CPANM_OPT="--notest --force --skip-satisfied"
 
+addons:
+  apt:
+    packages:
+      - libdb-dev
+      - graphviz
+      - libgd2-xpm-dev
+      - libxml2-dev
+
 install:
-    #This should solve problem installing Perl's DB_File & GraphViz
-    - "sudo apt-get install libdb-dev graphviz libgd2-xpm-dev libxml2-dev 2>&1 | tail -n 4"
     #These are recommended or required Perl libraries:
-    - "cpanm GD 2>&1 | tail -n 1"
+    - "cpanm GD 2>&1 CGI | tail -n 1"
     - "cpanm HTML::TableExtract DBI Data::Stag DB_File 2>&1 | tail -n 1"
     - "cpanm DBD::mysql DBD::Pg DBD::SQLite 2>&1 | tail -n 1"
     - "cpanm Algorithm::Munkres Array::Compare Convert::Binary::C Error 2>&1 | tail -n 1"
@@ -23,6 +31,10 @@ install:
     - "cpanm Math::Random SOAP::Lite Spreadsheet::ParseExcel | tail -n 1"
     - "cpanm Bio::ASN1::EntrezGene | tail -n 1"
     - "cpanm Bio::Phylo | tail -n 1"
+    - "cpanm Test::Weaken | tail -n 1"
+    - "cpanm Test::Memory::Cycle | tail -n 1"
+    #Test coverage from Coveralls
+    #- cpanm --quiet --notest Devel::Cover::Report::Coveralls
     #for some reason tests and deps aren't skipped here.  Will have to look into it more...
     #git repos, seems to only work for simple checkouts, so pure perl only (TODO: look into before_script for more detail)
     #- "git clone https://github.com/bioperl/Bio-Root.git; export PERL5LIB=$( pwd )/Bio-Root/lib:$PERL5LIB"
@@ -31,6 +43,10 @@ install:
 
 script:
     - "./Build test"
+    #Devel::Cover coverage options are: statement, branch, condition, path, subroutine, pod, time, all and none
+    #- "./Build build && cover -test -report coveralls" #complete version coverage test
+    #- PERL5OPT=-MDevel::Cover=+ignore,prove,-coverage,statement,subroutine prove -lr t #limited version coverage test
+    #- cover -report coveralls
 
 #TODO - send emails to bioperl-guts-l
 notifications:
@@ -45,5 +61,4 @@ notifications:
 branches:
   only:
     - master
-    - v1.6.x
-    - topic/1.6-cherry
+
diff --git a/AUTHORS b/AUTHORS
index b6d8785..c9724e2 100644
--- a/AUTHORS
+++ b/AUTHORS
@@ -20,6 +20,8 @@
 
 =item * Brian Osborne <bosborne at bioteam.net>
 
+=item * Francisco J. Ossandon <fco.j.ossandon at gmail.com>
+
 =item * Jason Stajich <jason at bioperl.org>
 
 =item * Lincoln Stein <lstein at cshl.org>
diff --git a/Bio/Align/Utilities.pm b/Bio/Align/Utilities.pm
index 6f788fb..649ec63 100644
--- a/Bio/Align/Utilities.pm
+++ b/Bio/Align/Utilities.pm
@@ -148,13 +148,12 @@ sub aa_to_dna_aln {
 
     foreach my $seq ( $aln->each_seq ) {
         my $aa_seqstr = $seq->seq();
-        my $id        = $seq->display_id;
-        my $dnaseq =
-          $dnaseqs->{$id} || $aln->throw( "cannot find " . $seq->display_id );
+        my $pepid     = $seq->display_id;
+        my $dnaseq    = $dnaseqs->{$pepid} || $aln->throw( "cannot find " . $seq->display_id );
         my $start_offset = ( $seq->start - 1 ) * CODONSIZE;
-
         $dnaseq = $dnaseq->seq();
-        my $dnalen = $dnaseqs->{$id}->length;
+        my $dnalen = $dnaseqs->{$pepid}->length;
+        my $dnaid = $dnaseqs->{$pepid}->display_id || $pepid; # try to use DNAseq obj ID (issue #137)
         my $nt_seqstr;
         my $j = 0;
         for ( my $i = 0 ; $i < $alnlen ; $i++ ) {
@@ -170,7 +169,7 @@ sub aa_to_dna_aln {
         $nt_seqstr .= $GAP x ( ( $alnlen * 3 ) - length($nt_seqstr) );
 
         my $newdna = Bio::LocatableSeq->new(
-            -display_id => $id,
+            -display_id => $dnaid,
             -alphabet   => 'dna',
             -start      => $start_offset + 1,
             -end        => ( $seq->end * CODONSIZE ),
diff --git a/Bio/AlignIO/nexml.pm b/Bio/AlignIO/nexml.pm
index afe66e0..c7c261c 100644
--- a/Bio/AlignIO/nexml.pm
+++ b/Bio/AlignIO/nexml.pm
@@ -131,23 +131,40 @@ sub doc {
 }
 
 sub _parse {
-	my ($self) = @_;
+    my ($self) = @_;
 
     $self->{'_parsed'}   = 1;
     $self->{'_alnsiter'} = 0;
     my $fac = Bio::Nexml::Factory->new();
-	
-	$self->doc(parse(
- 	'-file'       => $self->{'_file'},
- 	'-format'     => 'nexml',
- 	'-as_project' => '1'
- 	));
-
-	$self->{'_alns'} = $fac->create_bperl_aln($self);
- 	if(@{ $self->{'_alns'} } == 0)
- 	{
- 		self->debug("no seqs in $self->{_file}");
- 	}
+
+    # Only pass filename if filehandle is not available,
+    # or "Bio::Phylo" will create a new filehandle that ends
+    # out of scope and can't be closed directly, leaving 2 open
+    # filehandles for the same file (so file can't be deleted)
+    my $file_arg;
+    my $file_value;
+    if (     exists $self->{'_filehandle'}
+        and defined $self->{'_filehandle'}
+        ) {
+        $file_arg   = '-handle';
+        $file_value = $self->{'_filehandle'};
+    }
+    else {
+        $file_arg   = '-file';
+        $file_value = $self->{'_file'};
+    }
+
+    $self->doc(parse(
+                     $file_arg     => $file_value,
+                     '-format'     => 'nexml',
+                     '-as_project' => '1'
+                     )
+    );
+    $self->{'_alns'} = $fac->create_bperl_aln($self);
+
+    if(@{ $self->{'_alns'} } == 0) {
+        self->debug("no seqs in $self->{_file}");
+    }
 }
 
 =head2 write_aln
diff --git a/Bio/AlignIO/phylip.pm b/Bio/AlignIO/phylip.pm
index 765538c..e6dcbaa 100644
--- a/Bio/AlignIO/phylip.pm
+++ b/Bio/AlignIO/phylip.pm
@@ -216,7 +216,7 @@ sub next_aln {
                 ($name, $str) = split (/\s+/,$entry, 2);
             }
         } else { # 1. traditional phylip.
-            $entry =~ /^(.{10})\s+(.+)$/;
+            $entry =~ /^(.{1,10})\s(.+)$/;
             $name = $1;
             $str = $2;
             $name =~ s/\s+$//; # eat any trailing spaces
diff --git a/Bio/AlignIO/stockholm.pm b/Bio/AlignIO/stockholm.pm
index 7da3a6e..b7579b5 100644
--- a/Bio/AlignIO/stockholm.pm
+++ b/Bio/AlignIO/stockholm.pm
@@ -597,7 +597,7 @@ sub write_aln {
     my $tag = 'AC';
     for my $seq ($aln->each_seq) {
         if (my $acc = $seq->accession_number) {
-	    my $text = sprintf("%-4s%-22s%-3s%s\n",$seq_ann,
+	    my $text = sprintf("%-4s%-22s %-3s%s\n",$seq_ann,
 			       $aln->displayname($seq->get_nse), $tag, $acc);
 	    $self->_print($text) || return 0;
         }
diff --git a/Bio/Coordinate/Chain.pm b/Bio/Coordinate/Chain.pm
deleted file mode 100644
index f571989..0000000
--- a/Bio/Coordinate/Chain.pm
+++ /dev/null
@@ -1,151 +0,0 @@
-package Bio::Coordinate::Chain;
-use utf8;
-use strict;
-use warnings;
-use Bio::Root::Root;
-use Bio::Coordinate::Result;
-use parent qw(Bio::Coordinate::Collection Bio::Coordinate::MapperI);
-
-# ABSTRACT: Mapping locations through a chain of coordinate mappers.
-# AUTHOR:   Heikki Lehvaslaiho <heikki at bioperl.org>
-# OWNER:    Heikki Lehvaslaiho
-# LICENSE:  Perl_5
-
-# CONTRIBUTOR: Ewan Birney <birney at ebi.ac.uk>
-
-=head1 SYNOPSIS
-
-  # create Bio::Coordinate::Pairs, or any MapperIs, somehow
-  $pair1; $pair2;
-
-  # add them into a Chain
-  $collection = Bio::Coordinate::Chain->new;
-  $collection->add_mapper($pair1);
-  $collection->add_mapper($pair2);
-
-  # create a position and map it
-  $pos = Bio::Location::Simple->new (-start => 5, -end => 9 );
-  $match = $collection->map($pos);
-  if ($match) {
-      sprintf "Matches at %d-%d\n", $match->start, $match->end,
-  } else {
-      print "No match\n";
-  }
-
-=head1 DESCRIPTION
-
-This class assumes that you have built several mappers and want to
-link them together so that output from the previous mapper is the next
-mappers input. This way you can build arbitrarily complex mappers from
-simpler components.
-
-Note that Chain does not do any sanity checking on its mappers. You
-are solely responsible that input and output coordinate systems,
-direction of mapping and parameters internal to mappers make sense
-when chained together.
-
-To put it bluntly, the present class is just a glorified foreach loop
-over an array of mappers calling the map method.
-
-It would be neat to an internal function that would generate a new
-single step mapper from those included in the chain. It should speed
-things up considerably. Any volunteers?
-
-=cut
-
-=head2 map
-
- Title   : map
- Usage   : $newpos = $obj->map($pos);
- Function: Map the location through all the mappers in the chain.
- Example :
- Returns : new Location in the output coordiante system
- Args    : a Bio::Location::Simple object
-
-=cut
-
-sub map {
-    my ($self,$value) = @_;
-
-    $self->throw("Need to pass me a value.")
-        unless defined $value;
-    $self->throw("I need a Bio::Location, not [$value]")
-        unless $value->isa('Bio::LocationI');
-    $self->throw("No coordinate mappers!")
-        unless $self->each_mapper;
-
-    my $res = Bio::Coordinate::Result->new();
-
-    foreach my $mapper ($self->each_mapper) {
-
-        my $res = $mapper->map($value);
-        return unless $res->each_match;
-        $value = $res->match;
-    }
-
-   return $value;
-}
-
-=head2 Inherited methods
-
-=head2 add_mapper
-
- Title   : add_mapper
- Usage   : $obj->add_mapper($mapper)
- Function: Pushes one Bio::Coodinate::MapperI into the list of mappers.
-           Sets _is_sorted() to false.
- Example :
- Returns : 1 when succeeds, 0 for failure.
- Args    : mapper object
-
-=head2 mappers
-
- Title   : mappers
- Usage   : $obj->mappers();
- Function: Returns or sets a list of mappers.
- Example :
- Returns : array of mappers
- Args    : array of mappers
-
-=head2 each_mapper
-
- Title   : each_mapper
- Usage   : $obj->each_mapper();
- Function: Returns a list of mappers.
- Example :
- Returns : array of mappers
- Args    : none
-
-=head2 swap
-
- Title   : swap
- Usage   : $obj->swap;
- Function: Swap the direction of mapping;input <-> output
- Example :
- Returns : 1
- Args    :
-
-=head2 test
-
- Title   : test
- Usage   : $obj->test;
- Function: test that both components of all pairs are of the same length.
-           Ran automatically.
- Example :
- Returns : boolean
- Args    :
-
-=cut
-
-=head2 sort
-
-You do not really want to sort your chain, do you! This function does nothing
-other than a warning.
-=cut
-
-sub sort{
-   my ($self) = @_;
-   $self->warn("You do not really want to sort your chain, do you!\nDoing nothing.");
-}
-
-1;
diff --git a/Bio/Coordinate/Collection.pm b/Bio/Coordinate/Collection.pm
deleted file mode 100644
index ea65d8e..0000000
--- a/Bio/Coordinate/Collection.pm
+++ /dev/null
@@ -1,363 +0,0 @@
-package Bio::Coordinate::Collection;
-use utf8;
-use strict;
-use warnings;
-use Bio::Coordinate::Result;
-use Bio::Coordinate::Result::Gap;
-use parent qw(Bio::Root::Root Bio::Coordinate::MapperI);
-
-# ABSTRACT: Noncontinuous match between two coordinate sets.
-# AUTHOR:   Heikki Lehvaslaiho <heikki at bioperl.org>
-# OWNER:    Heikki Lehvaslaiho
-# LICENSE:  Perl_5
-
-# CONTRIBUTOR: Ewan Birney <birney at ebi.ac.uk>
-
-=head1 SYNOPSIS
-
-  # create Bio::Coordinate::Pairs or other Bio::Coordinate::MapperIs somehow
-  $pair1; $pair2;
-
-  # add them into a Collection
-  $collection = Bio::Coordinate::Collection->new;
-  $collection->add_mapper($pair1);
-  $collection->add_mapper($pair2);
-
-  # create a position and map it
-  $pos = Bio::Location::Simple->new (-start => 5, -end => 9 );
-  $res = $collection->map($pos);
-  $res->match->start == 1;
-  $res->match->end == 5;
-
-  # if mapping is many to one (*>1) or many-to-many (*>*)
-  # you have to give seq_id not get unrelevant entries
-  $pos = Bio::Location::Simple->new
-      (-start => 5, -end => 9 -seq_id=>'clone1');
-
-=head1 DESCRIPTION
-
-Generic, context neutral mapper to provide coordinate transforms
-between two B<disjoint> coordinate systems. It brings into Bioperl the
-functionality from Ewan Birney's Bio::EnsEMBL::Mapper ported into
-current bioperl.
-
-This class is aimed for representing mapping between whole chromosomes
-and contigs, or between contigs and clones, or between sequencing
-reads and assembly. The submaps are automatically sorted, so they can
-be added in any order.
-
-To map coordinates to the other direction, you have to swap() the
-collection. Keeping track of the direction and ID restrictions
-are left to the calling code.
-
-=cut
-
-=head2 new
-=cut
-
-sub new {
-    my($class, at args) = @_;
-    my $self = $class->SUPER::new(@args);
-
-    $self->{'_mappers'} = [];
-
-    my($in, $out, $strict, $mappers, $return_match) =
-        $self->_rearrange([qw(IN
-                              OUT
-                              STRICT
-                              MAPPERS
-                              RETURN_MATCH
-                             )],
-                         @args);
-
-    $in  && $self->in($in);
-    $out  && $self->out($out);
-    $mappers && $self->mappers($mappers);
-    $return_match && $self->return_match('return_match');
-    return $self; # success - we hope!
-}
-
-=head2 add_mapper
-
- Title   : add_mapper
- Usage   : $obj->add_mapper($mapper)
- Function: Pushes one Bio::Coordinate::MapperI into the list of mappers.
-           Sets _is_sorted() to false.
- Example :
- Returns : 1 when succeeds, 0 for failure.
- Args    : mapper object
-
-=cut
-
-sub add_mapper {
-  my ($self,$value) = @_;
-
-  $self->throw("Is not a Bio::Coordinate::MapperI but a [$self]")
-      unless defined $value && $value->isa('Bio::Coordinate::MapperI');
-
-  # test pair range lengths
-  $self->warn("Coordinates in pair [". $value . ":" .
-              $value->in->seq_id . "/". $value->out->seq_id .
-              "] are not right.")
-      unless $value->test;
-
-  $self->_is_sorted(0);
-  push(@{$self->{'_mappers'}},$value);
-}
-
-=head2 mappers
-
- Title   : mappers
- Usage   : $obj->mappers();
- Function: Returns or sets a list of mappers.
- Example :
- Returns : array of mappers
- Args    : array of mappers
-
-=cut
-
-sub mappers{
-        my ($self, at args) = @_;
-
-        if (@args) {
-                if (@args == 1 && ref $args[0] eq 'ARRAY') {
-                        @args = @{$args[0]};
-                }
-                $self->throw("Is not a Bio::Coordinate::MapperI but a [$self]")
-                        unless defined $args[0] && $args[0]->isa('Bio::Coordinate::MapperI');
-                push(@{$self->{'_mappers'}}, @args);
-        }
-
-        return @{$self->{'_mappers'}};
-}
-
-=head2 each_mapper
-
- Title   : each_mapper
- Usage   : $obj->each_mapper();
- Function: Returns a list of mappers.
- Example :
- Returns : list of mappers
- Args    : none
-
-=cut
-
-sub each_mapper{
-   my ($self) = @_;
-   return @{$self->{'_mappers'}};
-}
-
-=head2 mapper_count
-
- Title   : mapper_count
- Usage   : my $count = $collection->mapper_count;
- Function: Get the count of the number of mappers stored
-           in this collection
- Example :
- Returns : integer
- Args    : none
-
-=cut
-
-sub mapper_count{
-   my $self = shift;
-   return scalar @{$self->{'_mappers'} || []};
-}
-
-=head2 swap
-
- Title   : swap
- Usage   : $obj->swap;
- Function: Swap the direction of mapping;input <-> output
- Example :
- Returns : 1
- Args    :
-
-=cut
-
-sub swap {
-   my ($self) = @_;
-   use Data::Dumper;
-
-   $self->sort unless $self->_is_sorted;
-   map {$_->swap;} @{$self->{'_mappers'}};
-   ($self->{'_in_ids'}, $self->{'_out_ids'}) =
-       ($self->{'_out_ids'}, $self->{'_in_ids'});
-   1;
-}
-
-=head2 test
-
- Title   : test
- Usage   : $obj->test;
- Function: test that both components of all pairs are of the same length.
-           Ran automatically.
- Example :
- Returns : boolean
- Args    :
-
-=cut
-
-sub test {
-   my ($self) = @_;
-
-   my $res = 1;
-
-   foreach my $mapper ($self->each_mapper) {
-       unless( $mapper->test ) {
-           $self->warn("Coordinates in pair [". $mapper . ":" .
-                       $mapper->in->seq_id . "/". $mapper->out->seq_id .
-                       "] are not right.");
-           $res = 0;
-       }
-   }
-   $res;
-}
-
-=head2 map
-
- Title   : map
- Usage   : $newpos = $obj->map($pos);
- Function: Map the location from the input coordinate system
-           to a new value in the output coordinate system.
- Example :
- Returns : new value in the output coordinate system
- Args    : integer
-
-=cut
-
-sub map {
-   my ($self,$value) = @_;
-
-   $self->throw("Need to pass me a value.")
-       unless defined $value;
-   $self->throw("I need a Bio::Location, not [$value]")
-       unless $value->isa('Bio::LocationI');
-   $self->throw("No coordinate mappers!")
-       unless $self->each_mapper;
-
-   $self->sort unless $self->_is_sorted;
-
-   if ($value->isa("Bio::Location::SplitLocationI")) {
-
-       my $result = Bio::Coordinate::Result->new();
-       foreach my $loc ( $value->sub_Location(1) ) {
-
-           my $res = $self->_map($loc);
-           map { $result->add_sub_Location($_) } $res->each_Location;
-
-       }
-       return $result;
-
-   } else {
-       return $self->_map($value);
-   }
-
-}
-
-=head2 _map
-
- Title   : _map
- Usage   : $newpos = $obj->_map($simpleloc);
- Function: Internal method that does the actual mapping. Called multiple times
-           by map() if the location  to be mapped is a split location
-
- Example :
- Returns : new location in the output coordinate system or undef
- Args    : Bio::Location::Simple
-
-=cut
-
-sub _map {
-   my ($self,$value) = @_;
-
-   my $result = Bio::Coordinate::Result->new(-is_remote=>1);
-
-IDMATCH: {
-
-       # bail out now we if are forcing the use of an ID
-       # and it is not in this collection
-       last IDMATCH if defined $value->seq_id &&
-           ! $self->{'_in_ids'}->{$value->seq_id};
-
-       foreach my $pair ($self->each_mapper) {
-
-           # if we are limiting input to a certain ID
-           next if defined $value->seq_id && $value->seq_id ne $pair->in->seq_id;
-
-           # if we haven't even reached the start, move on
-           next if $pair->in->end < $value->start;
-           # if we have over run, break
-           last if $pair->in->start > $value->end;
-
-           my $subres = $pair->map($value);
-           $result->add_result($subres);
-       }
-   }
-
-   $result->seq_id($result->match->seq_id) if $result->match;
-   unless ($result->each_Location) {
-       #build one gap;
-       my $gap = Bio::Location::Simple->new(-start => $value->start,
-                                            -end => $value->end,
-                                            -strand => $value->strand,
-                                            -location_type => $value->location_type
-                                           );
-       $gap->seq_id($value->seq_id) if defined $value->seq_id;
-       bless $gap, 'Bio::Coordinate::Result::Gap';
-       $result->seq_id($value->seq_id) if defined $value->seq_id;
-       $result->add_sub_Location($gap);
-   }
-   return $result;
-}
-
-=head2 sort
-
- Title   : sort
- Usage   : $obj->sort;
- Function: Sort function so that all mappings are sorted by
-           input coordinate start
- Example :
- Returns : 1
- Args    :
-
-=cut
-
-sub sort{
-   my ($self) = @_;
-
-   @{$self->{'_mappers'}} = map { $_->[0] }
-                            sort { $a->[1] <=> $b->[1] }
-                            map { [ $_, $_->in->start] }
-                            @{$self->{'_mappers'}};
-
-   #create hashes for sequence ids
-   $self->{'_in_ids'} = ();
-   $self->{'_out_ids'} = ();
-   foreach ($self->each_mapper) {
-       $self->{'_in_ids'}->{$_->in->seq_id} = 1;
-       $self->{'_out_ids'}->{$_->out->seq_id} = 1;
-   }
-
-   $self->_is_sorted(1);
-}
-
-=head2 _is_sorted
-
- Title   : _is_sorted
- Usage   : $newpos = $obj->_is_sorted;
- Function: toggle for whether the (internal) coodinate mapper data are sorted
- Example :
- Returns : boolean
- Args    : boolean
-
-=cut
-
-sub _is_sorted{
-   my ($self,$value) = @_;
-
-   $self->{'_is_sorted'} = 1 if defined $value && $value;
-   return $self->{'_is_sorted'};
-}
-
-1;
diff --git a/Bio/Coordinate/ExtrapolatingPair.pm b/Bio/Coordinate/ExtrapolatingPair.pm
deleted file mode 100644
index 4abb5e6..0000000
--- a/Bio/Coordinate/ExtrapolatingPair.pm
+++ /dev/null
@@ -1,185 +0,0 @@
-package Bio::Coordinate::ExtrapolatingPair;
-use utf8;
-use strict;
-use warnings;
-use Bio::Root::Root;
-use Bio::LocationI;
-use parent qw(Bio::Coordinate::Pair);
-
-# ABSTRACT: Continuous match between two coordinate sets.
-# AUTHOR:   Heikki Lehvaslaiho <heikki at bioperl.org>
-# OWNER:    Heikki Lehvaslaiho
-# LICENSE:  Perl_5
-
-=head1 SYNOPSIS
-
-  use Bio::Location::Simple;
-  use Bio::Coordinate::ExtrapolatingPair;
-
-  $match1 = Bio::Location::Simple->new
-    (-seq_id => 'propeptide', -start => 21, -end => 40, -strand=>1 );
-  $match2 = Bio::Location::Simple->new
-    (-seq_id => 'peptide', -start => 1, -end => 20, -strand=>1 );
-
-  $pair = Bio::Coordinate::ExtrapolatingPair->
-    new(-in => $match1,
-        -out => $match2,
-        -strict => 1
-       );
-
-  $pos = Bio::Location::Simple->new
-      (-start => 40, -end => 60, -strand=> 1 );
-  $res = $pair->map($pos);
-  $res->start eq 20;
-  $res->end eq 20;
-
-=head1 DESCRIPTION
-
-This class represents a one continuous match between two coordinate
-systems represented by Bio::Location::Simple objects. The relationship
-is directed and reversible. It implements methods to ensure internal
-consistency, and map continuous and split locations from one
-coordinate system to another.
-
-This class is an elaboration of Bio::Coordinate::Pair. The map
-function returns only matches which is the mode needed most of
-tehtime. By default the matching regions between coordinate systems
-are boundless, so that you can say e.g. that gene starts from here in
-the chromosomal coordinate system and extends indefinetely in both
-directions. If you want to define the matching regions exactly, you
-can do that and set strict() to true.
-
-=cut
-
-=head2 new
-=cut
-
-sub new {
-    my($class, at args) = @_;
-    my $self = $class->SUPER::new(@args);
-
-    my($strict) =
-        $self->_rearrange([qw(STRICT
-                             )],
-                         @args);
-
-    $strict  && $self->strict($strict);
-    return $self;
-}
-
-=head2 strict
-
- Title   : strict
- Usage   : $obj->strict(1);
- Function: Set and read the strictness of the coordinate system.
- Example :
- Returns : value of input system
- Args    : boolean
-
-=cut
-
-sub strict {
-   my ($self,$value) = @_;
-   if( defined $value) {
-       $self->{'_strict'} = 1 if $value;
-   }
-   return $self->{'_strict'};
-}
-
-=head2 map
-
- Title   : map
- Usage   : $newpos = $obj->map($loc);
- Function: Map the location from the input coordinate system
-           to a new value in the output coordinate system.
-
-           In extrapolating coodinate system there is no location zero.
-           Locations are...
- Example :
- Returns : new location in the output coordinate system or undef
- Args    : Bio::Location::Simple
-
-=cut
-
-sub map {
-   my ($self,$value) = @_;
-
-   $self->throw("Need to pass me a value.")
-       unless defined $value;
-   $self->throw("I need a Bio::Location, not [$value]")
-       unless $value->isa('Bio::LocationI');
-   $self->throw("Input coordinate system not set")
-       unless $self->in;
-   $self->throw("Output coordinate system not set")
-       unless $self->out;
-
-   my $match;
-
-   if ($value->isa("Bio::Location::SplitLocationI")) {
-
-       my $split = Bio::Coordinate::Result->new(-seq_id=>$self->out->seq_id);
-       foreach my $loc ( sort { $a->start <=> $b->start }
-                         $value->sub_Location ) {
-
-           $match = $self->_map($loc);
-           $split->add_sub_Location($match) if $match;
-
-       }
-       $split->each_Location ? (return $split) : return ;
-
-   } else {
-       return $self->_map($value);
-   }
-}
-
-=head2 _map
-
- Title   : _map
- Usage   : $newpos = $obj->_map($simpleloc);
- Function: Internal method that does the actual mapping. Called
-           multiple times by map() if the location to be mapped is a
-           split location
-
- Example :
- Returns : new location in the output coordinate system or undef
- Args    : Bio::Location::Simple
-
-=cut
-
-sub _map {
-   my ($self,$value) = @_;
-
-   my ($offset, $start, $end);
-
-   if ($self->strand == -1) {
-       $offset = $self->in->end + $self->out->start;
-       $start = $offset - $value->end;
-       $end = $offset - $value->start ;
-   } else { # undef, 0 or 1
-       $offset = $self->in->start - $self->out->start;
-       $start = $value->start - $offset;
-       $end = $value->end - $offset;
-   }
-
-   # strict prevents matches outside stated range
-   if ($self->strict) {
-       return if $start < 0 and $end < 0;
-       return if $start > $self->out->end;
-       $start = 1 if $start < 0;
-       $end = $self->out->end if $end > $self->out->end;
-   }
-
-   my $match = Bio::Location::Simple->
-       new(-start => $start,
-           -end => $end,
-           -strand => $self->strand,
-           -seq_id => $self->out->seq_id,
-           -location_type => $value->location_type
-          );
-   $match->strand($match->strand * $value->strand) if $value->strand;
-   bless $match, 'Bio::Coordinate::Result::Match';
-
-   return $match;
-}
-
-1;
diff --git a/Bio/Coordinate/GeneMapper.pm b/Bio/Coordinate/GeneMapper.pm
deleted file mode 100644
index 557f5b8..0000000
--- a/Bio/Coordinate/GeneMapper.pm
+++ /dev/null
@@ -1,1286 +0,0 @@
-package Bio::Coordinate::GeneMapper;
-use utf8;
-use strict;
-use warnings;
-use Bio::Coordinate::Result;
-use Bio::Location::Simple;
-use Bio::Coordinate::Graph;
-use Bio::Coordinate::Collection;
-use Bio::Coordinate::Pair;
-use Bio::Coordinate::ExtrapolatingPair;
-use parent qw(Bio::Root::Root Bio::Coordinate::MapperI);
-
-# ABSTRACT: Transformations between gene related coordinate systems.
-# AUTHOR:   Heikki Lehvaslaiho <heikki at bioperl.org>
-# OWNER:    Heikki Lehvaslaiho
-# LICENSE:  Perl_5
-
-=head1 SYNOPSIS
-
-  use Bio::Coordinate::GeneMapper;
-
-  # get a Bio::RangeI representing the start, end and strand of the CDS
-  # in chromosomal (or entry) coordinates
-  my $cds;
-
-  # get a Bio::Location::Split or an array of Bio::LocationI objects
-  # holding the start, end and strand of all the exons in chromosomal
-  # (or entry) coordinates
-  my $exons;
-
-  # create a gene mapper and set it to map from chromosomal to cds coordinates
-  my $gene = Bio::Coordinate::GeneMapper->new(-in   =>'chr',
-                                              -out  =>'cds',
-                                              -cds  =>$cds,
-                                              -exons=>$exons
-                                             );
-
-  # get a a Bio::Location or sequence feature in input (chr) coordinates
-  my $loc;
-
-  # map the location into output coordinates and get a new location object
-  $newloc = $gene->map($loc);
-
-=head1 DESCRIPTION
-
-Bio::Coordinate::GeneMapper is a module for simplifying the mappings
-of coodinate locations between various gene related locations in human
-genetics. It also adds a special human genetics twist to coordinate
-systems by making it possible to disable the use of zero
-(0). Locations before position one start from -1. See method
-L<nozero>.
-
-It understands by name the following coordinate systems and mapping
-between them:
-
-                          peptide (peptide length)
-                             ^
-                             | -peptide_offset
-                             |
-                    frame  propeptide (propeptide length)
-                        ^    ^
-                         \   |
-             translate    \  |
-                           \ |
-                            cds  (transcript start and end)
-                             ^
-      negative_intron        | \
-              ^              |  \  transcribe
-               \             |   \
-              intron        exon  \
-               ^   ^         ^     /
-      splice    \   \      / |    /
-                 \   \    /  |   /
-                  \   inex   |  /
-                   \    ^    | /
-                    \    \   |/
-                     ----- gene (gene_length)
-                             ^
-                             | - gene_offset
-                             |
-                            chr (or entry)
-
-This structure is kept in the global variable $DAG which is a
-representation of a Directed Acyclic Graph. The path calculations
-traversing this graph are done in a helper class. See
-L<Bio::Coordinate::Graph>.
-
-Of these, two operations are special cases, translate and splice.
-Translating and reverse translating are implemented as internal
-methods that do the simple 1E<lt>-E<gt>3 conversion. Splicing needs
-additional information that is provided by method L<exons> which takes
-in an array of Bio::LocationI objects.
-
-Most of the coordinate system names should be selfexplanatory to
-anyone familiar with genes. Negative intron coordinate system is
-starts counting backwards from -1 as the last nucleotide in the
-intron. This used when only exon and a few flanking intron nucleotides
-are known.
-
-This class models coordinates within one transcript of a gene, so to
-tackle multiple transcripts you need several instances of the
-class. It is therefore valid to argue that the name of the class
-should be TranscriptMapper. GeneMapper is a catchier name, so it
-stuck.
-
-=cut
-
-# first set internal values for all translation tables
-
-our %COORDINATE_SYSTEMS = (
-    peptide          => 10,
-    propeptide       => 9,
-    frame            => 8,
-    cds              => 7,
-    negative_intron  => 6,
-    intron           => 5,
-    exon             => 4,
-    inex             => 3,
-    gene             => 2,
-    chr              => 1,
-);
-
-our %COORDINATE_INTS = (
-    10 => 'peptide',
-    9  => 'propeptide',
-    8  => 'frame',
-    7  => 'cds',
-    6  => 'negative_intron',
-    5  => 'intron',
-    4  => 'exon',
-    3  => 'inex',
-    2  => 'gene',
-    1  => 'chr'
-);
-
-our $TRANSLATION = $COORDINATE_SYSTEMS{'cds'}. "-". $COORDINATE_SYSTEMS{'propeptide'};
-
-our $DAG = {
-    10 => [],
-    9  => [10],
-    8  => [],
-    7  => [8, 9],
-    6  => [],
-    5  => [6],
-    4  => [7],
-    3  => [4, 5],
-    2  => [3, 4, 5, 7],
-    1  => [2],
-};
-
-our $NOZERO_VALUES = {
-    0        => 0,
-    'in'     => 1,
-    'out'    => 2,
-    'in&out' => 3,
-};
-
-our $NOZERO_KEYS = {
-    0 => 0,
-    1 => 'in',
-    2 => 'out',
-    3 => 'in&out',
-};
-
-=head2 new
-=cut
-
-sub new {
-    my($class, at args) = @_;
-    my $self = $class->SUPER::new(@args);
-
-    # prime the graph
-    my $graph = Bio::Coordinate::Graph->new();
-    $graph->hash_of_arrays($DAG);
-    $self->graph($graph);
-
-    my($in, $out, $peptide_offset, $exons,
-       $cds, $nozero, $strict) =
-        $self->_rearrange([qw(IN
-                              OUT
-                              PEPTIDE_OFFSET
-                              EXONS
-                              CDS
-                              NOZERO
-                              STRICT
-                             )],
-                         @args);
-
-    # direction of mapping when going chr to protein
-    $self->{_direction} = 1;
-
-    $in  && $self->in($in);
-    $out  && $self->out($out);
-    $cds && $self->cds($cds);
-    $exons  && ref($exons) =~ /ARRAY/i && $self->exons(@$exons);
-    $peptide_offset && $self->peptide_offset($peptide_offset);
-    $nozero && $self->nozero($nozero);
-    $strict && $self->strict($strict);
-
-    return $self; # success - we hope!
-}
-
-=head2 in
-
- Title   : in
- Usage   : $obj->in('peptide');
- Function: Set and read the input coordinate system.
- Example :
- Returns : value of input system
- Args    : new value (optional)
-
-=cut
-
-sub in {
-   my ($self,$value) = @_;
-   if( defined $value) {
-       $self->throw("Not a valid input coordinate system name [$value]\n".
-                    "Valid values are ". join(", ", keys %COORDINATE_SYSTEMS ))
-           unless defined $COORDINATE_SYSTEMS{$value};
-
-       $self->{'_in'} = $COORDINATE_SYSTEMS{$value};
-   }
-   return $COORDINATE_INTS{ $self->{'_in'} };
-}
-
-=head2 out
-
- Title   : out
- Usage   : $obj->out('peptide');
- Function: Set and read the output coordinate system.
- Example :
- Returns : value of output system
- Args    : new value (optional)
-
-=cut
-
-sub out {
-   my ($self,$value) = @_;
-   if( defined $value) {
-       $self->throw("Not a valid input coordinate system name [$value]\n".
-                    "Valid values are ". join(", ", keys %COORDINATE_SYSTEMS ))
-           unless defined $COORDINATE_SYSTEMS{$value};
-
-       $self->{'_out'} = $COORDINATE_SYSTEMS{$value};
-   }
-   return $COORDINATE_INTS{ $self->{'_out'} };
-}
-
-=head2 strict
-
- Title   : strict
- Usage   : $obj->strict('peptide');
- Function: Set and read whether strict boundaried of coordinate
-           systems are enforced.
-           When strict is on, the end of the coordinate range must be defined.
- Example :
- Returns : boolean
- Args    : boolean (optional)
-
-=cut
-
-sub strict {
-   my ($self,$value) = @_;
-   if( defined $value) {
-       $value ? ( $self->{'_strict'} = 1 ) : ( $self->{'_strict'} = 0 );
-       ## update in each mapper !!
-   }
-   return $self->{'_strict'} || 0 ;
-}
-
-=head2 nozero
-
- Title   : nozero
- Usage   : $obj->nozero(1);
- Function: Flag to disable the use of zero in the input,
-           output or both coordinate systems. Use of coordinate
-           systems without zero is a peculiarity  common in
-           human genetics community.
- Example :
- Returns : 0 (default), or 'in', 'out', 'in&out'
- Args    : 0 (default), or 'in', 'out', 'in&out'
-
-=cut
-
-sub nozero {
-   my ($self,$value) = @_;
-
-   if (defined $value) {
-       $self->throw("Not a valid value for nozero [$value]\n".
-                    "Valid values are ". join(", ", keys %{$NOZERO_VALUES} ))
-           unless defined $NOZERO_VALUES->{$value};
-       $self->{'_nozero'} = $NOZERO_VALUES->{$value};
-   }
-
-   my $res = $self->{'_nozero'} || 0;
-   return $NOZERO_KEYS->{$res};
-}
-
-=head2 graph
-
- Title   : graph
- Usage   : $obj->graph($new_graph);
- Function: Set and read the graph object representing relationships
-           between coordinate systems
- Example :
- Returns : Bio::Coordinate::Graph object
- Args    : new Bio::Coordinate::Graph object (optional)
-
-=cut
-
-sub graph {
-   my ($self,$value) = @_;
-   if( defined $value) {
-       $self->throw("Not a valid graph [$value]\n")
-           unless $value->isa('Bio::Coordinate::Graph');
-       $self->{'_graph'} = $value;
-   }
-   return $self->{'_graph'};
-}
-
-=head2 peptide
-
- Title   : peptide
- Usage   : $obj->peptide_offset($peptide_coord);
- Function: Read and write the offset of peptide from the start of propeptide
-           and peptide length
- Returns : a Bio::Location::Simple object
- Args    : a Bio::LocationI object
-
-=cut
-
-sub peptide {
-   my ($self, $value) = @_;
-   if( defined $value) {
-       $self->throw("I need a Bio::LocationI, not  [". $value. "]")
-           unless $value->isa('Bio::LocationI');
-
-       $self->throw("Peptide start not defined")
-           unless defined $value->start;
-       $self->{'_peptide_offset'} = $value->start - 1;
-
-       $self->throw("Peptide end not defined")
-           unless defined $value->end;
-       $self->{'_peptide_length'} = $value->end - $self->{'_peptide_offset'};
-
-       my $a = $self->_create_pair
-           ('propeptide', 'peptide', $self->strict,
-            $self->{'_peptide_offset'}, $self->{'_peptide_length'} );
-       my $mapper =  $COORDINATE_SYSTEMS{'propeptide'}. "-".  $COORDINATE_SYSTEMS{'peptide'};
-       $self->{'_mappers'}->{$mapper} = $a;
-   }
-   return  Bio::Location::Simple->new
-       (-seq_id => 'propeptide',
-        -start => $self->{'_peptide_offset'} + 1 ,
-        -end => $self->{'_peptide_length'} + $self->{'_peptide_offset'},
-        -strand => 1,
-        -verbose => $self->verbose,
-       );
-}
-
-=head2 peptide_offset
-
- Title   : peptide_offset
- Usage   : $obj->peptide_offset(20);
- Function: Set and read the offset of peptide from the start of propeptide
- Returns : set value or 0
- Args    : new value (optional)
-
-=cut
-
-sub peptide_offset {
-   my ($self,$offset, $len) = @_;
-   if( defined $offset) {
-       $self->throw("I need an integer, not [$offset]")
-           unless $offset =~ /^[+-]?\d+$/;
-       $self->{'_peptide_offset'} = $offset;
-
-       if (defined $len) {
-           $self->throw("I need an integer, not [$len]")
-               unless $len =~ /^[+-]?\d+$/;
-           $self->{'_peptide_length'} = $len;
-       }
-
-       my $a = $self->_create_pair
-           ('propeptide', 'peptide', $self->strict, $offset, $self->{'_peptide_length'} );
-       my $mapper =  $COORDINATE_SYSTEMS{'propeptide'}. "-". $COORDINATE_SYSTEMS{'peptide'};
-       $self->{'_mappers'}->{$mapper} = $a;
-   }
-   return $self->{'_peptide_offset'} || 0;
-}
-
-=head2 peptide_length
-
- Title   : peptide_length
- Usage   : $obj->peptide_length(20);
- Function: Set and read the offset of peptide from the start of propeptide
- Returns : set value or 0
- Args    : new value (optional)
-
-=cut
-
-sub peptide_length {
-   my ($self, $len) = @_;
-   if( defined $len) {
-       $self->throw("I need an integer, not [$len]")
-           if defined $len && $len !~ /^[+-]?\d+$/;
-       $self->{'_peptide_length'} = $len;
-   }
-   return $self->{'_peptide_length'};
-}
-
-=head2 exons
-
- Title   : exons
- Usage   : $obj->exons(@exons);
- Function: Set and read the offset of CDS from the start of transcript
-           You do not have to sort the exons before calling this method as
-           they will be sorted automatically.
-           If you have not defined the CDS, is will be set to span all
-           exons here.
- Returns : array of Bio::LocationI exons in genome coordinates or 0
- Args    : array of Bio::LocationI exons in genome (or entry) coordinates
-
-=cut
-
-sub exons {
-   my ($self, at value) = @_;
-   my $cds_mapper =  $COORDINATE_SYSTEMS{'gene'}. "-". $COORDINATE_SYSTEMS{'cds'};
-   my $inex_mapper =
-       $COORDINATE_SYSTEMS{'gene'}. "-". $COORDINATE_SYSTEMS{'inex'};
-   my $exon_mapper =
-       $COORDINATE_SYSTEMS{'gene'}. "-". $COORDINATE_SYSTEMS{'exon'};
-   my $intron_mapper =
-       $COORDINATE_SYSTEMS{'gene'}. "-". $COORDINATE_SYSTEMS{'intron'};
-   my $negative_intron_mapper =
-       $COORDINATE_SYSTEMS{'intron'}. "-". $COORDINATE_SYSTEMS{'negative_intron'};
-   my $exon_cds_mapper =  $COORDINATE_SYSTEMS{'exon'}. "-". $COORDINATE_SYSTEMS{'cds'};
-
-   if(@value) {
-       if (ref($value[0]) &&
-           $value[0]->isa('Bio::SeqFeatureI') and
-           $value[0]->location->isa('Bio::Location::SplitLocationI')) {
-           @value = $value[0]->location->each_Location;
-       } else {
-           $self->throw("I need an array , not [@value]")
-               unless ref \@value eq 'ARRAY';
-           $self->throw("I need a reference to an array of Bio::LocationIs, not to [".
-                        $value[0]. "]")
-               unless ref $value[0] and $value[0]->isa('Bio::LocationI');
-       }
-
-       #
-       # sort the input array
-       #
-       # and if the used has not defined CDS assume it is the complete exonic range
-       if (defined $value[0]->strand &&
-           $value[0]->strand == - 1) {  #reverse strand
-           @value = map { $_->[0] }
-                    sort { $b->[1] <=> $a->[1] }
-                    map { [ $_, $_->start] }
-                    @value;
-
-           unless ($self->cds) {
-               $self->cds(Bio::Location::Simple->new
-                          (-start   => $value[-1]->start,
-                           -end     => $value[0]->end,
-                           -strand  => $value[0]->strand,
-                           -seq_id  => $value[0]->seq_id,
-                           -verbose => $self->verbose,
-                           )
-                          );
-           }
-       } else {               # undef or forward strand
-           @value = map { $_->[0] }
-                    sort { $a->[1] <=> $b->[1] }
-                    map { [ $_, $_->start] }
-                    @value;
-           unless ($self->cds) {
-               $self->cds(Bio::Location::Simple->new
-                          (-start   => $value[0]->start,
-                           -end     => $value[-1]->end,
-                           -strand  => $value[0]->strand,
-                           -seq_id  => $value[0]->seq_id,
-                           -verbose => $self->verbose,
-                           )
-                         );
-           }
-
-       }
-
-       $self->{'_chr_exons'} = \@value;
-
-       # transform exons from chromosome to gene coordinates
-       # but only if gene coordinate system has been set
-       my @exons ;
-       #my $gene_mapper = $self->$COORDINATE_SYSTEMS{'chr'}. "-". $COORDINATE_SYSTEMS{'gene'};
-       my $gene_mapper = "1-2";
-       if (defined $self->{'_mappers'}->{$gene_mapper} ) {
-
-           my $tmp_in = $self->{'_in'};
-           my $tmp_out = $self->{'_out'};
-           my $tmp_verb = $self->verbose;
-           $self->verbose(0);
-
-           $self->in('chr');
-           $self->out('gene');
-           @exons = map {$self->map($_) } @value;
-
-           $self->{'_in'} = ($tmp_in);
-           $self->{'_out'} = ($tmp_out);
-           $self->verbose($tmp_verb);
-       } else {
-           @exons = @value;
-       }
-
-       my $cds_map = Bio::Coordinate::Collection->new;
-       my $inex_map = Bio::Coordinate::Collection->new;
-       my $exon_map = Bio::Coordinate::Collection->new;
-       my $exon_cds_map = Bio::Coordinate::Collection->new;
-       my $intron_map = Bio::Coordinate::Collection->new;
-       my $negative_intron_map = Bio::Coordinate::Collection->new;
-
-       my $tr_end = 0;
-       my $coffset;
-       my $exon_counter;
-       my $prev_exon_end;
-
-       for my $exon ( @exons ) {
-           $exon_counter++;
-
-           #
-           # gene -> cds
-           #
-
-           my $match1 = Bio::Location::Simple->new
-               (-seq_id =>'gene' ,
-                -start  => $exon->start,
-                -end    => $exon->end,
-                -strand => 1,
-                -verbose=> $self->verbose);
-
-           my $match2 = Bio::Location::Simple->new
-               (-seq_id => 'cds',
-                -start => $tr_end + 1,
-                -end => $tr_end + $exon->end - $exon->start +1,
-                -strand=>$exon->strand,
-                -verbose=>$self->verbose);
-
-           $cds_map->add_mapper(Bio::Coordinate::Pair->new
-                                (-in => $match1,
-                                 -out => $match2,
-                                )
-                               );
-
-           if ($exon->start <= 1 and $exon->end >= 1) {
-               $coffset = $tr_end - $exon->start + 1;
-           }
-           $tr_end = $tr_end  + $exon->end - $exon->start + 1;
-
-           #
-           # gene -> intron
-           #
-
-           if (defined $prev_exon_end) {
-               my $match3 = Bio::Location::Simple->new
-                   (-seq_id  => 'gene',
-                    -start   => $prev_exon_end + 1,
-                    -end     => $exon->start -1,
-                    -strand  => $exon->strand,
-                    -verbose => $self->verbose);
-
-               my $match4 = Bio::Location::Simple->new
-                   (-seq_id  => 'intron'. ($exon_counter -1),
-                    -start   => 1,
-                    -end     => $exon->start - 1 - $prev_exon_end,
-                    -strand  =>$exon->strand,
-                    -verbose => $self->verbose,);
-
-               # negative intron coordinates
-               my $match5 = Bio::Location::Simple->new
-                   (-seq_id  => 'intron'. ($exon_counter -1),
-                    -start   => -1 * ($exon->start - 2 - $prev_exon_end) -1,
-                    -end     => -1,
-                    -strand  => $exon->strand,
-                    -verbose => $self->verbose);
-
-               $inex_map->add_mapper(Bio::Coordinate::Pair->new
-                                     (-in => $match3,
-                                      -out => $match4
-                                     )
-                                    );
-               $intron_map->add_mapper(Bio::Coordinate::Pair->new
-                                       (-in => $self->_clone_loc($match3),
-                                        -out => $self->_clone_loc($match4)
-                                       )
-                                      );
-               $negative_intron_map->add_mapper(Bio::Coordinate::Pair->new
-                                                (-in => $self->_clone_loc($match4),
-                                                 -out => $match5
-                                                ));
-
-           }
-
-           # store the value
-           $prev_exon_end = $exon->end;
-
-           #
-           # gene -> exon
-           #
-           my $match6 = Bio::Location::Simple->new
-               (-seq_id => 'exon'. $exon_counter,
-                -start  => 1,
-                -end    => $exon->end - $exon->start +1,
-                -strand => $exon->strand,
-                -verbose=> $self->verbose,);
-
-           my $pair2 = Bio::Coordinate::Pair->new(-in => $self->_clone_loc($match1),
-                                                  -out => $match6
-                                                 );
-           my $pair3 = Bio::Coordinate::Pair->new(-in => $self->_clone_loc($match6),
-                                                  -out => $self->_clone_loc($match2)
-                                                 );
-           $inex_map->add_mapper(Bio::Coordinate::Pair->new
-                                 (-in => $self->_clone_loc($match1),
-                                  -out => $match6
-                                 )
-                                );
-           $exon_map->add_mapper(Bio::Coordinate::Pair->new
-                                 (-in => $self->_clone_loc($match1),
-                                  -out => $self->_clone_loc($match6)
-                                 )
-                                );
-           $exon_cds_map->add_mapper(Bio::Coordinate::Pair->new
-                                     (-in => $self->_clone_loc($match6),
-                                      -out => $self->_clone_loc($match2)
-                                     )
-                                    );
-
-       }
-
-       # move coordinate start if exons have negative values
-       if ($coffset) {
-           foreach my $m ($cds_map->each_mapper) {
-               $m->out->start($m->out->start - $coffset);
-               $m->out->end($m->out->end - $coffset);
-           }
-
-       }
-
-       $self->{'_mappers'}->{$cds_mapper} = $cds_map;
-       $self->{'_mappers'}->{$exon_cds_mapper} = $exon_cds_map;
-       $self->{'_mappers'}->{$inex_mapper} = $inex_map;
-       $self->{'_mappers'}->{$exon_mapper} = $exon_map;
-       $self->{'_mappers'}->{$intron_mapper} = $intron_map;
-       $self->{'_mappers'}->{$negative_intron_mapper} = $negative_intron_map;
-   }
-   return  @{$self->{'_chr_exons'}}  || 0;
-}
-
-=head2 _clone_loc
-
- Title   : _clone_loc
- Usage   : $copy_of_loc = $obj->_clone_loc($loc);
- Function: Make a deep copy of a simple location
- Returns : a Bio::Location::Simple object
- Args    : a Bio::Location::Simple object to be cloned
-
-=cut
-
-sub _clone_loc { # clone a simple location
-   my ($self,$loc) = @_;
-
-   $self->throw("I need a Bio::Location::Simple , not [". ref $loc. "]")
-       unless $loc->isa('Bio::Location::Simple');
-
-   return  Bio::Location::Simple->new
-       (-verbose       => $self->verbose,
-        -seq_id        => $loc->seq_id,
-        -start         => $loc->start,
-        -end           => $loc->end,
-        -strand        => $loc->strand,
-        -location_type => $loc->location_type
-       );
-}
-
-=head2 cds
-
- Title   : cds
- Usage   : $obj->cds(20);
- Function: Set and read the offset of CDS from the start of transcipt
-
-           Simple input can be an integer which gives the start of the
-           coding region in genomic coordinate. If you want to provide
-           the end of the coding region or indicate the use of the
-           opposite strand, you have to pass a Bio::RangeI
-           (e.g. Bio::Location::Simple or Bio::SegFeature::Generic)
-           object to this method.
-
- Returns : set value or 0
- Args    : new value (optional)
-
-=cut
-
-sub cds {
-   my ($self,$value) = @_;
-   if( defined $value) {
-       if ($value =~ /^[+-]?\d+$/ ) {
-           my $loc = Bio::Location::Simple->new(-start=>$value, -end => $value,
-                                                -verbose=>$self->verbose);
-           $self->{'_cds'} = $loc;
-       }
-       elsif (ref $value &&  $value->isa('Bio::RangeI') ) {
-           $self->{'_cds'} = $value;
-       } else {
-           $self->throw("I need an integer or Bio::RangeI, not [$value]")
-       }
-       # strand !!
-       my $len;
-
-       $len = $self->{'_cds'}->end - $self->{'_cds'}->start +1
-           if defined $self->{'_cds'}->end;
-
-       my $a = $self->_create_pair
-           ('chr', 'gene', 0,
-            $self->{'_cds'}->start-1,
-            $len,
-            $self->{'_cds'}->strand);
-       my $mapper =  $COORDINATE_SYSTEMS{'chr'}. "-". $COORDINATE_SYSTEMS{'gene'};
-       $self->{'_mappers'}->{$mapper} = $a;
-
-       # recalculate exon-based mappers
-       if ( defined $self->{'_chr_exons'} ) {
-           $self->exons(@{$self->{'_chr_exons'}});
-       }
-
-   }
-   return $self->{'_cds'} || 0;
-}
-
-=head2 map
-
- Title   : map
- Usage   : $newpos = $obj->map(5);
- Function: Map the location from the input coordinate system
-           to a new value in the output coordinate system.
- Example :
- Returns : new value in the output coordiante system
- Args    : a Bio::Location::Simple
-
-=cut
-
-sub map {
-   my ($self,$value) = @_;
-   my ($res);
-   $self->throw("Need to pass me a Bio::Location::Simple or ".
-                "Bio::Location::Simple or Bio::SeqFeatureI, not [".
-                ref($value). "]")
-       unless ref($value) && ($value->isa('Bio::Location::Simple') or
-                              $value->isa('Bio::Location::SplitLocationI') or
-                              $value->isa('Bio::SeqFeatureI'));
-   $self->throw("Input coordinate system not set")
-       unless $self->{'_in'};
-   $self->throw("Output coordinate system not set")
-       unless $self->{'_out'};
-   $self->throw("Do not be silly. Input and output coordinate ".
-                "systems are the same!")
-       unless $self->{'_in'} != $self->{'_out'};
-
-   $self->_check_direction();
-
-   $value = $value->location if $value->isa('Bio::SeqFeatureI');
-   $self->debug( "=== Start location: ". $value->start. ",".
-                 $value->end. " (". ($value->strand || ''). ")\n");
-
-   # if nozero coordinate system is used in the input values
-   if ( defined $self->{'_nozero'} &&
-        ( $self->{'_nozero'} == 1 || $self->{'_nozero'} == 3 ) ) {
-       $value->start($value->start + 1)
-           if defined $value->start && $value->start < 1;
-       $value->end($value->end + 1)
-           if defined $value->end && $value->end < 1;
-   }
-
-   my @steps = $self->_get_path();
-   $self->debug( "mapping ". $self->{'_in'}. "->". $self->{'_out'}.
-                 "  Mappers: ". join(", ", @steps). "\n");
-
-   foreach my $mapper (@steps) {
-       if ($mapper eq $TRANSLATION) {
-           if ($self->direction == 1) {
-
-               $value = $self->_translate($value);
-               $self->debug( "+   $TRANSLATION cds -> propeptide (translate) \n");
-           } else {
-               $value = $self->_reverse_translate($value);
-               $self->debug("+   $TRANSLATION propeptide -> cds (reverse translate) \n");
-           }
-       }
-       # keep the start and end values, and go on to next iteration
-       #  if this mapper is not set
-       elsif ( ! defined $self->{'_mappers'}->{$mapper} ) {
-           # update mapper name
-           $mapper =~ /\d+-(\d+)/;   my ($counter) = $1;
-           $value->seq_id($COORDINATE_INTS{$counter});
-           $self->debug( "-   $mapper\n");
-       } else {
-           #
-           # the DEFAULT : generic mapping
-           #
-
-           $value = $self->{'_mappers'}->{$mapper}->map($value);
-
-           $value->purge_gaps
-               if ($value && $value->isa('Bio::Location::SplitLocationI') &&
-                   $value->can('gap'));
-
-           $self->debug( "+  $mapper (". $self->direction. "):  start ".
-                         $value->start. " end ". $value->end. "\n")
-               if $value && $self->verbose > 0;
-       }
-   }
-
-   # if nozero coordinate system is asked to be used in the output values
-   if ( defined $value && defined $self->{'_nozero'} &&
-        ( $self->{'_nozero'} == 2 || $self->{'_nozero'} == 3 ) ) {
-
-       $value->start($value->start - 1)
-           if defined $value->start && $value->start < 1;
-       $value->end($value->end - 1)
-           if defined $value->end && $value->end < 1;
-   }
-
-   # handle merging of adjacent split locations!
-
-   if (ref $value eq "Bio::Coordinate::Result" && $value->each_match > 1 ) {
-       my $prevloc;
-       my $merging = 0;
-       my $newvalue;
-       my @matches;
-       foreach my $loc ( $value->each_Location(1) ) {
-           unless ($prevloc) {
-               $prevloc = $loc;
-               push @matches, $prevloc;
-               next;
-           }
-           if ($prevloc->end == ($loc->start - 1) &&
-               $prevloc->seq_id eq $loc->seq_id) {
-               $prevloc->end($loc->end);
-               $merging = 1;
-           } else {
-               push @matches, $loc;
-               $prevloc = $loc;
-           }
-       }
-       if ($merging) {
-           if (@matches > 1 ) {
-               $newvalue = Bio::Coordinate::Result->new;
-               map {$newvalue->add_sub_Location} @matches;
-           } else {
-               $newvalue = Bio::Coordinate::Result::Match->new
-                   (-seq_id   => $matches[0]->seq_id,
-                    -start    => $matches[0]->start,
-                    -end      => $matches[0]->end,
-                    -strand   => $matches[0]->strand,
-                    -verbose  => $self->verbose,);
-           }
-           $value = $newvalue;
-       }
-   }
-   elsif (ref $value eq "Bio::Coordinate::Result" &&
-          $value->each_match == 1 ){
-       $value = $value->match;
-   }
-
-   return $value;
-}
-
-=head2 direction
-
- Title   : direction
- Usage   : $obj->direction('peptide');
- Function: Read-only method for the direction of mapping deduced from
-           predefined input and output coordinate names.
- Example :
- Returns : 1 or -1, mapping direction
- Args    : new value (optional)
-
-=cut
-
-sub direction {
-   my ($self) = @_;
-   return $self->{'_direction'};
-}
-
-=head2 swap
-
- Title   : swap
- Usage   : $obj->swap;
- Function: Swap the direction of transformation
-           (input <-> output)
- Example :
- Returns : 1
- Args    :
-
-=cut
-
-sub swap {
-   my ($self,$value) = @_;
-
-   ($self->{'_in'}, $self->{'_out'}) = ($self->{'_out'}, $self->{'_in'});
-   map { $self->{'_mappers'}->{$_}->swap } keys %{$self->{'_mappers'}};
-
-   # record the changed direction;
-   $self->{_direction} *= -1;
-
-   return 1;
-}
-
-=head2 to_string
-
- Title   : to_string
- Usage   : $newpos = $obj->to_string(5);
- Function: Dump the internal mapper values into a human readable format
- Example :
- Returns : string
- Args    :
-
-=cut
-
-sub to_string {
-   my ($self) = shift;
-
-   print "-" x 40, "\n";
-
-   # chr-gene
-   my $mapper_str = 'chr-gene';
-   my $mapper = $self->_mapper_string2code($mapper_str);
-
-   printf "\n     %-12s (%s)\n", $mapper_str, $mapper ;
-   if (defined $self->cds) {
-       my $end = $self->cds->end -1 if defined $self->cds->end;
-       printf "%16s%s: %s (%s)\n", ' ', 'gene offset', $self->cds->start-1 , $end || '';
-       printf "%16s%s: %s\n", ' ', 'gene strand', $self->cds->strand || 0;
-   }
-
-   # gene-intron
-   $mapper_str = 'gene-intron';
-   $mapper = $self->_mapper_string2code($mapper_str);
-   printf "\n     %-12s (%s)\n", $mapper_str, $mapper ;
-
-   my $i = 1;
-   foreach my $pair ( $self->{'_mappers'}->{$mapper}->each_mapper ) {
-       printf "%8s :%8s -> %-12s\n", $i, $pair->in->start, $pair->out->start ;
-       printf "%8s :%8s -> %-12s\n", '', $pair->in->end, $pair->out->end ;
-       $i++;
-   }
-
-   # intron-negative_intron
-   $mapper_str = 'intron-negative_intron';
-   $mapper = $self->_mapper_string2code($mapper_str);
-   printf "\n     %-12s (%s)\n", $mapper_str, $mapper ;
-
-   $i = 1;
-   foreach my $pair ( $self->{'_mappers'}->{$mapper}->each_mapper ) {
-       printf "%8s :%8s -> %-12s\n", $i, $pair->in->start, $pair->out->start ;
-       printf "%8s :%8s -> %-12s\n", '', $pair->in->end, $pair->out->end ;
-       $i++;
-   }
-
-   # gene-exon
-   $mapper_str = 'gene-exon';
-   $mapper = $self->_mapper_string2code($mapper_str);
-   printf "\n     %-12s (%s)\n", $mapper_str, $mapper ;
-
-   $i = 1;
-   foreach my $pair ( $self->{'_mappers'}->{$mapper}->each_mapper ) {
-       printf "%8s :%8s -> %-12s\n", $i, $pair->in->start, $pair->out->start ;
-       printf "%8s :%8s -> %-12s\n", '', $pair->in->end, $pair->out->end ;
-       $i++;
-   }
-
-   # gene-cds
-   $mapper_str = 'gene-cds';
-   $mapper = $self->_mapper_string2code($mapper_str);
-   printf "\n     %-12s (%s)\n", $mapper_str, $mapper ;
-
-   $i = 1;
-   foreach my $pair ( $self->{'_mappers'}->{$mapper}->each_mapper ) {
-       printf "%8s :%8s -> %-12s\n", $i, $pair->in->start, $pair->out->start ;
-       printf "%8s :%8s -> %-12s\n", '', $pair->in->end, $pair->out->end ;
-       $i++;
-   }
-
-   # cds-propeptide
-   $mapper_str = 'cds-propeptide';
-   $mapper = $self->_mapper_string2code($mapper_str);
-   printf "\n     %-12s (%s)\n", $mapper_str, $mapper ;
-   printf "%9s%-12s\n", "", '"translate"';
-
-   # propeptide-peptide
-   $mapper_str = 'propeptide-peptide';
-   $mapper = $self->_mapper_string2code($mapper_str);
-   printf "\n     %-12s (%s)\n", $mapper_str, $mapper ;
-   printf "%16s%s: %s\n", ' ', "peptide offset", $self->peptide_offset;
-
-   print "\nin : ", $self->in, "\n";
-   print "out: ", $self->out, "\n";
-   my $dir;
-   $self->direction ? ($dir='forward') : ($dir='reverse');
-   printf "direction: %-8s(%s)\n",  $dir, $self->direction;
-   print "\n", "-" x 40, "\n";
-
-   1;
-}
-
-=head2 _mapper_code2string
-=cut
-
-sub _mapper_code2string {
-    my ($self, $code) = @_;
-    my ($a, $b) = $code =~ /(\d+)-(\d+)/;
-    return $COORDINATE_INTS{$a}. '-'.  $COORDINATE_INTS{$b};
-
-}
-
-=head2 _mapper_string2code
-=cut
-
-sub _mapper_string2code {
-    my ($self, $string) =@_;
-    my ($a, $b) = $string =~ /([^-]+)-(.*)/;
-    return $COORDINATE_SYSTEMS{$a}. '-'.  $COORDINATE_SYSTEMS{$b};
-}
-
-=head2 _create_pair
-
- Title   : _create_pair
- Usage   : $mapper = $obj->_create_pair('chr', 'gene', 0, 2555, 10000, -1);
- Function: Internal helper method to create a mapper between
-           two coordinate systems
- Returns : a Bio::Coordinate::Pair object
- Args    : string, input coordinate system name,
-           string, output coordinate system name,
-           boolean, strict mapping
-           positive integer, offset
-           positive integer, length
-           1 || -1 , strand
-
-=cut
-
-sub _create_pair {
-   my ($self, $in, $out, $strict, $offset, $length, $strand ) = @_;
-   $strict ||= 0;
-   $strand ||= 1;
-   $length ||= 20;
-
-   my $match1 = Bio::Location::Simple->new
-       (-seq_id  => $in,
-        -start   => $offset+1,
-        -end     => $offset+$length,
-        -strand  => 1,
-        -verbose => $self->verbose);
-
-   my $match2 = Bio::Location::Simple->new
-       (-seq_id  => $out,
-        -start   => 1,
-        -end     => $length,
-        -strand  => $strand,
-        -verbose => $self->verbose);
-
-   my $pair = Bio::Coordinate::ExtrapolatingPair->new
-       (-in      => $match1,
-        -out     => $match2,
-        -strict  => $strict,
-        -verbose => $self->verbose,
-       );
-
-   return $pair;
-}
-
-=head2 _translate
-
- Title   : _translate
- Usage   : $newpos = $obj->_translate($loc);
- Function: Translate the location from the CDS coordinate system
-           to a new value in the propeptide coordinate system.
- Example :
- Returns : new location
- Args    : a Bio::Location::Simple or Bio::Location::SplitLocationI
-
-=cut
-
-sub _translate {
-   my ($self,$value) = @_;
-
-   $self->throw("Need to pass me a Bio::Location::Simple or ".
-                "Bio::Location::SplitLocationI, not [". ref($value). "]")
-       unless defined $value &&
-           ($value->isa('Bio::Location::Simple') || $value->isa('Bio::Location::SplitLocationI'));
-
-   my $seqid = 'propeptide';
-
-   if ($value->isa("Bio::Location::SplitLocationI") ) {
-       my $split = Bio::Location::Split->new(-seq_id=>$seqid);
-       foreach my $loc ( $value->each_Location(1) ) {
-           my $match = Bio::Location::Simple->new
-               (-start   => int ($loc->start / 3 ) +1,
-                -end     => int ($loc->end / 3 ) +1,
-                -seq_id  => $seqid,
-                -strand  => 1,
-                -verbose => $self->verbose,
-                );
-           $split->add_sub_Location($match);
-       }
-       return $split;
-
-   } else {
-       return new Bio::Location::Simple(-start  => int($value->start / 3 )+1,
-                                        -end    => int($value->end / 3 )+1,
-                                        -seq_id => $seqid,
-                                        -strand => 1,
-                                        -verbose=> $self->verbose,
-                                       );
-   }
-}
-
-=head2 _frame
-=cut
-
-sub _frame {
-   my ($self,$value) = @_;
-
-   $self->throw("Need to pass me a Bio::Location::Simple or ".
-                "Bio::Location::SplitLocationI, not [". ref($value). "]")
-       unless defined $value &&
-           ($value->isa('Bio::Location::Simple') || $value->isa('Bio::Location::SplitLocationI'));
-
-   my $seqid = 'propeptide';
-
-   if ($value->isa("Bio::Location::SplitLocationI")) {
-       my $split = Bio::Location::Split->new(-seq_id=>$seqid);
-       foreach my $loc ( $value->each_Location(1) ) {
-
-           my $match = Bio::Location::Simple->new
-               (-start  => ($value->start-1) % 3 +1,
-                -end    => ($value->end-1) % 3 +1,
-                -seq_id => 'frame',
-                -strand => 1,
-                -verbose=> $self->verbose);
-           $split->add_sub_Location($match);
-       }
-       return $split;
-   } else {
-       return new Bio::Location::Simple(-start   => ($value->start-1) % 3 +1,
-                                        -end     => ($value->end-1) % 3 +1,
-                                        -seq_id  => 'frame',
-                                        -strand  => 1,
-                                        -verbose => $self->verbose,
-                                        );
-   }
-}
-
-=head2 _reverse_translate
-
- Title   : _reverse_translate
- Usage   : $newpos = $obj->_reverse_translate(5);
- Function: Reverse translate the location from the propeptide
-           coordinate system to a new value in the CSD.
-           Note that a single peptide location expands to cover
-           the codon triplet
- Example :
- Returns : new location in the CDS coordinate system
- Args    : a Bio::Location::Simple or Bio::Location::SplitLocationI
-
-=cut
-
-sub _reverse_translate {
-   my ($self,$value) = @_;
-
-   $self->throw("Need to pass me a Bio::Location::Simple or ".
-                "Bio::Location::SplitLocationI, not [". ref($value). "]")
-       unless defined $value &&
-           ($value->isa('Bio::Location::Simple') || $value->isa('Bio::Location::SplitLocationI'));
-
-   my $seqid = 'cds';
-
-   if ($value->isa("Bio::Location::SplitLocationI")) {
-       my $split = Bio::Location::Split->new(-seq_id=>$seqid);
-       foreach my $loc ( $value->each_Location(1) ) {
-
-           my $match = Bio::Location::Simple->new
-               (-start   => $value->start * 3 - 2,
-                -end     => $value->end * 3,
-                -seq_id  => $seqid,
-                -strand  => 1,
-                -verbose => $self->verbose,
-                );
-           $split->add_sub_Location($match);
-       }
-       return $split;
-
-   } else {
-       return new Bio::Location::Simple(-start   => $value->start * 3 - 2,
-                                        -end     => $value->end * 3,
-                                        -seq_id  => $seqid,
-                                        -strand  => 1,
-                                        -verbose => $self->verbose,
-                                       );
-   }
-}
-
-=head2 _check_direction
-
- Title   : _check_direction
- Usage   : $obj->_check_direction();
- Function: Check and swap when needed the direction the location
-           mapping Pairs based on input and output values
- Example :
- Returns : new location
- Args    : a Bio::Location::Simple
-
-=cut
-
-sub _check_direction {
-   my ($self) = @_;
-
-   my $new_direction = 1;
-   $new_direction = -1 if $self->{'_in'} > $self->{'_out'};
-
-   unless ($new_direction == $self->{_direction} ) {
-       map { $self->{'_mappers'}->{$_}->swap } keys %{$self->{'_mappers'}};
-       # record the changed direction;
-       $self->{_direction} *= -1;
-   }
-   1;
-}
-
-=head2 _get_path
-
- Title   : _get_path
- Usage   : $obj->_get_path('peptide');
- Function: internal method for finding that shortest path between
-           input and output coordinate systems.
-           Calculations and caching are handled by the graph class.
-           See L<Bio::Coordinate::Graph>.
- Example :
- Returns : array of the mappers
- Args    : none
-
-=cut
-
-sub _get_path {
-   my ($self) = @_;
-
-   my $start = $self->{'_in'} || 0;
-   my $end = $self->{'_out'} || 0;
-
-   # note the order
-   # always go from smaller to bigger: it  makes caching more efficient
-   my $reverse;
-   if ($start > $end) {
-       ($start, $end) = ($end, $start );
-       $reverse++;
-   }
-
-   my @mappers;
-   if (exists $self->{'_previous_path'} and
-       $self->{'_previous_path'} eq "$start$end" ) {
-       # use cache
-       @mappers = @{$self->{'_mapper_path'}};
-   } else {
-       my $mapper;
-       my $prev_node = '';
-       @mappers =
-           map { $mapper = "$prev_node-$_"; $prev_node = $_; $mapper; }
-               $self->{'_graph'}->shortest_path($start, $end);
-       shift @mappers;
-
-       $self->{'_previous_path'} = "$start$end";
-       $self->{'_mapper_path'} = \@mappers;
-   }
-
-   $reverse ? return reverse @mappers : return @mappers;
-}
-
-1;
diff --git a/Bio/Coordinate/Graph.pm b/Bio/Coordinate/Graph.pm
deleted file mode 100644
index f8cf88b..0000000
--- a/Bio/Coordinate/Graph.pm
+++ /dev/null
@@ -1,336 +0,0 @@
-package Bio::Coordinate::Graph;
-use utf8;
-use strict;
-use warnings;
-use parent qw(Bio::Root::Root);
-
-# ABSTRACT: Finds shortest path between nodes in a graph.
-# AUTHOR:   Heikki Lehvaslaiho <heikki at bioperl.org>
-# OWNER:    Heikki Lehvaslaiho
-# LICENSE:  Perl_5
-
-=head1 SYNOPSIS
-
-  # get a hash of hashes representing the graph. E.g.:
-  my $hash= {
-             '1' => {
-                     '2' => 1
-                    },
-             '2' => {
-                     '4' => 1,
-                     '3' => 1
-                    },
-             '3' => undef,
-             '4' => {
-                     '5' => 1
-                    },
-             '5' => undef
-            };
-
-  # create the object;
-  my $graph = Bio::Coordinate::Graph->new(-graph => $hash);
-
-  # find the shortest path between two nodes
-  my $a = 1;
-  my $b = 6;
-  my @path = $graph->shortest_paths($a);
-  print join (", ", @path), "\n";
-
-=head1 DESCRIPTION
-
-This class calculates the shortest path between input and output
-coordinate systems in a graph that defines the relationships between
-them. This class is primarely designed to analyze gene-related
-coordinate systems. See L<Bio::Coordinate::GeneMapper>.
-
-Note that this module can not be used to manage graphs.
-
-Technically the graph implemented here is known as Directed Acyclic
-Graph (DAG). DAG is composed of vertices (nodes) and edges (with
-optional weights) linking them. Nodes of the graph are the coordinate
-systems in gene mapper.
-
-The shortest path is found using the Dijkstra's algorithm. This
-algorithm is fast and greedy and requires all weights to be
-positive. All weights in the gene coordinate system graph are
-currently equal (1) making the graph unweighted. That makes the use of
-Dijkstra's algorithm an overkill. A simpler and faster breadth-first
-would be enough. Luckily the difference for small graphs is not
-significant and the implementation is capable of taking weights into
-account if needed at some later time.
-
-=head2 Input format
-
-The graph needs to be primed using a hash of hashes where there is a
-key for each node. The second keys are the names of the downstream
-neighboring nodes and values are the weights for reaching them. Here
-is part of the gene coordiante system graph:
-
-    $hash = {
-             '6' => undef,
-             '3' => {
-                     '6' => 1
-                    },
-             '2' => {
-                     '6' => 1,
-                     '4' => 1,
-                     '3' => 1
-                    },
-             '1' => {
-                     '2' => 1
-                    },
-             '4' => {
-                     '5' => 1
-                    },
-             '5' => undef
-            };
-
-Note that the names need to be positive integers. Root should be '1'
-and directness of the graph is taken advantage of to speed
-calculations by assuming that downsream nodes always have larger
-number as name.
-
-An alternative (shorter) way of describing input is to use hash of
-arrays. See L<Bio::Coordinate::Graph::hash_of_arrays>.
-
-=cut
-
-=head2 new
-=cut
-
-sub new {
-    my($class, at args) = @_;
-    my $self = $class->SUPER::new(@args);
-
-    my($graph, $hasharray) =
-        $self->_rearrange([qw(
-                              GRAPH
-                              HASHARRAY
-                             )],
-                         @args);
-
-    $graph  && $self->graph($graph);
-    $hasharray  && $self->hasharray($hasharray);
-
-    $self->{'_root'} = undef;
-
-    return $self; # success - we hope!
-}
-
-=head2 graph
-
- Title   : graph
- Usage   : $obj->graph($my_graph)
- Function: Read/write method for the graph structure
- Example :
- Returns : hash of hashes grah structure
- Args    : reference to a hash of hashes
-
-=cut
-
-sub graph {
-
-  my ($self,$value) = @_;
-
-  if ($value) {
-      $self->throw("Need a hash of hashes")
-          unless  ref($value) eq 'HASH' ;
-      $self->{'_dag'} = $value;
-
-      # empty the cache
-      $self->{'_root'} = undef;
-
-  }
-
-  return $self->{'_dag'};
-
-}
-
-=head2 hash_of_arrays
-
- Title   : hash_of_arrays
- Usage   : $obj->hash_of_array(%hasharray)
- Function: An alternative method to read in the graph structure.
-           Hash arrays are easier to type. This method converts
-           arrays into hashes and assigns equal values "1" to
-           weights.
-
- Example : Here is an example of simple structure containing a graph.
-
-           my $DAG = {
-                      6  => [],
-                      5  => [],
-                      4  => [5],
-                      3  => [6],
-                      2  => [3, 4, 6],
-                      1  => [2]
-                     };
-
- Returns : hash of hashes graph structure
- Args    : reference to a hash of arrays
-
-=cut
-
-sub hash_of_arrays {
-
-  my ($self,$value) = @_;
-
-  # empty the cache
-  $self->{'_root'} = undef;
-
-  if ($value) {
-
-      $self->throw("Need a hash of hashes")
-          unless  ref($value) eq 'HASH' ;
-
-      #copy the hash of arrays into a hash of hashes;
-      my %hash;
-      foreach my $start ( keys %{$value}){
-          $hash{$start} = undef;
-          map { $hash{$start}{$_} = 1 } @{$value->{$start}};
-      }
-
-      $self->{'_dag'} = \%hash;
-  }
-
-  return $self->{'_dag'};
-
-}
-
-=head2 shortest_path
-
- Title   : shortest_path
- Usage   : $obj->shortest_path($a, $b);
- Function: Method for retrieving the shortest path between nodes.
-           If the start node remains the same, the method is sometimes
-           able to use cached results, otherwise it will recalculate
-           the paths.
- Example :
- Returns : array of node names, only the start node name if no path
- Args    : name of the start node
-         : name of the end node
-
-=cut
-
-sub shortest_path {
-    my ($self, $root, $end) = @_;
-
-    $self->throw("Two arguments needed") unless @_ == 3;
-    $self->throw("No node name [$root]")
-        unless exists $self->{'_dag'}->{$root};
-    $self->throw("No node name [$end]")
-        unless exists $self->{'_dag'}->{$end};
-
-    my @res;     # results
-    my $reverse;
-
-    if ($root > $end) {
-        ($root, $end) = ($end, $root );
-        $reverse++;
-    }
-
-    # try to use cached paths
-    $self->dijkstra($root) unless
-        defined $self->{'_root'} and $self->{'_root'} eq $root;
-
-    return @res unless $self->{'_paths'} ;
-
-    # create the list
-    my $node = $end;
-    my $prev = $self->{'_paths'}->{$end}{'prev'};
-    while ($prev) {
-        unshift @res, $node;
-        $node = $self->{'_paths'}->{$node}{'prev'};
-        $prev = $self->{'_paths'}->{$node}{'prev'};
-    }
-    unshift @res, $node;
-
-    $reverse ? return reverse @res : return @res;
-}
-
-=head2 dijkstra
-
- Title   : dijkstra
- Usage   : $graph->dijkstra(1);
- Function: Implements Dijkstra's algorithm.
-           Returns or sets a list of mappers. The returned path
-           description is always directed down from the root.
-           Called from shortest_path().
- Example :
- Returns : Reference to a hash of hashes representing a linked list
-           which contains shortest path down to all nodes from the start
-           node. E.g.:
-
-            $res = {
-                      '2' => {
-                               'prev' => '1',
-                               'dist' => 1
-                             },
-                      '1' => {
-                               'prev' => undef,
-                               'dist' => 0
-                             },
-                    };
-
- Args    : name of the start node
-
-=cut
-
-sub dijkstra {
-    my ($self,$root) = @_;
-
-    $self->throw("I need the name of the root node input") unless $root;
-    $self->throw("No node name [$root]")
-        unless exists $self->{'_dag'}->{$root};
-
-    my %est = ();          # estimate hash
-    my %res = ();          # result hash
-    my $nodes = keys %{$self->{'_dag'}};
-    my $maxdist = 1000000;
-
-    # cache the root value
-    $self->{'_root'} = $root;
-
-    foreach my $node ( keys %{$self->{'_dag'}} ){
-        if ($node eq $root) {
-            $est{$node}{'prev'} = undef;
-            $est{$node}{'dist'} = 0;
-        } else {
-            $est{$node}{'prev'} = undef;
-            $est{$node}{'dist'} = $maxdist;
-        }
-    }
-
-    # remove nodes from %est until it is empty
-    while (keys %est) {
-
-        #select the node closest to current one, or root node
-        my $min_node;
-        my $min = $maxdist;
-        foreach my $node (reverse sort keys %est) {
-            if ( $est{$node}{'dist'} < $min ) {
-                $min = $est{$node}{'dist'};
-                $min_node = $node;
-            }
-        }
-
-        # no more links between nodes
-        last unless ($min_node);
-
-        # move the node from %est into %res;
-        $res{$min_node} = delete $est{$min_node};
-
-        # recompute distances to the neighbours
-        my $dist = $res{$min_node}{'dist'};
-        foreach my $neighbour ( keys %{$self->{'_dag'}->{$min_node}} ){
-            next unless $est{$neighbour}; # might not be there any more
-            $est{$neighbour}{'prev'} = $min_node;
-            $est{$neighbour}{'dist'} =
-                $dist + $self->{'_dag'}{$min_node}{$neighbour}
-                if $est{$neighbour}{'dist'} > $dist + 1 ;
-        }
-    }
-    return $self->{'_paths'} = \%res;
-}
-
-1;
diff --git a/Bio/Coordinate/MapperI.pm b/Bio/Coordinate/MapperI.pm
deleted file mode 100644
index 3d65bb1..0000000
--- a/Bio/Coordinate/MapperI.pm
+++ /dev/null
@@ -1,133 +0,0 @@
-package Bio::Coordinate::MapperI;
-use utf8;
-use strict;
-use warnings;
-use parent qw(Bio::Root::RootI);
-
-# ABSTRACT: Interface describing coordinate mappers.
-# AUTHOR:   Heikki Lehvaslaiho <heikki at bioperl.org>
-# OWNER:    Heikki Lehvaslaiho
-# LICENSE:  Perl_5
-
-=head1 SYNOPSIS
-
-  # not to be used directly
-
-=head1 DESCRIPTION
-
-MapperI defines methods for classes capable for mapping locations
-between coordinate systems.
-
-=cut
-
-=head2 in
-
- Title   : in
- Usage   : $obj->in('peptide');
- Function: Set and read the input coordinate system.
- Example :
- Returns : value of input system
- Args    : new value (optional), Bio::LocationI
-
-=cut
-
-sub in {
-   my ($self,$value) = @_;
-
-   $self->throw_not_implemented();
-
-}
-
-=head2 out
-
- Title   : out
- Usage   : $obj->out('peptide');
- Function: Set and read the output coordinate system.
- Example :
- Returns : value of output system
- Args    : new value (optional), Bio::LocationI
-
-=cut
-
-sub out {
-   my ($self,$value) = @_;
-
-   $self->throw_not_implemented();
-}
-
-=head2 swap
-
- Title   : swap
- Usage   : $obj->swap;
- Function: Swap the direction of mapping: input <-> output)
- Example :
- Returns : 1
- Args    :
-
-=cut
-
-sub swap {
-   my ($self) = @_;
-
-   $self->throw_not_implemented();
-
-}
-
-=head2 test
-
- Title   : test
- Usage   : $obj->test;
- Function: test that both components are of same length
- Example :
- Returns : ( 1 | undef )
- Args    :
-
-=cut
-
-sub test {
-   my ($self) = @_;
-
-   $self->throw_not_implemented();
-}
-
-=head2 map
-
- Title   : map
- Usage   : $newpos = $obj->map($loc);
- Function: Map the location from the input coordinate system
-           to a new value in the output coordinate system.
- Example :
- Returns : new value in the output coordiante system
- Args    : Bio::LocationI
-
-=cut
-
-sub map {
-   my ($self,$value) = @_;
-
-   $self->throw_not_implemented();
-
-}
-
-=head2 return_match
-
- Title   : return_match
- Usage   : $obj->return_match(1);
- Function: A flag to turn on the simplified mode of
-           returning only one joined Match object or undef
- Example :
- Returns : boolean
- Args    : boolean (optional)
-
-=cut
-
-sub return_match {
-   my ($self,$value) = @_;
-   if( defined $value) {
-       $value ? ( $self->{'_return_match'} = 1 ) :
-                ( $self->{'_return_match'} = 0 );
-   }
-   return $self->{'_return_match'} || 0 ;
-}
-
-1;
diff --git a/Bio/Coordinate/Pair.pm b/Bio/Coordinate/Pair.pm
deleted file mode 100644
index 299d30c..0000000
--- a/Bio/Coordinate/Pair.pm
+++ /dev/null
@@ -1,381 +0,0 @@
-package Bio::Coordinate::Pair;
-use utf8;
-use strict;
-use warnings;
-use Bio::Coordinate::Result;
-use Bio::Coordinate::Result::Match;
-use Bio::Coordinate::Result::Gap;
-use parent qw(Bio::Root::Root Bio::Coordinate::MapperI);
-
-# ABSTRACT: Continuous match between two coordinate sets.
-# AUTHOR:   Heikki Lehvaslaiho <heikki at bioperl.org>
-# OWNER:    Heikki Lehvaslaiho
-# LICENSE:  Perl_5
-
-=head1 SYNOPSIS
-
-  use Bio::Location::Simple;
-  use Bio::Coordinate::Pair;
-
-  my $match1 = Bio::Location::Simple->new
-      (-seq_id => 'propeptide', -start => 21, -end => 40, -strand=>1 );
-  my $match2 = Bio::Location::Simple->new
-      (-seq_id => 'peptide', -start => 1, -end => 20, -strand=>1 );
-  my $pair = Bio::Coordinate::Pair->new(-in => $match1,
-                                        -out => $match2
-                                        );
-  # location to match
-  $pos = Bio::Location::Simple->new
-      (-start => 25, -end => 25, -strand=> -1 );
-
-  # results are in a Bio::Coordinate::Result
-  # they can be Matches and Gaps; are  Bio::LocationIs
-  $res = $pair->map($pos);
-  $res->isa('Bio::Coordinate::Result');
-  $res->each_match == 1;
-  $res->each_gap == 0;
-  $res->each_Location == 1;
-  $res->match->start == 5;
-  $res->match->end == 5;
-  $res->match->strand == -1;
-  $res->match->seq_id eq 'peptide';
-
-=head1 DESCRIPTION
-
-This class represents a one continuous match between two coordinate
-systems represented by Bio::Location::Simple objects. The relationship
-is directed and reversible. It implements methods to ensure internal
-consistency, and map continuous and split locations from one
-coordinate system to another.
-
-The map() method returns Bio::Coordinate::Results with
-Bio::Coordinate::Result::Gaps. The calling code have to deal (process
-or ignore) them.
-
-=cut
-
-=head2 new
-=cut
-
-sub new {
-    my($class, at args) = @_;
-    my $self = $class->SUPER::new(@args);
-
-    my($in, $out) =
-        $self->_rearrange([qw(IN
-                              OUT
-                             )],
-                         @args);
-
-    $in  && $self->in($in);
-    $out  && $self->out($out);
-    return $self; # success - we hope!
-}
-
-=head2 in
-
- Title   : in
- Usage   : $obj->in('peptide');
- Function: Set and read the input coordinate system.
- Example :
- Returns : value of input system
- Args    : new value (optional), Bio::LocationI
-
-=cut
-
-sub in {
-   my ($self,$value) = @_;
-   if( defined $value) {
-       $self->throw("Not a valid input Bio::Location [$value] ")
-           unless $value->isa('Bio::LocationI');
-       $self->{'_in'} = $value;
-   }
-   return $self->{'_in'};
-}
-
-=head2 out
-
- Title   : out
- Usage   : $obj->out('peptide');
- Function: Set and read the output coordinate system.
- Example :
- Returns : value of output system
- Args    : new value (optional), Bio::LocationI
-
-=cut
-
-sub out {
-   my ($self,$value) = @_;
-   if( defined $value) {
-       $self->throw("Not a valid output coordinate Bio::Location [$value] ")
-           unless $value->isa('Bio::LocationI');
-       $self->{'_out'} = $value;
-   }
-   return $self->{'_out'};
-}
-
-=head2 swap
-
- Title   : swap
- Usage   : $obj->swap;
- Function: Swap the direction of mapping; input <-> output
- Example :
- Returns : 1
- Args    :
-
-=cut
-
-sub swap {
-   my ($self) = @_;
-   ($self->{'_in'}, $self->{'_out'}) = ($self->{'_out'}, $self->{'_in'});
-   return 1;
-}
-
-=head2 strand
-
- Title   : strand
- Usage   : $obj->strand;
- Function: Get strand value for the pair
- Example :
- Returns : ( 1 | 0 | -1 )
- Args    :
-
-=cut
-
-sub strand {
-   my ($self) = @_;
-   $self->warn("Outgoing coordinates are not defined")
-       unless $self->out;
-   $self->warn("Incoming coordinates are not defined")
-       unless $self->in;
-
-   return ($self->in->strand || 0) * ($self->out->strand || 0);
-}
-
-=head2 test
-
- Title   : test
- Usage   : $obj->test;
- Function: test that both components are of the same length
- Example :
- Returns : ( 1 | undef )
- Args    :
-
-=cut
-
-sub test {
-   my ($self) = @_;
-   $self->warn("Outgoing coordinates are not defined")
-       unless $self->out;
-   $self->warn("Incoming coordinates are not defined")
-       unless $self->in;
-   return ($self->in->end - $self->in->start) == ($self->out->end - $self->out->start);
-}
-
-=head2 map
-
- Title   : map
- Usage   : $newpos = $obj->map($pos);
- Function: Map the location from the input coordinate system
-           to a new value in the output coordinate system.
- Example :
- Returns : new Bio::LocationI in the output coordinate system or undef
- Args    : Bio::LocationI object
-
-=cut
-
-sub map {
-   my ($self,$value) = @_;
-
-   $self->throw("Need to pass me a value.")
-       unless defined $value;
-   $self->throw("I need a Bio::Location, not [$value]")
-       unless $value->isa('Bio::LocationI');
-   $self->throw("Input coordinate system not set")
-       unless $self->in;
-   $self->throw("Output coordinate system not set")
-       unless $self->out;
-
-   if ($value->isa("Bio::Location::SplitLocationI")) {
-
-       my $result = Bio::Coordinate::Result->new();
-       foreach my $loc ( $value->sub_Location(1) ) {
-           my $res = $self->_map($loc);
-           map { $result->add_sub_Location($_) } $res->each_Location;
-       }
-       return $result;
-   } else {
-       return $self->_map($value);
-   }
-}
-
-=head2 _map
-
- Title   : _map
- Usage   : $newpos = $obj->_map($simpleloc);
- Function: Internal method that does the actual mapping. Called
-           multiple times by map() if the location to be mapped is a
-           split location
- Example :
- Returns : new location in the output coordinate system or undef
- Args    : Bio::Location::Simple
-
-=cut
-
-sub _map {
-   my ($self,$value) = @_;
-
-   my $result = Bio::Coordinate::Result->new();
-
-   my $offset = $self->in->start - $self->out->start;
-   my $start  = $value->start - $offset;
-   my $end    = $value->end - $offset;
-
-   my $match = Bio::Location::Simple->new;
-   $match->location_type($value->location_type);
-   $match->strand($self->strand);
-
-   #within
-   #       |-------------------------|
-   #            |-|
-   if ($start >= $self->out->start and $end <= $self->out->end) {
-
-       $match->seq_id($self->out->seq_id);
-       $result->seq_id($self->out->seq_id);
-
-       if ($self->strand >= 0) {
-           $match->start($start);
-           $match->end($end);
-       } else {
-           $match->start($self->out->end - $end + $self->out->start);
-           $match->end($self->out->end - $start + $self->out->start);
-       }
-       if ($value->strand) {
-           $match->strand($match->strand * $value->strand);
-           $result->strand($match->strand);
-       }
-       bless $match, 'Bio::Coordinate::Result::Match';
-       $result->add_sub_Location($match);
-   }
-   #out
-   #       |-------------------------|
-   #   |-|              or              |-|
-   elsif ( ($end < $self->out->start or $start > $self->out->end ) or
-           #insertions just outside the range need special settings
-           ($value->location_type eq 'IN-BETWEEN' and
-            ($end = $self->out->start or $start = $self->out->end)))  {
-
-       $match->seq_id($self->in->seq_id);
-       $result->seq_id($self->in->seq_id);
-       $match->start($value->start);
-       $match->end($value->end);
-       $match->strand($value->strand);
-
-       bless $match, 'Bio::Coordinate::Result::Gap';
-       $result->add_sub_Location($match);
-   }
-   #partial I
-   #       |-------------------------|
-   #   |-----|
-   elsif ($start < $self->out->start and $end <= $self->out->end ) {
-
-       $result->seq_id($self->out->seq_id);
-       if ($value->strand) {
-           $match->strand($match->strand * $value->strand);
-           $result->strand($match->strand);
-       }
-       my $gap = Bio::Location::Simple->new;
-       $gap->start($value->start);
-       $gap->end($self->in->start - 1);
-       $gap->strand($value->strand);
-       $gap->seq_id($self->in->seq_id);
-
-       bless $gap, 'Bio::Coordinate::Result::Gap';
-       $result->add_sub_Location($gap);
-
-       # match
-       $match->seq_id($self->out->seq_id);
-
-       if ($self->strand >= 0) {
-           $match->start($self->out->start);
-           $match->end($end);
-       } else {
-           $match->start($self->out->end - $end + $self->out->start);
-           $match->end($self->out->end);
-       }
-       bless $match, 'Bio::Coordinate::Result::Match';
-       $result->add_sub_Location($match);
-   }
-   #partial II
-   #       |-------------------------|
-   #                             |------|
-   elsif ($start >= $self->out->start and $end > $self->out->end ) {
-
-       $match->seq_id($self->out->seq_id);
-       $result->seq_id($self->out->seq_id);
-       if ($value->strand) {
-           $match->strand($match->strand * $value->strand);
-           $result->strand($match->strand);
-       }
-       if ($self->strand >= 0) {
-           $match->start($start);
-           $match->end($self->out->end);
-       } else {
-           $match->start($self->out->start);
-           $match->end($self->out->end - $start + $self->out->start);
-       }
-       bless $match, 'Bio::Coordinate::Result::Match';
-       $result->add_sub_Location($match);
-
-       my $gap = Bio::Location::Simple->new;
-       $gap->start($self->in->end + 1);
-       $gap->end($value->end);
-       $gap->strand($value->strand);
-       $gap->seq_id($self->in->seq_id);
-       bless $gap, 'Bio::Coordinate::Result::Gap';
-       $result->add_sub_Location($gap);
-
-   }
-   #enveloping
-   #       |-------------------------|
-   #   |---------------------------------|
-   elsif ($start < $self->out->start and $end > $self->out->end ) {
-
-       $result->seq_id($self->out->seq_id);
-       if ($value->strand) {
-           $match->strand($match->strand * $value->strand);
-           $result->strand($match->strand);
-       }
-       # gap1
-       my $gap1 = Bio::Location::Simple->new;
-       $gap1->start($value->start);
-       $gap1->end($self->in->start - 1);
-       $gap1->strand($value->strand);
-       $gap1->seq_id($self->in->seq_id);
-       bless $gap1, 'Bio::Coordinate::Result::Gap';
-       $result->add_sub_Location($gap1);
-
-       # match
-       $match->seq_id($self->out->seq_id);
-
-       $match->start($self->out->start);
-       $match->end($self->out->end);
-       bless $match, 'Bio::Coordinate::Result::Match';
-       $result->add_sub_Location($match);
-
-       # gap2
-       my $gap2 = Bio::Location::Simple->new;
-       $gap2->start($self->in->end + 1);
-       $gap2->end($value->end);
-       $gap2->strand($value->strand);
-       $gap2->seq_id($self->in->seq_id);
-       bless $gap2, 'Bio::Coordinate::Result::Gap';
-       $result->add_sub_Location($gap2);
-
-   } else {
-       $self->throw("Should not be here!");
-   }
-   return $result;
-}
-
-1;
diff --git a/Bio/Coordinate/Result.pm b/Bio/Coordinate/Result.pm
deleted file mode 100644
index f9b3e1f..0000000
--- a/Bio/Coordinate/Result.pm
+++ /dev/null
@@ -1,230 +0,0 @@
-package Bio::Coordinate::Result;
-use utf8;
-use strict;
-use warnings;
-use parent qw(Bio::Location::Split Bio::Coordinate::ResultI);
-
-# ABSTRACT: Results from coordinate transformation.
-# AUTHOR:   Heikki Lehvaslaiho <heikki at bioperl.org>
-# OWNER:    Heikki Lehvaslaiho
-# LICENSE:  Perl_5
-
-=head1 SYNOPSIS
-
-  use Bio::Coordinate::Result;
-
-  #get results from a Bio::Coordinate::MapperI
-  $matched = $result->each_match;
-
-=head1 DESCRIPTION
-
-The results from Bio::Coordinate::MapperI are kept in an object which
-itself is a split location, See L<Bio::Location::Split>. The results
-are either Matches or Gaps.  See L<Bio::Coordinate::Result::Match> and
-L<Bio::Coordinate::Result::Gap>.
-
-If only one Match is returned, there is a convenience method of
-retrieving it or accessing its methods. Same holds true for a Gap.
-
-=cut
-
-=head2 add_location
-
- Title   : add_sub_Location
- Usage   : $obj->add_sub_Location($variant)
- Function:
-
-           Pushes one Bio::LocationI into the list of variants.
-
- Example :
- Returns : 1 when succeeds
- Args    : Location object
-
-=cut
-
-sub add_sub_Location {
-  my ($self,$value) = @_;
-  if( ! $value ) {
-      $self->warn("provding an empty value for location\n");
-      return;
-  }
-  $self->throw("Is not a Bio::LocationI but [$value]")
-      unless $value->isa('Bio::LocationI');
-
-  $self->{'_match'} = $value
-      if $value->isa('Bio::Coordinate::Result::Match');
-
-  $self->{'_gap'} = $value
-      if $value->isa('Bio::Coordinate::Result::Gap');
-
-  $self->SUPER::add_sub_Location($value);
-
-}
-
-=head2 add_result
-
- Title   : add_result
- Usage   : $obj->add_result($result)
- Function: Adds the contents of one Bio::Coordinate::Result
- Example :
- Returns : 1 when succeeds
- Args    : Result object
-
-=cut
-
-sub add_result {
-  my ($self,$value) = @_;
-
-  $self->throw("Is not a Bio::Coordinate::Result but [$value]")
-      unless $value->isa('Bio::Coordinate::Result');
-
-  map { $self->add_sub_Location($_) } $value->each_Location;
-}
-
-=head2 seq_id
-
-  Title   : seq_id
-  Usage   : my $seqid = $location->seq_id();
-  Function: Get/Set seq_id that location refers to
-
-            We override this here in order to propagate to all sublocations
-            which are not remote (provided this root is not remote either)
-
-  Returns : seq_id
-  Args    : [optional] seq_id value to set
-
-=cut
-
-sub seq_id {
-    my ($self, $seqid) = @_;
-
-    my @ls = $self->each_Location;
-    if (@ls) {
-        return $ls[0]->seq_id;
-    } else {
-        return;
-    }
-}
-
-=head2 each_gap
-
- Title   : each_gap
- Usage   : $obj->each_gap();
- Function:
-
-            Returns a list of Bio::Coordianate::Result::Gap objects.
-
- Returns : list of gaps
- Args    : none
-
-=cut
-
-sub each_gap {
-   my ($self) = @_;
-
-   my @gaps;
-   foreach my $gap ($self->each_Location) {
-       push @gaps, $gap if $gap->isa('Bio::Coordinate::Result::Gap');
-   }
-   return @gaps;
-
-}
-
-=head2 each_match
-
- Title   : each_match
- Usage   : $obj->each_match();
- Function:
-
-            Returns a list of Bio::Coordinate::Result::Match objects.
-
- Returns : list of Matchs
- Args    : none
-
-=cut
-
-sub each_match {
-   my ($self) = @_;
-
-   my @matches;
-   foreach my $match ($self->each_Location) {
-       push @matches, $match if $match->isa('Bio::Coordinate::Result::Match');
-   }
-   return @matches;
-}
-
-=head2 match
-
- Title   : match
- Usage   : $match_object = $obj->match(); #or
-           $gstart = $obj->gap->start;
- Function: Read only method for retrieving or accessing the match object.
- Returns : one Bio::Coordinate::Result::Match
- Args    :
-
-=cut
-
-sub match {
-   my ($self) = @_;
-
-   $self->warn("More than one match in results")
-       if $self->each_match > 1 and $self->verbose > 0;
-   unless (defined $self->{'_match'} ) {
-       my @m = $self->each_match;
-       $self->{'_match'} = $m[-1];
-   }
-   return $self->{'_match'};
-}
-
-=head2 gap
-
- Title   : gap
- Usage   : $gap_object = $obj->gap(); #or
-           $gstart = $obj->gap->start;
- Function: Read only method for retrieving or accessing the gap object.
- Returns : one Bio::Coordinate::Result::Gap
- Args    :
-
-=cut
-
-sub gap {
-   my ($self) = @_;
-
-   $self->warn("More than one gap in results")
-       if $self->each_gap > 1 and $self->verbose > 0;
-   unless (defined $self->{'_gap'} ) {
-       my @m = $self->each_gap;
-       $self->{'_gap'} = $m[-1];
-   }
-   return $self->{'_gap'};
-}
-
-=head2 purge_gaps
-
- Title   : purge_gaps
- Usage   : $gap_count = $obj->purge_gaps;
- Function: remove all gaps from the Result
- Returns : count of removed gaps
- Args    :
-
-=cut
-
-sub purge_gaps {
-    my ($self) = @_;
-    my @matches;
-    my $count = 0;
-
-    foreach my $loc ($self->each_Location) {
-        if ($loc->isa('Bio::Coordinate::Result::Match')) {
-            push @matches, $loc;
-        } else {
-            $count++
-        }
-    }
-    @{$self->{'_sublocations'}} = ();
-    delete $self->{'_gap'} ;
-    push @{$self->{'_sublocations'}}, @matches;
-    return $count;
-}
-
-1;
diff --git a/Bio/Coordinate/Result/Gap.pm b/Bio/Coordinate/Result/Gap.pm
deleted file mode 100644
index 12820a6..0000000
--- a/Bio/Coordinate/Result/Gap.pm
+++ /dev/null
@@ -1,23 +0,0 @@
-package Bio::Coordinate::Result::Gap;
-use utf8;
-use strict;
-use warnings;
-use parent qw(Bio::Location::Simple Bio::Coordinate::ResultI);
-
-# ABSTRACT: Another name for L<Bio::Location::Simple>.
-# AUTHOR:   Heikki Lehvaslaiho <heikki at bioperl.org>
-# OWNER:    Heikki Lehvaslaiho
-# LICENSE:  Perl_5
-
-=head1 SYNOPSIS
-
-  $loc = Bio::Coordinate::Result::Gap->new(-start=>10,
-                                          -end=>30,
-                                          -strand=>1);
-
-=head1 DESCRIPTION
-
-This is a location object for coordinate mapping results.
-=cut
-
-1;
diff --git a/Bio/Coordinate/Result/Match.pm b/Bio/Coordinate/Result/Match.pm
deleted file mode 100644
index fa82a31..0000000
--- a/Bio/Coordinate/Result/Match.pm
+++ /dev/null
@@ -1,26 +0,0 @@
-package Bio::Coordinate::Result::Match;
-use utf8;
-use strict;
-use warnings;
-use parent qw(Bio::Location::Simple Bio::Coordinate::ResultI);
-
-# ABSTRACT: Another name for L<Bio::Location::Simple>.
-# AUTHOR:   Heikki Lehvaslaiho <heikki at bioperl.org>
-# OWNER:    Heikki Lehvaslaiho
-# LICENSE:  Perl_5
-
-=head1 SYNOPSIS
-
-  $loc = Bio::Coordinate::Result::Match->new(
-      -start=>10,
-      -end=>30,
-      -strand=>+1
-  );
-
-=head1 DESCRIPTION
-
-This is a location class for coordinate mapping results.
-
-=cut
-
-1;
diff --git a/Bio/Coordinate/ResultI.pm b/Bio/Coordinate/ResultI.pm
deleted file mode 100644
index d6ec5f4..0000000
--- a/Bio/Coordinate/ResultI.pm
+++ /dev/null
@@ -1,23 +0,0 @@
-package Bio::Coordinate::ResultI;
-use utf8;
-use strict;
-use warnings;
-use parent qw(Bio::LocationI);
-
-# ABSTRACT: Interface to identify coordinate mapper results.
-# AUTHOR:   Heikki Lehvaslaiho <heikki at bioperl.org>
-# OWNER:    Heikki Lehvaslaiho
-# LICENSE:  Perl_5
-
-=head1 SYNOPSIS
-
-  # not to be used directly
-
-=head1 DESCRIPTION
-
-ResultI identifies Bio::LocationIs returned by
-Bio::Coordinate::MapperI implementing classes from other locations.
-
-=cut
-
-1;
diff --git a/Bio/Coordinate/Utils.pm b/Bio/Coordinate/Utils.pm
deleted file mode 100644
index 490014a..0000000
--- a/Bio/Coordinate/Utils.pm
+++ /dev/null
@@ -1,188 +0,0 @@
-package Bio::Coordinate::Utils;
-use utf8;
-use strict;
-use warnings;
-use Bio::Location::Simple;
-use Bio::Coordinate::Pair;
-use Bio::Coordinate::Collection;
-use parent qw(Bio::Root::Root);
-
-# ABSTRACT: Additional methods to create Bio::Coordinate objects.
-# AUTHOR:   Heikki Lehvaslaiho <heikki at bioperl.org>
-# AUTHOR:   Jason Stajich <jason at bioperl.org>
-# OWNER:    Heikki Lehvaslaiho
-# OWNER:    Jason Stajich
-# LICENSE:  Perl_5
-
-=head1 SYNOPSIS
-
-    use Bio::Coordinate::Utils;
-    # get a Bio::Align::AlignI compliant object, $aln, somehow
-    # it could be a Bio::SimpleAlign
-
-    $mapper = Bio::Coordinate::Utils->from_align($aln, 1);
-
-    # Build a set of mappers which will map, for each sequence,
-    # that sequence position in the alignment (exon position to alignment
-    # position)
-    my @mappers = Bio::Coordinate::Utils->from_seq_to_alignmentpos($aln);
-
-=head1 DESCRIPTION
-
-This class is a holder of methods that work on or create
-Bio::Coordinate::MapperI- compliant objects. . These methods are not
-part of the Bio::Coordinate::MapperI interface and should in general
-not be essential to the primary function of sequence objects. If you
-are thinking of adding essential functions, it might be better to
-create your own sequence class.  See L<Bio::PrimarySeqI>,
-L<Bio::PrimarySeq>, and L<Bio::Seq> for more.
-
-=cut
-
-=head2 new
-
-new() inherited from Root
-=cut
-
-=head2 from_align
-
- Title   : from_align
- Usage   : $mapper = Bio::Coordinate::Utils->from_align($aln, 1);
- Function:
-           Create a mapper out of an alignment.
-           The mapper will return a value only when both ends of
-           the input range find a match.
-
-           Note: This implementation works only on pairwise alignments
-           and is not yet well tested!
-
- Returns : A Bio::Coordinate::MapperI
- Args    : Bio::Align::AlignI object
-           Id for the reference sequence, optional
-
-=cut
-
-sub from_align {
-   my ($self, $aln, $ref ) = @_;
-
-   $aln->isa('Bio::Align::AlignI') ||
-       $self->throw('Not a Bio::Align::AlignI object but ['. ref($aln). ']');
-
-   # default reference sequence to the first sequence
-   $ref ||= 1;
-
-   my $collection = Bio::Coordinate::Collection->new(-return_match=>1);
-
-   # this works only for pairs, so split the MSA
-   # take the ref
-   #foreach remaining seq in aln, do:
-   $aln->map_chars('\.','-');
-   my $cs = $aln->gap_line;
-   my $seq1 = $aln->get_seq_by_pos(1);
-   my $seq2 = $aln->get_seq_by_pos(2);
-   while ( $cs =~ /([^\-]+)/g) {
-       # alignment coordinates
-       my $lenmatch = length($1);
-       my $start = pos($cs) - $lenmatch +1;
-       my $end   = $start + $lenmatch -1;
-       my $match1 = Bio::Location::Simple->new
-           (-seq_id => $seq1->id,
-            -start  => $seq1->location_from_column($start)->start,
-            -end    => $seq1->location_from_column($end)->start,
-            -strand => $seq1->strand );
-
-       my $match2 = Bio::Location::Simple->new
-           (-seq_id => $seq2->id,
-            -start  => $seq2->location_from_column($start)->start,
-            -end    => $seq2->location_from_column($end)->start,
-            -strand => $seq2->strand );
-
-       my $pair = Bio::Coordinate::Pair->new
-           (-in  => $match1,
-            -out => $match2
-            );
-       unless( $pair->test ) {
-           $self->warn(join("",
-                            "pair align did not pass test ($start..$end):\n",
-                            "\tm1=",$match1->to_FTstring(), " len=",
-                            $match1->length,
-                            " m2=", $match2->to_FTstring()," len=",
-                            $match2->length,"\n"));
-       }
-       $collection->add_mapper($pair);
-   }
-   return ($collection->each_mapper)[0] if $collection->mapper_count == 1;
-   return $collection;
-
-}
-
-=head2 from_seq_to_alignmentpos
-
- Title   : from_seq_to_alignmentpos
- Usage   : $mapper = Bio::Coordinate::Utils->from_seq_to_alignmentpos($aln, 1);
- Function:
-           Create a mapper out of an alignment.
-           The mapper will map the position of a sequence into that position
-           in the alignment.
-
-           Will work on alignments of >= 2 sequences
- Returns : An array of Bio::Coordinate::MapperI
- Args    : Bio::Align::AlignI object
-
-=cut
-
-sub from_seq_to_alignmentpos {
-    my ($self, $aln ) = @_;
-
-    $aln->isa('Bio::Align::AlignI') ||
-        $self->throw('Not a Bio::Align::AlignI object but ['. ref($aln). ']');
-
-    # default reference sequence to the first sequence
-    my @mappers;
-    $aln->map_chars('\.','-');
-    for my $seq ( $aln->each_seq ) {
-        my $collection = Bio::Coordinate::Collection->new(-return_match=>1);
-        my $cs = $seq->seq();
-        # do we change this over to use index and substr for speed?
-        while ( $cs =~ /([^\-]+)/g) {
-            # alignment coordinates
-            my $lenmatch = length($1);
-            my $start = pos($cs) - $lenmatch +1;
-            my $end   = $start + $lenmatch -1;
-
-            my $match1 = Bio::Location::Simple->new
-                (-seq_id => $seq->id,
-                 -start  => $seq->location_from_column($start)->start,
-                 -end    => $seq->location_from_column($end)->start,
-                 -strand => $seq->strand );
-
-            my $match2 = Bio::Location::Simple->new
-                (-seq_id => 'alignment',
-                 -start  => $start,
-                 -end    => $end,
-                 -strand => 0 );
-
-            my $pair = Bio::Coordinate::Pair->new
-                (-in  => $match1,
-                 -out => $match2
-                 );
-            unless ( $pair->test ) {
-                $self->warn(join("",
-                                 "pair align did not pass test ($start..$end):\n",
-                                 "\tm1=",$match1->to_FTstring(), " len=",
-                                 $match1->length,
-                                 " m2=", $match2->to_FTstring()," len=",
-                                 $match2->length,"\n"));
-            }
-            $collection->add_mapper($pair);
-        }
-        if( $collection->mapper_count == 1) {
-            push @mappers, ($collection->each_mapper)[0];
-        } else {
-            push @mappers, $collection;
-        }
-    }
-    return @mappers;
-}
-
-1;
diff --git a/Bio/DB/BioFetch.pm b/Bio/DB/BioFetch.pm
index 55d8be3..bdf4b35 100644
--- a/Bio/DB/BioFetch.pm
+++ b/Bio/DB/BioFetch.pm
@@ -26,14 +26,14 @@ Bio::DB::BioFetch - Database object interface to BioFetch retrieval
 
  $bf = Bio::DB::BioFetch->new();
 
- $seq = $bf->get_Seq_by_id('BUM');  # EMBL or SWALL ID
+ $seq = $bf->get_Seq_by_id('HSFOS');  # EMBL or SWALL ID
 
  # change formats, storage procedures
  $bf = Bio::DB::BioFetch->new(-format        => 'fasta',
  			     -retrievaltype => 'tempfile',
   			     -db            => 'EMBL');
 
- $stream = $bf->get_Stream_by_id(['BUM','J00231']);
+ $stream = $bf->get_Stream_by_id(['HSFOS','J00231']);
  while (my $s = $stream->next_seq) {
     print $s->seq,"\n";
  }
@@ -135,7 +135,7 @@ BEGIN {
 	    fasta     => 'fasta',
 	    namespace => 'uniprot',
 	},
-    'uniprot' => {
+	'uniprot' => {
 	    default   => 'swiss',
 	    swissprot => 'swiss',
 	    fasta     => 'fasta',
diff --git a/Bio/DB/EMBL.pm b/Bio/DB/EMBL.pm
index 4d18711..3b1fb3f 100644
--- a/Bio/DB/EMBL.pm
+++ b/Bio/DB/EMBL.pm
@@ -23,7 +23,7 @@ Bio::DB::EMBL - Database object interface for EMBL entry retrieval
   $embl = Bio::DB::EMBL->new();
 
   # remember that EMBL_ID does not equal GenBank_ID!
-  $seq = $embl->get_Seq_by_id('BUM'); # EMBL ID
+  $seq = $embl->get_Seq_by_id('HSFOS'); # EMBL ID
   print "cloneid is ", $seq->id, "\n";
 
   # or changeing to accession number and Fasta format ...
diff --git a/Bio/DB/Fasta.pm b/Bio/DB/Fasta.pm
index ccfd1f6..79d0413 100644
--- a/Bio/DB/Fasta.pm
+++ b/Bio/DB/Fasta.pm
@@ -171,8 +171,11 @@ sub _calculate_offsets {
             if ($line =~ /^>(\S+)/) {
                 print STDERR "Indexed $count sequences...\n"
                     if $self->{debug} && (++$count%1000) == 0;
-
-                $self->_check_linelength($linelen);
+                
+                # please, do not enforce arbitrary line length requirements.
+                # It's good practice but not enforced.
+                
+                #$self->_check_linelength($linelen);
                 my $pos = tell($fh);
                 if (@ids) {
                     my $strlen  = $pos - $offset - length($line);
@@ -187,7 +190,6 @@ sub _calculate_offsets {
                 @ids = $self->_makeid($line);
                 ($offset, $headerlen, $linelen, $seq_lines) = ($pos, length $line, 0, 0);
                 ($l3_len, $l2_len, $l_len, $blank_lines) = (0, 0, 0, 0);
-
             } else {
                 # Catch bad header lines, bug 3172
                 $self->throw("FASTA header doesn't match '>(\\S+)': $line");
@@ -244,7 +246,6 @@ sub _calculate_offsets {
     return \%offsets;
 }
 
-
 =head2 seq
 
  Title   : seq, sequence, subseq
@@ -290,8 +291,8 @@ sub subseq {
 
     seek($fh, $filestart,0);
     read($fh, $data, $filestop-$filestart+1);
-    $data =~ s/\n//g;
-    $data =~ s/\r//g;
+
+    $data = Bio::DB::IndexedBase::_strip_crnl($data);
 
     if ($strand == -1) {
         # Reverse-complement the sequence
@@ -333,8 +334,7 @@ sub header {
     read($fh, $data, $headerlen);
     # On Windows chomp remove '\n' but leaves '\r'
     # when reading '\r\n' in binary mode
-    $data =~ s/\n//g;
-    $data =~ s/\r//g;
+    $data = Bio::DB::IndexedBase::_strip_crnl($data);
     substr($data, 0, 1) = '';
     return $data;
 }
@@ -454,5 +454,4 @@ sub description  {
 }
 *desc = \&description;
 
-
 1;
diff --git a/Bio/DB/Flat.pm b/Bio/DB/Flat.pm
index a911ed5..f285227 100644
--- a/Bio/DB/Flat.pm
+++ b/Bio/DB/Flat.pm
@@ -23,9 +23,9 @@ Bio::DB::Flat - Interface for indexed flat files
                            -write_flag => 1);
   $db->build_index('/usr/share/embl/primate.embl',
                    '/usr/share/embl/protists.embl');
-  $seq       = $db->get_Seq_by_id('BUM');
+  $seq       = $db->get_Seq_by_id('HSFOS');
   @sequences = $db->get_Seq_by_acc('DIV' => 'primate');
-  $raw       = $db->fetch_raw('BUM');
+  $raw       = $db->fetch_raw('HSFOS');
 
 =head1 DESCRIPTION
 
diff --git a/Bio/DB/IndexedBase.pm b/Bio/DB/IndexedBase.pm
index 940f1da..f054003 100644
--- a/Bio/DB/IndexedBase.pm
+++ b/Bio/DB/IndexedBase.pm
@@ -241,7 +241,7 @@ methods. Internal methods are usually preceded with a _
 package Bio::DB::IndexedBase;
 
 BEGIN {
-    @AnyDBM_File::ISA = qw(DB_File GDBM_File NDBM_File SDBM_File) 
+    @AnyDBM_File::ISA = qw(DB_File GDBM_File NDBM_File SDBM_File)
         if(!$INC{'AnyDBM_File.pm'});
 }
 
@@ -268,6 +268,46 @@ use constant DIE_ON_MISSMATCHED_LINES => 1;
 # you can avoid dying if you want but you may get incorrect results
 
 
+# Compiling the below regular expressions speeds up the Pure Perl
+# seq/subseq() from Bio::DB::Fasta by about 7% from 7.76s to 7.22s
+# over 32358 calls on Variant Effect Prediction data.
+my $nl = qr/\n/;
+my $cr = qr/\r/;
+
+# Remove carriage returns (\r) and newlines (\n) from a string.  When
+# called from subseq, this can take a signficiant portion of time, in
+# Variant Effect Prediction. Therefore we compile the match portion.
+sub _strip_crnl {
+    my $str = shift;
+    $str =~ s/$nl//g;
+    $str =~ s/$cr//g;
+    return $str;
+}
+
+# C can do perfrom _strip_crnl much faster. But this requires the
+# Inline::C module which we don't require people to have. So we make
+# this optional by wrapping the C code in an eval. If the eval works,
+# the Perl strip_crnl() function is overwritten.
+eval q{
+    use Inline C  => <<'END_OF_C_CODE';
+    /* Strip all new line (\n) and carriage return (\r) characters
+       from string str
+    */
+    char* _strip_crnl(char* str) {
+        char *s;
+        char *s2 = str;
+        for (s = str; *s; *s++) {
+            if (*s != '\n' && *s != '\r') {
+              *s2++ = *s;
+            }
+        }
+        *s2 = '\0';
+        return str;
+    }
+END_OF_C_CODE
+};
+
+
 =head2 new
 
  Title   : new
@@ -353,6 +393,7 @@ sub new {
         require Cwd;
         $dirname = Cwd::getcwd();
     } else {
+	$self->{index_name} ||= $self->_default_index_name($path);
         if (-d $path) {
             # because Win32 glob() is broken with respect to long file names
             # that contain whitespace.
@@ -442,7 +483,7 @@ sub index_dir {
     my ($self, $dir, $force_reindex) = @_;
     my @files = glob( File::Spec->catfile($dir, $self->{glob}) );
     return if scalar @files == 0;
-    $self->{index_name} ||= File::Spec->catfile($dir, 'directory.index');
+    $self->{index_name} ||= $self->_default_index_name($dir);
     my $offsets = $self->_index_files(\@files, $force_reindex);
     return $offsets;
 }
@@ -480,11 +521,16 @@ sub get_all_primary_ids  {
 
 sub index_file {
     my ($self, $file, $force_reindex) = @_;
-    $self->{index_name} ||= "$file.index";
+    $self->{index_name} ||= $self->_default_index_name($file);
     my $offsets = $self->_index_files([$file], $force_reindex);
     return $offsets;
 }
 
+sub _default_index_name {
+    my ($self,$path) = @_;
+    return File::Spec->catfile($path,'directory.index') if -d $path;
+    return "$path.index";
+}
 
 =head2 index_files
 
@@ -676,6 +722,8 @@ sub _close_index {
     return 1;
 }
 
+# Compiling the below regular expression speeds up _parse_compound_id
+my $compound_id = qr/^ (.+?) (?:\:([\d_]+)(?:,|-|\.\.)([\d_]+))? (?:\/(.+))? $/x;
 
 sub _parse_compound_id {
     # Handle compound IDs:
@@ -693,7 +741,7 @@ sub _parse_compound_id {
     if ( (not defined $start ) &&
          (not defined $stop  ) &&
          (not defined $strand) &&
-         ($id =~ /^ (.+?) (?:\:([\d_]+)(?:,|-|\.\.)([\d_]+))? (?:\/(.+))? $/x) ) {
+         ($id =~ m{$compound_id}) ) {
         # Start, stop and strand not provided and ID looks like a compound ID
         ($id, $start, $stop, $strand) = ($1, $2, $3, $4);
     }
@@ -742,7 +790,7 @@ sub _check_linelength {
     my ($self, $linelength) = @_;
     return if not defined $linelength;
     $self->throw(
-        "Each line of the qual file must be less than 65,536 characters. Line ".
+        "Each line of the file must be less than 65,536 characters. Line ".
         "$. is $linelength chars."
     ) if $linelength > 65535;
 }
diff --git a/Bio/DB/NCBIHelper.pm b/Bio/DB/NCBIHelper.pm
index 23f4d7d..f87fe7d 100644
--- a/Bio/DB/NCBIHelper.pm
+++ b/Bio/DB/NCBIHelper.pm
@@ -36,7 +36,7 @@ constructing a URL for querying NCBI GenBank and NCBI GenPept and the
 common HTML stripping done in L<postprocess_data>().
 
 The base NCBI query URL used is:
-http://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi
+https://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi
 
 =head1 FEEDBACK
 
@@ -96,7 +96,7 @@ use URI::Escape qw(uri_unescape);
 
 use base qw(Bio::DB::WebDBSeqI Bio::Root::Root);
 
-our $HOSTBASE = 'http://eutils.ncbi.nlm.nih.gov';
+our $HOSTBASE = 'https://eutils.ncbi.nlm.nih.gov';
 our $MAX_ENTRIES = 19000;
 our $REQUEST_DELAY = 3;
 our %CGILOCATION = (
diff --git a/Bio/DB/Qual.pm b/Bio/DB/Qual.pm
index 62c87e0..675b470 100644
--- a/Bio/DB/Qual.pm
+++ b/Bio/DB/Qual.pm
@@ -335,8 +335,7 @@ sub subqual {
     read($fh, $data, $filestop-$filestart+1);
 
     # Process quality score
-    $data =~ s/\n//g;
-    $data =~ s/\r//g;
+    Bio::DB::IndexedBase::_strip_crnl($data);
     my $subqual = 0;
     $subqual = 1 if ( $start || $stop );
     my @data;
@@ -379,9 +378,9 @@ sub header {
     seek($fh, $offset, 0);
     read($fh, $data, $headerlen);
     # On Windows chomp remove '\n' but leaves '\r'
-    # when reading '\r\n' in binary mode
-    $data =~ s/\n//g;
-    $data =~ s/\r//g;
+    # when reading '\r\n' in binary mode,
+    # _strip_crnl removes both
+    $data = Bio::DB::IndexedBase::_strip_crnl($data);
     substr($data, 0, 1) = '';
     return $data;
 }
diff --git a/Bio/DB/Query/GenBank.pm b/Bio/DB/Query/GenBank.pm
index aa796ec..bb87d6d 100644
--- a/Bio/DB/Query/GenBank.pm
+++ b/Bio/DB/Query/GenBank.pm
@@ -178,7 +178,7 @@ receive when you generate a SeqIO stream from the query.
 
   An up to date list of database names supported by NCBI eUtils is
   always available at:
-  http://eutils.ncbi.nlm.nih.gov/entrez/eutils/einfo.fcgi?
+  https://eutils.ncbi.nlm.nih.gov/entrez/eutils/einfo.fcgi?
 
   However, note that not all of these databases return datatypes that
   are parsable by Bio::DB::GenBank
diff --git a/Bio/DB/Registry.pm b/Bio/DB/Registry.pm
index d982dea..e92f9a9 100644
--- a/Bio/DB/Registry.pm
+++ b/Bio/DB/Registry.pm
@@ -122,7 +122,9 @@ sub _load_registry {
    my $self = shift;
 	eval { $HOME = (getpwuid($>))[7]; } unless $HOME;
 	if ($@) {
-		$self->warn("This Perl doesn't implement function getpwuid(), no \$HOME");
+		# Windows can have Win32::LoginName to get the Username, so check if it works before giving up
+		 ( defined &Win32::LoginName ) ? ( $HOME =  Win32::LoginName() )
+		:                                 $self->warn("This Perl doesn't implement function getpwuid(), no \$HOME");
 	}
 	my @ini_files = $self->_get_ini_files();
 
diff --git a/Bio/DB/SeqFeature/Store/DBI/SQLite.pm b/Bio/DB/SeqFeature/Store/DBI/SQLite.pm
index 385089a..846cb75 100644
--- a/Bio/DB/SeqFeature/Store/DBI/SQLite.pm
+++ b/Bio/DB/SeqFeature/Store/DBI/SQLite.pm
@@ -121,6 +121,10 @@ additional arguments are as follows:
  -autoindex        Boolean flag. If true, features in the database will be
                    reindexed every time they change. This is the default.
 
+ -fts              Boolean flag. If true, when the -create flag is true, the
+                   attribute table will be created and indexed index for
+                   full-text search using the most recent FTS extension
+                   supported by DBD::SQLite.
 
  -tmpdir           Directory in which to place temporary files during "fast" loading.
                    Defaults to File::Spec->tmpdir(). (synonyms -dump_dir, -dumpdir, -tmp)
@@ -144,6 +148,7 @@ use strict;
 
 use base 'Bio::DB::SeqFeature::Store::DBI::mysql';
 use Bio::DB::SeqFeature::Store::DBI::Iterator;
+use DBD::SQLite;
 use DBI qw(:sql_types);
 use Memoize;
 use Cwd qw(abs_path getcwd);
@@ -228,6 +233,7 @@ sub init {
       $pass,
       $dbi_options,
       $writeable,
+      $fts,
       $create,
      ) = rearrange(['DSN',
 		    ['TEMP','TEMPORARY'],
@@ -238,6 +244,7 @@ sub init {
 		    ['PASS','PASSWD','PASSWORD'],
 		    ['OPTIONS','DBI_OPTIONS','DBI_ATTR'],
 		    ['WRITE','WRITEABLE'],
+		    'FTS',
 		    'CREATE',
 		   ], at _);
   $dbi_options  ||= {};
@@ -260,6 +267,7 @@ sub init {
     $self->{dbh_file} = "$cwd/$db_file";
   }
   $self->{dbh}       = $dbh;
+  $self->{fts}       = $fts;
   $self->{is_temp}   = $is_temporary;
   $self->{namespace} = $namespace;
   $self->{writeable} = $writeable;
@@ -328,15 +336,14 @@ END
   id  integer primary key autoincrement,
   tag text    not null
 );
-create index index_attributelist_id  on attributelist(id);
 create index index_attributelist_tag on attributelist(tag);
 END
 	  parent2child => <<END,
 (
-  id    integer not null,
-  child integer not null
-);
-create unique index index_parent2child_id_child on parent2child(id,child);
+  id    integer,
+  child integer,
+  primary key(id, child)
+) without rowid;
 END
 
 	  meta => <<END,
@@ -355,6 +362,10 @@ END
 END
 	 };
 
+  if ($self->{'fts'}) {
+    delete($defs->{attribute});
+  }
+
   unless ($self->_has_spatial_index) {
     $defs->{feature_location} = <<END;
 (
@@ -376,8 +387,8 @@ END
    seqid             integer not null,
    bin               integer not null,
    cum_count         integer not null,
-   unique(typeid,seqid,bin)
-);
+   primary key (typeid,seqid,bin)
+) without rowid;
 END
   }
   return $defs;
@@ -388,13 +399,16 @@ sub _init_database {
 
     # must do this first before calling table_definitions
     $self->_create_spatial_index;
+    $self->_create_attribute_fts;
     $self->SUPER::_init_database(@_);
 }
 
+# FIXME: ensure this works with _create_attribute_fts...
 sub init_tmp_database {
     my $self = shift;
     my $erase = shift;
     $self->_create_spatial_index;
+    $self->_create_attribute_fts;
     $self->SUPER::init_tmp_database(@_);
 }
 
@@ -408,6 +422,42 @@ sub _create_spatial_index{
     }
 }
 
+sub _create_attribute_fts{
+    my $self = shift;
+    my $dbh   = $self->dbh;
+    if ($self->{'fts'}) {
+        my @fts_versions;
+        for (@fts_versions = grep(/^ENABLE_FTS[0-9]+$/, DBD::SQLite::compile_options)) { s/ENABLE_// }
+        # use the latest supported FTS version.
+        # DBD::SQLite::compile_options appears to be sorted
+        # alphabetically, so this should work through version FTS9.
+        die 'fts not supported by this version of DBD::SQLite' if (!@fts_versions);
+        $dbh->do("DROP TABLE IF EXISTS attribute");
+        $dbh->do("CREATE VIRTUAL TABLE "
+             . $self->_attribute_table
+             . " USING " . $fts_versions[-1]
+             . "(id integer not null, attribute_id integer not null, attribute_value text)");
+    }
+}
+
+###
+# return 1 if an existing attribute table in the connected database is an FTS
+# table, else 0
+#
+sub _has_fts {
+    my $self = shift;
+    if (!defined($self->{'has_fts'})) {
+        # If the attribute table is a virtual table, assume it is an FTS
+        # table. Per http://www.sqlite.org/fileformat2.html:
+        # For (sqlite_master) rows that define views, triggers, and virtual
+        # tables, the rootpage column is 0 or NULL.
+        ($self->{'has_fts'}) = $self->dbh->selectrow_array("select count(*) from sqlite_master where type = 'table' and name = '"
+                                                           . $self->_attribute_table 
+                                                           . "' and (rootpage = 0 or rootpage is null);");
+    }
+    return $self->{'has_fts'};
+}
+
 sub _has_spatial_index {
     my $self = shift;
     return $self->{'_has_spatial_index'} if exists $self->{'_has_spatial_index'};
@@ -786,30 +836,38 @@ sub _search_attributes {
   my $attributelist_table = $self->_attributelist_table;
   my $type_table          = $self->_type_table;
   my $typelist_table      = $self->_typelist_table;
+  my $has_fts             = $self->_has_fts;
 
   my @tags    = @$attribute_names;
   my $tag_sql = join ' OR ',("al.tag=?") x @tags;
 
   my $perl_regexp = join '|', at words;
 
-  my @wild_card_words = map { "%$_%" } @words;
-  my $sql_regexp = join ' OR ',("a.attribute_value LIKE ?")  x @words;
-  # CROSS JOIN disables SQLite's table reordering optimization
+  my $sql_regexp;
+  my @wild_card_words;
+  if ($has_fts) {
+      $sql_regexp = "a.attribute_value MATCH ?";
+      @wild_card_words = join(' OR ', @words);
+  } else {
+      $sql_regexp = join ' OR ',("a.attribute_value LIKE ?")  x @words;
+      @wild_card_words = map { "%$_%" } @words;
+  }
+  # CROSS JOIN hinders performance with FTS attribute table for DBD::SQLite 1.42
   my $sql = <<END;
 SELECT name,attribute_value,tl.tag,n.id
   FROM $attributelist_table        AS al
-       CROSS JOIN $attribute_table AS a  ON al.id = a.attribute_id
-       CROSS JOIN $name_table      AS n  ON n.id = a.id
-       CROSS JOIN $type_table      AS t  ON t.id = n.id
-       CROSS JOIN $typelist_table  AS tl ON tl.id = t.typeid
+       JOIN $attribute_table AS a  ON al.id = a.attribute_id
+       JOIN $name_table      AS n  ON n.id  = a.id
+       JOIN $type_table      AS t  ON t.id  = n.id
+       JOIN $typelist_table  AS tl ON tl.id = t.typeid
   WHERE ($tag_sql)
     AND ($sql_regexp)
     AND n.display_name=1
 END
   $sql .= "LIMIT $limit" if defined $limit;
-  $self->_print_query($sql, at tags, at words) if DEBUG || $self->debug;
+  $self->_print_query($sql, at tags, at wild_card_words) if DEBUG || $self->debug;
   my $sth = $self->_prepare($sql);
-  $sth->execute(@tags, at wild_card_words) or $self->throw($sth->errstr);
+  $sth->execute(@tags, @wild_card_words) or $self->throw($sth->errstr);
 
   my @results;
   while (my($name,$value,$type,$id) = $sth->fetchrow_array) {
@@ -851,11 +909,14 @@ sub _attributes_sql {
   my $attribute_table       = $self->_attribute_table;
   my $attributelist_table   = $self->_attributelist_table;
 
-  my $from = "$attribute_table AS a INDEXED BY index_attribute_id, $attributelist_table AS al";
+  my $from = "$attribute_table AS a" . ($self->_has_fts 
+                                        ? ''
+                                        : " INDEXED BY index_attribute_id") . ", $attributelist_table AS al";
+  my $a_al_join = $self->_has_fts ? 'a.attribute_id MATCH al.id' : 'a.attribute_id=al.id';
 
   my $where = <<END;
   a.id=$join
-  AND   a.attribute_id=al.id
+  AND   $a_al_join
   AND ($wf)
 END
 
diff --git a/Bio/DB/SeqFeature/Store/LoadHelper.pm b/Bio/DB/SeqFeature/Store/LoadHelper.pm
index b852efa..2a50bdd 100644
--- a/Bio/DB/SeqFeature/Store/LoadHelper.pm
+++ b/Bio/DB/SeqFeature/Store/LoadHelper.pm
@@ -40,7 +40,7 @@ use File::Temp 'tempdir';
 use File::Spec;
 use Fcntl qw(O_CREAT O_RDWR);
 
-our $VERSION = '1.10';
+our $VERSION = '1.11';
 
 my %DBHandles;
 
diff --git a/Bio/DB/SeqFeature/Store/Loader.pm b/Bio/DB/SeqFeature/Store/Loader.pm
index 8bbc427..33b6a05 100644
--- a/Bio/DB/SeqFeature/Store/Loader.pm
+++ b/Bio/DB/SeqFeature/Store/Loader.pm
@@ -113,7 +113,7 @@ default.
 sub new {
   my $self = shift;
   my ($store,$seqfeature_class,$tmpdir,$verbose,$fast,
-      $seq_chunk_size,$coordinate_mapper,$index_subfeatures,$summary_stats) = 
+      $seq_chunk_size,$coordinate_mapper,$index_subfeatures,$summary_stats,$no_close_fasta) = 
       rearrange(['STORE',
 		 ['SF_CLASS','SEQFEATURE_CLASS'],
 		 ['TMP','TMPDIR'],
@@ -122,7 +122,8 @@ sub new {
 		 'CHUNK_SIZE',
 		 'MAP_COORDS',
 		 'INDEX_SUBFEATURES',
-		 'SUMMARY_STATS'
+		 'SUMMARY_STATS',
+		 'NO_CLOSE_FASTA',
 		], at _);
 
 
@@ -185,6 +186,7 @@ END
 		coordinate_mapper      => $coordinate_mapper,
 		index_subfeatures      => $index_subfeatures,
 		summary_stats          => $summary_stats,
+		no_close_fasta         => $no_close_fasta,
 	       },ref($self) || $self;
 }
 
@@ -727,7 +729,7 @@ sub DESTROY {
 	) {
       $store->private_fasta_file->close;
 
-      if ($store->{fasta_db}) {
+      if ($store->{fasta_db} && !$self->{no_close_fasta}) {
 	while (my ($file, $fh) = each %{ $store->{fasta_db}->{fhcache} }) {
 	  $fh->close;
 	}
diff --git a/Bio/DB/SeqFeature/Store/memory.pm b/Bio/DB/SeqFeature/Store/memory.pm
index ac68fcd..ef21312 100644
--- a/Bio/DB/SeqFeature/Store/memory.pm
+++ b/Bio/DB/SeqFeature/Store/memory.pm
@@ -148,8 +148,9 @@ sub post_init {
   return unless $file_or_dir;
 
   my $loader = Bio::DB::SeqFeature::Store::GFF3Loader->new(-store    => $self,
-							   -sf_class => $self->seqfeature_class) 
-    or $self->throw("Couldn't create GFF3Loader");
+							   -sf_class => $self->seqfeature_class,
+							   -no_close_fasta => 1
+      )  or $self->throw("Couldn't create GFF3Loader");
   my @argv;
   if (-d $file_or_dir) {
     @argv = (
@@ -694,7 +695,7 @@ sub _insert_sequence {
 sub _fetch_sequence {
   my ($self, $seqid, $start, $end) = @_;
   my $db = $self->{fasta_db} or return;
-  $db->seq($seqid,$start,$end);
+  return $db->seq($seqid,$start,$end);
 }
 
 sub private_fasta_file {
diff --git a/Bio/DB/SeqHound.pm b/Bio/DB/SeqHound.pm
deleted file mode 100644
index d2e8311..0000000
--- a/Bio/DB/SeqHound.pm
+++ /dev/null
@@ -1,758 +0,0 @@
-# BioPerl module for Bio::DB::SeqHound
-#
-# You may distribute this module under the same terms as perl itself
-# POD documentation - main docs before the code
-# 
-
-=head1 NAME
-
-Bio::DB::SeqHound - Database object interface to SeqHound
-
-=head1 SYNOPSIS
-
-    use Bio::DB::SeqHound;
-    $sh = Bio::DB::SeqHound->new();
-
-    $seq = $sh->get_Seq_by_acc("CAA28783"); # Accession Number
-
-    # or ...
-
-    $seq = $sh->get_Seq_by_gi(4557225); # GI Number
-
-=head1 VERSION
-
-1.1
-
-=head1 DESCRIPTION
-
-SeqHound is a database of biological sequences and structures.  This
-script allows the retrieval of sequence objects (Bio::Seq) from the
-SeqHound database at the Blueprint Initiative.
-
-Bioperl extension permitting use of the SeqHound Database System
-developed by researchers at
-
- The Blueprint Initiative
- Samuel Lunenfeld Research Institute
- Mount Sinai Hospital
- Toronto, Canada
-
-
-=head1 FEEDBACK/BUGS
-
-known bugs: fail to get sequences for some RefSeq record with CONTIG,
-example GI = 34871762
-
-E<lt>seqhound at blueprint.orgE<gt>
-
-=head1 MAILING LISTS
-
-User feedback is an integral part of the evolution of this Bioperl module. Send
-your comments and suggestions preferably to seqhound.usergroup mailing lists.
-Your participation is much appreciated.
-
-E<lt>seqhound.usergroup at lists.blueprint.orgE<gt>
-
-=head1 WEBSITE
-
-For more information on SeqHound http://dogboxonline.unleashedinformatics.com/
-
-=head1 DISCLAIMER
-
-This software is provided 'as is' without warranty of any kind.
-
-=head1 AUTHOR
-
-Rong Yao, Hao Lieu, Ian Donaldson
-
-E<lt>seqhound at blueprint.orgE<gt>
-
-=head1 APPENDIX
-
-The rest of the documentation details each of the object
-methods. Internal methods are usually preceded with a _
-
-=cut
-
-# Let the code begin...
-
-package Bio::DB::SeqHound;
-use strict;
-use vars qw($HOSTBASE $CGILOCATION $LOGFILENAME);
-
-use Bio::Root::IO;
-use Bio::SeqIO;
-use IO::String;
-use POSIX qw(strftime);
-
-use base qw(Bio::DB::WebDBSeqI Bio::Root::Root);
-
-BEGIN {    
-    $HOSTBASE = 'http://dogboxonline.unleashedinformatics.com';
-    $CGILOCATION = '/cgi-bin/seqrem?fnct=';
-    $LOGFILENAME = 'shoundlog';
-}
-
-
-# helper method to get db specific options
-
-=head2 new
-
- Title   : new
- Usage   : $sh = Bio::DB::SeqHound->new(@options);
- Function: Creates a new seqhound handle
- Returns : New seqhound handle
- Args    : 
-
-=cut
-
-sub new {
-    	my ($class, @args ) = @_;
-    	my $self = $class->SUPER::new(@args);
-	if ($self->_init_SeqHound eq "TRUE"){
-		return $self;
-	}
-	else {
-		return;
-	}
-}
-
-=head1 Routines Bio::DB::WebDBSeqI from Bio::DB::RandomAccessI
-
-=head2 get_Seq_by_id
-
- Title   : get_Seq_by_id
- Usage   : $seq = $db->get_Seq_by_id('ROA1_HUMAN'); 
- Function: Gets a Bio::Seq object by its name
- Returns : a Bio::Seq object
- Args    : the id (as a string) of a sequence
- Throws  : "id does not exist" exception
- Example : Each of these calls retrieves the same sequence record
- 	   $seq = $db->get_Seq_by_id(56);        #retrieval by GI
-	   $seq = $db->get_Seq_by_id("X02597");  #retrieval by NCBI accession
-	   $seq = $db->get_Seq_by_id("BTACHRE"); #retrieval by sequence "name"
-	   a sequence "name" is a secondary identifier (usually assigned by the
-	   submitting database external to the NCBI) that may not be visible in
-	   the GenBank flat file version of the record but is always present in
-	   the ASN.1 format.
- Note    : Since in GenBank.pm, this function accepts a gi, an accession number
-           or a sequence name, SeqHound also satisfies these inputs.
-	   If the input uid is a number, it is treated as a gi, if the uid is a
-	   string, it is treated as an accession number first. If the search still
-	   fails, it is treated as a sequence name.
-	   Since SeqHound stores biological data from different source sequence
-	   databases like: GenBank, GenPept, SwissProt, EMBL, RefSeq,
-	   you can pass ids from the above databases to this function. 
-	   The Bio::Seq object returned by this function is identical to the
-	   Bio::Seq generated by the GenBank.pm and GenPept.pm.
-	   The Bio::Seq object returned by this function sometimes has minor
-	   difference in the SeqFeature from the Bio::Seq object generated 
-	   in RefSeq.pm. 
-	   The Bio::Seq objects created from this function will have the NCBI
-	   versions of the SwissProt and EMBL sequence data information.
-
-=cut
-
-sub get_Seq_by_id {
-	my ($self, $id)= @_;
-	if ($id =~ /^\d+$/){
-		my $seqio= $self-> _get_Seq_from_gbff ($id);
-		if (defined $seqio){
-			return $seqio->next_seq;
-		}
-	}
-	elsif ($id =~ /^\S+$/){
-	    #print "id is string, try search by accession or name\n";
-	    my $gi = $self ->_get_gi_from_acc ($id);
-	    if (!defined $gi){
-			my $gi = $self->_get_gi_from_name($id);
-			if (defined $gi){
-				my $seqio = $self->_get_Seq_from_gbff($gi);
-				if (defined $seqio){
-					return $seqio->next_seq;
-				}
-			}
-		}
-		else{
-			my $seqio = $self->_get_Seq_from_gbff($gi);
-			if (defined $seqio){
-				return $seqio->next_seq;
-			}
-			else {
-				my $gi = $self->_get_gi_from_name($id);
-				if (defined $gi) {
-					my $seqio = $self->_get_Seq_from_gbff($gi);
-					if (defined $seqio){
-						return $seqio->next_seq;
-					}
-				}
-			}
-			
-		}
-	}
-    	else{
-		$self->warn("[get_Seq_by_id]: invalid input id.");
-		return;
-	}
-	$self->warn("[get_Seq_by_id]: id $id does not exist");
-	return;
-}
-						                    
-
-=head2 get_Seq_by_acc
-
-  Title   : get_Seq_by_acc
-  Usage   : $seq = $db->get_Seq_by_acc('M34830');
-  Function: Gets a Seq object by accession numbers
-  Returns : a Bio::Seq object
-  Args    : the accession number as a string
-  Throws  : "id does not exist" exception
-  Note    : Since in GenBank.pm, this function accepts an accession number
-            or a sequence name, SeqHound also satisfies these inputs.
-	    If the input uid is a string, it is treated as an accession number first.
-	    If the search fails, it is treated as a sequence name.
-	    Since SeqHound stores biological data from different source sequence
-	    databases like: GenBank, GenPept, SwissProt, EMBL, RefSeq,
-	    you can pass ids from the above databases to this function. 
-	    The Bio::Seq object returned by this function is identical to the
-	    Bio::Seq generated by the GenBank.pm and GenPept.pm.
-	    The Bio::Seq object returned by this function sometimes has minor
-	    difference in the SeqFeature from the Bio::Seq object generated 
-	    in RefSeq.pm. 
-	    The Bio::Seq objects created from this function will have the NCBI
-	    versions of the SwissProt and EMBL sequence data information.
-
-=cut
-
-sub get_Seq_by_acc {
-	my ($self, $acc) = @_;
-	#exclude $acc is a number, since function does not accept gi as input
-	if ($acc =~ /^\d+$/) {
-		$self->warn ("[get_Seq_by_acc]: id $acc does not exist");
-		return;
-	}
-	my ($ret, $gi);
-	$gi= $self->_get_gi_from_acc($acc);
-	#print "get_Seq_by_acc: gi = $gi\n";
-    	if (defined $gi) {
-		my $seqio = $self->_get_Seq_from_gbff($gi);
-		if (defined $seqio){
-			return $seqio->next_seq;
-		}
-	}
-	#else, treat input as sequence name
-	else {
-		$gi = $self->_get_gi_from_name($acc);   	 	
-		#print "in get_Seq_by_acc: else gi = $gi\n";
-		if (defined $gi){
-			my $seqio = $self->_get_Seq_from_gbff($gi);
-			if (defined $seqio){
-				return $seqio->next_seq;
-			}
-		}
-	}
-	$self->warn("[get_Seq_by_acc]: id $acc does not exist.");
-	return;
-}
-
-
-=head2 get_Seq_by_gi
-
- Title   : get_Seq_by_gi
- Usage   : $seq = $sh->get_Seq_by_gi('405830');
- Function: Gets a Bio::Seq object by gi number
- Returns : A Bio::Seq object
- Args    : gi number (as a string)
- Throws  : "gi does not exist" exception
- Note    : call the same code get_Seq_by_id
-
-=cut
-
-sub get_Seq_by_gi
-{
-    	my ($self, $gi) = @_;
-    	return get_Seq_by_id($self, $gi);
-}
-
-=head2 get_Seq_by_version
-
- Title   : get_Seq_by_version
- Usage   : $seq = $db->get_Seq_by_version('X77802');
- Function: Gets a Bio::Seq object by sequence version
- Returns : A Bio::Seq object
- Args    : accession.version (as a string)
- Throws  : "acc.version does not exist" exception
- Note    : SeqHound only keeps the most up-to-date version of a sequence. So
-           for the above example, use 
-	   $seq = $db->get_Seq_by_acc('X77802'); 
-	   instead of X77802.1
-
-
-=head2 get_Stream_by_query
-
-  Title   : get_Stream_by_query
-  Usage   : $seq = $db->get_Stream_by_query($query);
-  Function: Retrieves Seq objects from Entrez 'en masse', rather than one
-            at a time.  For large numbers of sequences, this is far superior
-            than get_Stream_by_[id/acc]().
-  Example : $query_string = 'Candida maltosa 26S ribosomal RNA gene'; 
-  	    $query = Bio::DB::Query::GenBank->new(-db=>'nucleotide',
-                                        -query=>$query_string);
-            $stream = $sh->get_Stream_by_query($query);
-	    or
-	    $query = Bio::DB::Query::GenBank->new (-db=> 'nucleotide',
-	    				-ids=>['X02597', 'X63732', 11002, 4557284]);
-	    $stream = $sh->get_Stream_by_query($query);
-  Returns : a Bio::SeqIO stream object
-  Args    : $query :   A Bio::DB::Query::GenBank object. It is suggested that
-            you create a Bio::DB::Query::GenBank object and get the entry
-            count before you fetch a potentially large stream.
-
-=cut
-
-sub get_Stream_by_query{
-	my ($self, $query) = @_;
-	my @ids = $query->ids;
-	#print join ",", @ids, "\n";
-	return get_Stream_by_id($self, \@ids);	
-}	
-
-
-=head2 get_Stream_by_id
-
-  Title   : get_Stream_by_id
-  Usage   : $stream = $db->get_Stream_by_id(['J05128', 'S43442', 34996479]);
-  Function: Gets a series of Seq objects by unique identifiers
-  Returns : a Bio::SeqIO stream object
-  Args    : $ref : a reference to an array of unique identifiers for
-                   the desired sequence entries, according to genbank.pm
-		   this function accepts gi, accession number
-		   and sequence name
-  Note    : Since in GenBank.pm, this function accepts a gi, an accession number
-            or a sequence name, SeqHound also satisfies these inputs.
-	    If the input uid is a number, it is treated as a gi, if the uid is a
-	    string, it is treated as an accession number first. If the search still
-	    fails, it is treated as a sequence name.
-	    Since SeqHound stores biological data from different source sequence
-	    databases like: GenBank, GenPept, SwissProt, EMBL, RefSeq,
-	    you can pass ids from the above databases to this function. 
-	    The Bio::Seq object returned by this function is identical to the
-	    Bio::Seq generated by the GenBank.pm and GenPept.pm.
-	    The Bio::Seq object returned by this function sometimes has minor
-	    difference in the SeqFeature from the Bio::Seq object generated 
-	    in RefSeq.pm. 
-	    The Bio::Seq objects created from this function will have the NCBI
-	    versions of the SwissProt and EMBL sequence data information.   
-
-=cut
-
-sub get_Stream_by_id
-{
-	my ($self, $id) = @_;
-	my (@gilist, @not_exist);
-	if(!defined $id) {
-		$self->warn("[get_Stream_by_id]: undefined input id");
-		return;
-    	}
-	if (ref($id)=~ /array/i){
-		foreach my $i (@$id){
-			if ($i =~ /^\d+$/){
-				push(@gilist, $i);
-			}
-			elsif ($i =~ /^\S+$/) {
-				my $gi = _get_gi_from_acc($self, $i);
-				if (!defined $gi){
-					$gi = _get_gi_from_name($self, $i);
-					if (!defined $gi){
-					    $self->warn("[get_Stream_by_id]: id $i does not exist.");
-						push (@not_exist, $i);
-					}
-					else {
-						push (@gilist, $gi);
-					}
-				}
-				else {
-					push(@gilist, $gi);
-				}
-			}
-			else {
-			    $self->warn("[get_Stream_by_id]: id $i does not exist.");
-				push (@not_exist, $i);
-			}
-		}
-		my $seqio = _get_Seq_from_gbff($self, \@gilist);
-		return $seqio;
-	}
-	else {
-		return;
-	}
-}
-
-
-=head2 get_Stream_by_acc
-
-  Title   : get_Stream_by_acc
-  Usage   : $seq = $db->get_Stream_by_acc(['M98777', 'M34830']);
-  Function: Gets a series of Seq objects by accession numbers
-  Returns : a Bio::SeqIO stream object
-  Args    : $ref : a reference to an array of accession numbers for
-                   the desired sequence entries
-  Note    : For SeqHound, this just calls the same code for get_Stream_by_id()
-
-=cut
-
-sub get_Stream_by_acc
-{
-	my ($self, $acc) = @_;
-	return get_Stream_by_id($self, $acc);
-}
-
-=head2 get_Stream_by_gi
-
-  Title   : get_Stream_by_gi
-  Usage   : $seq = $db->get_Seq_by_gi([161966, 255064]);
-  Function: Gets a series of Seq objects by gi numbers
-  Returns : a Bio::SeqIO stream object
-  Args    : $ref : a reference to an array of gi numbers for
-                   the desired sequence entries
-  Note    : For SeqHound, this just calls the same code for get_Stream_by_id()
-
-=cut
-
-sub get_Stream_by_gi{
-	my ($self, $gi) = @_;
-	return get_Stream_by_id($self, $gi);	
-}	
-
-=head2 get_request
-
- Title   : get_request
- Usage   : my $lcontent = $self->get_request;
- Function: get the output from SeqHound API http call
- Returns : the result of the remote call from SeqHound
- Args    : %qualifiers = a hash of qualifiers 
-           (SeqHound function name, id, query etc)
- Example : $lcontent = $self->get_request(-funcname=>'SeqHoundGetGenBankff',
-		 			-query=>'gi',
-					-uid=>555);
- Note    : this function overrides the implementation in Bio::DB::WebDBSeqI.
-
-=cut
-
-sub get_request {
-	my $self = shift;
-    	my ( @qualifiers) = @_;
-    	my ($funcname, $query, $uids, $other) = $self->_rearrange([qw(FUNCNAME QUERY UIDS OTHER)],
-							@qualifiers);
-	# print ("get funcname = $funcname, query = $query, uids= $uids\n"); 
-	unless( defined $funcname ne '') {
-	$self->throw("please specify the SeqHound function for query");
-    	}
-    	my $url = $HOSTBASE . $CGILOCATION . $funcname;
-    	unless( defined $uids ne '') {
-	$self->throw("please specify a uid or a list of uids to fetch");
-    	}
-    	unless ( defined $query && $query ne '') {
-	$self->throw("please specify a valid query field");
-	}
-	
- 	if (defined $uids && defined $query) {
-		if( ref($uids) =~ /array/i ) {
-	       	$uids = join(",", @$uids);
-		}
-		$url=$url."&".$query."=".$uids;
-		if (defined $other){
-			$url=$url."&".$other;
-		}
-		my $ua = LWP::UserAgent->new(env_proxy => 1);
-		my $req = HTTP::Request->new ('GET', $url);
-		my $res = $ua->request($req);
-		if ($res->is_success){
-			return $res->content;
-		}
-		else {
-			my $result = "HTTP::Request error: ".$res->status_line."\n";
-			$self->warn("$result");
-			return $result;
-		}
-	}
-
-}
-
-=head2 postprocess_data
-
- Title   : postprocess_data
- Usage   : $self->postprocess_data (-funcname => $funcname,
-		                    -lcontent => $lcontent,
-				    -outtype  => $outtype);
- Function: process return String from http seqrem call 
-           output type can be a string or a Bio::SeqIO object.
- Returns : void
- Args    : $funcname is the API function name of SeqHound 
-           $lcontent is a string output from SeqHound server http call
-           $outtype is a string or a Bio::SeqIO object 
- Example : $seqio = $self->postprocess_data ( -lcontent => $lcontent,
-                             		-funcname => 'SeqHoundGetGenBankffList',
-				      	-outtype => 'Bio::SeqIO');
-	   or
-	   $gi = $self->postprocess_data( -lcontent => $lcontent,
-			                -funcname => 'SeqHoundFindAcc',
-					-outtype => 'string');
- Note    : this method overrides the method works for genbank/genpept,
-           this is for SeqHound
-
-=cut
-
-sub postprocess_data
-{
-    my ($self, @args) = @_;
-    my ($funcname, $lcontent, $outtype) = $self->_rearrange(
-                        [qw(FUNCNAME LCONTENT OUTTYPE)], @args);
-    my $result;
-	if (!defined $outtype){ 
-		$self->throw("please specify the output type, string, Bio::SeqIO etc");
-	}
-        if (!defined $lcontent){
-		$self->throw("please provide the result from SeqHound call");
-	}
-	if (!defined $funcname){
-		$self->throw("Please provide the function name");
-	}
-
-    #set up verbosity level if need record in the log file
-    my $log_msg = "Writing into '$LOGFILENAME' log file.\n";
-    my $now = strftime("%a %b %e %H:%M:%S %Y", localtime);
-    if ($lcontent eq "") {
-        $self->debug($log_msg);
-        open my $LOG, '>>', $LOGFILENAME or $self->throw("Could not append file '$LOGFILENAME': $!");
-        print $LOG "$now		$funcname. No reply.\n";
-        close $LOG;
-        return;
-    }
-    elsif ($lcontent =~ /HTTP::Request error/) {
-        $self->debug($log_msg);
-        open my $LOG, '>>', $LOGFILENAME or $self->throw("Could not append file '$LOGFILENAME': $!");
-        print $LOG "$now		$funcname. Http::Request error problem.\n";
-        close $LOG;
-        return;
-    }
-    elsif ($lcontent =~ /SEQHOUND_ERROR/) {
-        $self->debug($log_msg);
-        open my $LOG, '>>', $LOGFILENAME or $self->throw("Could not append file '$LOGFILENAME': $!");
-        print $LOG "$now	$funcname error. SEQHOUND_ERROR found.\n";
-        close $LOG;
-        return;
-    }
-    elsif ($lcontent =~ /SEQHOUND_NULL/) {
-        $self->debug($log_msg);
-        open my $LOG, '>>', $LOGFILENAME or $self->throw("Could not append file '$LOGFILENAME': $!");
-        print $LOG "$now	$funcname Value not found in the database. SEQHOUND_NULL found.\n";
-        close $LOG;
-        return;
-    }
-    else {
-        chomp $lcontent;
-        my @lines = split(/\n/, $lcontent, 2);
-        if ($lines[1] =~ /^-1/) {
-            $self->debug($log_msg);
-            open my $LOG, '>>', $LOGFILENAME or $self->throw("Could not append file '$LOGFILENAME': $!");
-            print $LOG "$now	$funcname Value not found in the database. -1 found.\n";
-            close $LOG;
-            return;
-        }
-        elsif ($lines[1]  =~ /^0/) {
-            $self->debug($log_msg);
-            open my $LOG, '>>', $LOGFILENAME or $self->throw("Could not append file '$LOGFILENAME': $!");
-            print $LOG "$now	$funcname failed.\n";
-            close $LOG;
-            return;
-        }
-        else {
-            $result = $lines[1];
-        }
-    }
-
-	#a list of functions in SeqHound which can wrap into Bio::seqIO object
-	if ($outtype eq 'Bio::SeqIO'){
-		my $buf = IO::String->new($result);
-		my $io = Bio::SeqIO->new (-format => 'genbank', -fh => $buf);
-		if (defined $io && $io ne ''){
-		    return $io;
-		}
-		else { return;}
-   	}	
-   	#return a string if outtype is "string"
-   	return $result;
-}
-
-
-=head2 _get_gi_from_name
-
- Title   : _get_gi_from_name
- Usage   : $self->_get_gi_from_name('J05128');
- Function: get the gene identifier from a sequence name
-           in SeqHound database
- Return  : gene identifier or undef
- Args    : a string represented sequence name
-
-=cut
-
-sub _get_gi_from_name
-{
-	my ($self, $name) = @_;
-	my ($ret, $gi);
-	$ret = $self->get_request( -funcname => 'SeqHoundFindName',
-			               -query => 'name',
-				       -uids  => $name);
-	#print "_get_gi_from_name:  ret = $ret\n";
-	$gi = $self->postprocess_data(-lcontent => $ret,
-			                -funcname => 'SeqHoundFindName',
-					-outtype => 'string');
-	#print "_get_gi_from_name: gi = $gi\n";
-	return $gi;
-}
-
-=head2 _get_gi_from_acc
-
- Title   : _get_gi_from_acc
- Usage   : $self->_get_gi_from_acc('M34830')
- Function: get the gene identifier from an accession number
- 	  in SeqHound database
- Return  : gene identifier or undef
- Args    : a string represented accession number
-
-=cut
-
-sub _get_gi_from_acc
-{
-	my ($self, $acc) = @_;
-	my ($ret, $gi);
-	$ret = $self->get_request ( -funcname => 'SeqHoundFindAcc',
-			               -query => 'acc',
-				       -uids  => $acc);
-	#print "_get_gi_from_acc:  ret = $ret\n";
-	$gi = $self->postprocess_data(  -lcontent => $ret,
-			                -funcname => 'SeqHoundFindAcc',
-					-outtype => 'string');
-	#print "_get_gi_from_acc:  gi = $gi\n";
-	return $gi;
-}
-
-=head2 _get_Seq_from_gbff
-
- Title   : _get_Seq_from_gbff
- Usage   : $self->_get_Seq_from_gbff($str)
- Function: get the Bio::SeqIO stream object from gi or a list of gi
-           in SeqHound database
- Return  : Bio::SeqIO or undef
- Args    : a string represented gene identifier or
-           a list of gene identifiers
- Example : $seq = $self->_get_Seq_from_gbff(141740);
-           or
-	   $seq = $self->_get_Seq_from_gbff([141740, 255064, 45185482]);
-
-=cut
-
-sub _get_Seq_from_gbff
-{
-	my ($self, $gi) = @_;
-	if(!defined $gi) {
-		$self->warn("[_get_Seq_from_gbff]: undefined input gi");
-		return;
-    	}
-	my $lcontent;
-	if (ref($gi) =~ /array/i){
-		my @copyArr = @$gi;
-		my @tempArr;
-		$lcontent = "SEQHOUND_OK\n";
-		while ($#copyArr != -1){
-			@tempArr =_MaxSizeArray(\@copyArr);
-		    	#in order to keep the correct output order as GenBank does
-			my $gi = join (",", reverse(@tempArr));
-    			my $result;
-    			my $ret = $self->get_request(  -funcname => 'SeqHoundGetGenBankffList',
-            	                   			-query => 'pgi',
-			 				-uids => $gi);
-			if (defined $ret){
-				my @lines = split(/\n/, $ret, 2);
-      				if($lines[0] =~ /SEQHOUND_ERROR/ || $lines[0] =~ /SEQHOUND_NULL/){
-      				}
-	  			else {
-					if ($lines[1] =~ /^(null)/ || $lines[1] eq ""){
-     	 			}
-         			else{
-           				$result = $lines[1];
-         			}
-			}
-			#append genbank flat files for long list
-			$lcontent = $lcontent.$result;
-			}
-		}
-	}
-    	#else $gi is a single variable
-	else {
-		$lcontent = $self->get_request(  -funcname => 'SeqHoundGetGenBankffList',
-            	                   		-query => 'pgi',
-			 			-uids => $gi);
-	}
-     	my $seqio = $self->postprocess_data ( -lcontent => $lcontent,
-                             			-funcname => 'SeqHoundGetGenBankffList',
-				      		-outtype => 'Bio::SeqIO');
-		
-	return $seqio;
-}
-
-
-=head2 _init_SeqHound
-
- Title   : _init_SeqHound
- Usage   : $self->_init_SeqHound();
- Function: call SeqHoundInit at blueprint server 
- Return  : $result (TRUE or FALSE)
- Args    : 
-
-=cut
-
-sub _init_SeqHound
-{
-	my $self = shift;
-	my $ret = $self->get_request(-funcname => 'SeqHoundInit',
-						-query => 'NetEntrezOnToo',
-						-uids => 'true',
-						-other => 'appname=Bioperl');
-	my $result = $self->postprocess_data(-lcontent => $ret,
-					-funcname => 'SeqHoundInit',
-					-outtype => 'string');
-	return $result || 'FALSE';
-
-}
-
-=head2 _MaxSizeArray
-
- Title   : _MaxSizeArray
- Usage   : $self->_MaxSizeArray(\@arr)
- Function: get an array with the limit size
- Return  : an array with the limit size
- Args    : a reference to an array
-
-=cut
-
-sub _MaxSizeArray 
-{
-  my $argArr = shift;
-  my @copyArr;
-  my $MAXQ = 5;
-  my $len = scalar(@$argArr);
-  for(my $i = 0; $i < $len;){
-    $copyArr[$i++] = $$argArr[0]; 
-    shift(@$argArr);
-    if($i == $MAXQ) 
-    {
-       last;
-    }
-  }
-  return @copyArr;
-}
-
-1;
-__END__
diff --git a/Bio/DB/Taxonomy/entrez.pm b/Bio/DB/Taxonomy/entrez.pm
index 6197011..ffc0dac 100644
--- a/Bio/DB/Taxonomy/entrez.pm
+++ b/Bio/DB/Taxonomy/entrez.pm
@@ -195,7 +195,7 @@ sub _initialize {
 sub get_num_taxa {
     my ($self) = @_;
     # Use this URL query to get the ID of all the taxa in the NCBI Taxonomy database:
-    # http://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi?db=taxonomy&term=all[Filter]
+    # https://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi?db=taxonomy&term=all[Filter]
     # Only the first 20 taxa IDs are returned (good because the list is long),
     # and the total number is reported as well (which is what we are interested
     # in).
diff --git a/Bio/DB/Taxonomy/flatfile.pm b/Bio/DB/Taxonomy/flatfile.pm
index 1c42e9b..ab2e13a 100644
--- a/Bio/DB/Taxonomy/flatfile.pm
+++ b/Bio/DB/Taxonomy/flatfile.pm
@@ -99,6 +99,9 @@ $DEFAULT_PARENT_INDEX  = 'parents';
 
 $DB_BTREE->{'flags'} = R_DUP; # allow duplicate values in DB_File BTREEs
 
+# 8192 bytes; this seems to work to keep OS X from complaining
+$DB_HASH->{'bsize'} = 0x2000;
+
 @DIVISIONS =   ([qw(BCT Bacteria)],
                 [qw(INV Invertebrates)],
                 [qw(MAM Mammals)],
@@ -485,16 +488,16 @@ sub _db_connect {
         $self->warn("Index files have not been created");
         return 0;
     }
-    tie ( @{$self->{'_nodes'}}, 'DB_File', $nodeindex, O_RDWR,undef, $DB_RECNO) 
+    tie ( @{$self->{'_nodes'}}, 'DB_File', $nodeindex, O_RDONLY,undef, $DB_RECNO) 
         || $self->throw("$! $nodeindex");
-    tie (@{$self->{'_id2name'}}, 'DB_File', $id2nameindex,O_RDWR, undef, 
+    tie (@{$self->{'_id2name'}}, 'DB_File', $id2nameindex,O_RDONLY, undef, 
         $DB_RECNO) || $self->throw("$! $id2nameindex");
     
-    tie ( %{$self->{'_name2id'}}, 'DB_File', $name2idindex, O_RDWR,undef, 
+    tie ( %{$self->{'_name2id'}}, 'DB_File', $name2idindex, O_RDONLY,undef, 
         $DB_HASH) || $self->throw("$! $name2idindex");
     $self->{'_parentbtree'} = tie( %{$self->{'_parent2children'}},
                                    'DB_File', $parent2childindex, 
-                                   O_RDWR, 0644, $DB_BTREE);
+                                   O_RDONLY, 0644, $DB_BTREE);
 
     $self->{'_initialized'} = 1;
 }
@@ -528,10 +531,18 @@ sub DESTROY {
     undef $self->{_nodes};
     undef $self->{_parent2children};
     undef $self->{_parentbtree};
-    unlink catfile($self->{index_directory},'id2names');
-    unlink catfile($self->{index_directory},'names2id');
-    unlink catfile($self->{index_directory},'nodes');
-    unlink catfile($self->{index_directory},'parents');
+
+    # Treat index files as temporary and delete them now if
+    # 'index_directory' match $DEFAULT_INDEX_DIR (which means
+    # that no "-directory" was specified or is an explicit
+    # temporary file)
+    my $default_temp = quotemeta $DEFAULT_INDEX_DIR;
+    if ($self->{index_directory} =~ m/^$default_temp/) {
+        unlink catfile($self->{index_directory},'id2names');
+        unlink catfile($self->{index_directory},'names2id');
+        unlink catfile($self->{index_directory},'nodes');
+        unlink catfile($self->{index_directory},'parents');
+    }
 }
 
 1;
diff --git a/Bio/DB/Taxonomy/sqlite.pm b/Bio/DB/Taxonomy/sqlite.pm
new file mode 100644
index 0000000..a0e2411
--- /dev/null
+++ b/Bio/DB/Taxonomy/sqlite.pm
@@ -0,0 +1,696 @@
+#
+# BioPerl module for Bio::DB::Taxonomy::flatfile
+#
+# Please direct questions and support issues to <bioperl-l at bioperl.org>
+#
+# Cared for by Chris Fields <cjfields-at-cpan-dot-org>
+#
+# Copyright Chris Fields
+#
+# You may distribute this module under the same terms as perl itself
+
+# POD documentation - main docs before the code
+
+=head1 NAME
+
+Bio::DB::Taxonomy::sqlite - SQLite-based implementation of Bio::DB::Taxonomy::flatfile
+
+=head1 SYNOPSIS
+
+  use Bio::DB::Taxonomy;
+
+  my $db = Bio::DB::Taxonomy->new(-source    => 'sqlite',
+                                  -db        => 'mytax.db'  # default 'taxonomy.sqlite'
+                                  -nodesfile => 'nodes.dmp',
+                                  -namesfile => 'names.dmp');
+
+=head1 DESCRIPTION
+
+This is an implementation of Bio::DB::Taxonomy which stores and accesses the
+NCBI taxonomy using a simple SQLite3 database stored locally on disk.
+
+With this implementation, one can do the same basic searches as with the 'flatfile'
+database.  A test lookup of 1000 NCBI TaxIDs with full lineage information took
+about 2 seconds on my older MacBook Pro laptop with an on-disk implementation.  
+
+A few key differences:
+
+=over 4
+
+=item * You can use typical SQL syntax to run a query search; for instance, if you want you can run:
+
+   @ids = sort $db->get_taxonids('Chloroflexi%');
+
+=item * In-memory database is allowed
+
+  my $db = Bio::DB::Taxonomy->new(-source    => 'sqlite',
+                                  -db        => ':memory:',
+                                  -nodesfile => 'nodes.dmp',
+                                  -namesfile => 'names.dmp');
+
+=back
+
+The required database files, nodes.dmp and names.dmp can be obtained from
+ftp://ftp.ncbi.nih.gov/pub/taxonomy/taxdump.tar.gz
+
+=head1 TODO
+
+=over 4
+
+=item * Small optimizations, such as optimizing name lookups
+
+=item * Possibly use L<recursive CTE|http://www.sqlite.org/lang_with.html> to do lineage lookups 
+
+=item * Clean up SQL (still kind of a mess right now)
+
+=item * Check compat. with other NCBI-specific L<Bio::DB::Taxonomy> implementations
+
+=item * Plan out feasibility of allowing other backends (Neo4J, other DBI, etc)
+
+=item * Optionally calculate left/right ID values for TaxID nodes
+
+=back
+
+Beyond completing the implementation and optimization, this will
+likely be rolled into a more flexible backend at some future point.
+
+=head1 FEEDBACK
+
+=head2 Mailing Lists
+
+User feedback is an integral part of the evolution of this and other
+Bioperl modules. Send your comments and suggestions preferably to
+the Bioperl mailing list.  Your participation is much appreciated.
+
+  bioperl-l at bioperl.org                  - General discussion
+  http://bioperl.org/wiki/Mailing_lists  - About the mailing lists
+
+=head2 Support 
+
+Please direct usage questions or support issues to the mailing list:
+
+I<bioperl-l at bioperl.org>
+
+rather than to the module maintainer directly. Many experienced and 
+reponsive experts will be able look at the problem and quickly 
+address it. Please include a thorough description of the problem 
+with code and data examples if at all possible.
+
+=head2 Reporting Bugs
+
+Report bugs to the Bioperl bug tracking system to help us keep track
+of the bugs and their resolution. Bug reports can be submitted via
+the web:
+
+  https://github.com/bioperl/bioperl-live/issues
+
+=head1 AUTHOR - Chris Fields
+
+Email cjfields-at-cpan-dot-org
+
+=head1 APPENDIX
+
+The rest of the documentation details each of the object methods.
+Internal methods are usually preceded with a _
+
+=cut
+
+# Let the code begin...
+
+package Bio::DB::Taxonomy::sqlite;
+
+use 5.010;
+use strict;
+use DB_File;
+use Bio::Taxon;
+use File::Spec::Functions;
+use Data::Dumper;
+use DBI;
+
+use constant SEPARATOR => ':';
+
+our $DEFAULT_INDEX_DIR     = $Bio::Root::IO::TEMPDIR;    # /tmp
+our $DEFAULT_CACHE_SIZE    = 0;    # /tmp
+our $DEFAULT_DB_NAME       = 'taxonomy.sqlite';
+
+our @DIVISIONS = (
+    [qw(BCT Bacteria)],
+    [qw(INV Invertebrates)],
+    [qw(MAM Mammals)],
+    [qw(PHG Phages)],
+    [qw(PLN Plants)],                                    # (and fungi)
+    [qw(PRI Primates)],
+    [qw(ROD Rodents)],
+    [qw(SYN Synthetic)],
+    [qw(UNA Unassigned)],
+    [qw(VRL Viruses)],
+    [qw(VRT Vertebrates)],
+    [qw(ENV 'Environmental samples')]
+);
+
+use base qw(Bio::DB::Taxonomy);
+
+=head2 new
+
+ Title   : new
+ Usage   : my $obj = Bio::DB::Taxonomy::flatfile->new();
+ Function: Builds a new Bio::DB::Taxonomy::flatfile object 
+ Returns : an instance of Bio::DB::Taxonomy::flatfile
+ Args    : -directory => name of directory where index files should be created
+           -nodesfile => name of file containing nodes (nodes.dmp from NCBI)
+           -namesfile => name of the file containing names(names.dmp from NCBI)
+           -force     => 1 to replace current indexes even if they exist
+
+=cut
+
+# TODO: get rid of globals!
+sub new {
+    my ( $class, @args ) = @_;
+
+    my $self = $class->SUPER::new(@args);
+    
+    my ( $dir, $nodesfile, $namesfile, $db, $force, $cs ) =
+      $self->_rearrange( [qw(DIRECTORY NODESFILE NAMESFILE DB FORCE CACHE_SIZE)], @args );
+
+    $self->index_directory( $dir || $DEFAULT_INDEX_DIR );
+    
+    $self->db_name( $db || $DEFAULT_DB_NAME );
+    
+    $self->cache_size($cs // $DEFAULT_CACHE_SIZE);
+    
+    if ($nodesfile) {
+        $self->_build_index( $nodesfile, $namesfile, $force );
+    }
+    
+    $self->_db_connect;
+    return $self;
+}
+
+=head2 Bio::DB::Taxonomy interface implementation
+
+=head2 get_num_taxa
+
+ Title   : get_num_taxa
+ Usage   : my $num = $db->get_num_taxa();
+ Function: Get the number of taxa stored in the database.
+ Returns : A number
+ Args    : None
+
+=cut
+
+sub get_num_taxa {
+    my ($self) = @_;
+    
+    my $ct = $self->_dbh_fetch(<<SQL);
+    SELECT COUNT(*) FROM taxon
+SQL
+    
+    return @{$ct}[0];
+}
+
+=head2 get_taxon
+
+ Title   : get_taxon
+ Usage   : my $taxon = $db->get_taxon(-taxonid => $taxonid)
+ Function: Get a Bio::Taxon object from the database.
+ Returns : Bio::Taxon object
+ Args    : just a single value which is the database id, OR named args:
+           -taxonid => taxonomy id (to query by taxonid)
+            OR
+           -name    => string (to query by a taxonomy name: common name, 
+                               scientific name, etc)
+
+=cut
+
+sub get_taxon {
+    my ($self) = shift;
+    my ( $taxonid, $name );
+
+    if ( @_ > 1 ) {
+        ( $taxonid, $name ) = $self->_rearrange( [qw(TAXONID NAME)], @_ );
+        if ($name) {
+            ( $taxonid, my @others ) = $self->get_taxonids($name);
+            $self->warn(
+"There were multiple ids ($taxonid @others) matching '$name', using '$taxonid'"
+            ) if @others > 0;
+        }
+    }
+    else {
+        $taxonid = shift;
+    }
+
+    return unless $taxonid;
+
+    $taxonid =~ /^\d+$/ || $self->throw("TaxID must be integer, got [$taxonid]");
+    
+    my ( $parent_id, $rank, $code, $divid, $gen_code, $mito, $nm, $uniq, $class );
+    # single join or two calls?
+    my $sth = $self->_prepare_cached(<<SQL);
+    SELECT tax.parent_id, tax.rank, tax.code, tax.division_id, tax.gencode_id, tax.mito_id, names.name, names.uniq_name, names.class
+    FROM taxon as tax, names
+    WHERE
+        tax.taxon_id = ?
+    AND
+        names.taxon_id = tax.taxon_id
+SQL
+    
+    $sth->bind_columns(\$parent_id, \$rank, \$code, \$divid, \$gen_code, \$mito, \$nm, \$uniq, \$class);
+    
+    $sth->execute($taxonid) or $self->throw($sth->errstr);
+    
+    my ($sci_name, @common_names);
+    
+    while ($sth->fetch) {
+        if ($class eq 'scientific name') {
+            $sci_name = $nm;
+        } else {
+            push @common_names, $nm;
+        }
+    }
+        
+    my $taxon = Bio::Taxon->new(
+        -name         => $sci_name,
+        -common_names => [@common_names],
+        -ncbi_taxid   => $taxonid,
+        -parent_id    => $parent_id,   
+        -rank              => $rank,
+        -division          => $DIVISIONS[$divid]->[1],
+        -genetic_code      => $gen_code,
+        -mito_genetic_code => $mito
+    );
+    
+    # we can't use -dbh or the db_handle() method ourselves or we'll go
+    # infinite on the merge attempt
+    $taxon->{'db_handle'} = $self;
+    
+    $self->_handle_internal_id($taxon);
+    
+    return $taxon;
+}
+
+*get_Taxonomy_Node = \&get_taxon;
+
+=head2 get_taxonids
+
+ Title   : get_taxonids
+ Usage   : my @taxonids = $db->get_taxonids('Homo sapiens');
+ Function: Searches for a taxonid (typically ncbi_taxon_id) based on a query
+           string. Note that multiple taxonids can match to the same supplied
+           name.
+ Returns : array of integer ids in list context, one of these in scalar context
+ Args    : string representing taxon's name
+
+=cut
+
+sub get_taxonids {
+    my ( $self, $query ) = @_;
+    
+    # TODO: note we're not cleaning the query here, so you could technically
+    # have a fuzzy match (or Bobby Tables someone)
+    
+    # TODO: OR'd match seems poor optimally
+    my $taxids = $self->{dbh}->selectcol_arrayref(<<SQL);
+    SELECT DISTINCT taxon_id FROM names
+    WHERE
+        name LIKE "$query"
+    OR
+        uniq_name LIKE "$query"
+SQL
+
+    return wantarray() ? @{$taxids} : @{$taxids}[0];
+}
+
+*get_taxonid = \&get_taxonids;
+
+=head2 get_Children_Taxids
+
+ Title   : get_Children_Taxids
+ Usage   : my @childrenids = $db->get_Children_Taxids 
+ Function: Get the ids of the children of a node in the taxonomy
+ Returns : Array of Ids
+ Args    : Bio::Taxon or a taxon_id
+ Status  : deprecated (use each_Descendent())
+
+=cut
+
+sub get_Children_Taxids {
+    my ( $self, $node ) = @_;
+    $self->deprecated(); # ?
+    #$self->warn(
+    #    "get_Children_Taxids is deprecated, use each_Descendent instead");
+    #my $id;
+    #if ( ref($node) ) {
+    #    if ( $node->can('object_id') ) {
+    #        $id = $node->object_id;
+    #    }
+    #    elsif ( $node->can('ncbi_taxid') ) {
+    #        $id = $node->ncbi_taxid;
+    #    }
+    #    else {
+    #        $self->warn(
+    #            "Don't know how to extract a taxon id from the object of type "
+    #              . ref($node)
+    #              . "\n" );
+    #        return;
+    #    }
+    #}
+    #else { $id = $node }
+    #my @vals = $self->{'_parentbtree'}->get_dup($id);
+    #return @vals;
+}
+
+=head2 ancestor
+
+ Title   : ancestor
+ Usage   : my $ancestor_taxon = $db->ancestor($taxon)
+ Function: Retrieve the full ancestor taxon of a supplied Taxon from the
+           database. 
+ Returns : Bio::Taxon
+ Args    : Bio::Taxon (that was retrieved from this database)
+
+=cut
+
+sub ancestor {
+    my ( $self, $taxon ) = @_;
+    $self->throw("Must supply a Bio::Taxon")
+      unless ref($taxon) && $taxon->isa('Bio::Taxon');
+    $self->throw("The supplied Taxon must belong to this database")
+      unless $taxon->db_handle && $taxon->db_handle eq $self;
+    my $id =
+      $taxon->id || $self->throw("The supplied Taxon is missing its id!");
+    
+    # TODO:
+    # Note here we explicitly set the parent ID, but use a separate method to
+    # check whether it is defined. Mixing back-end databases, even if from the
+    # same source, should still work (since a different backend wouldn't
+    # explicitly set the parent_id)
+    
+    if ($taxon->trusted_parent_id) {
+        # this is the failsafe when we hit the root node
+        if ($taxon->parent_id eq $id) {
+            return;
+        }
+        return $self->get_taxon(-taxonid => $taxon->parent_id);
+    } else {
+        # TODO: would there be any other option?
+        return;
+    }
+}
+
+# TODO: this may act as a drop-in for a recursive CTE lookup
+
+#=head2 ancestors
+#
+# Title   : ancestors
+# Usage   : my @ancestor_taxa = $db->ancestors($taxon)
+# Function: Retrieve the full ancestor taxon of a supplied Taxon from the
+#           database. 
+# Returns : List of Bio::Taxon
+# Args    : Bio::Taxon (that was retrieved from this database)
+#
+#=cut
+
+#sub ancestors { ... }
+
+=head2 each_Descendent
+
+ Title   : each_Descendent
+ Usage   : my @taxa = $db->each_Descendent($taxon);
+ Function: Get all the descendents of the supplied Taxon (but not their
+           descendents, ie. not a recursive fetchall).
+ Returns : Array of Bio::Taxon objects
+ Args    : Bio::Taxon (that was retrieved from this database)
+
+=cut
+
+sub each_Descendent {
+    my ( $self, $taxon ) = @_;
+    $self->throw("Must supply a Bio::Taxon")
+      unless ref($taxon) && $taxon->isa('Bio::Taxon');
+    $self->throw("The supplied Taxon must belong to this database")
+      unless $taxon->db_handle && $taxon->db_handle eq $self;  # yikes
+    
+    my $id =
+      $taxon->id || $self->throw("The supplied Taxon is missing its id!");
+    
+    #my ( $parent_id, $rank, $code, $divid, $gen_code, $mito, $nm, $uniq, $class );
+    # single join or two calls?
+    
+    # probably not optimal, maybe set up as a cached statement with bindings?
+    my $desc_ids = $self->{dbh}->selectcol_arrayref(<<SQL) or $self->throw($self->{dbh}->errstr);
+    SELECT tax.taxon_id
+    FROM taxon as tax
+    WHERE
+        tax.parent_id = $id
+SQL
+    
+    return unless ref $desc_ids eq 'ARRAY';
+    
+    my @descs;
+    foreach my $desc_id (@$desc_ids) {
+        push( @descs, $self->get_taxon($desc_id) || next );
+    }
+    return @descs;
+}
+
+=head2 Helper methods 
+
+=cut
+
+=head2 index_directory
+
+ Title   : index_directory
+ Funtion : Get/set the location that index files are stored. (this module
+           will index the supplied database)
+ Usage   : $obj->index_directory($newval)
+ Returns : value of index_directory (a scalar)
+ Args    : on set, new value (a scalar or undef, optional)
+ Note    : kept for backwards compatibility with older DB_File implementation
+
+=cut
+
+sub index_directory {
+    my $self = shift;
+    return $self->{'index_directory'} = shift if @_;
+    return $self->{'index_directory'};
+}
+
+=head2 db_name
+
+ Title   : db_name
+ Funtion : Get/set the name of the SQLite3 database where data is stored
+ Usage   : $obj->db_name($newval)
+ Returns : value of db_name (a scalar)
+ Args    : on set, new value (a scalar or undef, optional)
+
+=cut
+
+# TODO: this may need some disambiguation w/ index_directory above; for now we
+# assume this doesn't have a full path name (though I see no reason why this
+# shouldn't allow that)
+
+sub db_name {
+    my $self = shift;
+    return $self->{'db_name'} = shift if @_;
+    return $self->{'db_name'};
+}
+
+=head2 cache_size
+
+ Title   : cache_size
+ Funtion : Get/set the cachesize used for loading the SQLite3 database
+ Usage   : $obj->cache_size($newval)
+ Returns : value of cache_size (a scalar)
+ Args    : on set, new value (a scalar or undef, optional)
+ Note    : we do no checking on whether this value is an integer (SQLite does this for use)
+
+=cut
+
+sub cache_size {
+    my $self = shift;
+    return $self->{'cache_size'} = shift if defined($_[0]);
+    return $self->{'cache_size'};
+}
+
+# internal method which does the indexing
+sub _build_index {
+    my ( $self, $nodesfile, $namesfile, $force ) = @_;
+
+    # TODO: need to disambiguate using index_directory here since we only have
+    # one file.  Mayeb ignore it in favor of having full path for db_name?
+    my ($dir, $db_name) = ($self->index_directory, $self->db_name);
+    if (! -e $db_name || $force) {
+        
+        # TODO: we're ignoring index_directory for now, may add support for this
+        # down the way
+        my $dbh = DBI->connect("dbi:SQLite:dbname=$db_name","","") or die $!;
+        
+        $self->debug("Running SQLite version:".$dbh->{sqlite_version}."\n");
+    
+        #$dbh->do('PRAGMA synchronous = 0');      # Non transaction safe!!!
+        
+        if ($self->cache_size) {
+            my $cs = $self->cache_size;
+            $self->debug("Setting cache size $cs\n");
+            $dbh->do("PRAGMA cache_size = $cs") 
+        }
+
+        $self->debug("Loading taxon table data\n");
+        $self->_init_db($dbh);
+        open my $NODES, '<', $nodesfile
+            or $self->throw("Could not read node file '$nodesfile': $!");
+    
+        # TODO: this has the really unnecessary 'OR IGNORE' option added,
+        # apparently b.c the test data expects to handle cases where the TaxID
+        # is repeated in this table (which should never happen in this table). I
+        # will likely change this to throw under those circumstances
+        
+        my $sth = $dbh->prepare_cached(<<SQL);
+    INSERT OR IGNORE INTO taxon (taxon_id, parent_id, rank, code, division_id, gencode_id, mito_id) VALUES (?,?,?,?,?,?,?)
+SQL
+        $dbh->do("BEGIN");
+        while (<$NODES>) {
+            next if /^\s*$/;
+            chomp;
+            my ($taxid,$parent,$rank,$code,$divid,undef,$gen_code,undef,$mito) = split(/\t\|\t/,$_);
+            next if $taxid == 1;
+            if ($parent == 1) {
+                $parent = undef;
+            }
+            
+            $sth->execute($taxid, $parent, $rank, $code, $divid, $gen_code, $mito) or die $sth->errstr.": TaxID $taxid";
+        }
+        $dbh->do("COMMIT") or $self->throw($dbh->errstr);
+        
+        close $NODES;
+        
+        $self->debug("Loading name table data\n");
+        open my $NAMES, '<', $namesfile
+            or $self->throw("Could not read names file '$namesfile': $!");
+    
+        my $sth = $dbh->prepare_cached(<<SQL) or $self->throw($dbh->errstr);
+    INSERT INTO names (taxon_id, name, uniq_name, class) VALUES (?,?,?,?)
+SQL
+        $dbh->do("BEGIN");
+        while (<$NAMES>) {
+            next if /^$/;
+            chomp;
+            my ($taxid, $name, $unique_name, $class) = split(/\t\|\t/,$_);
+            
+            # don't include the fake root node 'root' or 'all' with id 1
+            next if $taxid == 1;
+            
+            $class =~ s/\s+\|\s*$//;
+            
+            #if ($name =~ /\(class\)$/) { # it seems that only rank of class is ever used in this situation
+            #    $name =~ s/\s+\(class\)$//;
+            #}
+            
+            $sth->execute($taxid, $name, $unique_name, $class) or $self->throw($sth->errstr);
+        }
+        close $NAMES;
+
+        $dbh->do("COMMIT");
+        
+        $self->debug("Creating taxon index\n");
+        $dbh->do("CREATE INDEX parent_idx ON taxon (parent_id)") or $self->throw($dbh->errstr);
+        $self->debug("Creating name index\n");
+        $dbh->do("CREATE INDEX name_idx ON names (name)") or $self->throw($dbh->errstr);
+        $self->debug("Creating taxon name table index\n");
+        $dbh->do("CREATE INDEX taxon_name_idx ON names (taxon_id)") or $self->throw($dbh->errstr);
+
+        $dbh->do("PRAGMA foreign_keys = ON");
+        
+        #$dbh->do('PRAGMA synchronous = 1');
+        $self->{dbh} = $dbh;
+        $self->{'_initialized'} = 1;
+    }
+    1;
+}
+
+# connect the internal db handle
+sub _db_connect {
+    my $self = shift;
+    return if $self->{'_initialized'};
+
+    my ($dir, $db_name) = ($self->index_directory, $self->db_name);
+    
+    # TODO: we're ignoring index_directory for now, may add support for this
+    # down the way
+    my $dbh = DBI->connect("dbi:SQLite:dbname=$db_name","","") or die $!;
+    $dbh->do("PRAGMA foreign_keys = ON");
+    if ($self->cache_size) {
+        my $cs = $self->cache_size;
+        $self->debug("Setting cache size $cs\n");
+        $dbh->do("PRAGMA cache_size = $cs") 
+    }
+    $self->{dbh} = $dbh;
+
+    $self->{'_initialized'} = 1;
+}
+
+sub _init_db {
+    my ($self, $dbh) = @_;
+    my $schema = $self->taxon_schema();
+    # TODO: set up handler parameters here
+    for my $table (sort keys %$schema) {
+        $dbh->do("DROP TABLE IF EXISTS $table") or $self->throw($dbh->errstr);
+        $dbh->do("CREATE TABLE $table ".$schema->{$table}) or $self->throw($dbh->errstr);
+    }
+    1;
+}
+
+sub _dbh_fetch {
+    my ($self, $sql) = @_;
+    # TODO: more sanity checks
+    my $rows = $self->{dbh}->selectrow_arrayref($sql) or $self->throw( $self->{dbh}->errstr );
+    return $rows;
+}
+
+sub _prepare_cached {
+    my ($self, $sql) = @_;
+    # TODO: more sanity checks
+    my $sth = $self->{dbh}->prepare_cached($sql) or $self->throw( $self->{dbh}->errstr );
+    $sth;
+}
+
+
+# TODO: check data size, this is a ballpark estimate (could be reduced)
+sub taxon_schema {
+    my $self   = shift;
+    return {
+    taxon   => <<SCHEMA,
+    (
+        taxon_id        INTEGER UNIQUE PRIMARY KEY NOT NULL,
+        parent_id       INTEGER,
+        left_id         INTEGER,
+        right_id        INTEGER,
+        rank            VARCHAR(25),
+        code            VARCHAR(5),
+        division_id     INTEGER,
+        gencode_id      INTEGER,
+        mito_id         INTEGER,
+        FOREIGN KEY(parent_id) REFERENCES taxon(taxon_id)
+    )
+SCHEMA
+    
+    names   => <<SCHEMA,
+    (
+        name_id         INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
+        taxon_id        INTEGER,
+        name            VARCHAR(50),
+        uniq_name       VARCHAR(50),
+        class           VARCHAR(25),
+        FOREIGN KEY(taxon_id) REFERENCES taxon(taxon_id)
+    )
+SCHEMA
+    };
+}
+
+sub DESTROY {
+    my $self = shift;
+    undef $self->{dbh};
+}
+
+1;
+
diff --git a/Bio/Factory/FTLocationFactory.pm b/Bio/Factory/FTLocationFactory.pm
index 48ae3e7..c909bf8 100644
--- a/Bio/Factory/FTLocationFactory.pm
+++ b/Bio/Factory/FTLocationFactory.pm
@@ -163,7 +163,6 @@ sub from_string {
         
         my @loc_objs;
         my $loc_obj;
-        my @gl_subloc_strands;
         
         SUBLOCS:
         while (@sublocs) {
@@ -190,12 +189,10 @@ sub from_string {
                             my $comploc = $1;
                             $sobj = $self->_parse_location($comploc);
                             $sobj->strand(-1);
-                            push @subloc_strands,    -1;
-                            push @gl_subloc_strands, -1;
+                            push @subloc_strands, -1;
                         } else {
                             $sobj = $self->_parse_location($splitloc);
-                            push @subloc_strands,    1;
-                            push @gl_subloc_strands, 1;
+                            push @subloc_strands, 1;
                         }
                         push @s_objs, $sobj;
                     }
@@ -204,29 +201,22 @@ sub from_string {
                     # Guide Strand and sublocations adding order
                     if (scalar @s_objs > 0) {
                         my $identical    = 0;
-                        my $gl_identical = 0;
 
                         my $first_value = $subloc_strands[0];
                         foreach my $strand (@subloc_strands) {
                             $identical++ if ($strand == $first_value);
                         }
 
-                        my $first_gl_value = $gl_subloc_strands[0];
-                        foreach my $gl_strand (@gl_subloc_strands) {
-                            $gl_identical++ if ($gl_strand == $first_gl_value);
-                        }
-
                         if ($identical == scalar @subloc_strands) {
                             # Set guide_strand if all sublocations have the same strand
                             $loc_obj->guide_strand($first_value);
 
-                            # Reverse sublocation order for negative strand locations in cases like this:
-                            # join(1..11,join(complement(40..50),complement(60..70)))
-                            # But not this:
-                            # join(complement(10..20),complement(30..40))
-                            if (    $gl_identical != scalar @gl_subloc_strands
-                                and $first_value  == -1
-                                ) {
+                            # Reverse sublocation order for negative strand locations, e.g.:
+                            # Common (CAA24672.1):
+                            #   join(complement(4918..5163),complement(2691..4571))
+                            # Trans-splicing (NP_958375.1):
+                            #   join(32737..32825,complement(174205..174384),complement(69520..71506))
+                            if ($first_value  == -1) {
                                 @s_objs = reverse @s_objs;
                             }
                         }
@@ -253,13 +243,26 @@ sub from_string {
             }
             if ($op && $op eq 'complement') {
                 $loc_obj->strand(-1);
-                push @gl_subloc_strands, -1;
+            }
+
+            # For Split-type $loc_obj, if guide strand is set (meaning consistent strand for
+            # all sublocs) and guide strand is the same than the last location from @loc_objs,
+            # then recover the sublocations and add them to @loc_objs. This way,
+            # "join(10..20,join(30..40,50..60))" becomes "join(10..20,30..40,50..60)"
+            my $guide_strand = ($loc_obj->isa('Bio::Location::SplitLocationI')) ? ($loc_obj->guide_strand || 0) : 0;
+            my $last_strand  = (scalar @loc_objs > 0) ? $loc_objs[-1]->strand : 0;
+            if (    $guide_strand   != 0
+                and $guide_strand   == $last_strand
+                and $oparg          eq $op # join(,join()) OK, order(join()) NOT OK
+                ) {
+                my @subloc_objs = $loc_obj->sub_Location(0);
+                foreach my $subloc_obj (@subloc_objs) {
+                    push @loc_objs, $subloc_obj;
+                }
             }
             else {
-                push @gl_subloc_strands, 1;
+                push @loc_objs, $loc_obj;
             }
-
-            push @loc_objs, $loc_obj;
         }
         my $ct = @loc_objs;
         if ($op && !($op eq 'join' || $op eq 'order' || $op eq 'bond')
diff --git a/Bio/Index/Fasta.pm b/Bio/Index/Fasta.pm
index 2acd088..2547062 100644
--- a/Bio/Index/Fasta.pm
+++ b/Bio/Index/Fasta.pm
@@ -54,8 +54,7 @@ retrieving the sequence from them. For best results 'use strict'.
 Bio::Index::Fasta supports the Bio::DB::BioSeqI interface, meaning
 it can be used as a Sequence database for other parts of bioperl
 
-Additional example code is available in scripts/index/*PLS and in 
-the Bioperl Tutorial (L<http://www.bioperl.org/wiki/Bptutorial.pl>)
+Additional example code is available in scripts/index/.
 
 Note that by default the key for the sequence will be the first continuous
 string after the 'E<gt>' in the fasta header. If you want to use a specific
diff --git a/Bio/Index/Qual.pm b/Bio/Index/Qual.pm
index 4e29ab4..66b1ab3 100755
--- a/Bio/Index/Qual.pm
+++ b/Bio/Index/Qual.pm
@@ -52,8 +52,7 @@ retrieving the sequence from them. For best results 'use strict'.
 Bio::Index::Qual supports the Bio::DB::BioSeqI interface, meaning
 it can be used as a Sequence database for other parts of bioperl
 
-Additional example code is available in scripts/index/*PLS and in 
-the Bioperl Tutorial (L<http://www.bioperl.org/wiki/Bptutorial.pl>).
+Additional example code is available in scripts/index.
 
 Note that by default the key for the sequence will be the first continuous
 string after the 'E<gt>' in the qual header. If you want to use a specific
diff --git a/Bio/Location/Split.pm b/Bio/Location/Split.pm
index 25d73ef..5ae46e9 100644
--- a/Bio/Location/Split.pm
+++ b/Bio/Location/Split.pm
@@ -359,30 +359,32 @@ sub guide_strand {
 sub strand{
     my ($self,$value) = @_;
     if( defined $value) {
-		$self->{'strand'} = $value;
-		# propagate to all sublocs
-		foreach my $loc ($self->sub_Location(0)) {
-			$loc->strand($value);
-		}
-    } else {
-		my ($strand, $lstrand);
-		foreach my $loc ($self->sub_Location(0)) {
-			# we give up upon any location that's remote or doesn't have
-			# the strand specified, or has a differing one set than 
-			# previously seen.
-			# calling strand() is potentially expensive if the subloc is also
-			# a split location, so we cache it
-			$lstrand = $loc->strand();
-			if((! $lstrand) ||
-			   ($strand && ($strand != $lstrand)) ||
-			   $loc->is_remote()) {
-			$strand = undef;
-			last;
-			} elsif(! $strand) {
-			$strand = $lstrand;
-			}
-		}
-		return $strand;
+        $self->{'strand'} = $value;
+        # propagate to all sublocs
+        foreach my $loc ($self->sub_Location(0)) {
+            $loc->strand($value);
+        }
+    }
+    else {
+        my ($strand, $lstrand);
+        foreach my $loc ($self->sub_Location(0)) {
+            # we give up upon any location that doesn't have
+            # the strand specified, or has a differing one set than
+            # previously seen.
+            # calling strand() is potentially expensive if the subloc
+            # is also a split location, so we cache it
+            $lstrand = $loc->strand();
+            if (  ! $lstrand
+                or ($strand and ($strand != $lstrand))
+                ) {
+                $strand = undef;
+                last;
+            }
+            elsif (! $strand) {
+                $strand = $lstrand;
+            }
+        }
+        return $strand;
     }
 }
 
@@ -442,10 +444,10 @@ sub flip_strand {
 =cut
 
 sub start {
-    my ($self,$value) = @_;    
+    my ($self,$value) = @_;
     if( defined $value ) {
-	$self->throw("Trying to set the starting point of a split location, ".
-				 "that is not possible, try manipulating the sub Locations");
+        $self->throw(  "Trying to set the starting point of a split location, "
+                     . "that is not possible, try manipulating the sub Locations");
     }
     return $self->SUPER::start();
 }
@@ -461,10 +463,10 @@ sub start {
 =cut
 
 sub end {
-    my ($self,$value) = @_;    
+    my ($self,$value) = @_;
     if( defined $value ) {
-	$self->throw("Trying to set the ending point of a split location, ".
-				 "that is not possible, try manipulating the sub Locations");
+        $self->throw(  "Trying to set the ending point of a split location, "
+                     . "that is not possible, try manipulating the sub Locations");
     }
     return $self->SUPER::end();
 }
@@ -480,15 +482,17 @@ sub end {
 =cut
 
 sub min_start {
-    my ($self, $value) = @_;    
+    my ($self, $value) = @_;
 
     if( defined $value ) {
-	$self->throw("Trying to set the minimum starting point of a split ".
-				 "location, that is not possible, try manipulating the sub Locations");
+        $self->throw(  "Trying to set the minimum starting point of a split "
+                     . "location, that is not possible, try manipulating the sub Locations");
     }
-    my @locs = $self->sub_Location(1);
-    return $locs[0]->min_start() if @locs; 
-    return;
+    # No sort by default because it breaks circular cut by origin features
+    # (like "join(2006035..2007700,1..257)"). Sorting is user responsability.
+    # Assume Start to be 1st segment start and End to be last segment End.
+    my @locs = $self->sub_Location(0);
+    return ( @locs ) ? $locs[0]->min_start : undef;
 }
 
 =head2 max_start
@@ -505,12 +509,14 @@ sub max_start {
     my ($self,$value) = @_;
 
     if( defined $value ) {
-	$self->throw("Trying to set the maximum starting point of a split ".
-				 "location, that is not possible, try manipulating the sub Locations");
+        $self->throw(  "Trying to set the maximum starting point of a split "
+                     . "location, that is not possible, try manipulating the sub Locations");
     }
-    my @locs = $self->sub_Location(1);
-    return $locs[0]->max_start() if @locs; 
-    return;
+    # No sort by default because it breaks circular cut by origin features
+    # (like "join(2006035..2007700,1..257)"). Sorting is user responsability.
+    # Assume Start to be 1st segment start and End to be last segment End.
+    my @locs = $self->sub_Location(0);
+    return ( @locs ) ? $locs[0]->max_start : undef;
 }
 
 =head2 start_pos_type
@@ -528,11 +534,14 @@ sub start_pos_type {
     my ($self,$value) = @_;
 
     if( defined $value ) {
-	$self->throw("Trying to set the start_pos_type of a split location, ".
-				 "that is not possible, try manipulating the sub Locations");
+        $self->throw(  "Trying to set the start_pos_type of a split location, "
+                     . "that is not possible, try manipulating the sub Locations");
     }
-    my @locs = $self->sub_Location();
-    return ( @locs ) ? $locs[0]->start_pos_type() : undef;    
+    # No sort by default because it breaks circular cut by origin features
+    # (like "join(2006035..2007700,1..257)"). Sorting is user responsability.
+    # Assume Start to be 1st segment start and End to be last segment End.
+    my @locs = $self->sub_Location(0);
+    return ( @locs ) ? $locs[0]->start_pos_type : undef;
 }
 
 =head2 min_end
@@ -549,13 +558,37 @@ sub min_end {
     my ($self,$value) = @_;
 
     if( defined $value ) {
-	$self->throw("Trying to set the minimum end point of a split location, ".
-				 "that is not possible, try manipulating the sub Locations");
+        $self->throw(  "Trying to set the minimum end point of a split location, "
+                     . "that is not possible, try manipulating the sub Locations");
+    }
+    # No sort by default because it breaks circular cut by origin features
+    # (like "join(2006035..2007700,1..257)"). Sorting is user responsability.
+    # Assume Start to be 1st segment start and End to be last segment End.
+    my @locs = $self->sub_Location(0);
+
+    # Return the End corresponding to the same sequence as the top ('master')
+    # if the top seq is undefined, take the first defined in a sublocation.
+    # Example: for "join(1..100,J00194.1:100..202)", End would be 100
+    my $seqid = $self->seq_id;
+    my $i = 0;
+    while (not defined $seqid and $i <= $#locs) {
+        $seqid = $locs[$i++]->seq_id;
     }
-    # reverse sort locations by largest ending to smallest ending
-    my @locs = $self->sub_Location(-1);
-    return $locs[0]->min_end() if @locs; 
-    return;
+
+    my @same_id_locs = ($seqid ? grep { $_->seq_id eq $seqid } @locs
+                     :           @locs);
+    # If there is a $seqid but no sublocations have the same id,
+    # try with the first id found in the sublocations instead,
+    # and if that fails return the last segment value
+    if (@locs and not @same_id_locs) {
+        my $first_id;
+        while (not defined $first_id and $i <= $#locs) {
+            $first_id = $locs[$i++]->seq_id;
+        }
+        @same_id_locs = ($first_id ? grep { $_->seq_id eq $first_id } @locs
+                      :              @locs);
+    }
+    return ( @same_id_locs ) ? $same_id_locs[-1]->min_end : undef;
 }
 
 =head2 max_end
@@ -572,13 +605,37 @@ sub max_end {
     my ($self,$value) = @_;
 
     if( defined $value ) {
-	$self->throw("Trying to set the maximum end point of a split location, ".
-				 "that is not possible, try manipulating the sub Locations");
+        $self->throw(  "Trying to set the maximum end point of a split location, "
+                     ."that is not possible, try manipulating the sub Locations");
     }
-    # reverse sort locations by largest ending to smallest ending
-    my @locs = $self->sub_Location(-1);
-    return $locs[0]->max_end() if @locs; 
-    return;
+    # No sort by default because it breaks circular cut by origin features
+    # (like "join(2006035..2007700,1..257)"). Sorting is user responsability.
+    # Assume Start to be 1st segment start and End to be last segment End.
+    my @locs = $self->sub_Location(0);
+
+    # Return the End corresponding to the same sequence as the top ('master')
+    # if the top seq is undefined, take the first defined in a sublocation.
+    # Example: for "join(1..100,J00194.1:100..202)", End would be 100
+    my $seqid = $self->seq_id;
+    my $i = 0;
+    while (not defined $seqid and $i <= $#locs) {
+        $seqid = $locs[$i++]->seq_id;
+    }
+
+    my @same_id_locs = ($seqid ? grep { $_->seq_id eq $seqid } @locs
+                     :           @locs);
+    # If there is a $seqid but no sublocations have the same id,
+    # try with the first id found in the sublocations instead,
+    # and if that fails return the last segment value
+    if (@locs and not @same_id_locs) {
+        my $first_id;
+        while (not defined $first_id and $i <= $#locs) {
+            $first_id = $locs[$i++]->seq_id;
+        }
+        @same_id_locs = ($first_id ? grep { $_->seq_id eq $first_id } @locs
+                      :              @locs);
+    }
+    return ( @same_id_locs ) ? $same_id_locs[-1]->max_end : undef;
 }
 
 =head2 end_pos_type
@@ -596,11 +653,37 @@ sub end_pos_type {
     my ($self,$value) = @_;
 
     if( defined $value ) {
-	$self->throw("Trying to set end_pos_type of a split location, ".
-				 "that is not possible, try manipulating the sub Locations");
+        $self->throw(  "Trying to set end_pos_type of a split location, "
+                     . "that is not possible, try manipulating the sub Locations");
+    }
+    # No sort by default because it breaks circular cut by origin features
+    # (like "join(2006035..2007700,1..257)"). Sorting is user responsability.
+    # Assume Start to be 1st segment start and End to be last segment End.
+    my @locs = $self->sub_Location(0);
+
+    # Return the End corresponding to the same sequence as the top ('master')
+    # if the top seq is undefined, take the first defined in a sublocation.
+    # Example: for "join(1..>100,J00194.1:100..202)", End pos type would be 'AFTER'
+    my $seqid = $self->seq_id;
+    my $i = 0;
+    while (not defined $seqid and $i <= $#locs) {
+        $seqid = $locs[$i++]->seq_id;
+    }
+
+    my @same_id_locs = ($seqid ? grep { $_->seq_id eq $seqid } @locs
+                     :           @locs);
+    # If there is a $seqid but no sublocations have the same id,
+    # try with the first id found in the sublocations instead,
+    # and if that fails return the last segment value
+    if (@locs and not @same_id_locs) {
+        my $first_id;
+        while (not defined $first_id and $i <= $#locs) {
+            $first_id = $locs[$i++]->seq_id;
+        }
+        @same_id_locs = ($first_id ? grep { $_->seq_id eq $first_id } @locs
+                      :              @locs);
     }
-    my @locs = $self->sub_Location();
-    return ( @locs ) ? $locs[0]->end_pos_type() : undef;    
+    return ( @same_id_locs ) ? $same_id_locs[-1]->end_pos_type : undef;
 }
 
 =head2 length
@@ -622,7 +705,7 @@ sub length {
     # of the lengths of the individual segments
     if (! defined $self->guide_strand) {
         for my $loc ( $self->sub_Location(0) ) {
-            $length += abs($loc->end - $loc->start) + 1
+            $length += abs($loc->end - $loc->start) + 1;
         }
     }
     else {
diff --git a/Bio/MolEvol/CodonModel.pm b/Bio/MolEvol/CodonModel.pm
index 8f85874..d5410b1 100644
--- a/Bio/MolEvol/CodonModel.pm
+++ b/Bio/MolEvol/CodonModel.pm
@@ -68,8 +68,10 @@ the web:
 
 Email jason-at-bioperl-dot-org
 
-This is based on work from Alisha Holloway at UC Davis and Corbin
-Jones at UNC-Chapel Hill.
+This is based on code and work from Alisha Holloway at UC Davis and Corbin
+Jones at UNC-Chapel Hill. See Population Genomics: Whole-Genome Analysis of Polymorphism and Divergence in Drosophila simulans
+http://dx.doi.org/http://journals.plos.org/plosbiology/article?id=10.1371/journal.pbio.0050310 and
+http://www.dpgp.org/
 
 =head1 APPENDIX
 
@@ -85,7 +87,7 @@ package Bio::MolEvol::CodonModel;
  Title   : codon_path
  Usage   : return a matrix of edit paths between codons
  Example : my $codon_path = Bio::MolEvol::CodonModel->codon_path;
- Returns : Hash reference
+ Returns : Hash reference, the array values for each codon path are num of Nonsyn & syn changes respectively.
  Args    : none
 
 
diff --git a/Bio/NexmlIO.pm b/Bio/NexmlIO.pm
index efd9ac7..269a3b8 100644
--- a/Bio/NexmlIO.pm
+++ b/Bio/NexmlIO.pm
@@ -135,22 +135,40 @@ my $nexml_fac = Bio::Nexml::Factory->new();
 =cut
 
 sub new {
- 	my($class, at args) = @_;
- 	my $self = $class->SUPER::new(@args);
-
-	my %params = @args;
-	my $file_string = $params{'-file'};
- 	
- 	#create unique ID by creating a scalar and using the memory address
- 	my $ID = bless \(my $dummy), "UniqueID";
- 	($self->{'_ID'}) = sprintf("%s",\$ID) =~ /(0x[0-9a-fA-F]+)/;
- 	
- 	unless ($file_string =~ m/^\>/) {
- 		$self->{'_doc'} = Bio::Phylo::IO->parse('-file' => $params{'-file'}, '-format' => 'nexml', '-as_project' => '1');
- 	}
- 	
- 	
- 	return $self;
+    my($class, at args) = @_;
+    my $self = $class->SUPER::new(@args);
+    
+    my %params = @args;
+    my $file_string = $params{'-file'};
+    
+    #create unique ID by creating a scalar and using the memory address
+    my $ID = bless \(my $dummy), "UniqueID";
+    ($self->{'_ID'}) = sprintf("%s",\$ID) =~ /(0x[0-9a-fA-F]+)/;
+    
+    unless ($file_string =~ m/^\>/) {
+        # Only pass filename if filehandle is not available,
+        # or "Bio::Phylo" will create a new filehandle that ends
+        # out of scope and can't be closed directly, leaving 2 open
+        # filehandles for the same file (so file can't be deleted)
+        my $file_arg;
+        my $file_value;
+        if (     exists $self->{'_filehandle'}
+            and defined $self->{'_filehandle'}
+            ) {
+            $file_arg   = '-handle';
+            $file_value = $self->{'_filehandle'};
+        }
+        else {
+            $file_arg   = '-file';
+            $file_value = $self->{'_file'};
+        }
+
+        $self->{'_doc'} = Bio::Phylo::IO->parse($file_arg     => $file_value,,
+                                                '-format'     => 'nexml',
+                                                '-as_project' => '1');
+    }
+    
+    return $self;
 }
 
 =head2 doc
@@ -535,4 +553,3 @@ sub extract_trees {
 }
 
 1;
-
diff --git a/Bio/Ontology/OBOEngine.pm b/Bio/Ontology/OBOEngine.pm
index 16460da..2997a6e 100644
--- a/Bio/Ontology/OBOEngine.pm
+++ b/Bio/Ontology/OBOEngine.pm
@@ -296,7 +296,7 @@ sub negatively_regulates_relationship {
  Function: Adds a Bio::Ontology::TermI to this engine
  Returns : true if the term was added and false otherwise (e.g., if the
            term already existed in the ontology engine)
- Args    : Bio::Ontology::TermI
+ Args    : Bio::Ontology::TermI`
 
 =cut
 
@@ -972,8 +972,7 @@ sub _get_id {
     if ( ref($term) ) {
 
         # use TermI standard API
-        $self->throw(
-            "Object doesn't implement Bio::Ontology::TermI. " . "Bummer." )
+        $self->throw( "Object doesn't implement Bio::Ontology::TermI" )
           unless $term->isa("Bio::Ontology::TermI");
         $id = $term->identifier();
 
@@ -986,10 +985,8 @@ sub _get_id {
         }
     }
 
-    return $id
-
-#        if $term->isa("Bio::Ontology::GOterm")||($id =~ /^[A-Z_]{1,8}:\d{1,}$/);
-      if $term->isa("Bio::Ontology::OBOterm") || ( $id =~ /^\w+:\w+$/ );
+    # if $term->isa("Bio::Ontology::GOterm")||($id =~ /^[A-Z_]{1,8}:\d{1,}$/);
+    return $id if $term->isa("Bio::Ontology::OBOterm") || ( $id =~ /^\w+:\w+$/ );
 
     # prefix with something if only numbers
     #     if($id =~ /^\d+$/) {
@@ -1000,8 +997,9 @@ sub _get_id {
     # we shouldn't have gotten here if it's at least a remotely decent ID
     $self->throw( ref($self) . ": non-standard identifier '$id'\n" )
       unless $id =~ /\|/;
+
     return $id;
-}    # _get_id
+} 
 
 # Helper for getting children and parent terms
 sub _get_child_parent_terms_helper {
diff --git a/Bio/OntologyIO/obo.pm b/Bio/OntologyIO/obo.pm
index 85d69c5..662a635 100644
--- a/Bio/OntologyIO/obo.pm
+++ b/Bio/OntologyIO/obo.pm
@@ -12,7 +12,7 @@
 
 =head1 NAME
 
-Bio::OntologyIO::obo - a parser for OBO flat-file format from Gene Ontology Consortium
+Bio::OntologyIO::obo
 
 =head1 SYNOPSIS
 
@@ -20,20 +20,37 @@ Bio::OntologyIO::obo - a parser for OBO flat-file format from Gene Ontology Cons
 
   # do not use directly -- use via Bio::OntologyIO
   my $parser = Bio::OntologyIO->new
-        ( -format       => "obo",
-          -file        =>  "gene_ontology.obo");
+        ( -format => "obo",
+          -file   =>  "gene_ontology.obo");
 
   while(my $ont = $parser->next_ontology()) {
   print "read ontology ",$ont->name()," with ",
-               scalar($ont->get_root_terms)," root terms, and ",
-               scalar($ont->get_all_terms)," total terms, and ",
-               scalar($ont->get_leaf_terms)," leaf terms\n";
+               scalar($ont->get_root_terms), " root terms, and ",
+               scalar($ont->get_all_terms),  " total terms, and ",
+               scalar($ont->get_leaf_terms), " leaf terms\n";
   }
 
-
 =head1 DESCRIPTION
 
-Needs Graph.pm from CPAN.
+Parser for OBO flat-file format. 'obo' example:
+
+ format-version: 1.2
+ ontology: so/dev/externalDerived
+ property_value: owl:versionInfo "$Revision: 80 $" xsd:string
+ default-namespace: SO
+
+ [Term]
+ id: SO_0000343
+ name: match
+ def: "A region of sequence, aligned to another sequence." []
+
+ [Term]
+ id: SO_0000039
+ name: match_part
+ def: "A part of a match." []
+ is_a: SO_0000343
+
+Specification: L<http://www.geneontology.org/GO.format.obo-1_2.shtml>.
 
 =head1 FEEDBACK
 
@@ -71,7 +88,6 @@ Sohel Merchant
 
 Email: s-merchant at northwestern.edu
 
-
 Address:
 
   Northwestern University
@@ -83,7 +99,8 @@ Address:
 =head2 CONTRIBUTOR
 
  Hilmar Lapp, hlapp at gmx.net
- Chris Mungall,   cjm at fruitfly.org
+ Chris Mungall, cjm at fruitfly.org
+ Brian Osborne, briano at bioteam.net
 
 =head1 APPENDIX
 
@@ -118,7 +135,7 @@ use base qw(Bio::OntologyIO);
  Function: Creates a new dagflat parser.
  Returns : A new dagflat parser object, implementing Bio::OntologyIO.
  Args    : -file      => a single ontology flat file holding the
-                          terms, descriptions and relationships
+                         terms, descriptions and relationships
            -ontology_name => the name of the ontology; if not specified the
                           parser will assign the name of the ontology as the
                           default-namespace header value from the OBO file.
@@ -132,24 +149,19 @@ See L<Bio::OntologyIO>.
 
 =cut
 
-# in reality, we let OntologyIO::new do the instantiation, and override
+# Let OntologyIO::new() do the instantiation, and override
 # _initialize for all initialization work
 sub _initialize {
     my ( $self, %arg ) = @_;
 
     my ( $file, $name, $eng ) = $self->_rearrange(
-        [
-            qw( FILE
-              ONTOLOGY_NAME
-              ENGINE)
-        ],
-        %arg
+        [ qw( FILE ONTOLOGY_NAME ENGINE) ], %arg
     );
 
     $self->SUPER::_initialize(%arg);
     delete $self->{'_ontologies'};
 
-    # ontology engine (and possibly name if it's an OntologyI)
+    # Ontology engine (and possibly name if it's an OntologyI)
     $eng = Bio::Ontology::OBOEngine->new() unless $eng;
     if ( $eng->isa("Bio::Ontology::OntologyI") ) {
         $self->ontology_name( $eng->name() );
@@ -158,8 +170,7 @@ sub _initialize {
     $self->_ont_engine($eng);
 
     $self->ontology_name($name) if $name;
-
-}    # _initialize
+}
 
 =head2 ontology_name
 
@@ -170,7 +181,6 @@ sub _initialize {
  Returns : value of ontology_name (a scalar)
  Args    : on set, new value (a scalar or undef, optional)
 
-
 =cut
 
 sub ontology_name {
@@ -199,25 +209,24 @@ sub ontology_name {
 sub parse {
     my $self = shift;
 
-    # setup the default term factory if not done by anyone yet
-    $self->term_factory(
-        Bio::Ontology::TermFactory->new( -type => "Bio::Ontology::OBOterm" ) )
+    # Setup the default term factory if not done by anyone yet
+    $self->term_factory(Bio::Ontology::TermFactory->new( -type => "Bio::Ontology::OBOterm" ) )
       unless $self->term_factory();
 
-    ## Parse the file header
+    # Parse the file header
     my $annotations_collection = $self->_header();
 
-    # create the default ontology object itself
+    # Create the default ontology object itself
     my $ont = Bio::Ontology::Ontology->new(
         -name   => $self->ontology_name(),
         -engine => $self->_ont_engine()
     );
 
-    ## Assign the file headers
+    # Assign the file headers
     $ont->annotation($annotations_collection);
 
-    # set up the ontology of the relationship types
-    foreach (
+    # Set up the ontology of the relationship types
+    for (
         $self->_part_of_relationship(),
         $self->_is_a_relationship(),
         $self->_related_to_relationship(),
@@ -229,96 +238,85 @@ sub parse {
         $_->ontology($ont);
     }
 
-##################################
     $self->_add_ontology($ont);
-##################################
 
-    ### Adding new terms
+    # Adding new terms
     while ( my $term = $self->_next_term() ) {
 
-        ### CHeck if the terms has a valid ID and NAME otherwise ignore the term
+        # Check if the terms has a valid ID and NAME otherwise ignore the term
         if ( !$term->identifier() || !$term->name() ) {
             $self->throw( "OBO File Format Error on line "
                   . $self->{'_current_line_no'}
-                  . " \nThe term does not have a id/name tag. This term will be ignored.\n"
+                  . "\nThe term does not have a id/name tag. This term will be ignored."
             );
             next;
         }
 
-				#print $term->identifier(),"\t",$term->name(),"\n";
-
-        my $new_ontology_flag    = 1;
+        my $new_ontology_flag = 1;
         my $ontologies_array_ref = $self->{'_ontologies'};
-        foreach my $ontology (@$ontologies_array_ref) {
-            my ($oname, $t_ns) = ($ontology->name(), $term->namespace() );
-            next unless (defined($oname) && defined($t_ns));
+
+        for my $ontology ( @$ontologies_array_ref ) {
+            my ($oname, $t_ns) = ( $ontology->name, $term->namespace );
+            next unless ( defined($oname) && defined($t_ns) );
             if ( $oname eq $t_ns ) {
-                ### No need to create new ontology
+                # No need to create new ontology
                 $new_ontology_flag = 0;
-                $ont               = $ontology;
+                $ont = $ontology;
             }
         }
 
-        if ( $new_ontology_flag && $term->namespace() ) {
+        if ( $new_ontology_flag && $term->namespace ) {
             my $new_ont = Bio::Ontology::Ontology->new(
-                -name   => $term->namespace(),
-                -engine => $self->_ont_engine()
+                -name   => $term->namespace,
+                -engine => $self->_ont_engine
             );
             $new_ont->annotation($annotations_collection);
             $self->_add_ontology($new_ont);
             $ont = $new_ont;
         }
 
-
         $self->_add_term( $term, $ont );
 
-        #### Addding the IS_A relationship
-        my $isa_parents_array_ref = $self->{'_isa_parents'};
-        foreach my $parent_term (@$isa_parents_array_ref) {
-            ### Check if parent exist, if not then add the term to the graph.
-            if ( !( $self->_has_term($parent_term) ) ) {
-                $self->_add_term( $parent_term, $ont );
+        # Adding the IS_A relationship
+        for my $parent_term ( @{$self->{'_isa_parents'}} ) {
+            # Check if parent exists, if not then add the term to the graph.
+            if ( ! $self->_has_term($parent_term) ) {
+                $self->_add_term( $parent_term, $ont ); # !
             }
 
             $self->_add_relationship( $parent_term, $term,
                 $self->_is_a_relationship(), $ont );
         }
 
-        #### Addding the other relationships like part_of, realted_to, develpos_from
-        my $relationship_hash_ref = $self->{'_relationships'};
-        foreach my $relationship ( keys %$relationship_hash_ref ) {
+        # Adding the other relationships like part_of, related_to, develops_from
+        for my $relationship ( keys %{$self->{'_relationships'}} ) {
             my $reltype;
-            #### Check if relationship exist, if not add it.
+            # Check if relationship exists, if not add it
             if ( $self->_ont_engine->get_relationship_type($relationship) ) {
-                $reltype =
-                  $self->_ont_engine->get_relationship_type($relationship);
+                $reltype = $self->_ont_engine->get_relationship_type($relationship);
             }
             else {
-                $self->_ont_engine->add_relationship_type( $relationship,
-                    $ont );
-                $reltype =
-                  $self->_ont_engine->get_relationship_type($relationship);
+                $self->_ont_engine->add_relationship_type( $relationship, $ont );
+                $reltype = $self->_ont_engine->get_relationship_type($relationship);
             }
 
-            #### Check if the id already exist in the graph
-            my $id_array_ref = $$relationship_hash_ref{$relationship};
-            foreach my $id (@$id_array_ref) {
+            # Check if the id already exists in the graph
+            for my $id ( @{$self->{'_relationships'}->{$relationship}} ) {
                 my $parent_term = $self->_create_term_object();
                 $parent_term->identifier($id);
                 $parent_term->ontology($ont);
 
-                if ( !( $self->_has_term($parent_term) ) ) {
+                if ( ! $self->_has_term($parent_term) ) {
                     $self->_add_term( $parent_term, $ont );
                 }
 
                 $self->_add_relationship( $parent_term, $term, $reltype, $ont );
             }
-
         }
-
     }
+
     return $self->_ont_engine();
-}    # parse
+}
 
 =head2 next_ontology
 
@@ -331,16 +329,15 @@ sub parse {
            there is no more ontology in the input.
  Args    :
 
-
 =cut
 
 sub next_ontology {
     my $self = shift;
 
-    # parse if not done already
+    # Parse if not done already
     $self->parse() unless exists( $self->{'_ontologies'} );
 
-    # return next available ontology
+    # Return next available ontology
     if ( exists( $self->{'_ontologies'} ) ) {
         my $ont = shift( @{ $self->{'_ontologies'} } );
         if ($ont) {
@@ -369,7 +366,6 @@ sub next_ontology {
  Returns : none
  Args    : none
 
-
 =cut
 
 sub close {
@@ -380,90 +376,83 @@ sub close {
 }
 
 # INTERNAL METHODS
-# ----------------
 
 sub _add_ontology {
     my $self = shift;
     $self->{'_ontologies'} = [] unless exists( $self->{'_ontologies'} );
-    foreach my $ont (@_) {
-        $self->throw(
-            ref($ont) . " does not implement Bio::Ontology::OntologyI" )
-          unless ref($ont) && $ont->isa("Bio::Ontology::OntologyI");
-
-        # the ontology name may have been auto-discovered while parsing
+    for my $ont (@_) {
+        $self->throw( ref($ont) . " does not implement Bio::Ontology::OntologyI" )
+            unless ref($ont) && $ont->isa("Bio::Ontology::OntologyI");
+        # The ontology name may have been auto-discovered while parsing
         # the file
         $ont->name( $self->ontology_name ) unless $ont->name();
         push( @{ $self->{'_ontologies'} }, $ont );
     }
 }
 
-# This simply delegates. See OBOEngine.
+# This simply delegates. See Ontology::OBOEngine::add_term.
 sub _add_term {
     my ( $self, $term, $ont ) = @_;
     $term->ontology($ont) if $ont && ( !$term->ontology );
     $self->_ont_engine()->add_term($term);
-}    # _add_term
+}
 
 # This simply delegates. See OBOEngine
 sub _part_of_relationship {
     my $self = shift;
 
     return $self->_ont_engine()->part_of_relationship(@_);
-}    # _part_of_relationship
+}
 
 # This simply delegates. See OBOEngine
 sub _is_a_relationship {
     my $self = shift;
 
     return $self->_ont_engine()->is_a_relationship(@_);
-}    # _is_a_relationship
+}
 
 # This simply delegates. See OBOEngine
 sub _related_to_relationship {
     my $self = shift;
 
     return $self->_ont_engine()->related_to_relationship(@_);
-}    # _is_a_relationship
-
+}
 
 # This simply delegates. See OBOEngine
 sub _regulates_relationship {
     my $self = shift;
 
     return $self->_ont_engine()->regulates_relationship(@_);
-}    # _part_of_relationship
+}
 
 # This simply delegates. See OBOEngine
 sub _positively_regulates_relationship {
     my $self = shift;
 
     return $self->_ont_engine()->positively_regulates_relationship(@_);
-}    # _part_of_relationship
-
+}
 
 # This simply delegates. See OBOEngine
 sub _negatively_regulates_relationship {
     my $self = shift;
 
     return $self->_ont_engine()->negatively_regulates_relationship(@_);
-}    # _part_of_relationship
+}
 
 # This simply delegates. See OBOEngine
 sub _add_relationship {
     my ( $self, $parent, $child, $type, $ont ) = @_;
-
-    # note the triple terminology (subject,predicate,object) corresponds to
+    # Note the triple terminology (subject,predicate,object) corresponds to
     # (child,type,parent)
     $self->_ont_engine()->add_relationship( $child, $type, $parent, $ont );
-
-}    # _add_relationship
+}
 
 # This simply delegates. See OBOEngine
 sub _has_term {
     my $self = shift;
 
     return $self->_ont_engine()->has_term(@_);
-}    # _add_term
+}
 
 # Holds the OBO engine to be parsed into
 sub _ont_engine {
@@ -473,17 +462,17 @@ sub _ont_engine {
         $self->{"_ont_engine"} = $value;
     }
 
-    return $self->{"_ont_engine"};
-}    # _ont_engine
+    $self->{"_ont_engine"};
+}
 
 # Removes the escape chracters from the file
 sub _filter_line {
     my ( $self, $line ) = @_;
 
     chomp($line);
-    $line =~ tr [\200-\377]
-          [\000-\177];    # see 'man perlop', section on tr/
-                          # weird ascii characters should be excluded
+    $line =~ tr [\200-\377] [\000-\177];
+                               # see 'man perlop', section on tr/
+                               # weird ascii characters should be excluded
     $line =~ tr/\0-\10//d;     # remove weird characters; ascii 0-8
                                # preserve \11 (9 - tab) and \12 (10-linefeed)
     $line =~ tr/\13\14//d;     # remove weird characters; 11,12
@@ -502,7 +491,7 @@ sub _filter_line {
 
 # Parses the header
 sub _header {
-    my $self                  = shift;
+    my $self = shift;
     my $annotation_collection = Bio::Annotation::Collection->new();
     my ( $tag, $value );
     my $line_counter = 0;
@@ -513,32 +502,44 @@ sub _header {
     while ( my $line = $self->_readline() ) {
         ++$line_counter;
         my $line = $self->_filter_line($line);
+
         if ( !$line ) {
-            if ( !$format_version_header_flag || !$default_namespace_header_flag) {
-                $self->throw(
-"OBO File Format Error - \nCannot find tag format-version and/ default-namespace . These are required header.\n"
-                );
+            if ( !$format_version_header_flag ) {
+                $self->throw("Format Error - Cannot find tag format-version." . 
+                             "This is required in header" );
             }
 
             $self->{'_current_line_no'} = $line_counter;
             return $annotation_collection;
         }
 
-        ### CHeck if there is a header
-        if($line =~ /\[\w*\]/) {
-                $self->throw(
-"OBO File Format Error - \nCannot find tag format-version. Thi ia a required header.\n"
-                );
+        # Check if there is a header
+        if ( $line =~ /\[\w*\]/ ) {
+                $self->throw("Format Error - Cannot find tag format-version." . 
+                             "This is required in header." );
           }
 
-
-        ### If the line is not null, check it contains atleasdt one colon
+        # If the line is not null, check it contains at least one colon
         $self->_check_colon( $line, $line_counter );
 
-        ### Thsse ar the allowed headers. Any other headers will be ignored
-        if ( $line =~
-/^(\[|format-version:|typeref:|version:|date:|saved-by:|auto-generated-by:|default-namespace:|remark:|subsetdef:)/
-          )
+        # These are the allowed headers. Any other headers will be ignored
+        if ( $line =~ /^(\[|format-version:
+                           |data-version:
+                           |typeref:
+                           |version:
+                           |date:
+                           |saved-by:
+                           |auto-generated-by:
+                           |default-namespace:
+                           |remark:
+                           |subsetdef:
+                           |import: 
+                           |synonymtypedef:
+                           |idspace:
+                           |default-relationship-id-prefix:
+                           |id-mapping:
+                           )/x
+            )
         {
             if ( $line =~ /^([\w\-]+)\:\s*(.*)/ ) {
                 ( $tag, $value ) = ( $1, $2 );
@@ -553,77 +554,86 @@ sub _header {
             my $header = Bio::Annotation::SimpleValue->new( -value => $value );
             $annotation_collection->add_Annotation( $tag, $header );
 
-            #### Assign the Ontology name as the value of the default-namespace header
+            # Assign the Ontology name as the value of the default-namespace header
             if ( $tag =~ /default-namespace/i ) {
-
                 $self->ontology_name($value);
             }
-
         }
-
     }
-
 }
 
-### Parses each stanza of the file
+# Parses each stanza of the file
 sub _next_term {
-    my $self             = shift;
-    my $term             ;
+    my $self = shift;
+    my $term;
     my $skip_stanza_flag = 1;
     my $line_counter     = $self->{'_current_line_no'};
 
     while ( my $line = $self->_readline() ) {
-        #print $line."\n";
         ++$line_counter;
         my $line = $self->_filter_line($line);
+
         if ( !$line && $term ) {
             $self->{'_current_line_no'} = $line_counter;
             return $term;
         }
 
-        if ( ( $line =~ /^\[(\w+)\]\s*(.*)/ ) ) {    #New stanza
-
+        if ( ( $line =~ /^\[(\w+)\]\s*(.*)/ ) ) { # New stanza
             if ( uc($1) eq "TERM" ) {
-
                 $term             = $self->_create_term_object;
                 $skip_stanza_flag = 0;
-                ### Reset the relationships after each stanza
+
+                # Reset the relationships after each stanza
                 $self->{'_relationships'} = {};
                 $self->{'_isa_parents'}   = undef;
             }
             elsif ( uc($1) eq "TYPEDEF" ) {
                 $skip_stanza_flag = 1;
-                ### Check if this typedef is already defined by the relationship
+                # Check if this typedef is already defined by the relationship
             }
             else {
                 $skip_stanza_flag = 1;
-                $self->warn(
-"OBO File Format Warning on line $line_counter $line \nUnrecognized stanza type found. Skipping this stanza.\n"
-                );
+                $self->warn("OBO File Format Warning on line $line_counter $line\n"
+                          . "Unrecognized stanza type found. Skipping this stanza." );
             }
             next;
         }
 
-        ### If the line is not null, check it contains atleasdt one colon
+        # If the line is not null, check it contains at least one colon
         $self->_check_colon( $line, $line_counter );
 
-        ### if there is any tag value other thn the list below move to the next tag
-        next
-          if (
-            (
-                $line !~
-/^(\[|id:|name:|is_a:|relationship:|namespace:|is_obsolete:|alt_id:|def:|xref_analog:|exact_synonym:|broad_synonym:|related_synonym:|synonym:|comment:|xref:)/
-            )
-            || $skip_stanza_flag
-          );
-
-        if ( $line =~ /^([\w\-]+)\:\s*(.*)/ ) {    #TAg Value pair
+        # If there is any tag value other than the list below move to the next tag
+        next if (( $line !~ /^(\[|id:
+                                 |is_anonymous:
+                                 |name:
+                                 |namespace:
+                                 |alt_id:
+                                 |def:
+                                 |comment:
+                                 |subset:
+                                 |synonym:
+                                 |xref:
+                                 |is_a:
+                                 |intersection_of:
+                                 |union_of:
+                                 |disjoint_from:
+                                 |relationship:
+                                 |is_obsolete:
+                                 |replaced_by:
+                                 |consider:
+                                 |created_by:
+                                 |creation_date:
+                               )/x
+                ) || $skip_stanza_flag );
+
+        # Tag/value pair
+        if ( $line =~ /^([\w\-]+)\:\s*(.*)/ ) {
             my ( $tag, $val ) = ( $1, $2 );
 
-            ### If no value for the tag thrown a warning
+            # If no value for the tag throw a warning
             if ( !$val ) {
-                $self->warn(
-"OBO File Format Warning on line $line_counter $line \nTag has no value\n"
+                $self->warn("OBO File Format Warning on line $line_counter $line\n" .
+                            "Tag has no value."
                 );
             }
 
@@ -633,23 +643,21 @@ sub _next_term {
             $val2 =~ s/\\,/,/g;
             $tag = uc($tag);
             if ( $tag eq "ID" ) {
-
                 $term->identifier($val);
                 if ( $self->_has_term($term) ) {
                     $term = $self->_ont_engine()->get_terms($val);
                 }
-
             }
             elsif ( $tag eq "NAME" ) {
                 $term->name($val);
             }
             elsif ( $tag eq "XREF_ANALOG" ) {
                 if ( !$term->has_dbxref($val) ) {
-                    $term->add_dbxref(-dbxrefs => $self->_to_annotation([$val]));
+                    $term->add_dbxref(-dbxrefs => $self->_to_annotation( [$val] ) );
                 }
             }
             elsif ( $tag eq "XREF_UNKNOWN" ) {
-                $term->add_dbxref(-dbxrefs => $self->_to_annotation([$val]));
+                $term->add_dbxref(-dbxrefs => $self->_to_annotation( [$val] ) );
             }
             elsif ( $tag eq "NAMESPACE" ) {
                 $term->namespace($val);
@@ -658,24 +666,22 @@ sub _next_term {
                 my ( $defstr, $parts ) = $self->_extract_qstr($val);
                 $term->definition($defstr);
                 my $ann = $self->_to_annotation($parts);
-                $term->add_dbxref(-dbxrefs => $ann);
+                $term->add_dbxref( -dbxrefs => $ann );
             }
-            elsif ( $tag =~ /(\w*)synonym/i ) {
-                #$val =~ s/['"\[\]]//g; #NML commented out b/c need quotes
+            elsif ( $tag eq "SYNONYM" ) {
                 $term->add_synonym($val);
             }
             elsif ( $tag eq "ALT_ID" ) {
                 $term->add_secondary_id($val);
             }
-	    elsif ( $tag =~ /XREF/i ) {
-		$term->add_secondary_id($val);
-	    }
+            elsif ( $tag =~ /XREF/i ) {
+                $term->add_secondary_id($val);
+            }
             elsif ( $tag eq "IS_OBSOLETE" ) {
-
                 if ( $val eq 'true' ) {
                     $val = 1;
                 }
-                if ( $val eq 'false' ) {
+                elsif ( $val eq 'false' ) {
                     $val = 0;
                 }
                 $term->is_obsolete($val);
@@ -687,36 +693,25 @@ sub _next_term {
                 $self->_handle_relationship_tag($val);
             }
             elsif ( $tag eq "IS_A" ) {
-
                 $val =~ s/ //g;
                 my $parent_term = $self->_create_term_object();
                 $parent_term->identifier($val);
-
-                if ( $self->{'_isa_parents'} ) {
-                    my $isa_parents_array_ref = $self->{'_isa_parents'};
-                    push( @$isa_parents_array_ref, $parent_term );
-                }
-                else {
-                    my @terms_array;
-                    push( @terms_array, $parent_term );
-                    $self->{'_isa_parents'} = \@terms_array;
-                }
+                push @{ $self->{'_isa_parents'} }, $parent_term;
             }
         }
     }
-    return $term;
+
+    $term;
 }
 
+
 # Creates a Bio::Ontology::OBOterm object
 sub _create_term_object {
-
     my ($self) = @_;
     my $term = $self->term_factory->create_object();
-    return $term;
-
+    $term;
 }
 
-#
 sub _extract_quals {
     my ( $self, $str ) = @_;
 
@@ -744,7 +739,7 @@ sub _extract_quals {
         return ( $str, {} );
     }
 }
-#
+
 sub _extract_qstr {
     my ( $self, $str ) = @_;
 
@@ -758,7 +753,7 @@ sub _extract_qstr {
 
     my @extra = ();
 
-    # eg synonym: "foo" EXACT [...]
+    # e.g. synonym: "foo" EXACT [...]
     if ( $rem =~ /(\w+)\s+(\[.*)/ ) {
         $rem = $2;
         push( @extra, split( ' ', $1 ) );
@@ -775,9 +770,10 @@ sub _extract_qstr {
       map { $self->_split_on_comma($_) } @parts;
 
     $txt =~ s/\\//g;
-    return ( $txt, \@parts, \@extra );
+
+    ( $txt, \@parts, \@extra );
 }
-#
+
 sub _split_on_comma {
     my ( $self, $str ) = @_;
     my @parts = ();
@@ -788,6 +784,7 @@ sub _split_on_comma {
         $str =~ s/,\s*$//;
     }
     unshift( @parts, $str );
+
     return map { s/\\//g; $_ } @parts;
 }
 
@@ -795,8 +792,8 @@ sub _split_on_comma {
 sub _check_colon {
     my ( $self, $line, $line_no ) = @_;
     if ( $line && !( $line =~ /:/ ) ) {
-        $self->throw(
-"OBO File Format Error on line $line_no $line - \nCannot find key-terminating colon\n"
+        $self->throw("OBO File Format Error on line $line_no $line\n" . 
+                     "Cannot find key-terminating colon"
         );
     }
 }
@@ -807,35 +804,20 @@ sub _handle_relationship_tag {
     my @parts        = split( / /, $val );
     my $relationship = uc($parts[0]);
     my $id           = $parts[1] =~ /\^(w+)\s+\!/ ? $1 : $parts[1];
-    my $parent_term  = $self->_create_term_object();
-    $parent_term->identifier($id);
-
-    if ( my $realtionships_hash = $self->{'_relationships'} ) {
-        my $id_array_ref = $$realtionships_hash{$relationship};
-        if ( !$id_array_ref ) {
-            my @ids;
-            push( @ids, $id );
-            $$realtionships_hash{$relationship} = \@ids;
-
-        }
-        else {
-            push( @$id_array_ref, $id );
-        }
-
-    }
-
+    push @{$self->{_relationships}->{$relationship}}, $id;
 }
 
-# convert simple strings to Bio::Annotation::DBLinks
+# Convert simple strings to Bio::Annotation::DBLinks
 sub _to_annotation {
     my ($self , $links) = @_;
     return unless $links;
     my @dbxrefs;
     for my $string (@{$links}) {
-        my ($db, $id) = split(':',$string);
+        my ($db, $id) = split(':',$string,2);
         push @dbxrefs, Bio::Annotation::DBLink->new(-database => $db, -primary_id => $id);
     }
-    return \@dbxrefs;
+
+    \@dbxrefs;
 }
 
 1;
diff --git a/Bio/PrimarySeqI.pm b/Bio/PrimarySeqI.pm
index 4f70168..d699134 100644
--- a/Bio/PrimarySeqI.pm
+++ b/Bio/PrimarySeqI.pm
@@ -464,6 +464,7 @@ sub trunc {
     my $out;
     if (   $self->isa('Bio::Seq::LargePrimarySeq')
         or $self->isa('Bio::Seq::LargeSeq')
+        or $self->isa('Bio::Seq::RichSeq')
         ) {
         my ($seqclass, $opts) = $self->_setup_class;
         $out = $seqclass->new(
@@ -909,6 +910,7 @@ sub _find_orfs_nucleotide {
 
     # go through each base of the sequence, and each reading frame for each base
     my $seqlen = CORE::length $sequence;
+    my @start_frame_order;
     for( my $j = 0; $j <= $seqlen-3; $j++ ) {
         my $frame = $j % 3;
 
@@ -921,13 +923,13 @@ sub _find_orfs_nucleotide {
                 my @this_orf = ( $current_orf_start[$frame], $j+3, undef, $frame );
                 my $this_orf_length = $this_orf[2] = ( $this_orf[1] - $this_orf[0] );
 
-                $self->warn( "Translating partial ORF "
+		if ($first_only && $frame == $start_frame_order[0]) {
+		  $self->warn( "Translating partial ORF "
                                  .$self->_truncate_seq( $self->_orf_sequence( $sequence, \@this_orf ))
-                                 .' from end of nucleotide sequence'
-                            )
-                    if $first_only && $is_last_codon_in_frame;
-
-                return \@this_orf if $first_only;
+				   .' from end of nucleotide sequence'
+				  ) if $is_last_codon_in_frame;
+		  return \@this_orf;
+		}
                 push @orfs, \@this_orf;
                 $current_orf_start[$frame] = -1;
             }
@@ -935,6 +937,7 @@ sub _find_orfs_nucleotide {
         # if this is a start codon
         elsif ( $is_start->($this_codon) ) {
             $current_orf_start[$frame] = $j;
+	    push @start_frame_order, $frame;
         }
     }
 
diff --git a/Bio/Restriction/Enzyme.pm b/Bio/Restriction/Enzyme.pm
index 6b7bc12..7a18baf 100644
--- a/Bio/Restriction/Enzyme.pm
+++ b/Bio/Restriction/Enzyme.pm
@@ -527,11 +527,13 @@ ACCTGC(4/8) is at 6+4 i.e. 10.
 =cut
 
 sub site {
-    my ($self, $site) = @_;
-    if ( $site ) {
+    my ( $self, $site ) = @_;
+    
+    if ($site) {
 
         $self->throw("Unrecognized characters in site: [$site]")
             if $site =~ /[^ATGCMRWSYKVHDBN\^]/i;
+
         # we may have to redefine this if there is a ^ in the sequence
 
         # first, check and see if we have a cut site in the sequence
@@ -539,22 +541,23 @@ sub site {
 
         $self->{'_site'} = $site;
 
-        my ($first, $second) = $site =~ /(.*)\^(.*)/;
+        my ( $first, $second ) = $site =~ /(.*)\^(.*)/;
         $site = "$1$2" if defined $first;
         $self->{'_site'} = $site;
 
-
         # now set the recognition site as a new Bio::PrimarySeq object
         # we need it before calling cut() and complementary_cut()
-        $self->{_seq} = Bio::PrimarySeq->new(-id=>$self->name,
-                                            -seq=>$site,
-                                            -verbose=>$self->verbose,
-                                            -alphabet=>'dna');
-
-        if (defined $first) {
-            $self->cut(length $first);
-            $self->complementary_cut(length $second);
-	    $self->revcom_site();
+        $self->{_seq} = Bio::PrimarySeq->new(
+            -id       => $self->name,
+            -seq      => $site,
+            -verbose  => $self->verbose,
+            -alphabet => 'dna'
+        );
+
+        if ( defined $first ) {
+            $self->cut( length $first );
+            $self->complementary_cut( length $second );
+            $self->revcom_site();
         }
     }
     return $self->{'_site'};
diff --git a/Bio/Restriction/IO/prototype.pm b/Bio/Restriction/IO/prototype.pm
index bed07bb..6549a98 100644
--- a/Bio/Restriction/IO/prototype.pm
+++ b/Bio/Restriction/IO/prototype.pm
@@ -76,7 +76,6 @@ package Bio::Restriction::IO::prototype;
 use vars qw(%WITH_REFM_FIELD);
 use strict;
 
-#use Bio::Restriction::IO;
 use Bio::Restriction::Enzyme;
 use Bio::Restriction::EnzymeCollection;
 
@@ -98,6 +97,8 @@ sub read {
     my $self = shift;
     my $coll = Bio::Restriction::EnzymeCollection->new(-empty => 1);
     my ($seentop, $last_type);
+    
+    ENZYME:
     while (defined (my $line = $self->_readline)) {
         chomp $line;
         next unless $line;
@@ -119,6 +120,12 @@ sub read {
         $site =~ s/\s+//g;
         
         my $precut;
+        if ($site =~ /,/) {
+            $self->warn("Split site support not present for Bio::Restriction::Enzyme yet,".
+                        "skipping $enzyme [$site]");
+            next ENZYME;
+        }
+        
         if ($site =~ m/^\((\d+\/\d+)\)[RYATGCN]+/) {
             $precut=$1;
             $site =~ s/\($precut\)//;
diff --git a/Bio/Root/Build.pm b/Bio/Root/Build.pm
index 51f0e24..1253f4a 100644
--- a/Bio/Root/Build.pm
+++ b/Bio/Root/Build.pm
@@ -1,12 +1,8 @@
 package Bio::Root::Build;
+use Bio::Root::Version;
 use strict;
 use warnings;
 
-# ABSTRACT: a common Module::Build subclass base for BioPerl distributions
-# AUTHOR:   Sendu Bala <bix at sendu.me.uk>
-# OWNER:    Sendu Bala
-# LICENSE:  Perl_5
-
 =head1 SYNOPSIS
 
   ...TO BE ADDED
@@ -29,21 +25,24 @@ those for Module::Build, and so caused serious issues with newer versions
 automatic installation of prereq modules via CPAN were also removed as they do
 not work with more modern perl tools such as perlbrew and cpanm.
 
+=head1 AUTHOR Sendu Bala
+
 =cut
 
 BEGIN {
     # we really need Module::Build to be installed
-    eval "use base 'Module::Build'; 1" or die "This package requires Module::Build v0.2805 or greater to install itself.\n$@";
+    eval "use base 'Module::Build'; 1" or die "This package requires Module::Build v0.42 or greater to install itself.\n$@";
 
     # ensure we'll be able to reload this module later by adding its path to inc
     use Cwd;
     use lib Cwd::cwd();
 }
 
-our $VERSION = '1.006924'; # pre-1.7
 our @extra_types = qw(options excludes_os feature_requires test); # test must always be last in the list!
 our $checking_types = "requires|conflicts|".join("|", @extra_types);
 
+our $VERSION = $Bio::Root::Version::VERSION;
+
 =head2 find_pm_files
 
 Our modules are in Bio, not lib
@@ -153,356 +152,6 @@ sub script_files {
     return $_ = { map {$_,1} @{$self->rscan_dir('scripts', qr/\.PLS$|\.pl$/)} };
 }
 
-# extended to handle extra checking types
-#sub features {
-#    my $self = shift;
-#    my $ph = $self->{phash};
-#
-#    if (@_) {
-#        my $key = shift;
-#        if ($ph->{features}->exists($key)) {
-#            return $ph->{features}->access($key, @_);
-#        }
-#
-#        if (my $info = $ph->{auto_features}->access($key)) {
-#            my $failures = $self->prereq_failures($info);
-#            my $disabled = grep( /^(?:\w+_)?(?:$checking_types)$/, keys %$failures ) ? 1 : 0;
-#            return !$disabled;
-#        }
-#
-#        return $ph->{features}->access($key, @_);
-#    }
-#
-#    # No args - get the auto_features & overlay the regular features
-#    my %features;
-#    my %auto_features = $ph->{auto_features}->access();
-#    while (my ($name, $info) = each %auto_features) {
-#        my $failures = $self->prereq_failures($info);
-#        my $disabled = grep( /^(?:\w+_)?(?:$checking_types)$/, keys %$failures ) ? 1 : 0;
-#        $features{$name} = $disabled ? 0 : 1;
-#    }
-#    %features = (%features, $ph->{features}->access());
-#
-#    return wantarray ? %features : \%features;
-#}
-#*feature = \&features;
-
-# overridden to fix a stupid bug in Module::Build and extended to handle extra
-# checking types
-#sub check_autofeatures {
-#    my ($self) = @_;
-#    my $features = $self->auto_features;
-#
-#    return unless %$features;
-#
-#    $self->log_info("Checking features:\n");
-#
-#    my $max_name_len = 0; # this wasn't set to 0 in Module::Build, causing warning in next line
-#    $max_name_len = ( length($_) > $max_name_len ) ? length($_) : $max_name_len for keys %$features;
-#
-#    while (my ($name, $info) = each %$features) {
-#        $self->log_info("  $name" . '.' x ($max_name_len - length($name) + 4));
-#        if ($name eq 'PL_files') {
-#            print "got $name => $info\n";
-#            print "info has:\n";
-#            while (my ($key, $val) = each %$info) {
-#                print "  $key => $val\n";
-#            }
-#        }
-#
-#        if ( my $failures = $self->prereq_failures($info) ) {
-#            my $disabled = grep( /^(?:\w+_)?(?:$checking_types)$/, keys %$failures ) ? 1 : 0;
-#            $self->log_info( $disabled ? "disabled\n" : "enabled\n" );
-#
-#            my $log_text;
-#            while (my ($type, $prereqs) = each %$failures) {
-#                while (my ($module, $status) = each %$prereqs) {
-#                    my $required = ($type =~ /^(?:\w+_)?(?:requires|conflicts)$/) ? 1 : 0;
-#                    my $prefix = ($required) ? '-' : '*';
-#                    $log_text .= "    $prefix $status->{message}\n";
-#                }
-#            }
-#            $self->log_warn($log_text) if $log_text && ! $self->quiet;
-#        }
-#        else {
-#            $self->log_info("enabled\n");
-#        }
-#    }
-#
-#    $self->log_info("\n");
-#}
-
-# TODO: STDERR output redirect is causing some installations to fail, commenting
-# out until a fix is in place
-
-# overriden just to hide pointless ugly warnings
-#sub check_installed_status {
-#    my $self = shift;
-#
-#    open (my $olderr, ">&". fileno(STDERR));
-#    my $null = ($^O =~ m/mswin/i) ? 'NUL' : '/dev/null';
-#    open(STDERR, $null);
-#    my $return = $self->SUPER::check_installed_status(@_);
-#    open(STDERR, ">&". fileno($olderr));
-#    return $return;
-#}
-
-# extend to handle option checking (which takes an array ref) and code test
-# checking (which takes a code ref and must return a message only on failure)
-# and excludes_os (which takes an array ref of regexps).
-# also handles more informative output of recommends section
-
-#sub prereq_failures {
-#    my ($self, $info) = @_;
-#
-#    my @types = (@{ $self->prereq_action_types }, @extra_types);
-#    $info ||= {map {$_, $self->$_()} @types};
-#
-#    my $out = {};
-#    foreach my $type (@types) {
-#        my $prereqs = $info->{$type} || next;
-#
-#        my $status = {};
-#        if ($type eq 'test') {
-#            unless (keys %$out) {
-#                if (ref($prereqs) eq 'CODE') {
-#                    $status->{message} = &{$prereqs};
-#
-#                    # drop the code-ref to avoid Module::Build trying to store
-#                    # it with Data::Dumper, generating warnings. (And also, may
-#                    # be expensive to run the sub multiple times.)
-#                    $info->{$type} = $status->{message};
-#                }
-#                else {
-#                    $status->{message} = $prereqs;
-#                }
-#                $out->{$type}{'test'} = $status if $status->{message};
-#            }
-#        }
-#        elsif ($type eq 'options') {
-#            my @not_ok;
-#            foreach my $wanted_option (@{$prereqs}) {
-#                unless ($self->args($wanted_option)) {
-#                    push(@not_ok, $wanted_option);
-#                }
-#            }
-#
-#            if (@not_ok > 0) {
-#                $status->{message} = "Command line option(s) '@not_ok' not supplied";
-#                $out->{$type}{'options'} = $status;
-#            }
-#        }
-#        elsif ($type eq 'excludes_os') {
-#            foreach my $os (@{$prereqs}) {
-#                if ($^O =~ /$os/i) {
-#                    $status->{message} = "This feature isn't supported under your OS ($os)";
-#                    $out->{$type}{'excludes_os'} = $status;
-#                    last;
-#                }
-#            }
-#        }
-#        else {
-#            while ( my ($modname, $spec) = each %$prereqs ) {
-#                $status = $self->check_installed_status($modname, $spec);
-#                next if $status->{ok};
-#
-#                if ($type =~ /^(?:\w+_)?conflicts$/) {
-#                    $status->{conflicts} = delete $status->{need};
-#                    $status->{message} = "$modname ($status->{have}) conflicts with this distribution";
-#                }
-#                elsif ($type =~ /^(?:\w+_)?recommends$/) {
-#                    my ($preferred_version, $why, $by_what) = split("/", $spec);
-#                    $by_what = join(", ", split(",", $by_what));
-#                    $by_what =~ s/, (\S+)$/ and $1/;
-#
-#                    $status->{message} = (!ref($status->{have}) && $status->{have} eq '<none>'
-#                                  ? "Optional prerequisite $modname is not installed"
-#                                  : "$modname ($status->{have}) is installed, but we prefer to have $preferred_version");
-#
-#                    $status->{message} .= "\n   (wanted for $why, used by $by_what)";
-#
-#                    if ($by_what =~ /\[circular dependency!\]/) {
-#                        $preferred_version = -1;
-#                    }
-#
-#                    #my $installed = $self->install_optional($modname, $preferred_version, $status->{message});
-#                    #next if $installed eq 'ok';
-#                    #$status->{message} = $installed unless $installed eq 'skip';
-#                }
-#                elsif ($type =~ /^feature_requires/) {
-#                    # if there is a test code-ref, drop it to avoid
-#                    # Module::Build trying to store it with Data::Dumper,
-#                    # generating warnings.
-#                    delete $info->{test};
-#                }
-#                else {
-#                    my $installed = $self->install_required($modname, $spec, $status->{message});
-#                    next if $installed eq 'ok';
-#                    $status->{message} = $installed;
-#                }
-#
-#                $out->{$type}{$modname} = $status;
-#            }
-#        }
-#    }
-#
-#    return keys %{$out} ? $out : return;
-#}
-
-# install an external module using CPAN prior to testing and installation
-# should only be called by install_required or install_optional
-#sub install_prereq {
-#    my ($self, $desired, $version, $required) = @_;
-#
-#    if ($self->under_cpan) {
-#        # Just add to the required hash, which CPAN >= 1.81 will check prior
-#        # to install
-#        $self->{properties}{requires}->{$desired} = $version;
-#        $self->log_info("   I'll get CPAN to prepend the installation of this\n");
-#        return 'ok';
-#    }
-#    else {
-#        my $question = $required ?  "$desired is absolutely required prior to installation: shall I install it now using a CPAN shell?" :
-#                                    "To install $desired I'll need to open a CPAN shell right now; is that OK?";
-#        my $do_install = $self->y_n($question.' y/n', 'y');
-#
-#        if ($do_install) {
-#            # Here we use CPAN to actually install the desired module, the benefit
-#            # being we continue even if installation fails, and that this works
-#            # even when not using CPAN to install.
-#            require Cwd;
-#            require CPAN;
-#
-#            # Save this because CPAN will chdir all over the place.
-#            my $cwd = Cwd::cwd();
-#
-#            CPAN::Shell->install($desired);
-#            my $msg;
-#            my $expanded = CPAN::Shell->expand("Module", $desired);
-#            if ($expanded && $expanded->uptodate) {
-#                $self->log_info("\n\n*** (back in BioPerl Build.PL) ***\n * You chose to install $desired and it installed fine\n");
-#                $msg = 'ok';
-#            }
-#            else {
-#                $self->log_info("\n\n*** (back in BioPerl Build.PL) ***\n");
-#                $msg = "You chose to install $desired but it failed to install";
-#            }
-#
-#            chdir $cwd or die "Cannot chdir() back to $cwd: $!";
-#            return $msg;
-#        }
-#        else {
-#            return $required ? "You chose not to install the REQUIRED module $desired: you'd better install it yourself manually!" :
-#                               "Even though you wanted the optional module $desired, you chose not to actually install it: do it yourself manually.";
-#        }
-#    }
-#}
-
-# install required modules listed in 'requires' or 'build_requires' arg to
-# new that weren't already installed. Should only be called by prereq_failures
-#sub install_required {
-#    my ($self, $desired, $version, $msg) = @_;
-#
-#    $self->log_info(" - ERROR: $msg\n");
-#
-#    return $self->install_prereq($desired, $version, 1);
-#}
-
-# install optional modules listed in 'recommends' arg to new that weren't
-# already installed. Should only be called by prereq_failures
-#sub install_optional {
-#    my ($self, $desired, $version, $msg) = @_;
-#
-#    unless (defined $self->{ask_optional}) {
-#        $self->{ask_optional} = $self->args->{accept}
-#                              ? 'n' : $self->prompt("Install [a]ll optional external modules, [n]one, or choose [i]nteractively?", 'n');
-#    }
-#    return 'skip' if $self->{ask_optional} =~ /^n/i;
-#
-#    my $install;
-#    if ($self->{ask_optional} =~ /^a/i) {
-#        $self->log_info(" * $msg\n");
-#        $install = 1;
-#    }
-#    else {
-#        $install = $self->y_n(" * $msg\n   Do you want to install it? y/n", 'n');
-#    }
-#
-#    my $orig_version = $version;
-#    $version = 0 if $version == -1;
-#    if ($install && ! ($self->{ask_optional} =~ /^a/i && $orig_version == -1)) {
-#        return $self->install_prereq($desired, $version);
-#    }
-#    else {
-#        my $circular = ($self->{ask_optional} =~ /^a/i && $orig_version == -1) ? " - this is a circular dependency so doesn't get installed when installing 'all' modules. If you really want it, choose modules interactively." : '';
-#        $self->log_info(" * You chose not to install $desired$circular\n");
-#        return 'ok';
-#    }
-#}
-
-# there's no official way to discover if being run by CPAN, we take an approach
-# similar to that of Module::AutoInstall
-#sub under_cpan {
-#    my $self = shift;
-#
-#    unless (defined $self->{under_cpan}) {
-#        ## modified from Module::AutoInstall
-#
-#        my $cpan_env = $ENV{PERL5_CPAN_IS_RUNNING};
-#        if ($ENV{PERL5_CPANPLUS_IS_RUNNING}) {
-#            $self->{under_cpan} = $cpan_env ? 'CPAN' : 'CPANPLUS';
-#        }
-#
-#        require CPAN;
-#
-#        unless (defined $self->{under_cpan}) {
-#            if ($CPAN::VERSION > '1.89') {
-#                if ($cpan_env) {
-#                    $self->{under_cpan} = 'CPAN';
-#                }
-#                else {
-#                    $self->{under_cpan} = 0;
-#                }
-#            }
-#        }
-#
-#        unless (defined $self->{under_cpan}) {
-#            # load cpan config
-#            if ($CPAN::HandleConfig::VERSION) {
-#                # Newer versions of CPAN have a HandleConfig module
-#                CPAN::HandleConfig->load;
-#            }
-#            else {
-#                # Older versions had the load method in Config directly
-#                CPAN::Config->load;
-#            }
-#
-#            # Find the CPAN lock-file
-#            my $lock = File::Spec->catfile($CPAN::Config->{cpan_home}, '.lock');
-#            if (-f $lock) {
-#                # Module::AutoInstall now goes on to open the lock file and compare
-#                # its pid to ours, but we're not in a situation where we expect
-#                # the pids to match, so we take the windows approach for all OSes:
-#                # find out if we're in cpan_home
-#                my $cwd  = File::Spec->canonpath(Cwd::cwd());
-#                my $cpan = File::Spec->canonpath($CPAN::Config->{cpan_home});
-#
-#                $self->{under_cpan} = index($cwd, $cpan) > -1;
-#            }
-#        }
-#
-#        if ($self->{under_cpan}) {
-#            $self->log_info("(I think I'm being run by CPAN/CPANPLUS, so will rely on it to handle prerequisite installation)\n");
-#        }
-#        else {
-#            $self->log_info("(I think you ran Build.PL directly, so will use CPAN to install prerequisites on demand)\n");
-#            $self->{under_cpan} = 0;
-#        }
-#    }
-#
-#    return $self->{under_cpan};
-#}
-
 =head2 prompt
 
 Overridden simply to not print the default answer if chosen by hitting return
@@ -536,229 +185,6 @@ EOF
     return $ans;
 }
 
-=head2 find_dist_packages
-
-Like the Module::Build version, except that we always get version from
-dist_version
-=cut
-
-sub find_dist_packages {
-    my $self = shift;
-
-    # Only packages in .pm files are candidates for inclusion here.
-    # Only include things in the MANIFEST, not things in developer's
-    # private stock.
-
-    my $manifest = $self->_read_manifest('MANIFEST') or die "Can't find dist packages without a MANIFEST file - run 'manifest' action first";
-
-    # Localize
-    my %dist_files = map { $self->localize_file_path($_) => $_ } keys %$manifest;
-
-    my @pm_files = grep {exists $dist_files{$_}} keys %{ $self->find_pm_files };
-
-    my $actual_version = $self->dist_version;
-
-    # First, we enumerate all packages & versions,
-    # seperating into primary & alternative candidates
-    my( %prime, %alt );
-    foreach my $file (@pm_files) {
-        next if $dist_files{$file} =~ m{^t/};  # Skip things in t/
-
-        my @path = split( /\//, $dist_files{$file} );
-        (my $prime_package = join( '::', @path[1..$#path] )) =~ s/\.pm$//;
-
-        my $pm_info = Module::Build::ModuleInfo->new_from_file( $file );
-
-        foreach my $package ( $pm_info->packages_inside ) {
-            next if $package eq 'main';  # main can appear numerous times, ignore
-            next if grep /^_/, split( /::/, $package ); # private package, ignore
-
-            my $version = $pm_info->version( $package );
-            if ($version && $version != $actual_version) {
-                $self->log_warn("Package $package had version $version!\n");
-            }
-            $version = $actual_version;
-
-            if ( $package eq $prime_package ) {
-                if ( exists( $prime{$package} ) ) {
-                    # M::B::ModuleInfo will handle this conflict
-                    die "Unexpected conflict in '$package'; multiple versions found.\n";
-                }
-                else {
-                    $prime{$package}{file} = $dist_files{$file};
-                    $prime{$package}{version} = $version if defined( $version );
-                }
-            }
-            else {
-                push( @{$alt{$package}}, { file => $dist_files{$file}, version => $version } );
-            }
-        }
-    }
-
-    # Then we iterate over all the packages found above, identifying conflicts
-    # and selecting the "best" candidate for recording the file & version
-    # for each package.
-    foreach my $package ( keys( %alt ) ) {
-        my $result = $self->_resolve_module_versions( $alt{$package} );
-
-        if ( exists( $prime{$package} ) ) { # primary package selected
-            if ( $result->{err} ) {
-                # Use the selected primary package, but there are conflicting
-                 # errors amoung multiple alternative packages that need to be
-                 # reported
-                 $self->log_warn("Found conflicting versions for package '$package'\n" .
-                                 "  $prime{$package}{file} ($prime{$package}{version})\n" . $result->{err});
-            }
-            elsif ( defined( $result->{version} ) ) {
-                # There is a primary package selected, and exactly one
-                # alternative package
-
-                if ( exists( $prime{$package}{version} ) && defined( $prime{$package}{version} ) ) {
-                    # Unless the version of the primary package agrees with the
-                    # version of the alternative package, report a conflict
-                    if ( $self->compare_versions( $prime{$package}{version}, '!=', $result->{version} ) ) {
-                        $self->log_warn("Found conflicting versions for package '$package'\n" .
-                                        "  $prime{$package}{file} ($prime{$package}{version})\n" .
-                                        "  $result->{file} ($result->{version})\n");
-                    }
-                }
-                else {
-                  # The prime package selected has no version so, we choose to
-                  # use any alternative package that does have a version
-                  $prime{$package}{file}    = $result->{file};
-                  $prime{$package}{version} = $result->{version};
-                }
-            }
-            else {
-                # no alt package found with a version, but we have a prime
-                # package so we use it whether it has a version or not
-            }
-        }
-        else { # No primary package was selected, use the best alternative
-            if ( $result->{err} ) {
-                $self->log_warn("Found conflicting versions for package '$package'\n" . $result->{err});
-            }
-
-            # Despite possible conflicting versions, we choose to record
-            # something rather than nothing
-            $prime{$package}{file}    = $result->{file};
-            $prime{$package}{version} = $result->{version} if defined( $result->{version} );
-        }
-    }
-
-    # Stringify versions
-    for my $key ( grep { exists $prime{$_}->{version} }
-                  keys %prime ) {
-        $prime{$key}->{version}
-            = $prime{$key}->{version}->stringify if ref($prime{$key}->{version});
-    }
-
-    return \%prime;
-}
-
-# our recommends syntax contains extra info that needs to be ignored at this
-# stage
-#sub _parse_conditions {
-#    my ($self, $spec) = @_;
-#
-#    ($spec) = split("/", $spec);
-#
-#    if ($spec =~ /^\s*([\w.]+)\s*$/) { # A plain number, maybe with dots, letters, and underscores
-#        return (">= $spec");
-#    }
-#    else {
-#        return split /\s*,\s*/, $spec;
-#    }
-#}
-
-# when generating META.yml, we output optional_features syntax (instead of
-# recommends syntax). Note that as of CPAN v1.9402 nothing useful is done
-# with this information, which is why we implement our own request to install
-# the optional modules in install_optional().
-# Also note that CPAN PLUS complains with an [ERROR] when it sees this META.yml,
-# but it isn't fatal and installation continues fine.
-
-# 'recommends' groups broken up now into separate modules and grouping the
-# 'requires' instead of lumping modules together (quotes were choking YAML
-# parsing). Now passes Parse::CPAN::Meta w/o errors.
-# -cjfields 9-17-09
-
-# let us store extra things persistently in _build
-#sub _construct {
-#    my $self = shift;
-#
-#    # calling SUPER::_construct will dump some of the input to this sub out
-#    # with Data::Dumper, which will complain about code refs. So we replace
-#    # any code refs with dummies first, then put them back afterwards
-#    my %in_hash = @_;
-#    my $auto_features = $in_hash{auto_features} if defined $in_hash{auto_features};
-#    my %code_refs;
-#    if ($auto_features) {
-#        while (my ($key, $hash) = each %{$auto_features}) {
-#            while (my ($sub_key, $val) = each %{$hash}) {
-#                if (ref($val) && ref($val) eq 'CODE') {
-#                    $hash->{$sub_key} = 'CODE_ref';
-#                    $code_refs{$key}->{$sub_key} = $val;
-#                }
-#            }
-#        }
-#    }
-#
-#    $self = $self->SUPER::_construct(@_);
-#
-#    my ($p, $ph) = ($self->{properties}, $self->{phash});
-#
-#    if (keys %code_refs) {
-#        while (my ($key, $hash) = each %{$auto_features}) {
-#            if (defined $code_refs{$key}) {
-#                while (my ($sub_key, $code_ref) = each %{$code_refs{$key}}) {
-#                    $hash->{$sub_key} = $code_ref;
-#                }
-#                $ph->{auto_features}->{$key} = $hash;
-#            }
-#        }
-#    }
-#
-#    foreach my $piece (qw(manifest_skip post_install_scripts)) {
-#        my $file = File::Spec->catfile($self->config_dir, $piece);
-#        $ph->{$piece} = Module::Build::Notes->new(file => $file);
-#        $ph->{$piece}->restore if -e $file;
-#    }
-#
-#    return $self;
-#}
-
-#sub write_config {
-#    my $self = shift;
-#    $self->SUPER::write_config;
-#
-#    # write extra things
-#    $self->{phash}{$_}->write() foreach qw(manifest_skip post_install_scripts);
-#
-#    # be even more certain we can reload ourselves during a resume by copying
-#    # ourselves to _build\lib
-#    # this is only possible for the core distribution where we are actually
-#    # present in the distribution
-#    my $self_filename = File::Spec->catfile('Bio', 'Root', 'Build.pm');
-#    -e $self_filename || return;
-#
-#    my $filename = File::Spec->catfile($self->{properties}{config_dir}, 'lib', 'Bio', 'Root', 'Build.pm');
-#    my $filedir  = File::Basename::dirname($filename);
-#
-#    File::Path::mkpath($filedir);
-#    warn "Could not create directory '$filedir': $!\n" unless -d $filedir;
-#
-#    File::Copy::copy($self_filename, $filename);
-#    warn "Unable to copy 'Bio/Root/Build.pm' to '$filename'\n" unless -e $filename;
-#}
-
-# add a file to the default MANIFEST.SKIP
-#sub add_to_manifest_skip {
-#    my $self = shift;
-#    my %files = map {$self->localize_file_path($_), 1} @_;
-#    $self->{phash}{manifest_skip}->write(\%files);
-#}
-
 =head2 ACTION_manifest
 
 We always generate a new MANIFEST instead of allowing existing files to remain
@@ -776,23 +202,6 @@ sub ACTION_manifest {
     ExtUtils::Manifest::mkmanifest();
 }
 
-# extended to add extra things to the default MANIFEST.SKIP
-#sub _write_default_maniskip {
-#    my $self = shift;
-#    $self->SUPER::_write_default_maniskip;
-#
-#    my @extra = keys %{$self->{phash}{manifest_skip}->read};
-#    if (@extra) {
-#        open(my $fh, '>>', 'MANIFEST.SKIP') or die "Could not append MANIFEST.SKIP file\n";
-#        print $fh "\n# Avoid additional run-time generated things\n";
-#        foreach my $line (@extra) {
-#            print $fh $line, "\n";
-#        }
-#        close($fh);
-#    }
-#}
-
-
 =head2 ACTION_install
 
 Extended to run scripts post-installation
@@ -809,20 +218,6 @@ sub ACTION_install {
     #$self->run_post_install_scripts;
 }
 
-#sub add_post_install_script {
-#    my $self = shift;
-#    my %files = map {$self->localize_file_path($_), 1} @_;
-#    $self->{phash}{post_install_scripts}->write(\%files);
-#}
-#
-#sub run_post_install_scripts {
-#    my $self = shift;
-#    my @scripts = keys %{$self->{phash}{post_install_scripts}->read};
-#    foreach my $script (@scripts) {
-#        $self->run_perl_script($script);
-#    }
-#}
-
 =head2 test_internet
 
 For use with auto_features, which should require LWP::UserAgent as one of
@@ -850,63 +245,6 @@ sub test_internet {
     return;
 }
 
-=head2 dist_dir
-
-Nice directory names for dist-related actions
-=cut
-
-sub dist_dir {
-    my ($self) = @_;
-    my $version = $self->dist_version;
-    if ($version =~ /^\d\.\d{6}\d$/) {
-        # 1.x.x.100 returned as 1.x.x.1
-        $version .= '00';
-    }
-    $version =~ s/00(\d)/$1./g;
-    $version =~ s/\.$//;
-
-    if (my ($minor, $rev) = $version =~ /^\d\.(\d)\.\d\.(\d+)$/) {
-        my $dev = ! ($minor % 2 == 0);
-        if ($rev == 100) {
-            my $replace = $dev ? "_$rev" : '';
-            $version =~ s/\.\d+$/$replace/;
-        }
-        elsif ($rev < 100) {
-            $rev = sprintf("%03d", $rev);
-            $version =~ s/\.\d+$/_$rev-RC/;
-        }
-        else {
-            $rev -= 100 unless $dev;
-            my $replace = $dev ? "_$rev" : ".$rev";
-            $version =~ s/\.\d+$/$replace/;
-        }
-    }
-
-    return "$self->{properties}{dist_name}-$version";
-}
-
-# try to be as consistent as possible with Module::Build API
-#sub ppm_name {
-#    my $self = shift;
-#    return $self->dist_dir.'-ppm';
-#}
-
-# generate complete ppd4 version file
-#sub ACTION_ppd {
-#    my $self = shift;
-#
-#    my $file = $self->make_ppd(%{$self->{args}});
-#    $self->add_to_cleanup($file);
-#    #$self->add_to_manifest_skip($file);
-#}
-
-# add pod2htm temp files to MANIFEST.SKIP, generated during ppmdist most likely
-#sub htmlify_pods {
-#    my $self = shift;
-#    $self->SUPER::htmlify_pods(@_);
-#    #$self->add_to_manifest_skip('pod2htm*');
-#}
-
 =head2 ACTION_ppmdist
 
 Don't copy across man3 docs since they're of little use under Windows and
@@ -940,134 +278,6 @@ sub install_types {
     return @types;
 }
 
-# overridden from Module::Build::PPMMaker for ppd4 compatability
-
-# note: no longer needed with more recent versions of Module::Build
-
-#sub make_ppd {
-#    my ($self, %args) = @_;
-#
-#    require Module::Build::PPMMaker;
-#    my $mbp = Module::Build::PPMMaker->new();
-#
-#    my %dist;
-#    foreach my $info (qw(name author abstract version)) {
-#        my $method = "dist_$info";
-#        $dist{$info} = $self->$method() or die "Can't determine distribution's $info\n";
-#    }
-#    $dist{codebase} = $self->ppm_name.'.tar.gz';
-#    $mbp->_simple_xml_escape($_) foreach $dist{abstract}, $dist{codebase}, @{$dist{author}};
-#
-#    my (undef, undef, undef, $mday, $mon, $year) = localtime();
-#    $year += 1900;
-#    $mon++;
-#    my $date = "$year-$mon-$mday";
-#
-#    my $softpkg_version = $self->dist_dir;
-#    $softpkg_version =~ s/^$dist{name}-//;
-#
-#    # to avoid a ppm bug, instead of including the requires in the softpackage
-#    # for the distribution we're making, we'll make a seperate Bundle::
-#    # softpackage that contains all the requires, and require only the Bundle in
-#    # the real softpackage
-#    my ($bundle_name) = $dist{name} =~ /^.+-(.+)/;
-#    $bundle_name ||= 'core';
-#    $bundle_name =~ s/^(\w)/\U$1/;
-#    my $bundle_dir = "Bundle-BioPerl-$bundle_name-$softpkg_version-ppm";
-#    my $bundle_file = "$bundle_dir.tar.gz";
-#    my $bundle_softpkg_name = "Bundle-BioPerl-$bundle_name";
-#    $bundle_name = "Bundle::BioPerl::$bundle_name";
-#
-#    # header
-#    my $ppd = <<"PPD";
-#    <SOFTPKG NAME=\"$dist{name}\" VERSION=\"$softpkg_version\" DATE=\"$date\">
-#        <TITLE>$dist{name}</TITLE>
-#        <ABSTRACT>$dist{abstract}</ABSTRACT>
-#@{[ join "\n", map "        <AUTHOR>$_</AUTHOR>", @{$dist{author}} ]}
-#        <PROVIDE NAME=\"$dist{name}::\" VERSION=\"$dist{version}\"/>
-#PPD
-#
-#    # provide section
-#    foreach my $pm (@{$self->rscan_dir('Bio', qr/\.pm$/)}) {
-#        # convert these filepaths to Module names
-#        $pm =~ s/\//::/g;
-#        $pm =~ s/\.pm//;
-#
-#        $ppd .= sprintf(<<'EOF', $pm, $dist{version});
-#        <PROVIDE NAME="%s" VERSION="%s"/>
-#EOF
-#    }
-#
-#    # rest of softpkg
-#    $ppd .= <<"PPD";
-#        <IMPLEMENTATION>
-#            <ARCHITECTURE NAME=\"MSWin32-x86-multi-thread-5.8\"/>
-#            <CODEBASE HREF=\"$dist{codebase}\"/>
-#            <REQUIRE NAME=\"$bundle_name\" VERSION=\"$dist{version}\"/>
-#        </IMPLEMENTATION>
-#    </SOFTPKG>
-#PPD
-#
-#    # now a new softpkg for the bundle
-#    $ppd .= <<"PPD";
-#
-#    <SOFTPKG NAME=\"$bundle_softpkg_name\" VERSION=\"$softpkg_version\" DATE=\"$date\">
-#        <TITLE>$bundle_name</TITLE>
-#        <ABSTRACT>Bundle of pre-requisites for $dist{name}</ABSTRACT>
-#@{[ join "\n", map "        <AUTHOR>$_</AUTHOR>", @{$dist{author}} ]}
-#        <PROVIDE NAME=\"$bundle_name\" VERSION=\"$dist{version}\"/>
-#        <IMPLEMENTATION>
-#            <ARCHITECTURE NAME=\"MSWin32-x86-multi-thread-5.8\"/>
-#            <CODEBASE HREF=\"$bundle_file\"/>
-#PPD
-#
-#    # required section
-#    # we do both requires and recommends to make installation on Windows as
-#    # easy (mindless) as possible
-#    for my $type ('requires', 'recommends') {
-#        my $prereq = $self->$type;
-#        while (my ($modname, $version) = each %$prereq) {
-#            next if $modname eq 'perl';
-#            ($version) = split("/", $version) if $version =~ /\//;
-#
-#            # Module names must have at least one ::
-#            unless ($modname =~ /::/) {
-#                $modname .= '::';
-#            }
-#
-#            # Bio::Root::Version number comes out as triplet number like 1.5.2;
-#            # convert to our own version
-#            if ($modname eq 'Bio::Root::Version') {
-#                $version = $dist{version};
-#            }
-#
-#            $ppd .= sprintf(<<'EOF', $modname, $version || '');
-#            <REQUIRE NAME="%s" VERSION="%s"/>
-#EOF
-#        }
-#    }
-#
-#    # footer
-#    $ppd .= <<'EOF';
-#        </IMPLEMENTATION>
-#    </SOFTPKG>
-#EOF
-#
-#    my $ppd_file = "$dist{name}.ppd";
-#    my $fh = IO::File->new(">$ppd_file") or die "Cannot write to $ppd_file: $!";
-#    print $fh $ppd;
-#    close $fh;
-#
-#    $self->delete_filetree($bundle_dir);
-#    mkdir($bundle_dir) or die "Cannot create '$bundle_dir': $!";
-#    $self->make_tarball($bundle_dir);
-#    $self->delete_filetree($bundle_dir);
-#    $self->add_to_cleanup($bundle_file);
-#    #$self->add_to_manifest_skip($bundle_file);
-#
-#    return $ppd_file;
-#}
-
 =head2 ACTION_dist
 
 We make all archive formats we want, not just .tar.gz
diff --git a/Bio/Root/Exception.pm b/Bio/Root/Exception.pm
index b2e12bc..f2458b1 100644
--- a/Bio/Root/Exception.pm
+++ b/Bio/Root/Exception.pm
@@ -1,11 +1,6 @@
 package Bio::Root::Exception;
 use strict;
 
-# ABSTRACT: generic exception objects for Bioperl
-# AUTHOR:   Steve Chervitz <sac at bioperl.org>
-# OWNER:    2001 Steve Chervitz
-# LICENSE:  Perl_5
-
 =head1 SYNOPSIS
 
 =head2 Throwing exceptions using L<Error.pm throw|Error::throw>:
@@ -149,6 +144,8 @@ See these RFC's:
 
 =head1 EXCEPTIONS
 
+=head1 AUTHOR Steve Chervitz
+
 =cut
 
 my $debug = $Error::Debug;  # Prevents the "used only once" warning.
diff --git a/Bio/Root/IO.pm b/Bio/Root/IO.pm
index 0c74217..df68078 100644
--- a/Bio/Root/IO.pm
+++ b/Bio/Root/IO.pm
@@ -7,13 +7,6 @@ use File::Copy;
 use Fcntl;
 use base qw(Bio::Root::Root);
 
-# ABSTRACT: module providing several methods often needed when dealing with file IO
-# AUTHOR:   Hilmar Lapp <hlapp at gmx.net>
-# OWNER:    Hilmar Lapp
-# LICENSE:  Perl_5
-
-# CONTRIBUTOR: Mark A. Jensen <maj at fortinbras.us>
-
 =head1 SYNOPSIS
 
     # Use stream I/O in your module
@@ -61,6 +54,8 @@ filehandle with an object like an indexer where it is not proper to
 close the filehandle as it will continue to be reused until the end of the
 stream is reached.  In general you won't want to play with this flag.
 
+=head1 AUTHOR Hilmar Lapp
+
 =cut
 
 our ($FILESPECLOADED,   $FILETEMPLOADED,
diff --git a/Bio/Root/Root.pm b/Bio/Root/Root.pm
index 97c610a..f8c9f2d 100644
--- a/Bio/Root/Root.pm
+++ b/Bio/Root/Root.pm
@@ -1,17 +1,11 @@
 package Bio::Root::Root;
 use strict;
 use Bio::Root::IO;
+use Bio::Root::Version;
 use Scalar::Util qw(blessed reftype);
 use base qw(Bio::Root::RootI);
 
-# ABSTRACT: hash-based implementation of L<Bio::Root::RootI>
-# AUTHOR:   Steve Chervitz <sac at bioperl.org>
-# AUTHOR:   Ewan Birney
-# AUTHOR:   Lincoln Stein
-# OWNER:    Steve Chervitz
-# OWNER:    Ewan Birney
-# OWNER:    Lincoln Stein
-# LICENSE:  Perl_5
+our $VERSION = eval "$VERSION";
 
 =head1 SYNOPSIS
 
@@ -139,6 +133,10 @@ other pre-defined exception types:
    };
    # the ending semicolon is essential!
 
+=head1 AUTHOR Steve Chervitz
+
+Ewan Birney, Lincoln Stein
+
 =cut
 
 our ($DEBUG, $ID, $VERBOSITY, $ERRORLOADED, $CLONE_CLASS);
diff --git a/Bio/Root/RootI.pm b/Bio/Root/RootI.pm
index b965a20..cae8011 100644
--- a/Bio/Root/RootI.pm
+++ b/Bio/Root/RootI.pm
@@ -2,18 +2,6 @@ package Bio::Root::RootI;
 use strict;
 use Carp 'confess','carp';
 
-# ABSTRACT: abstract interface to root object code
-# AUTHOR:   Steve Chervitz <sac at bioperl.org>
-# AUTHOR:   Ewan Birney <birney at ebi.ac.uk>
-# AUTHOR:   Lincoln Stein
-# OWNER:    Steve Chervitz
-# OWNER:    Ewan Birney
-# OWNER:    Lincoln Stein
-# LICENSE:  Perl_5
-
-# CONTRIBUTOR: Sendu Bala <bix at sendu.me.uk>
-# CONTRIBUTOR: Jason Stajich
-
 =head1 SYNOPSIS
 
   # any bioperl or bioperl compliant object is a RootI
@@ -79,6 +67,10 @@ running C<perl -wc> on it). So it should be standard practice for a test
 of an implementation to check each method and verify that it doesn't
 throw a L<Bio::Exception::NotImplemented>.
 
+=head1 AUTHOR Steve Chervitz
+
+Ewan Birney, Lincoln Stein, Steve Chervitz, Sendu Bala, Jason Stajich
+
 =cut
 
 use vars qw($DEBUG $ID $VERBOSITY);
@@ -237,11 +229,14 @@ sub deprecated{
 
     $throw_version ||= $version;
     $warn_version  ||= $class_version;
-
+    
+    $throw_version =~ s/_//g;
+    $warn_version =~ s/_//g;
+    
     for my $v ( $warn_version, $throw_version) {
         no warnings 'numeric';
         $self->throw("Version must be numerical, such as 1.006000 for v1.6.0, not $v")
-            unless !defined $v || $v + 0 eq $v;
+            unless !defined $v || $v + 0 == $v;
     }
 
     # below default insinuates we're deprecating a method and not a full module
diff --git a/Bio/Root/Storable.pm b/Bio/Root/Storable.pm
index 64931bf..bf11df8 100644
--- a/Bio/Root/Storable.pm
+++ b/Bio/Root/Storable.pm
@@ -5,11 +5,6 @@ use Data::Dumper qw( Dumper );
 use File::Spec;
 use base qw(Bio::Root::Root);
 
-# ABSTRACT: object serialisation methods
-# AUTHOR:   Will Spooner <whs at sanger.ac.uk>
-# OWNER:    Will Spooner
-# LICENSE:  Perl_5
-
 =head1 SYNOPSIS
 
   my $storable = Bio::Root::Storable->new();
@@ -22,7 +17,6 @@ use base qw(Bio::Root::Root);
   my $storable2 = $storable->new_retrievable();
   $storable2->retrieve();
 
-
 =head1 DESCRIPTION
 
 Generic module that allows objects to be safely stored/retrieved from
@@ -46,6 +40,8 @@ Perl Data::Dumper module) is used instead.
 ASCII storage can be enabled by default by setting the value of
 $Bio::Root::Storable::BINARY to false.
 
+=head1 AUTHOR Will Spooner
+
 =cut
 
 use vars qw( $BINARY );
diff --git a/Bio/Root/Test.pm b/Bio/Root/Test.pm
index b40636d..9c00068 100644
--- a/Bio/Root/Test.pm
+++ b/Bio/Root/Test.pm
@@ -1,6 +1,7 @@
 package Bio::Root::Test;
 use strict;
 use warnings;
+
 # According to Ovid, 'use base' can override signal handling, so use
 # old-fashioned way. This should be a Test::Builder::Module subclass
 # for consistency (as are any Test modules)
@@ -12,13 +13,6 @@ use File::Spec;
 
 our @ISA = qw(Test::Builder::Module);
 
-# ABSTRACT: a common base for all Bioperl test scripts
-# AUTHOR:   Sendu Bala <bix at sendu.me.uk>
-# OWNER:    Sendu Bala
-# LICENSE:  Perl_5
-
-# CONTRIBUTOR: Chris Fields <cjfields at bioperl.org>
-
 =head1 SYNOPSIS
 
   use lib '.'; # (for core package tests only)
@@ -81,6 +75,10 @@ test_debug().
 Finally, it presents a consistent way of getting the path to input and output
 files. See test_input_file(), test_output_file() and test_output_dir().
 
+=head1 AUTHOR Sendu Bala
+
+Chris Fields
+
 =cut
 
 # TODO: Evil magic ahead; can we clean this up?
@@ -89,47 +87,55 @@ files. See test_input_file(), test_output_file() and test_output_dir().
     my $Tester = Test::Builder->new;
 
     no warnings 'redefine';
+
     sub Test::Warn::_canonical_got_warning {
-        my ($called_from, $msg) = @_;
-        my $warn_kind = $called_from eq 'Carp' ? 'carped' : ($called_from =~ /Bio::/ ? 'Bioperl' : 'warn');
+        my ( $called_from, $msg ) = @_;
+        my $warn_kind
+            = $called_from eq 'Carp'
+            ? 'carped'
+            : ( $called_from =~ /Bio::/ ? 'Bioperl' : 'warn' );
 
         my $warning;
-        if ($warn_kind eq 'Bioperl') {
-            ($warning) = $msg =~ /\n--------------------- WARNING ---------------------\nMSG: (.+)\n---------------------------------------------------\n$/m;
-            $warning ||= $msg; # shouldn't ever happen
-        }
-        else {
-            my @warning_stack = split /\n/, $msg;   # some stuff of uplevel is included
+        if ( $warn_kind eq 'Bioperl' ) {
+            ($warning)
+                = $msg
+                =~ /\n--------------------- WARNING ---------------------\nMSG: (.+)\n---------------------------------------------------\n$/m;
+            $warning ||= $msg;    # shouldn't ever happen
+        } else {
+            my @warning_stack = split /\n/, $msg; # some stuff of uplevel is included
             $warning = $warning_stack[0];
         }
 
-        return {$warn_kind => $warning}; # return only the real message
+        return { $warn_kind => $warning };    # return only the real message
     }
 
     sub Test::Warn::_diag_found_warning {
         my @warns = @_;
         foreach my $warn (@warns) {
-            if (ref($warn) eq 'HASH') {
-                   ${$warn}{carped}  ? $Tester->diag("found carped warning: ${$warn}{carped}")
-                : (${$warn}{Bioperl} ? $Tester->diag("found Bioperl warning: ${$warn}{Bioperl}")
-                : $Tester->diag("found warning: ${$warn}{warn}"));
+            if ( ref($warn) eq 'HASH' ) {
+                ${$warn}{carped}
+                    ? $Tester->diag("found carped warning: ${$warn}{carped}")
+                    : (
+                    ${$warn}{Bioperl} ? $Tester->diag(
+                        "found Bioperl warning: ${$warn}{Bioperl}")
+                    : $Tester->diag("found warning: ${$warn}{warn}")
+                    );
             } else {
-                $Tester->diag( "found warning: $warn" );
+                $Tester->diag("found warning: $warn");
             }
         }
-        $Tester->diag( "didn't find a warning" ) unless @warns;
+        $Tester->diag("didn't find a warning") unless @warns;
     }
 
     sub Test::Warn::_cmp_got_to_exp_warning {
-        my ($got_kind, $got_msg) = %{ shift() };
-        my ($exp_kind, $exp_msg) = %{ shift() };
-        return 0 if ($got_kind eq 'warn') && ($exp_kind eq 'carped');
+        my ( $got_kind, $got_msg ) = %{ shift() };
+        my ( $exp_kind, $exp_msg ) = %{ shift() };
+        return 0 if ( $got_kind eq 'warn' ) && ( $exp_kind eq 'carped' );
 
         my $cmp;
-        if ($got_kind eq 'Bioperl') {
+        if ( $got_kind eq 'Bioperl' ) {
             $cmp = $got_msg =~ /^\Q$exp_msg\E$/;
-        }
-        else {
+        } else {
             $cmp = $got_msg =~ /^\Q$exp_msg\E at \S+ line \d+\.?$/;
         }
 
@@ -137,22 +143,25 @@ files. See test_input_file(), test_output_file() and test_output_dir().
     }
 }
 
-our @EXPORT = (@Test::Most::EXPORT,
-               #@Bio::Root::Test::Warn::EXPORT,
-               # Test::Warn method wrappers
-
-               # BioPerl-specific
-               qw(
-                test_begin
-                test_skip
-                test_output_file
-                test_output_dir
-                test_input_file
-                test_network
-                test_email
-                test_debug
-                float_is
-             ));
+our @EXPORT = (
+    @Test::Most::EXPORT,
+
+    #@Bio::Root::Test::Warn::EXPORT,
+    # Test::Warn method wrappers
+
+    # BioPerl-specific
+    qw(
+        test_begin
+        test_skip
+        test_output_file
+        test_output_dir
+        test_input_file
+        test_network
+        test_email
+        test_debug
+        float_is
+        )
+);
 
 our $GLOBAL_FRAMEWORK = 'Test::Most';
 our @TEMP_FILES;
@@ -193,25 +202,26 @@ our @TEMP_FILES;
 =cut
 
 sub test_begin {
-    my ($skip_all, $tests, $framework) = _skip(@_);
+    my ( $skip_all, $tests, $framework ) = _skip(@_);
     $GLOBAL_FRAMEWORK = $framework;
 
-    if ($framework eq 'Test::Most') {
-        # ideally we'd delay loading Test::Most until this point, but see BEGIN
-        # block
+    if ( $framework eq 'Test::Most' ) {
+
+       # ideally we'd delay loading Test::Most until this point, but see BEGIN
+       # block
 
         if ($skip_all) {
             eval "plan skip_all => '$skip_all';";
-        }
-        elsif (defined $tests && $tests == 0) {
-            eval "plan skip_all => 'These modules are now probably deprecated';";
-        }
-        elsif ($tests) {
+        } elsif ( defined $tests && $tests == 0 ) {
+            eval
+                "plan skip_all => 'These modules are now probably deprecated';";
+        } elsif ($tests) {
             eval "plan tests => $tests;";
         }
 
         return 1;
     }
+
     # go ahead and add support for other frameworks here
     else {
         die "Only Test::Most is supported at the current time\n";
@@ -261,14 +271,15 @@ sub test_begin {
 =cut
 
 sub test_skip {
-    my ($skip, $tests, $framework) = _skip(@_);
+    my ( $skip, $tests, $framework ) = _skip(@_);
     $tests || die "-tests must be a number greater than 0";
 
-    if ($framework eq 'Test::Most') {
+    if ( $framework eq 'Test::Most' ) {
         if ($skip) {
             eval "skip('$skip', $tests);";
         }
     }
+
     # go ahead and add support for other frameworks here
     else {
         die "Only Test::Most is supported at the current time\n";
@@ -291,8 +302,8 @@ sub test_output_file {
 
     # RT 48813
     my $tmp = File::Temp->new();
-    push(@TEMP_FILES, $tmp);
-    close($tmp); # Windows needs this
+    push( @TEMP_FILES, $tmp );
+    close($tmp);    # Windows needs this
     return $tmp->filename;
 }
 
@@ -312,7 +323,7 @@ sub test_output_file {
 sub test_output_dir {
     die "test_output_dir takes no args\n" if @_;
 
-    return tempdir(CLEANUP => 1);
+    return tempdir( CLEANUP => 1 );
 }
 
 =head2 test_input_file
@@ -330,7 +341,7 @@ sub test_output_dir {
 =cut
 
 sub test_input_file {
-    return File::Spec->catfile('t', 'data', @_);
+    return File::Spec->catfile( 't', 'data', @_ );
 }
 
 =head2 test_network
@@ -344,7 +355,12 @@ sub test_input_file {
 =cut
 
 sub test_network {
-    return $ENV{AUTHOR_TESTING} || $ENV{RELEASE_TESTING};
+    require Module::Build;
+    my $build = Module::Build->current();
+    return
+           $build->notes('network')
+        || $ENV{AUTHOR_TESTING}
+        || $ENV{RELEASE_TESTING};
 }
 
 =head2 test_email
@@ -358,7 +374,14 @@ sub test_network {
 =cut
 
 sub test_email {
-    return $ENV{AUTHOR_TESTING} || $ENV{RELEASE_TESTING};
+    require Module::Build;
+    my $build = Module::Build->current();
+
+    # this should not be settable unless the network tests work
+    return
+           $build->notes('email')
+        || $ENV{AUTHOR_TESTING}
+        || $ENV{RELEASE_TESTING};
 }
 
 =head2 test_debug
@@ -387,12 +410,13 @@ sub test_debug {
 =cut
 
 sub float_is ($$;$) {
-    my ($val1, $val2, $message) = @_;
+    my ( $val1, $val2, $message ) = @_;
+
     # catch any potential undefined values and directly compare
-    if (!defined $val1 || !defined $val2) {
-        is($val1, $val2 ,$message);
+    if ( ! defined $val1 || ! defined $val2 ) {
+        is( $val1, $val2, $message );
     } else {
-        is(sprintf("%g",$val1), sprintf("%g",$val2),$message);
+        is( sprintf( "%g", $val1 ), sprintf( "%g", $val2 ), $message );
     }
 }
 
@@ -406,21 +430,23 @@ sub _skip {
 
     # handle input strictly
     my $tests = $args{'-tests'};
-    #(defined $tests && $tests =~ /^\d+$/) || die "-tests must be supplied and be an int\n";
+
+#(defined $tests && $tests =~ /^\d+$/) || die "-tests must be supplied and be an int\n";
     delete $args{'-tests'};
 
     my $req_mods = $args{'-requires_modules'};
     delete $args{'-requires_modules'};
     my @req_mods;
     if ($req_mods) {
-        ref($req_mods) eq 'ARRAY' || die "-requires_modules takes an array ref\n";
+        ref($req_mods) eq 'ARRAY'
+            || die "-requires_modules takes an array ref\n";
         @req_mods = @{$req_mods};
     }
     my $req_mod = $args{'-requires_module'};
     delete $args{'-requires_module'};
     if ($req_mod) {
         ref($req_mod) && die "-requires_module takes a string\n";
-        push(@req_mods, $req_mod);
+        push( @req_mods, $req_mod );
     }
 
     my $req_net = $args{'-requires_networking'};
@@ -438,8 +464,12 @@ sub _skip {
     my $req_exe = $args{'-requires_executable'};
     delete $args{'-requires_executable'};
 
-    if ($req_exe && (!ref($req_exe) || !$req_exe->isa('Bio::Tools::Run::WrapperBase'))) {
-        die "-requires_exe takes an argument of type Bio::Tools::Run::WrapperBase";
+    if ($req_exe
+        && (   ! ref($req_exe)
+            || ! $req_exe->isa('Bio::Tools::Run::WrapperBase') )
+        ) {
+        die
+            "-requires_exe takes an argument of type Bio::Tools::Run::WrapperBase";
     }
 
     my $os = $args{'-excludes_os'};
@@ -449,48 +479,56 @@ sub _skip {
     delete $args{'-framework'};
 
     # catch user mistakes
-    while (my ($key, $val) = each %args) {
-        die "unknown argument '$key' supplied, did you mistake 'required...' for 'requires...'?\n";
+    while ( my ( $key, $val ) = each %args ) {
+        die
+            "unknown argument '$key' supplied, did you mistake 'required...' for 'requires...'?\n";
     }
 
     # test user requirments and return
     if ($os) {
-        if ($^O =~ /$os/i) {
-            return ('Not compatible with your Operating System', $tests, $framework);
+        if ( $^O =~ /$os/i ) {
+            return ( 'Not compatible with your Operating System',
+                $tests, $framework );
         }
     }
 
     foreach my $mod (@req_mods) {
         my $skip = _check_module($mod);
         if ($skip) {
-            return ($skip, $tests, $framework);
+            return ( $skip, $tests, $framework );
         }
     }
 
-    if ($req_net && ! test_network()) {
-        return ('Network tests have not been requested', $tests, $framework);
+    if ( $req_net && ! test_network() ) {
+        return ( 'Network tests have not been requested', $tests,
+            $framework );
     }
 
-    if ($req_email && ! test_email()) {
-        return ('Valid email not provided; required for tests', $tests, $framework);
+    if ( $req_email && ! test_email() ) {
+        return ( 'Valid email not provided; required for tests',
+            $tests, $framework );
     }
 
     if ($req_exe) {
-        my $eval = eval {$req_exe->executable};
-        if ($@ or not defined $eval) {
-            my $msg = 'Required executable for '.ref($req_exe).' is not present';
+        my $eval = eval { $req_exe->executable };
+        if ( $@ or not defined $eval ) {
+            my $msg
+                = 'Required executable for '
+                . ref($req_exe)
+                . ' is not present';
             diag($msg);
-            return ($msg, $tests, $framework);
+            return ( $msg, $tests, $framework );
         }
     }
 
-    if ($req_env && !exists $ENV{$req_env}) {
-        my $msg = 'Required environment variable $'.$req_env. ' is not set';
+    if ( $req_env && ! exists $ENV{$req_env} ) {
+        my $msg
+            = 'Required environment variable $' . $req_env . ' is not set';
         diag($msg);
-        return ($msg, $tests, $framework);
+        return ( $msg, $tests, $framework );
     }
 
-    return ('', $tests, $framework);
+    return ( '', $tests, $framework );
 }
 
 =head2 _check_module
@@ -501,28 +539,29 @@ sub _check_module {
     my $mod = shift;
 
     my $desired_version;
-    if ($mod =~ /(\S+)\s+(\S+)/) {
-        $mod = $1;
+    if ( $mod =~ /(\S+)\s+(\S+)/ ) {
+        $mod             = $1;
         $desired_version = $2;
     }
 
     eval "require $mod;";
 
     if ($@) {
-        if ($@ =~ /Can't locate/) {
-            return "The optional module $mod (or dependencies thereof) was not installed";
-        }
-        else {
-            return "The optional module $mod generated the following error: \n$@";
+        if ( $@ =~ /Can't locate/ ) {
+            return
+                "The optional module $mod (or dependencies thereof) was not installed";
+        } else {
+            return
+                "The optional module $mod generated the following error: \n$@";
         }
-    }
-    elsif ($desired_version) {
+    } elsif ($desired_version) {
         no strict 'refs';
-        unless (defined ${"${mod}::VERSION"}) {
-            return "The optional module $mod didn't have a version, but we want v$desired_version";
-        }
-        elsif (${"${mod}::VERSION"} < $desired_version) {
-            return "The optional module $mod was out of date (wanted v$desired_version)";
+        unless ( defined ${"${mod}::VERSION"} ) {
+            return
+                "The optional module $mod didn't have a version, but we want v$desired_version";
+        } elsif ( ${"${mod}::VERSION"} < $desired_version ) {
+            return
+                "The optional module $mod was out of date (wanted v$desired_version)";
         }
     }
 
diff --git a/examples/root/lib/TestObject.pm b/Bio/Root/TestObject.pm
similarity index 96%
rename from examples/root/lib/TestObject.pm
rename to Bio/Root/TestObject.pm
index c31bbd9..35b92c9 100644
--- a/examples/root/lib/TestObject.pm
+++ b/Bio/Root/TestObject.pm
@@ -14,13 +14,10 @@ Steve Chervitz E<lt>sac at bioperl.orgE<gt>
 
 =cut
 
-#'
-
-package TestObject;
+package Bio::Root::TestObject;
 
 use strict;
 
-
 # Define a special type of error "Bio::TestException" as a subclass of Error.
 # Note two things:
 #   1. The ISA declaration effectively defines our new Exception object.
@@ -29,8 +26,7 @@ use strict;
 #   4. If Error.pm isn't available this statement doesn't matter.
 @Bio::TestException::ISA = qw( Bio::Root::Exception );
 
-use base qw(Bio::Root::Root TestInterface);
-
+use base qw( Bio::Root::Root );
 
 # Note that we're not implementing foo(), so calling it
 # will result in a Bio::Root::NotImplemented exception.
diff --git a/Bio/Root/Utilities.pm b/Bio/Root/Utilities.pm
index ac367d5..cf7eb6c 100644
--- a/Bio/Root/Utilities.pm
+++ b/Bio/Root/Utilities.pm
@@ -4,11 +4,6 @@ use Bio::Root::IO;
 use Bio::Root::Exception;
 use base qw(Bio::Root::Root Exporter);
 
-# ABSTRACT: general-purpose utility module
-# AUTHOR:   Steve Chervitz <sac at bioperl.org>
-# OWNER:    1996-2007 Steve Chervitz
-# LICENSE:  Perl_5
-
 =head1 SYNOPSIS
 
 =head2 Object Creation
@@ -75,6 +70,8 @@ as needed.
 This module was originally developed under the auspices of the
 Saccharomyces Genome Database: http://www.yeastgenome.org/
 
+=head1 AUTHOR Steve Chervitz
+
 =cut
 
 use vars qw(@EXPORT_OK %EXPORT_TAGS);
diff --git a/Bio/Root/Version.pm b/Bio/Root/Version.pm
index bf9c1df..1346148 100644
--- a/Bio/Root/Version.pm
+++ b/Bio/Root/Version.pm
@@ -1,22 +1,15 @@
 package Bio::Root::Version;
 use strict;
 
-# ABSTRACT: provide global, distribution-level versioning
-# AUTHOR:   Aaron Mackey <amackey at virginia.edu>
-# OWNER:    Aaron Mackey
-# LICENSE:  Perl_5
-
 =head1 SYNOPSIS
 
   package Bio::Tools::NiftyFeature;
   require Bio::Root::RootI;
 
-
   # later, in client code:
   package main;
   use Bio::Tools::NiftyFeature 3.14;
 
-
   ## alternative usage: NiftyFeature defines own $VERSION:
   package Bio::Tools::NiftyFeature;
   my $VERSION = 9.8;
@@ -39,10 +32,11 @@ Bio::Root::RootI itself uses this module, so any module that directly
 (or indirectly) uses Bio::Root::RootI will get a global $VERSION
 variable set if it's not already.
 
+=head1 AUTHOR Aaron Mackey
+
 =cut
 
-our $VERSION = '1.006924'; # pre-1.7
-$VERSION = eval $VERSION;
+our $VERSION = '1.007000_003';
 
 sub import {
     # try to handle multiple levels of inheritance:
@@ -60,4 +54,5 @@ sub import {
 }
 
 1;
+
 __END__
diff --git a/Bio/Search/HSP/HMMERHSP.pm b/Bio/Search/HSP/HMMERHSP.pm
index 05dee87..70b2ef0 100644
--- a/Bio/Search/HSP/HMMERHSP.pm
+++ b/Bio/Search/HSP/HMMERHSP.pm
@@ -393,5 +393,6 @@ These methods come from Bio::SeqFeature::SimilarityPair
 
 =cut
 
+sub bits { return 0; }
 
 1;
diff --git a/Bio/Search/HSP/ModelHSP.pm b/Bio/Search/HSP/ModelHSP.pm
index 8dd603a..0ea0084 100644
--- a/Bio/Search/HSP/ModelHSP.pm
+++ b/Bio/Search/HSP/ModelHSP.pm
@@ -141,6 +141,25 @@ sub meta {
     return $previous;
 }
 
+=head2 noncanonical_string
+
+ Title   : noncanonical_string
+ Usage   : my $nc_seq = $hsp->noncanonical_string();
+ Function: Returns noncanonical string (NC) data for this HSP or undef
+ Returns : string of noncanonical data or undef
+ Args    : [optional] string to set value
+
+=cut
+
+sub noncanonical_string {
+    my ($self,$value) = @_;
+    my $previous = $self->{'NC_SEQ'};
+    if( defined $value  ) {
+        $self->{'NC_SEQ'} = $value;
+    }
+    return $previous;
+}
+
 =head2 custom_score
 
  Title   : custom_score
diff --git a/Bio/Search/Result/INFERNALResult.pm b/Bio/Search/Result/INFERNALResult.pm
new file mode 100644
index 0000000..15850cc
--- /dev/null
+++ b/Bio/Search/Result/INFERNALResult.pm
@@ -0,0 +1,121 @@
+#
+# BioPerl module for Bio::Search::Result::INFERNALResult.pm
+#
+# Please direct questions and support issues to <bioperl-l at bioperl.org>
+#
+# Cared for by Paul Cantalupo
+#
+# Copyright Paul Cantalupo
+#
+# You may distribute this module under the same terms as perl itself
+
+# POD documentation - main docs before the code
+
+=head1 NAME
+
+Bio::Search::Result::INFERNALResult - A Result object for INFERNAL results
+
+=head1 SYNOPSIS
+
+    # typically one gets Results from a SearchIO stream
+    use Bio::SearchIO;
+    my $io = Bio::SearchIO->new(-format => 'infernal',
+                                -file   => 't/data/cmsearch_output.txt');
+    while( my $result = $io->next_result ) {
+        while( my $hit = $result->next_hit ) {
+          print join(" ", $result->query_name, $result->algorithm, $result->num_hits), "\n";
+        }
+    }
+
+=head1 DESCRIPTION
+
+This object is a specialization of L<Bio::Search::Result::GenericResult>. There
+is one extra method called L<cm_name>.
+
+=head1 FEEDBACK
+
+=head2 Mailing Lists
+
+User feedback is an integral part of the evolution of this and other
+Bioperl modules. Send your comments and suggestions preferably to
+the Bioperl mailing list.  Your participation is much appreciated.
+
+  bioperl-l at bioperl.org                  - General discussion
+  http://bioperl.org/wiki/Mailing_lists  - About the mailing lists
+
+=head2 Support
+
+Please direct usage questions or support issues to the mailing list:
+
+I<bioperl-l at bioperl.org>
+
+rather than to the module maintainer directly. Many experienced and
+reponsive experts will be able look at the problem and quickly
+address it. Please include a thorough description of the problem
+with code and data examples if at all possible.
+
+=head2 Reporting Bugs
+
+Report bugs to the Bioperl bug tracking system to help us keep track
+of the bugs and their resolution. Bug reports can be submitted via the
+web:
+
+  https://github.com/bioperl/bioperl-live/issues
+
+=head1 AUTHOR - Paul Cantalupo
+
+=head1 APPENDIX
+
+The rest of the documentation details each of the object methods.
+Internal methods are usually preceded with a _
+
+=cut
+
+# Let the code begin...
+
+package Bio::Search::Result::INFERNALResult;
+use strict;
+use warnings;
+
+use base qw(Bio::Search::Result::GenericResult);
+
+=head2 new
+
+ Title   : new
+ Usage   : my $obj = Bio::Search::Result::INFERNALResult->new();
+ Function: Builds a new Bio::Search::Result::INFERNALResult object
+ Returns : Bio::Search::Result::INFERNALResult
+ Args    : -cm_name    => string, name of covariance model (CM) file.
+           plus Bio::Search::Result::GenericResult parameters
+
+=cut
+
+sub new {
+  my ($class, @args) = @_;
+  my $self = $class->SUPER::new(@args);
+
+  my ($cm) = $self->_rearrange([qw(CM_NAME)], @args);
+  if (defined $cm) { $self->cm_name($cm) }
+
+  return $self;
+}
+
+=head2 cm_name
+
+ Title   : cm_name
+ Usage   : $obj->cm_name($newvalue)
+ Function: Get/Set value of the covariance model file name (cm_name)
+ Returns : value of cm_name
+ Args    : newvalue (optional)
+
+=cut
+
+sub cm_name {
+  my ($self, $value) = @_;
+  if (defined $value) {
+    $self->{'_cm_name'} = $value;
+  }
+  return $self->{'_cm_name'};
+}
+
+1;
diff --git a/Bio/Search/Tiling/MapTileUtils.pm b/Bio/Search/Tiling/MapTileUtils.pm
index c55e15d..96ef82e 100755
--- a/Bio/Search/Tiling/MapTileUtils.pm
+++ b/Bio/Search/Tiling/MapTileUtils.pm
@@ -539,6 +539,7 @@ use warnings;
 =cut
 
 sub matches_MT {
+    use integer;
     my( $self, @args ) = @_;
     my($type, $action, $beg, $end) = $self->_rearrange( [qw(TYPE ACTION START END)], @args);
     my @actions = qw( identities conserved searchutils );
diff --git a/Bio/SearchIO/Writer/BSMLResultWriter.pm b/Bio/SearchIO/Writer/BSMLResultWriter.pm
deleted file mode 100644
index e40681f..0000000
--- a/Bio/SearchIO/Writer/BSMLResultWriter.pm
+++ /dev/null
@@ -1,354 +0,0 @@
-#
-# BioPerl module for Bio::SearchIO::Writer::BSMLResultWriter
-#
-# Please direct questions and support issues to <bioperl-l at bioperl.org> 
-#
-# Cared for by Jason Stajich <jason-at-bioperl-dot-org>
-#
-# Copyright Jason Stajich
-#
-# You may distribute this module under the same terms as perl itself
-
-# POD documentation - main docs before the code
-
-=head1 NAME
-
-Bio::SearchIO::Writer::BSMLResultWriter - BSML output writer
-
-=head1 SYNOPSIS
-
-  use Bio::SearchIO;
-  my $in = Bio::SearchIO->new(-file   => 'result.blast',
-                             -format => 'blast');
-  my $out = Bio::SearchIO->new(-output_format  => 'BSMLResultWriter',
-                              -file           => ">result.bsml");
-  while( my $r = $in->next_result ) {
-    $out->write_result($r);
-  }
-
-=head1 DESCRIPTION
-
-This is a writer to produce BSML for a search result.
-
-=head1 FEEDBACK
-
-=head2 Mailing Lists
-
-User feedback is an integral part of the evolution of this and other
-Bioperl modules. Send your comments and suggestions preferably to
-the Bioperl mailing list.  Your participation is much appreciated.
-
-  bioperl-l at bioperl.org                  - General discussion
-  http://bioperl.org/wiki/Mailing_lists  - About the mailing lists
-
-=head2 Support 
-
-Please direct usage questions or support issues to the mailing list:
-
-I<bioperl-l at bioperl.org>
-
-rather than to the module maintainer directly. Many experienced and 
-reponsive experts will be able look at the problem and quickly 
-address it. Please include a thorough description of the problem 
-with code and data examples if at all possible.
-
-=head2 Reporting Bugs
-
-Report bugs to the Bioperl bug tracking system to help us keep track
-of the bugs and their resolution. Bug reports can be submitted via
-the web:
-
-  https://github.com/bioperl/bioperl-live/issues
-
-=head1 AUTHOR - Jason Stajich
-
-Email jason-at-bioperl-dot-org
-
-=head1 APPENDIX
-
-The rest of the documentation details each of the object methods.
-Internal methods are usually preceded with a _
-
-=cut
-
-
-# Let the code begin...
-
-
-package Bio::SearchIO::Writer::BSMLResultWriter;
-use strict;
-
-use XML::Writer;
-use IO::String;
-
-use base qw(Bio::Root::Root Bio::SearchIO::SearchWriterI);
-
-
-=head2 new
-
- Title   : new
- Usage   : my $obj = Bio::SearchIO::Writer::BSMLResultWriter->new();
- Function: Builds a new Bio::SearchIO::Writer::BSMLResultWriter object 
- Returns : an instance of Bio::SearchIO::Writer::BSMLResultWriter
- Args    :
-
-
-=cut
-
-sub new {
-  my($class, at args) = @_;
-
-  my $self = $class->SUPER::new(@args);
-  return $self;
-}
-
-=head2 to_string
-
- Purpose   : Produces data for each Search::Result::ResultI in a string.
-           : This is an abstract method. For some useful implementations,
-           : see ResultTableWriter.pm, HitTableWriter.pm, 
-           : and HSPTableWriter.pm.
- Usage     : print $writer->to_string( $result_obj, @args );
- Argument  : $result_obj = A Bio::Search::Result::ResultI object
-           : @args = any additional arguments used by your implementation.
- Returns   : String containing data for each search Result or any of its
-           : sub-objects (Hits and HSPs).
- Throws    : n/a
-
-=cut
-
-# this implementation is largely adapted from the Incogen XSLT stylesheet
-# to convert NCBI BLAST XML to BSML
-
-sub to_string {
-    my ($self,$result,$num) = @_;
-    my $str = new IO::String();
-    my $writer = new XML::Writer(OUTPUT     => $str,
-				 DATA_INDENT => 1,
-				 DATA_MODE   => 1);
-    $writer->xmlDecl('UTF-8');
-    $writer->doctype('Bsml','-//EBI//Labbook, Inc. BSML DTD//EN',
-		     'http://www.labbook.com/dtd/bsml3_1.dtd');
-    $writer->startTag('Bsml');
-    $writer->startTag('Definitions');
-    $writer->startTag('Sequences');
-    my $reporttype = $result->algorithm;
-    my ($qmoltype,$hmoltype);
-    my $hit = $result->next_hit;
-    my $hsp = $hit->next_hsp;
-    if( $hsp->query->strand == 0 ) { $qmoltype = 'aa' }
-    else { $qmoltype = 'nt' }
-    
-    if( $hsp->hit->strand == 0 ) { $hmoltype = 'aa' }
-    else { $hmoltype = 'nt' }
-	
-    $writer->startTag('Sequence',
-		      'length' => $result->query_length,
-		      'title'  => $result->query_name . " ". $result->query_description,
-		      'molecule' => $qmoltype,
-		      'representation' => 'virtual',
-		      'id'     => $result->query_name
-		      );
-    # Here we're annotating the Query sequence with hits
-    # hence the Feature-table
-    $writer->startTag('Feature-tables');
-    $writer->startTag('Feature-table',
-		      'title' => "$reporttype Result", 
-		      'class' => $reporttype);
-    my ($hitnum,$hspnum) = (1,1);
-    foreach my $hit ( $result->hits ) {	
-	$hspnum = 1;
-	foreach my $hsp ( $hit->hsps ) {
-	    $writer->startTag('Feature',
-			      'class'  => $reporttype,
-			      'value-type' => 'alignment',
-			      'title'  => $hit->name. " ". $hit->description,
-			      );
-
-	    $writer->emptyTag('Interval-loc',
-			      'startpos' => $hsp->query->start,
-			      'endpos'   => $hsp->query->end);
-	    $writer->emptyTag('Qualifier',
-			      'value-type' => 'score',
-			      'value'      => $hsp->score,
-			      );
-	    
-	    $writer->emptyTag('Qualifier',
-			      'value-type' => 'target-start',
-			      'value'      => $hsp->hit->start,
-			      );
-	    $writer->emptyTag('Qualifier',
-			      'value-type' => 'target-end',
-			      'value'      => $hsp->hit->end,
-			      );
-	    $writer->emptyTag('Link',
-			      'title' => 'alignment',
-			      'href'  => sprintf("#SPA%d.%d",$hitnum,$hspnum)
-			      );
-	    
-	    if( $hsp->hit->strand < 0 ) {
-		$writer->emptyTag('Qualifier',
-				  'value-type' => 'target-on-complement',
-				  'value'      => 1,
-				  );
-	    }
-	    $hspnum++;
-	    $writer->endTag('Feature');
-	}
-	$hitnum++;
-    }
-    $writer->endTag('Feature-table');
-    $writer->endTag('Feature-tables');
-    $writer->endTag('Sequence');
-    $writer->endTag('Sequences');
-
-    $writer->startTag('Tables');
-    $writer->startTag('Sequence-search-table',
-		      'search-type' => $reporttype,
-		      'query-length' => $result->query_length);
-    $hitnum = $hspnum = 1;
-    foreach my $hit ( $result->hits ) {
-	$hspnum = 1;
-	foreach my $hsp ( $hit->hsps ) {
-	    $writer->startTag('Seq-pair-alignment',
-			      'id' => sprintf("SPA%d.%d",$hitnum,$hspnum),
-			      'method'       => join(' ',$result->algorithm), 
-			      'compxref'     => sprintf("%s:%s",
-						'',$result->query_name),
-			      'refxref'      => sprintf("%s:%s",
-							$result->database_name,
-							$hit->name),
-			      'refseq'       => $hit->name,
-			      'title'        => $result->query_name,
-			      'compseq'      => $result->query_name,
-			      'compcaption'  => $result->query_name . ' ' .
-			                         $result->query_description,
-			      'refcaption'   => $hit->name . " ". 
-                                                 $hit->description,
-			      'totalscore'   => $hsp->score,
-			      'refstart'     => $hsp->query->start,
-			      'refend'       => $hsp->query->end,
-			      'compstart'    => $hsp->hit->start,
-			      'compend'      => $hsp->hit->end,
-			      'complength'   => $hit->length,
-			      'reflength'    => $result->query_length);
-
-	    $writer->emptyTag('Attribute',
-			      'name'    => 'hit-num',
-			      'content' => $hitnum);
-	    $writer->emptyTag('Attribute',
-			      'name'    => 'hit-id',
-			      'content' => $hit->name);
-	    $writer->emptyTag('Attribute',
-			      'name'    => 'hsp-num',
-			      'content' => $hspnum);
-	    $writer->emptyTag('Attribute',
-			      'name'    => 'hsp-bit-score',
-			      'content' => $hsp->bits);
-	    $writer->emptyTag('Attribute',
-			      'name'    => 'hsp-evalue',
-			      'content' => $hsp->evalue);
-	    $writer->emptyTag('Attribute',
-			      'name'    => 'pattern-from',
-			      'content' => 0);
-	    $writer->emptyTag('Attribute',
-			      'name'    => 'pattern-to',
-			      'content' => 0);
-	    $writer->emptyTag('Attribute',
-			      'name'    => 'query-frame',
-			      'content' => $hsp->query->frame);
-	    $writer->emptyTag('Attribute',
-			      'name'    => 'hit-frame',
-			      'content' => $hsp->hit->frame * $hsp->hit->strand);
-	    $writer->emptyTag('Attribute',
-			      'name'    => 'percent_identity',
-			      'content' => sprintf("%.2f",$hsp->percent_identity));
-	    $writer->emptyTag('Attribute',
-			      'name'    => 'percent_similarity',
-			      'content' => sprintf("%.2f",$hsp->frac_conserved('total') * 100));	    
-	    my $cons = $hsp->frac_conserved('total') * $hsp->length('total');
-	    my $ident = $hsp->frac_identical('total') * $hsp->length('total');
-	    
-	    $writer->emptyTag('Attribute',
-			      'name'    => 'identity',
-			      'content' => $ident);
-	    $writer->emptyTag('Attribute',
-			      'name'    => 'positive',
-			      'content' => $cons);
-	    $writer->emptyTag('Attribute',
-			      'name'    => 'gaps',
-			      'content' => $hsp->gaps('total'));
-	    $writer->emptyTag('Attribute',
-			      'name'    => 'align-len',
-			      'content' => $hsp->length('total'));
-	    $writer->emptyTag('Attribute',
-			      'name'    => 'density',
-			      'content' => 0);
-	    $writer->emptyTag('Attribute',
-			      'name'    => 'hit-len',
-			      'content' => $hit->length);
-	    my @extrafields;
-
-	    $writer->emptyTag('Seq-pair-run',
-			      'runlength'     => $hsp->hit->length,
-			      'comprunlength' => $hsp->hsp_length,
-			      'complength'    => $hsp->hit->length,
-			      'compcomplement'=> $hsp->hit->strand < 0 ? 1 :0,
-			      'refcomplement' => $hsp->query->strand < 0 ? 1 :0,
-			      'refdata'       => $hsp->query_string,
-			      'compdata'      => $hsp->hit_string,
-			      'alignment'     => $hsp->homology_string,
-			      );
-	    $hspnum++;
-	    $writer->endTag('Seq-pair-alignment');
-	}
-	$hitnum++;
-    }
-    $writer->endTag('Sequence-search-table');
-    $writer->endTag('Tables');
-    
-    $writer->startTag('Research');
-    $writer->startTag('Analyses');
-    $writer->startTag('Analysis');
-    $writer->emptyTag('Attribute',
-		      'name'    => 'program',
-		      'content' => $reporttype);
-    $writer->emptyTag('Attribute',
-		      'name'    => 'version',
-		      'content' => join(' ',$reporttype, 
-					$result->algorithm_version));
-    $writer->emptyTag('Attribute',
-		      'name'     => 'reference',
-		      'content'  => $result->algorithm_reference);
-    $writer->emptyTag('Attribute',
-		      'name'     => 'db',
-		      'content'  => $result->database_name);
-    $writer->emptyTag('Attribute',
-		      'name'     => 'db-size',
-		      'content'  => $result->database_entries);
-    $writer->emptyTag('Attribute',
-		      'name'     => 'db-length',
-		      'content'  => $result->database_letters);
-    # $writer->emptyTag('Attribute',
-    # 'name'     => 'iter-num',
-    # 'content'  => $result->iteration_num);
-    foreach my $attr ( $result->available_parameters ) {
-	$writer->emptyTag('Attribute',
-			  'name'     => $attr,
-			  'content'  => $result->get_parameter($attr));
-    }
-    foreach my $attr ( $result->available_statistics ) {
-	$writer->emptyTag('Attribute',
-			  'name'     => $attr,
-			  'content'  => $result->get_statistic($attr));
-    }
-    $writer->endTag('Analysis');    
-    $writer->endTag('Analyses');    
-    $writer->endTag('Research');
-    
-    $writer->endTag('Definitions');   
-    $writer->endTag('Bsml');   
-    $writer->end();
-    return ${$str->string_ref};
-}
-1;
diff --git a/Bio/SearchIO/Writer/GbrowseGFF.pm b/Bio/SearchIO/Writer/GbrowseGFF.pm
index c2d7bb1..6e34d6a 100644
--- a/Bio/SearchIO/Writer/GbrowseGFF.pm
+++ b/Bio/SearchIO/Writer/GbrowseGFF.pm
@@ -176,7 +176,7 @@ sub to_string {
     my $gffio = Bio::Tools::GFF->new(-gff_version => $format); # try to set it
     
     # just in case that behaviour changes (at the moment, an invalid format throws an exception, but it might return undef in the future
-    return "" unless defined $gffio;  # be kind and don't return undef in case the person is putting teh output directly into a printstatement without testing it
+    return "" unless defined $gffio;  # be kind and don't return undef in case the person is putting the output directly into a print statement without testing it
     # now $gffio is either false, or a valid GFF formatter
 
     my ($GFF,$cigar,$score);
diff --git a/Bio/SearchIO/XML/BlastHandler.pm b/Bio/SearchIO/XML/BlastHandler.pm
deleted file mode 100644
index e0abfe3..0000000
--- a/Bio/SearchIO/XML/BlastHandler.pm
+++ /dev/null
@@ -1,315 +0,0 @@
-#
-# BioPerl module for Bio::SearchIO::XML::BlastHandler
-#
-# Please direct questions and support issues to <bioperl-l at bioperl.org> 
-#
-# Cared for by Jason Stajich, Chris Fields
-#
-# Copyright Jason Stajich
-#
-# You may distribute this module under the same terms as perl itself
-
-# POD documentation - main docs before the code
-
-=head1 NAME
-
-Bio::SearchIO::XML::BlastHandler - XML Handler for NCBI Blast XML parsing.
-
-=head1 SYNOPSIS
-
-  # This is not to be used directly.
-
-=head1 DESCRIPTION
-
-This is the XML handler for BLAST XML parsing. Currently it passes elements off
-to the event handler, which is ultimately responsible for Bio::Search object
-generation.
-
-This was recently split off from the original code for Bio::SearchIO::blastxml
-primarily for maintenance purposes.
-
-=head1 DEPENDENCIES
-
-In addition to parts of the Bio:: hierarchy, this module uses:
-
- XML::SAX::Base
-
-which comes with the XML::SAX distribution.
-
-=head1 FEEDBACK
-
-=head2 Mailing Lists
-
-User feedback is an integral part of the evolution of this and other
-Bioperl modules. Send your comments and suggestions preferably to
-the Bioperl mailing list.  Your participation is much appreciated.
-
-  bioperl-l at bioperl.org                  - General discussion
-  http://bioperl.org/wiki/Mailing_lists  - About the mailing lists
-
-=head2 Support 
-
-Please direct usage questions or support issues to the mailing list:
-
-I<bioperl-l at bioperl.org>
-
-rather than to the module maintainer directly. Many experienced and 
-reponsive experts will be able look at the problem and quickly 
-address it. Please include a thorough description of the problem 
-with code and data examples if at all possible.
-
-=head2 Reporting Bugs
-
-Report bugs to the Bioperl bug tracking system to help us keep track
-of the bugs and their resolution. Bug reports can be submitted via the
-web:
-
-  https://github.com/bioperl/bioperl-live/issues
-
-=head1 AUTHOR - Jason Stajich, Chris Fields
-
-Email jason-at-bioperl.org
-Email cjfields-at-uiuc dot edu
-
-=head1 APPENDIX
-
-The rest of the documentation details each of the object methods.
-Internal methods are usually preceded with a _
-
-=cut
-
-# Let the code begin...
-package Bio::SearchIO::XML::BlastHandler;
-use base qw(Bio::Root::Root XML::SAX::Base);
-
-my %MODEMAP = (
-                'Iteration'   => 'result',
-                'Hit'         => 'hit',
-                'Hsp'         => 'hsp'
-);
-
-# major post 2.2.12 BLAST XML changes
-# 1) moved XML Handler to it's own class
-# 2) reconfigure blastxml to deal with old and new BLAST XML output
-
-my %MAPPING = (
-                # Result-specific fields
-                'BlastOutput_program'   => 'RESULT-algorithm_name',
-                'BlastOutput_version'   => 'RESULT-algorithm_version',
-                'BlastOutput_db'        => 'RESULT-database_name',
-                'BlastOutput_reference' => 'RESULT-program_reference',
-                'BlastOutput_query-def' => 'RESULT-query_description',
-                'BlastOutput_query-len' => 'RESULT-query_length',
-                'BlastOutput_query-ID'  => 'runid',                
-                'Parameters_matrix'     => { 'RESULT-parameters' => 'matrix'},
-                'Parameters_expect'     => { 'RESULT-parameters' => 'expect'},
-                'Parameters_include'    => { 'RESULT-parameters' => 'include'},
-                'Parameters_sc-match'   => { 'RESULT-parameters' => 'match'},
-                'Parameters_sc-mismatch' => { 'RESULT-parameters' => 'mismatch'},
-                'Parameters_gap-open'   => { 'RESULT-parameters' => 'gapopen'},
-                'Parameters_gap-extend' => { 'RESULT-parameters' => 'gapext'},
-                'Parameters_filter'     => {'RESULT-parameters' => 'filter'},
-                'Statistics_db-num'     => 'RESULT-database_entries',
-                'Statistics_db-len'     => 'RESULT-database_letters',
-                'Statistics_hsp-len'    => { 'RESULT-statistics' => 'hsplength'},
-                'Statistics_eff-space'  => { 'RESULT-statistics' => 'effectivespace'},
-                'Statistics_kappa'      => { 'RESULT-statistics' => 'kappa' },
-                'Statistics_lambda'     => { 'RESULT-statistics' => 'lambda' },
-                'Statistics_entropy'    => { 'RESULT-statistics' => 'entropy'},
-                
-                # HSP specific fields
-                'Hsp_bit-score'  => 'HSP-bits',
-                'Hsp_score'      => 'HSP-score',
-                'Hsp_evalue'     => 'HSP-evalue',
-                'Hsp_query-from' => 'HSP-query_start',
-                'Hsp_query-to'   => 'HSP-query_end',
-                'Hsp_hit-from'   => 'HSP-hit_start',
-                'Hsp_hit-to'     => 'HSP-hit_end',
-                'Hsp_positive'   => 'HSP-conserved',
-                'Hsp_identity'   => 'HSP-identical',
-                'Hsp_gaps'       => 'HSP-gaps',
-                'Hsp_hitgaps'    => 'HSP-hit_gaps',
-                'Hsp_querygaps'  => 'HSP-query_gaps',
-                'Hsp_qseq'       => 'HSP-query_seq',
-                'Hsp_hseq'       => 'HSP-hit_seq',
-                'Hsp_midline'    => 'HSP-homology_seq',
-                'Hsp_align-len'  => 'HSP-hsp_length',
-                'Hsp_query-frame'=> 'HSP-query_frame',
-                'Hsp_hit-frame'  => 'HSP-hit_frame',
-
-                # Hit specific fields
-                'Hit_id'               => 'HIT-name',
-                'Hit_len'              => 'HIT-length',
-                'Hit_accession'        => 'HIT-accession',
-                'Hit_def'              => 'HIT-description',
-                'Hit_num'              => 'HIT-order',
-                'Iteration_iter-num'   => 'HIT-iteration',
-                'Iteration_stat'       => 'HIT-iteration_statistic',
-                
-                # if these tags are present, they will overwrite the
-                # above with more current data (i.e. multiquery hits)
-                'Iteration_query-def'   => 'RESULT-query_description',
-                'Iteration_query-len'   => 'RESULT-query_length',       
-                'Iteration_query-ID'    => 'runid',
-               );
-
-# these XML tags are ignored for now
-my %IGNOREDTAGS = (
-                'Hsp_num'              => 1,#'HSP-order',
-                'Hsp_pattern-from'     => 1,#'patternend',
-                'Hsp_pattern-to'       => 1,#'patternstart',
-                'Hsp_density'          => 1,#'hspdensity',
-                'Iteration_message'    => 1,
-                'Hit_hsps'             => 1,
-                'BlastOutput_param'    => 1,
-                'Iteration_hits'       => 1,
-                'Statistics'           => 1,
-                'Parameters'           => 1,
-                'BlastOutput'          => 1,
-                'BlastOutput_iterations' => 1,     
-                   );
-
-=head2 SAX methods
-
-=cut
-
-=head2 start_document
-
- Title   : start_document
- Usage   : $parser->start_document;
- Function: SAX method to indicate starting to parse a new document
- Returns : none
- Args    : none
-
-=cut
-
-sub start_document{
-    my ($self) = @_;
-    $self->{'_lasttype'} = '';
-    $self->{'_values'} = {};
-    $self->{'_result'}= [];
-}
-
-=head2 end_document
-
- Title   : end_document
- Usage   : $parser->end_document;
- Function: SAX method to indicate finishing parsing a new document
- Returns : Bio::Search::Result::ResultI object
- Args    : none
-
-=cut
-
-sub end_document{
-   my ($self, at args) = @_;
-   
-   # reset data carried throughout parse
-   $self->{'_resultdata'} = undef;
-   
-   # pass back ref to results queue; caller must reset handler results queue
-   return $self->{'_result'};
-}
-
-=head2 start_element
-
- Title   : start_element
- Usage   : $parser->start_element($data)
- Function: SAX method to indicate starting a new element
- Returns : none
- Args    : hash ref for data
-
-=cut
-
-sub start_element{
-    my ($self,$data) = @_;
-    # we currently don't care about attributes
-    my $nm = $data->{'Name'};
-
-    if( my $type = $MODEMAP{$nm} ) {
-        if( $self->eventHandler->will_handle($type) ) {
-            my $func = sprintf("start_%s",lc $type);
-            $self->eventHandler->$func($data->{'Attributes'});
-        }                                                    
-    }
-}
-
-=head2 end_element
-
- Title   : end_element
- Usage   : $parser->end_element($data)
- Function: Signals finishing an element
- Returns : Bio::Search object dpending on what type of element
- Args    : hash ref for data
-
-=cut
-
-sub end_element{
-    my ($self,$data) = @_;
-
-    my $nm = $data->{'Name'};
-    my $rc;
-    if($nm eq 'BlastOutput_program' &&
-       $self->{'_last_data'} =~ /(t?blast[npx])/i ) {
-        $self->{'_type'} = uc $1; 
-    }
-    if ($nm eq 'Iteration') {
-        map {
-            $self->{'_values'}->{$_} = $self->{'_resultdata'}->{$_};
-            } keys %{ $self->{'_resultdata'} };
-    }
-    if( my $type = $MODEMAP{$nm} ) {
-        if( $self->eventHandler->will_handle($type) ) {
-            my $func = sprintf("end_%s",lc $type);
-            $rc = $self->eventHandler->$func($self->{'_type'},
-                                              $self->{'_values'});
-        }
-    }
-    elsif( exists $MAPPING{$nm} ) { 
-        if ( ref($MAPPING{$nm}) =~ /hash/i ) {
-            my $key = (keys %{$MAPPING{$nm}})[0];
-            $self->{'_values'}->{$key}->{$MAPPING{$nm}->{$key}} = $self->{'_last_data'};
-        } else {
-            $self->{'_values'}->{$MAPPING{$nm}} = $self->{'_last_data'};
-        }
-    }
-    elsif( exists $IGNOREDTAGS{$nm} ){
-        # ignores these elements for now
-    }
-    else {      
-        $self->debug("ignoring unrecognized element type $nm\n");
-    }
-    $self->{'_last_data'} = ''; # remove read data if we are at 
-                                # end of an element
-                                
-    # add to ResultI array
-    $self->{'_result'} = $rc if( $nm eq 'Iteration' );
-    # reset values for each Result round
-    if ($nm eq 'Iteration') {
-        $self->{'_values'} = {};
-    }
-}
-
-=head2 characters
-
- Title   : characters
- Usage   : $parser->characters($data)
- Function: Signals new characters to be processed
- Returns : characters read
- Args    : hash ref with the key 'Data'
-
-
-=cut
-
-sub characters{
-   my ($self,$data) = @_;
-   return unless ( defined $data->{'Data'} && $data->{'Data'} !~ /^\s+$/ );
-   $self->{'_last_data'} .= $data->{'Data'};
-}
-
-sub eventHandler {
-    my $self = shift;
-    return $self->{'_handler'} = shift if @_;
-    return $self->{'_handler'};
-}
-
-1;
diff --git a/Bio/SearchIO/XML/PsiBlastHandler.pm b/Bio/SearchIO/XML/PsiBlastHandler.pm
deleted file mode 100644
index 46681f5..0000000
--- a/Bio/SearchIO/XML/PsiBlastHandler.pm
+++ /dev/null
@@ -1,312 +0,0 @@
-#
-# BioPerl module for Bio::SearchIO::XML::PsiBlastHandler
-#
-# Please direct questions and support issues to <bioperl-l at bioperl.org> 
-#
-# Cared for by Jason Stajich, Chris Fields
-#
-# Copyright Chris Fields
-#
-# You may distribute this module under the same terms as perl itself
-
-# POD documentation - main docs before the code
-
-=head1 NAME
-
-Bio::SearchIO::XML::PsiBlastHandler - XML Handler for NCBI Blast PSIBLAST XML parsing.
-
-=head1 SYNOPSIS
-
-  # This is not to be used directly.
-
-=head1 DESCRIPTION
-
-This is the XML handler for BLAST PSIBLAST XML parsing. Currently it passes
-elements off to the event handler, which is ultimately responsible for
-Bio::Search object generation.
-
-This was recently split off from the original code for Bio::SearchIO::blastxml
-primarily for maintenance purposes.
-
-=head1 DEPENDENCIES
-
-In addition to parts of the Bio:: hierarchy, this module uses:
-
- XML::SAX::Base
-
-which comes with the XML::SAX distribution.
-
-=head1 FEEDBACK
-
-=head2 Mailing Lists
-
-User feedback is an integral part of the evolution of this and other
-Bioperl modules. Send your comments and suggestions preferably to
-the Bioperl mailing list.  Your participation is much appreciated.
-
-  bioperl-l at bioperl.org                  - General discussion
-  http://bioperl.org/wiki/Mailing_lists  - About the mailing lists
-
-=head2 Support 
-
-Please direct usage questions or support issues to the mailing list:
-
-I<bioperl-l at bioperl.org>
-
-rather than to the module maintainer directly. Many experienced and 
-reponsive experts will be able look at the problem and quickly 
-address it. Please include a thorough description of the problem 
-with code and data examples if at all possible.
-
-=head2 Reporting Bugs
-
-Report bugs to the Bioperl bug tracking system to help us keep track
-of the bugs and their resolution. Bug reports can be submitted via the
-web:
-
-  https://github.com/bioperl/bioperl-live/issues
-
-=head1 AUTHOR - Jason Stajich, Chris Fields
-
-Email jason-at-bioperl.org
-Email cjfields-at-uiuc dot edu
-
-=head1 APPENDIX
-
-The rest of the documentation details each of the object methods.
-Internal methods are usually preceded with a _
-
-=cut
-
-# Let the code begin...
-package Bio::SearchIO::XML::PsiBlastHandler;
-use base qw(Bio::Root::Root XML::SAX::Base);
-
-my %MODEMAP = (
-    'BlastOutput'   => 'result',
-    'Iteration'     => 'iteration',
-    'Hit'           => 'hit',
-    'Hsp'           => 'hsp'
-);
-
-# MAPPING is distinct from BlastHandler, can't really mix the two...
-
-my %MAPPING = (
-                # Result-specific fields
-                'BlastOutput_program'   => 'RESULT-algorithm_name',
-                'BlastOutput_version'   => 'RESULT-algorithm_version',
-                'BlastOutput_db'        => 'RESULT-database_name',
-                'BlastOutput_reference' => 'RESULT-program_reference',
-                'BlastOutput_query-def' => 'RESULT-query_description',
-                'BlastOutput_query-len' => 'RESULT-query_length',
-                'BlastOutput_query-ID'  => 'runid',
-                'Parameters_matrix'     => { 'RESULT-parameters' => 'matrix'},
-                'Parameters_expect'     => { 'RESULT-parameters' => 'expect'},
-                'Parameters_include'    => { 'RESULT-parameters' => 'include'},
-                'Parameters_sc-match'   => { 'RESULT-parameters' => 'match'},
-                'Parameters_sc-mismatch' => { 'RESULT-parameters' => 'mismatch'},
-                'Parameters_gap-open'   => { 'RESULT-parameters' => 'gapopen'},
-                'Parameters_gap-extend' => { 'RESULT-parameters' => 'gapext'},
-                'Parameters_filter'     => {'RESULT-parameters' => 'filter'},
-                'Statistics_db-num'     => 'RESULT-database_entries',
-                'Statistics_db-len'     => 'RESULT-database_letters',
-                'Statistics_hsp-len'    => { 'RESULT-statistics' => 'hsplength'},
-                'Statistics_eff-space'  => { 'RESULT-statistics' => 'effectivespace'},
-                'Statistics_kappa'      => { 'RESULT-statistics' => 'kappa' },
-                'Statistics_lambda'     => { 'RESULT-statistics' => 'lambda' },
-                'Statistics_entropy'    => { 'RESULT-statistics' => 'entropy'},
-
-                # Iteration-specific parameters
-                'Iteration_iter-num'  => 'ITERATION-number',
-                'Iteration_converged' => 'ITERATION-converged',
-
-                # HSP specific fields
-                'Hsp_bit-score'  => 'HSP-bits',
-                'Hsp_score'      => 'HSP-score',
-                'Hsp_evalue'     => 'HSP-evalue',
-                'Hsp_query-from' => 'HSP-query_start',
-                'Hsp_query-to'   => 'HSP-query_end',
-                'Hsp_hit-from'   => 'HSP-hit_start',
-                'Hsp_hit-to'     => 'HSP-hit_end',
-                'Hsp_positive'   => 'HSP-conserved',
-                'Hsp_identity'   => 'HSP-identical',
-                'Hsp_gaps'       => 'HSP-gaps',
-                'Hsp_hitgaps'    => 'HSP-hit_gaps',
-                'Hsp_querygaps'  => 'HSP-query_gaps',
-                'Hsp_qseq'       => 'HSP-query_seq',
-                'Hsp_hseq'       => 'HSP-hit_seq',
-                'Hsp_midline'    => 'HSP-homology_seq',
-                'Hsp_align-len'  => 'HSP-hsp_length',
-                'Hsp_query-frame'=> 'HSP-query_frame',
-                'Hsp_hit-frame'  => 'HSP-hit_frame',
-
-                # Hit specific fields
-                'Hit_id'               => 'HIT-name',
-                'Hit_len'              => 'HIT-length',
-                'Hit_accession'        => 'HIT-accession',
-                'Hit_def'              => 'HIT-description',
-                'Hit_num'              => 'HIT-order',
-                'Iteration_iter-num'   => 'HIT-iteration',
-                'Iteration_stat'       => 'HIT-iteration_statistic',
-               );
-
-# these XML tags are ignored for now
-my %IGNOREDTAGS = (
-                'Hsp_num'              => 1,#'HSP-order',
-                'Hsp_pattern-from'     => 1,#'patternend',
-                'Hsp_pattern-to'       => 1,#'patternstart',
-                'Hsp_density'          => 1,#'hspdensity',
-                'Iteration_message'    => 1,
-                'Hit_hsps'             => 1,
-                'BlastOutput_param'    => 1,
-                'Iteration_hits'       => 1,
-                'Statistics'           => 1,
-                'Parameters'           => 1,
-                'BlastOutput'          => 1,
-                'BlastOutput_iterations' => 1,
-                   );
-
-=head2 SAX methods
-
-=cut
-
-=head2 start_document
-
- Title   : start_document
- Usage   : $parser->start_document;
- Function: SAX method to indicate starting to parse a new document
- Returns : none
- Args    : none
-
-=cut
-
-sub start_document{
-    my ($self) = @_;
-    $self->{'_lasttype'} = '';
-    $self->{'_values'} = {};
-    $self->{'_result'}= [];
-}
-
-=head2 end_document
-
- Title   : end_document
- Usage   : $parser->end_document;
- Function: SAX method to indicate finishing parsing a new document
- Returns : Bio::Search::Result::ResultI object
- Args    : none
-
-=cut
-
-sub end_document{
-   my ($self, at args) = @_;
-   
-   # reset data carried throughout parse
-   $self->{'_resultdata'} = undef;
-   
-   # pass back ref to results queue; caller must reset handler results queue
-   return $self->{'_result'};
-}
-
-=head2 start_element
-
- Title   : start_element
- Usage   : $parser->start_element($data)
- Function: SAX method to indicate starting a new element
- Returns : none
- Args    : hash ref for data
-
-=cut
-
-sub start_element{
-    my ($self,$data) = @_;
-    # we currently don't care about attributes
-    my $nm = $data->{'Name'};
-
-    if( my $type = $MODEMAP{$nm} ) {
-        if( $self->eventHandler->will_handle($type) ) {
-            my $func = sprintf("start_%s",lc $type);
-            $self->eventHandler->$func($data->{'Attributes'});
-        }                                                    
-    }
-}
-
-=head2 end_element
-
- Title   : end_element
- Usage   : $parser->end_element($data)
- Function: Signals finishing an element
- Returns : Bio::Search object dpending on what type of element
- Args    : hash ref for data
-
-=cut
-
-sub end_element{
-    my ($self,$data) = @_;
-
-    my $nm = $data->{'Name'};
-    my $rc;
-    if($nm eq 'BlastOutput_program' &&
-       $self->{'_last_data'} =~ /(t?blast[npx])/i ) {
-        $self->{'_type'} = uc $1; 
-    }
-    if ($nm eq 'Iteration') {
-        map {
-            $self->{'_values'}->{$_} = $self->{'_resultdata'}->{$_};
-            } keys %{ $self->{'_resultdata'} };
-    }
-    if( my $type = $MODEMAP{$nm} ) {
-        if( $self->eventHandler->will_handle($type) ) {
-            my $func = sprintf("end_%s",lc $type);
-            $rc = $self->eventHandler->$func($self->{'_type'},
-                                              $self->{'_values'});
-        }
-    }
-    elsif( exists $MAPPING{$nm} ) {
-        if ( ref($MAPPING{$nm}) =~ /hash/i ) {
-            my $key = (keys %{$MAPPING{$nm}})[0];
-            $self->{'_values'}->{$key}->{$MAPPING{$nm}->{$key}} = $self->{'_last_data'};
-        } else {
-            $self->{'_values'}->{$MAPPING{$nm}} = $self->{'_last_data'};
-        }
-    }
-    elsif( exists $IGNOREDTAGS{$nm} ){
-        # ignores these elements for now
-    }
-    else {      
-        $self->debug("ignoring unrecognized element type $nm\n");
-    }
-    $self->{'_last_data'} = ''; # remove read data if we are at 
-                                # end of an element
-                                
-    # add to ResultI array
-    $self->{'_result'} = $rc if( $nm eq 'BlastOutput' );
-    # reset values for each Result round
-    if ($nm eq 'BlastOutput') {
-        $self->{'_values'} = {};
-    }
-}
-
-=head2 characters
-
- Title   : characters
- Usage   : $parser->characters($data)
- Function: Signals new characters to be processed
- Returns : characters read
- Args    : hash ref with the key 'Data'
-
-
-=cut
-
-sub characters{
-   my ($self,$data) = @_;
-   return unless ( defined $data->{'Data'} && $data->{'Data'} !~ /^\s+$/ );
-   $self->{'_last_data'} .= $data->{'Data'};
-}
-
-sub eventHandler {
-    my $self = shift;
-    return $self->{'_handler'} = shift if @_;
-    return $self->{'_handler'};
-}
-
-1;
diff --git a/Bio/SearchIO/blastxml.pm b/Bio/SearchIO/blastxml.pm
deleted file mode 100644
index 90d5ac5..0000000
--- a/Bio/SearchIO/blastxml.pm
+++ /dev/null
@@ -1,475 +0,0 @@
-#
-# BioPerl module for Bio::SearchIO::blastxml
-#
-# Please direct questions and support issues to <bioperl-l at bioperl.org>
-#
-# Cared for by Jason Stajich <jason at bioperl.org>
-#
-# Copyright Jason Stajich
-#
-# You may distribute this module under the same terms as perl itself
-
-# POD documentation - main docs before the code
-
-=head1 NAME
-
-Bio::SearchIO::blastxml - A SearchIO implementation of NCBI Blast XML parsing.
-
-=head1 SYNOPSIS
-
-    use Bio::SearchIO;
-    my $searchin = Bio::SearchIO->new(-format => 'blastxml',
-				     -file   => 't/data/plague_yeast.bls.xml');
-
-    while( my $result = $searchin->next_result ) {
-        ....
-    }
-
-    # one can also request that the parser NOT keep the XML data in memory
-    # by using the tempfile initialization flag.
-
-    $searchin = Bio::SearchIO->new(-tempfile => 1,
-				     -format => 'blastxml',
-				     -file   => 't/data/plague_yeast.bls.xml');
-
-    while( my $result = $searchin->next_result ) {
-       ....
-    }
-
-    # PSI-BLAST parsing (default is normal BLAST)
-    $searchin = Bio::SearchIO->new(
-                     -format => 'blastxml',
-                     -blasttype => 'psiblast',
-				     -file   => 't/data/plague_yeast.bls.xml');
-
-    while( my $result = $searchin->next_result ) {
-       ....
-    }
-
-=head1 DESCRIPTION
-
-This object implements a NCBI Blast XML parser.  It requires XML::SAX; it is
-also recommended (for faster parsing) that XML::SAX::ExpatXS or XML::LibXML
-be installed.  Either 'XML::SAX::ExpatXS' or 'XML::LibXML::SAX::Parser' should
-be set as the default parser in ParserDetails.ini.  This file is located in the
-SAX subdirectory of XML in your local perl library (normally in the 'site'
-directory).
-
-Two different XML handlers currently exist to deal with logical differences
-between how normal BLAST reports and PSI-BLAST reports are logically parsed into
-BioPerl objects; this is explicitly settable using the B<-blasttype> parameter.
-The default is for parsing a normal BLAST report ('blast'), but if one is
-expecting PSI-BLAST report parsing, -blasttype B<must> be set explicitly to
-'psiblast'. This is due to a lack of any information in the XML output which
-tells the parser the report is derived from a PSI-BLAST run vs. a normal BLAST
-run.
-
-There is one additional initialization flag from the SearchIO defaults. That is
-the B<-tempfile> flag. If specified as true, then the parser will write out each
-report to a temporary filehandle rather than holding the entire report as a
-string in memory. The reason this is done in the first place is NCBI reports
-have an uncessary E<lt>?xml version="1.0"?E<gt> at the beginning of each report
-and RPS-BLAST reports have an additional unnecessary RPS-BLAST tag at the top of
-each report. So we currently have implemented the work around by preparsing the
-file (yes it makes the process slower, but it works). We are open to suggestions
-on how to optimize this in the future.
-
-=head1 DEPENDENCIES
-
-In addition to parts of the Bio:: hierarchy, this module uses:
-
- XML::SAX
-
-It is also recommended that XML::SAX::ExpatXS be installed and made the default
-XML::SAX parser using , along with the Expat library () for faster parsing.
-XML::SAX::Expat is not recommended; XML::SAX::ExpatXS is considered the current
-replacement for XML::SAX:Expat and is actively being considered to replace
-XML::SAX::Expat. XML::SAX::Expat will work, but only if you have local copies of
-the NCBI BLAST DTDs. This is due to issues with NCBI's BLAST XML format. The
-DTDs and the web address to obtain them are:
-
-  NCBI_BlastOutput.dtd
-  NCBI_BlastOutput.mod.dtd
-
-  http://www.ncbi.nlm.nih.gov/data_specs/dtd/
-
-=head1 FEEDBACK
-
-=head2 Mailing Lists
-
-User feedback is an integral part of the evolution of this and other
-Bioperl modules. Send your comments and suggestions preferably to
-the Bioperl mailing list.  Your participation is much appreciated.
-
-  bioperl-l at bioperl.org                  - General discussion
-  http://bioperl.org/wiki/Mailing_lists  - About the mailing lists
-
-=head2 Support
-
-Please direct usage questions or support issues to the mailing list:
-
-I<bioperl-l at bioperl.org>
-
-rather than to the module maintainer directly. Many experienced and
-reponsive experts will be able look at the problem and quickly
-address it. Please include a thorough description of the problem
-with code and data examples if at all possible.
-
-=head2 Reporting Bugs
-
-Report bugs to the Bioperl bug tracking system to help us keep track
-of the bugs and their resolution. Bug reports can be submitted via the
-web:
-
-  https://github.com/bioperl/bioperl-live/issues
-
-=head1 AUTHOR - Jason Stajich
-
-Email jason-at-bioperl.org
-
-=head1 APPENDIX
-
-The rest of the documentation details each of the object methods.
-Internal methods are usually preceded with a _
-
-=cut
-
-# Let the code begin...
-
-package Bio::SearchIO::blastxml;
-use strict;
-# Object preamble - inherits from Bio::Root::Root
-
-use base qw(Bio::SearchIO);
-use Bio::Root::Root;
-use XML::SAX;
-use IO::File;
-use Bio::SearchIO::XML::BlastHandler;
-use Bio::SearchIO::IteratedSearchResultEventBuilder;
-
-our $DEBUG;
-
-my %VALID_TYPE = (
-    'BLAST'      => 'Bio::SearchIO::XML::BlastHandler',
-    'PSIBLAST'   => 'Bio::SearchIO::XML::PsiBlastHandler',
-    'PSI-BLAST'  => 'Bio::SearchIO::XML::PsiBlastHandler'
-    );
-
-# mapping of NCBI Blast terms to Bioperl hash keys
-
-=head2 new
-
- Title   : new
- Usage   : my $searchio = Bio::SearchIO->new(-format => 'blastxml',
-					    -file   => 'filename',
-					    -tempfile => 1);
- Function: Initializes the object - this is chained through new in SearchIO
- Returns : Bio::SearchIO::blastxml object
- Args    : One additional argument from the format and file/fh parameters.
-           -tempfile    => boolean.  Defaults to false.  Write out XML data
-                           to a temporary filehandle to send to PerlSAX parser.
-
-=cut
-
-=head2 _initialize
-
- Title   : _initialize
- Usage   : private
- Function: Initializes the object - this is chained through new in SearchIO
-
-=cut
-
-sub _initialize{
-    my ($self, at args) = @_;
-    $self->SUPER::_initialize(@args);
-    my ($usetempfile, $blasttype,$xmlcompact) = $self->_rearrange([qw(
-                                            TEMPFILE
-                                            BLASTTYPE
-                                            XMLCOMPACT)], at args);
-    $blasttype ||= 'BLAST';
-    $self->{_xml_compact} = $xmlcompact || 0;
-    $self->blasttype(uc $blasttype);
-    defined $usetempfile && $self->use_tempfile($usetempfile);
-    $self->{_result_count} = 0;
-    eval {  require Time::HiRes };
-    if( $@ ) { $DEBUG = 0; }
-    $DEBUG = 1 if( ! defined $DEBUG && ($self->verbose > 0));
-}
-
-sub attach_EventHandler {
-    my ($self,$handler) = @_;
-
-    $self->SUPER::attach_EventHandler($handler);
-
-	# Make sure if there is an XML parser present already, the internal Handler
-	# is set
-	if (exists $self->{'_xmlparser'}) {
-		$self->{'_xmlparser'}->get_handler->eventHandler($handler);
-	}
-
-    # Optimization: caching the EventHandler since it is used a lot
-    # during the parse.
-
-    $self->{'_handler_cache'} = $handler;
-    return;
-}
-
-=head2 next_result
-
- Title   : next_result
- Usage   : my $hit = $searchio->next_result;
- Function: Returns the next Result from a search
- Returns : Bio::Search::Result::ResultI object
- Args    : none
-
-=cut
-
-sub next_result {
-    my ($self) = @_;
-
-    my $result;
-
-    my ($tfh);
-
-    # XMLCOMPACT
-    # WU-BLAST has an XML_COMPACT option which needs to be preprocessed before
-    # passing on to the parser.
-    if ($self->{_xml_compact}) {
-        $self->debug("XMLCOMPACT mode\n");
-        my ($tfh2, $filename) = IO::File->new_tmpfile or $self->throw("Unable to open temp file: $!");
-        $tfh2->autoflush(1);
-        my $fh = $self->_fh;
-        while (my $line = <$fh>) {
-            $line =~ s/></>\n</g;
-            print $tfh2 $line;
-        }
-        seek($tfh2,0,0);
-        close $fh;
-        # redirect self's IO to use new tempfile
-        $self->_fh($tfh2);
-    }
-
-    if( $self->use_tempfile ) {
-        $tfh = IO::File->new_tmpfile or $self->throw("Unable to open temp file: $!");
-        $tfh->autoflush(1);
-    }
-
-    my $okaytoprocess = ($self->blasttype =~ /PSI/) ? $self->_chunk_psiblast($tfh) :
-        $self->_chunk_normalblast($tfh);
-
-    return unless( $okaytoprocess);
-
-    my %parser_args;
-    if( defined $tfh ) {
-	seek($tfh,0,0);
-	%parser_args = ('Source' => { 'ByteStream' => $tfh });
-    } else {
-	%parser_args = ('Source' => { 'String' => $self->{'_blastdata'} });
-    }
-
-    my $starttime;
-    if(  $DEBUG ) {  $starttime = [ Time::HiRes::gettimeofday() ]; }
-
-    eval {
-	$result = $self->{'_xmlparser'}->parse(%parser_args);
-    };
-
-    if( $@ ) {
-	$self->warn("error in parsing a report:\n $@");
-	$result = undef;
-    }
-    if( $DEBUG ) {
-	$self->debug( sprintf("parsing took %f seconds\n", Time::HiRes::tv_interval($starttime)));
-    }
-    # parsing magic here - but we call event handlers rather than
-    # instantiating things
-    if (defined $result) {
-        # result count is handled here, as the BLASTXML reports are
-        # broken up into smaller easier to digest bits
-        $self->{_result_count}++;
-        return $result;
-    } else {
-        return;
-    }
-}
-
-=head2 result_count
-
- Title   : result_count
- Usage   : $num = $stream->result_count;
- Function: Gets the number of Blast results that have been successfully parsed
-           at the point of the method call.  This is not the total # of results
-           in the file.
- Returns : integer
- Args    : none
- Throws  : none
-
-=cut
-
-sub result_count {
-    my $self = shift;
-    return $self->{_result_count};
-}
-
-=head2 use_tempfile
-
- Title   : use_tempfile
- Usage   : $obj->use_tempfile($newval)
- Function: Get/Set boolean flag on whether or not use a tempfile
- Example :
- Returns : value of use_tempfile
- Args    : newvalue (optional)
-
-=cut
-
-sub use_tempfile{
-   my ($self,$value) = @_;
-   if( defined $value) {
-      $self->{'_use_tempfile'} = $value;
-    }
-    return $self->{'_use_tempfile'};
-}
-
-=head2 blasttype
-
- Title   : blasttype
- Usage   : $obj->blasttype($newtype)
- Function: Get/Set BLAST report type.
- Returns : BLAST report type
- Args    : case-insensitive string of types BLAST or PSIBLAST (default: BLAST)
- Note    : this is used to determine how reports are 'chunked' (in cases
-           where multiple queries are submitted) and which XML handler
-           to use when parsing the report(s)
-
-=cut
-
-sub blasttype{
-    my ($self,$value) = @_;
-    if ($value) {
-        $self->throw("$value is not a supported BLAST type") unless exists $VALID_TYPE{$value};
-        my $ok;
-        eval {
-            $ok = $self->_load_module($VALID_TYPE{$value});
-        };
-        if ($@) {
-            print STDERR <<END;
-$self: data module $VALID_TYPE{$value} cannot be found
-Exception $@
-For more information about the Bio::SearchIO::blastxml system please see the Bio::SearchIO::blastxml.
-END
-            return unless $ok;
-        }
-        # BlastHandler does the heavy lifting
-        my $xmlhandler = $VALID_TYPE{$value}->new(-verbose => $self->verbose);
-
-        # The XML handler does the heavy work, passes data to object handler
-        if ($value =~ /^PSI/) {
-            my $handler = Bio::SearchIO::IteratedSearchResultEventBuilder->new();
-            $self->{'_handler'} = $handler; # cache
-        }
-        $xmlhandler->eventHandler($self->_eventHandler());
-
-        # start up the parser factory
-        my $parserfactory = XML::SAX::ParserFactory->parser(
-            Handler => $xmlhandler);
-        $self->{'_xmlparser'} = $parserfactory;
-        $self->saxparser(ref($parserfactory));
-
-        $self->{'_blasttype'} = $value;
-    }
-    return $self->{'_blasttype'};
-}
-
-sub saxparser {
-    my $self = shift;
-    return ref($self->{'_xmlparser'});
-}
-
-sub _chunk_normalblast {
-    my ($self, $tfh) = @_;
-
-    local $/ = "\n";
-    local $_;
-    $self->{'_blastdata'} = '';
-
-    my ($sawxmlheader, $okaytoprocess);
-
-    my $mode = 'header';
-
-    my $tail = << 'XML_END';
-  </BlastOutput_iterations>
-</BlastOutput>
-XML_END
-
-    # no buffering needed (famous last words...)
-    my $fh = $self->_fh;
-
-    #chop up XML into edible bits for the parser
-    while( defined( my $line = <$fh>) ) {
-        next if $line =~ /^\s*$/;
-        next if $line =~ m{^\s*</BlastOutput_iterations>}xmso || $line =~ m{^</BlastOutput>}xmso;
-        if( $line =~ m{^RPS-BLAST}i ) {
-            $self->{'_type'} = 'RPS-BLAST';
-            next;
-        } elsif ($line =~ m{^<\?xml\sversion="1.0"}xms) {# <?xml version="1.0"?> & <?xml version="1.0" encoding="UTF-8"?>
-            delete $self->{'_header'} if exists $self->{'_header'};
-            $sawxmlheader++;
-            $mode = 'header';
-        } elsif ($line =~ m{^\s*<Iteration>}xmso) {
-            if (!$sawxmlheader) {
-                if (defined $tfh) {
-                    print $tfh $self->{'_header'}
-                } else {
-                    $self->{'_blastdata'} .= $self->{'_header'};
-                }
-            }
-            $mode = 'iteration';
-        } elsif ($line =~ m{^\s*</Iteration>}xmso) {
-            if (defined $tfh) {
-                print $tfh $line.$tail;
-            } else {
-                $self->{'_blastdata'} .= $line.$tail;
-            }
-            $okaytoprocess++;
-            last;
-        }
-        if (defined $tfh) {
-            print $tfh $line;
-        } else {
-            $self->{'_blastdata'} .= $line;
-        }
-        $self->{"_$mode"} .= $line if $mode eq 'header';
-    }
-    return $okaytoprocess;
-}
-
-sub _chunk_psiblast {
-    my ($self, $tfh) = @_;
-
-    local $/ = "\n";
-    local $_;
-    $self->{'_blastdata'} = '';
-
-    my ($sawxmlheader, $okaytoprocess);
-
-    # no buffering needed (famous last words...)
-    my $fh = $self->_fh;
-
-    #chop up XML into edible bits for the parser
-    while( defined( my $line = <$fh>) ) {
-        if (defined $tfh) {
-            print $tfh $line;
-        } else {
-            $self->{'_blastdata'} .= $line;
-        }
-        #$self->{"_$mode"} .= $line;
-        if ($line =~ m{^</BlastOutput>}xmso) {
-            $okaytoprocess++;
-            last;
-        }
-    }
-    #$self->debug($self->{'_blastdata'}."\n");
-    return $okaytoprocess;
-}
-
-1;
diff --git a/Bio/SearchIO/fasta.pm b/Bio/SearchIO/fasta.pm
index 0bcdf35..5fb85f1 100644
--- a/Bio/SearchIO/fasta.pm
+++ b/Bio/SearchIO/fasta.pm
@@ -1094,7 +1094,7 @@ sub next_result {
                     $self->_pushback($_);
                     last;
                 }
-                elsif (/^>>>\*\*\*/o) {
+                elsif (/^>>>(\*\*\*|\/\/\/|<<<)/o) {
                     $self->end_element( { Name => "Hsp" } );
                     last;
                 }
diff --git a/Bio/SearchIO/hmmer2.pm b/Bio/SearchIO/hmmer2.pm
index 3aa0c8d..85c4d90 100644
--- a/Bio/SearchIO/hmmer2.pm
+++ b/Bio/SearchIO/hmmer2.pm
@@ -1,7 +1,7 @@
 #
 # BioPerl module for Bio::SearchIO::hmmer2
 #
-# Please direct questions and support issues to <bioperl-l at bioperl.org> 
+# Please direct questions and support issues to <bioperl-l at bioperl.org>
 #
 # Cared for by Jason Stajich <jason at bioperl.org>
 #
@@ -47,15 +47,15 @@ the Bioperl mailing list.  Your participation is much appreciated.
   bioperl-l at bioperl.org                  - General discussion
   http://bioperl.org/wiki/Mailing_lists  - About the mailing lists
 
-=head2 Support 
+=head2 Support
 
 Please direct usage questions or support issues to the mailing list:
 
 I<bioperl-l at bioperl.org>
 
-rather than to the module maintainer directly. Many experienced and 
-reponsive experts will be able look at the problem and quickly 
-address it. Please include a thorough description of the problem 
+rather than to the module maintainer directly. Many experienced and
+reponsive experts will be able look at the problem and quickly
+address it. Please include a thorough description of the problem
 with code and data examples if at all possible.
 
 =head2 Reporting Bugs
@@ -153,25 +153,24 @@ sub next_result {
     my ($self) = @_;
     my $seentop = 0;
     my $reporttype;
-    my ( $last, @hitinfo, @hspinfo, %hspinfo, %hitinfo );
+    my ( $buffer, $last, @hitinfo, @hspinfo, %hspinfo, %hitinfo );
     local $/ = "\n";
-    local $_;
 
     my $verbose = $self->verbose;    # cache for speed?
     $self->start_document();
-    local ($_);
-    while ( defined( $_ = $self->_readline ) ) {
-        my $lineorig = $_;
 
-        chomp;
-        if (/^HMMER\s+(\S+)\s+\((.+)\)/o) {
-            my ( $prog, $version ) = split;
+    while ( defined( $buffer = $self->_readline ) ) {
+        my $lineorig = $buffer;
+
+        chomp $buffer;
+        if ($buffer =~ /^HMMER\s+(\S+)\s+\((.+)\)/o) {
+            my ( $prog, $version ) = split( /\s+/, $buffer );
             if ($seentop) {
-                $self->_pushback($_);
+                $self->_pushback($buffer);
                 $self->end_element( { 'Name' => 'HMMER_Output' } );
                 return $self->end_document();
             }
-            $self->{'_hmmidline'} = $_;
+            $self->{'_hmmidline'} = $buffer;
             $self->start_element( { 'Name' => 'HMMER_Output' } );
             $self->{'_result_count'}++;
             $seentop = 1;
@@ -192,33 +191,33 @@ sub next_result {
                 }
             );
         }
-        elsif (s/^HMM file:\s+//o) {
+        elsif ($buffer =~ s/^HMM file:\s+//o) {
             $self->{'_hmmfileline'} = $lineorig;
             $self->element(
                 {
                     'Name' => 'HMMER_hmm',
-                    'Data' => $_
+                    'Data' => $buffer
                 }
             );
         }
-        elsif (s/^Sequence\s+(file|database):\s+//o) {
+        elsif ($buffer =~ s/^Sequence\s+(file|database):\s+//o) {
             $self->{'_hmmseqline'} = $lineorig;
             if ( $1 eq 'database' ) {
                 $self->element(
                     {
                         'Name' => 'HMMER_db',
-                        'Data' => $_
+                        'Data' => $buffer
                     }
                 );
             }
             $self->element(
                 {
                     'Name' => 'HMMER_seqfile',
-                    'Data' => $_
+                    'Data' => $buffer
                 }
             );
         }
-        elsif (s/^Query(?:\s+(?:sequence|HMM))?(?:\s+\d+)?:\s+//o) {
+        elsif ($buffer =~ s/^Query(?:\s+(?:sequence|HMM))?(?:\s+\d+)?:\s+//o) {
             if ( !$seentop ) {
 
                 # we're in a multi-query report
@@ -228,29 +227,29 @@ sub next_result {
                 $self->_pushback( $self->{'_hmmidline'} );
                 next;
             }
-            s/\s+$//;
+            $buffer =~ s/\s+$//;
             $self->element(
                 {
                     'Name' => 'HMMER_query-def',
-                    'Data' => $_
+                    'Data' => $buffer
                 }
             );
         }
-        elsif (s/^Accession:\s+//o) {
-            s/\s+$//;
+        elsif ($buffer =~ s/^Accession:\s+//o) {
+            $buffer =~ s/\s+$//;
             $self->element(
                 {
                     'Name' => 'HMMER_query-acc',
-                    'Data' => $_
+                    'Data' => $buffer
                 }
             );
         }
-        elsif (s/^Description:\s+//o) {
-            s/\s+$//;
+        elsif ($buffer =~ s/^Description:\s+//o) {
+            $buffer =~ s/\s+$//;
             $self->element(
                 {
                     'Name' => 'HMMER_querydesc',
-                    'Data' => $_
+                    'Data' => $buffer
                 }
             );
         }
@@ -259,15 +258,15 @@ sub next_result {
                   || $self->{'_reporttype'} eq 'HMMPFAM' )
               ) {
             # PROCESS RESULTS HERE
-            if (/^Scores for (?:complete sequences|sequence family)/o) {
-                while ( defined( $_ = $self->_readline ) ) {
-                    last if (/^\s+$/);
-                    next if (   /^Model\s+Description/o
-                             || /^Sequence\s+Description/o
-                             || /^\-\-\-/o );
-
-                    chomp;
-                    my @line = split;
+            if ($buffer =~ /^Scores for (?:complete sequences|sequence family)/o) {
+                while ( defined( $buffer = $self->_readline ) ) {
+                    last if ($buffer =~ /^\s+$/);
+                    next if (   $buffer =~ /^Model\s+Description/o
+                             || $buffer =~ /^Sequence\s+Description/o
+                             || $buffer =~ /^\-\-\-/o );
+
+                    chomp $buffer;
+                    my @line = split( /\s+/, $buffer );
                     my ( $name, $domaintotal, $evalue, $score ) =
                       ( shift @line, pop @line, pop @line, pop @line );
                     my $desc = join( ' ', @line );
@@ -275,32 +274,33 @@ sub next_result {
                     $hitinfo{$name} = $#hitinfo;
                 }
             }
-            elsif (/^Parsed for domains:/o) {
+            elsif ($buffer =~ /^Parsed for domains:/o) {
                 @hspinfo = ();
 
-                while ( defined( $_ = $self->_readline ) ) {
-                    last if (/^\s+$/);
-                    if (m!^//!) {
-                        $self->_pushback($_);
+                while ( defined( $buffer = $self->_readline ) ) {
+                    last if ($buffer =~ /^\s+$/);
+                    if ($buffer =~ m!^//!) {
+                        $self->_pushback($buffer);
                         last;
                     }
-                    next if ( /^(?:Model|Sequence)\s+Domain/ || /^\-\-\-/ );
+                    next if ( $buffer =~ /^(?:Model|Sequence)\s+Domain/ || $buffer =~ /^\-\-\-/ );
 
-                    chomp;
+                    chomp $buffer;
                     if (
                         my ( $name, $domainct, $domaintotal,
                              $seq_start, $seq_end, $seq_cov,
                              $hmm_start, $hmm_end, $hmm_cov,
-                             $score, $evalue ) = (
-                                m!^(\S+)\s+          # domain name
-                                   (\d+)/(\d+)\s+    # domain num out of num
-                                   (\d+)\s+(\d+)\s+  # seq start, end
-                                   (\S+)\s+          # seq coverage
-                                   (\d+)\s+(\d+)\s+  # hmm start, end
-                                   (\S+)\s+          # hmm coverage
-                                   (\S+)\s+          # score
-                                   (\S+)             # evalue
-                                    \s*$!ox
+                             $score, $evalue )
+                              = ( $buffer =~
+                                    m!^(\S+)\s+          # domain name
+                                       (\d+)/(\d+)\s+    # domain num out of num
+                                       (\d+)\s+(\d+)\s+  # seq start, end
+                                       (\S+)\s+          # seq coverage
+                                       (\d+)\s+(\d+)\s+  # hmm start, end
+                                       (\S+)\s+          # hmm coverage
+                                       (\S+)\s+          # score
+                                       (\S+)             # evalue
+                                        \s*$!ox
                             )
                         ) {
                         my $hindex = $hitinfo{$name};
@@ -377,19 +377,19 @@ sub next_result {
                     }
                 }
             }
-            elsif (/^Alignments of top/o) {
+            elsif ($buffer =~ /^Alignments of top/o) {
                 my ( $prelength, $count, $width );
                 $count = 0;
                 my %domaincounter;
                 my $second_tier = 0;
                 my $csline      = '';
 
-                while ( defined( $_ = $self->_readline ) ) {
-                    next if ( /^Align/o );
+                while ( defined( $buffer = $self->_readline ) ) {
+                    next if ( $buffer =~ /^Align/o );
 
-                    if (   m/^Histogram/o
-                        || m!^//!o
-                        || m/^Query(?:\s+(?:sequence|HMM))?(?:\s+\d+)?:/o
+                    if (   $buffer =~ m/^Histogram/o
+                        || $buffer =~ m!^//!o
+                        || $buffer =~ m/^Query(?:\s+(?:sequence|HMM))?(?:\s+\d+)?:/o
                         ) {
                         if ( $self->in_element('hsp') ) {
                             $self->end_element( { 'Name' => 'Hsp' } );
@@ -397,17 +397,18 @@ sub next_result {
                         if ( $self->within_element('hit') ) {
                             $self->end_element( { 'Name' => 'Hit' } );
                         }
-                        $self->_pushback($_);
+                        $self->_pushback($buffer);
                         last;
                     }
 
-                    chomp;
+                    chomp $buffer;
                     if (
                         my ( $name, $domainct, $domaintotal,
-                             $from, $to ) = (
-                                m/^\s*(.+):
-                                   \s+ domain \s+ (\d+) \s+ of \s+ (\d+) ,
-                                   \s+ from   \s+ (\d+) \s+ to \s+ (\d+)/x
+                             $from, $to )
+                              = ( $buffer =~
+                                    m/^\s*(.+):
+                                       \s+ domain \s+ (\d+) \s+ of \s+ (\d+) ,
+                                       \s+ from   \s+ (\d+) \s+ to \s+ (\d+)/x
                             )
                         ) {
                         $domaincounter{$name}++;
@@ -429,7 +430,7 @@ sub next_result {
                             );
                             $info = [
                                 $name, '',
-                                /score \s+ ([^,\s]+), \s+E\s+=\s+ (\S+)/ox,
+                                $buffer =~ /score \s+ ([^,\s]+), \s+E\s+=\s+ (\S+)/ox,
                                 $domaintotal
                             ];
                             push @hitinfo, $info;
@@ -557,13 +558,13 @@ sub next_result {
                         # accumulates all the of the alignment lines into
                         # three array slots and then tests for the
                         # end of the line
-                        if ($_ =~ m/^\s+(?:CS|RF)\s+/o && $count == 0) {
+                        if ($buffer =~ m/^\s+(?:CS|RF)\s+/o && $count == 0) {
                             # Buffer the CS line now and process it later at
                             # midline point, where $prelength and width will be known
-                            $csline = $_;
+                            $csline = $buffer;
                             next;
                         }
-                        elsif (/^(\s+ \*->) (\S+)/ox) {
+                        elsif ($buffer =~ /^(\s+ \*->) (\S+)/ox) {
                             # start of domain
                             $prelength = CORE::length($1);
                             $width     = 0;
@@ -574,7 +575,7 @@ sub next_result {
                             {
                                 $width = CORE::length($data);
                             }
- 
+
                             if ($self->{'_reporttype'} eq 'HMMSEARCH') {
                                 $self->element(
                                     {
@@ -594,7 +595,7 @@ sub next_result {
                             $count       = 0;
                             $second_tier = 0;
                         }
-                        elsif (/^(\s+) (\S+) <-?\*? \s*$/ox) {
+                        elsif ($buffer =~ /^(\s+) (\S+) <-?\*? \s*$/ox) {
                             # end of domain
                             $prelength -= 3 unless ( $second_tier++ );
                             if ($self->{'_reporttype'} eq 'HMMSEARCH') {
@@ -616,10 +617,10 @@ sub next_result {
                             $width = CORE::length($2);
                             $count = 0;
                         }
-                        elsif ( ( $count != 1 && /^\s+$/o )
-                               || CORE::length($_) == 0
-                               || /^\s+\-?\*\s*$/
-                               || /^\s+\S+\s+\-\s+\-\s*$/ )
+                        elsif ( ( $count != 1 && $buffer =~ /^\s+$/o )
+                               || CORE::length($buffer) == 0
+                               || $buffer =~ /^\s+\-?\*\s*$/
+                               || $buffer =~ /^\s+\S+\s+\-\s+\-\s*$/ )
                         {
                             next;
                         }
@@ -634,7 +635,7 @@ sub next_result {
                                 $self->element(
                                     {
                                         'Name' => 'Hsp_qseq',
-                                        'Data' => substr( $_, $prelength )
+                                        'Data' => substr( $buffer, $prelength )
                                     }
                                 );
                             }
@@ -642,7 +643,7 @@ sub next_result {
                                 $self->element(
                                     {
                                         'Name' => 'Hsp_hseq',
-                                        'Data' => substr( $_, $prelength )
+                                        'Data' => substr( $buffer, $prelength )
                                     }
                                 );
                             }
@@ -655,7 +656,7 @@ sub next_result {
                                 $self->element(
                                     {
                                         'Name' => 'Hsp_midline',
-                                        'Data' => substr( $_, $prelength, $width )
+                                        'Data' => substr( $buffer, $prelength, $width )
                                     }
                                 );
                                 if ($csline ne '') {
@@ -673,7 +674,7 @@ sub next_result {
                                 $self->element(
                                     {
                                         'Name' => 'Hsp_midline',
-                                        'Data' => substr( $_, $prelength )
+                                        'Data' => substr( $buffer, $prelength )
                                     }
                                 );
                                 if ($csline ne '') {
@@ -688,7 +689,7 @@ sub next_result {
                             }
                         }
                         elsif ( $count == 2 ) {
-                            if (   /^\s+(\S+)\s+(\d+|\-)\s+(\S*)\s+(\d+|\-)/o) {
+                            if ( $buffer =~ /^\s+(\S+)\s+(\d+|\-)\s+(\S*)\s+(\d+|\-)/o ) {
                                 if ($self->{'_reporttype'} eq 'HMMSEARCH') {
                                     $self->element(
                                         {
@@ -707,14 +708,14 @@ sub next_result {
                                 }
                             }
                             else {
-                                $self->warn("unrecognized line ($count): $_\n");
+                                $self->warn("unrecognized line ($count): $buffer\n");
                             }
                         }
                         $count = 0 if $count++ >= 2;
                     }
                 }
             }
-            elsif ( /^Histogram/o || m!^//!o ) {
+            elsif ( $buffer =~ /^Histogram/o || $buffer =~ m!^//!o ) {
                 my %domaincounter;
 
                 while ( my $HSPinfo = shift @hspinfo ) {
@@ -811,10 +812,10 @@ sub next_result {
             }
             # uncomment to see missed lines with verbose on
             #else {
-            #    $self->debug($_);
+            #    $self->debug($buffer);
             #}
         }
-        $last = $_;
+        $last = $buffer;
     }
     $self->end_element( { 'Name' => 'HMMER_Output' } ) unless !$seentop;
     return $self->end_document();
@@ -878,21 +879,21 @@ sub end_element {
     # Hsp are sort of weird, in that they end when another
     # object begins so have to detect this in end_element for now
     if ( $nm eq 'Hsp' ) {
-        foreach (qw(Hsp_csline Hsp_qseq Hsp_midline Hsp_hseq)) {
-            my $data = $self->{'_last_hspdata'}->{$_};
-            if ($data && $_ eq 'Hsp_hseq') {
+        foreach my $line (qw(Hsp_csline Hsp_qseq Hsp_midline Hsp_hseq)) {
+            my $data = $self->{'_last_hspdata'}->{$line};
+            if ($data && $line eq 'Hsp_hseq') {
                 # replace hmm '.' gap symbol by '-'
                 $data =~ s/\./-/g;
             }
             $self->element(
                 {
-                    'Name' => $_,
+                    'Name' => $line,
                     'Data' => $data
                 }
             );
             # Since HMMER doesn't print some data explicitly,
             # calculate it from the homology line (midline)
-            if ($_ eq 'Hsp_midline') {
+            if ($line eq 'Hsp_midline') {
                 if ($data) {
                     my $length    = length $data;
                     my $identical = ($data =~ tr/a-zA-Z//);
@@ -1014,7 +1015,7 @@ sub characters {
            This is different than 'in' because within can be tested
            for a whole block.
  Returns : boolean
- Args    : string element name 
+ Args    : string element name
 
 
 =cut
@@ -1022,11 +1023,11 @@ sub characters {
 sub within_element {
     my ( $self, $name ) = @_;
     return 0
-      if ( !defined $name
-        || !defined $self->{'_elements'}
-        || scalar @{ $self->{'_elements'} } == 0 );
-    foreach ( @{ $self->{'_elements'} } ) {
-        return 1 if ( $_ eq $name );
+      if (   !defined $name
+          || !defined $self->{'_elements'}
+          || scalar @{ $self->{'_elements'} } == 0 );
+    foreach my $element ( @{ $self->{'_elements'} } ) {
+        return 1 if ( $element eq $name );
     }
     return 0;
 }
@@ -1036,10 +1037,10 @@ sub within_element {
  Title   : in_element
  Usage   : if( $eventgenerator->in_element($element) ) {}
  Function: Test if we are in a particular element
-           This is different than 'within' because 'in' only 
+           This is different than 'within' because 'in' only
            tests its immediete parent.
  Returns : boolean
- Args    : string element name 
+ Args    : string element name
 
 
 =cut
diff --git a/Bio/SearchIO/hmmer3.pm b/Bio/SearchIO/hmmer3.pm
index 6b4210a..3549817 100644
--- a/Bio/SearchIO/hmmer3.pm
+++ b/Bio/SearchIO/hmmer3.pm
@@ -27,16 +27,16 @@ my $searchio = Bio::SearchIO->new(
 
 my $result = $searchio->next_result;
 my $hit = $result->next_hit;
-print $hit->name, $hit->description, $hit->significance, 
+print $hit->name, $hit->description, $hit->significance,
       $hit->score, "\n";
 
 my $hsp = $hit->next_hsp;
-print $hsp->start('hit'), $hsp->end('hit'), $hsp->start('query'), 
+print $hsp->start('hit'), $hsp->end('hit'), $hsp->start('query'),
       $hsp->end('query'), "\n";
 
 =head1 DESCRIPTION
 
-Code to parse output from hmmsearch, hmmscan, and nhmmer, compatible with
+Code to parse output from hmmsearch, hmmscan, phmmer and nhmmer, compatible with
 both version 2 and version 3 of the HMMER package from L<http://hmmer.org>.
 
 =head1 FEEDBACK
@@ -163,35 +163,33 @@ BEGIN {
 
 sub next_result {
     my ($self) = @_;
-    my ( $last, @hit_list, @hsp_list, %hspinfo, %hitinfo, %domaincounter );
+    my ( $buffer, $last, @hit_list, @hsp_list, %hspinfo, %hitinfo, %domaincounter );
     local $/ = "\n";
-    local $_;
 
     my @ambiguous_nt = keys %Bio::Tools::IUPAC::IUB;
     my $ambiguous_nt = join '', @ambiguous_nt;
 
     my $verbose = $self->verbose;    # cache for speed? JES's idea in hmmer.pm
     $self->start_document();
-    local ($_);
 
     # This is here to ensure that next_result doesn't produce infinite loop
-    if ( !defined( $_ = $self->_readline ) ) {
+    if ( !defined( $buffer = $self->_readline ) ) {
         return undef;
     }
     else {
-        $self->_pushback($_);
+        $self->_pushback($buffer);
     }
 
     my $hit_counter = 0; # helper variable for non-unique hit IDs
 
     # Regex goes here for HMMER3
     # Start with hmmsearch processing
-    while ( defined( $_ = $self->_readline ) ) {
-        my $lineorig = $_;
-        chomp;
+    while ( defined( $buffer = $self->_readline ) ) {
+        my $lineorig = $buffer;
+        chomp $buffer;
 
         # Grab the program name
-        if ( $_ =~ m/^\#\s(\S+)\s\:\:\s/ ) {
+        if ( $buffer =~ m/^\#\s(\S+)\s\:\:\s/ ) {
             my $prog = $1;
 
             # TO DO: customize the above regex to adapt to other
@@ -206,10 +204,10 @@ sub next_result {
         }
 
         # Get the HMMER package version and release date
-        elsif ( $_ =~ m/^\#\sHMMER\s+(\S+)\s+\((.+)\)/ ) {
+        elsif ( $buffer =~ m/^\#\sHMMER\s+(\S+)\s+\((.+)\)/ ) {
             my $version     = $1;
             my $versiondate = $2;
-            $self->{'_hmmidline'} = $_;
+            $self->{'_hmmidline'} = $buffer;
             $self->element(
                 {   'Name' => 'HMMER_version',
                     'Data' => $version
@@ -218,8 +216,9 @@ sub next_result {
         }
 
         # Get the query info
-        elsif ( $_ =~ /^\#\squery (?:\w+ )?file\:\s+(\S+)/ ) {
+        elsif ( $buffer =~ /^\#\squery (?:\w+ )?file\:\s+(\S+)/ ) {
             if (   $self->{'_reporttype'} eq 'HMMSEARCH'
+                || $self->{'_reporttype'} eq 'PHMMER'
                 || $self->{'_reporttype'} eq 'NHMMER' )
             {
                 $self->{'_hmmfileline'} = $lineorig;
@@ -240,14 +239,15 @@ sub next_result {
         }
 
         # If this is a report without alignments
-        elsif ( $_ =~ m/^\#\sshow\salignments\sin\soutput/ ) {
+        elsif ( $buffer =~ m/^\#\sshow\salignments\sin\soutput/ ) {
             $self->{'_alnreport'} = 0;
         }
 
         # Get the database info
-        elsif ( $_ =~ m/^\#\starget\s\S+\sdatabase\:\s+(\S+)/ ) {
+        elsif ( $buffer =~ m/^\#\starget\s\S+\sdatabase\:\s+(\S+)/ ) {
 
             if (   $self->{'_reporttype'} eq 'HMMSEARCH'
+                || $self->{'_reporttype'} eq 'PHMMER'
                 || $self->{'_reporttype'} eq 'NHMMER' )
             {
                 $self->{'_hmmseqline'} = $lineorig;
@@ -268,7 +268,7 @@ sub next_result {
         }
 
         # Get query data
-        elsif ( $_ =~ s/^Query:\s+// ) {
+        elsif ( $buffer =~ s/^Query:\s+// ) {
             # For  multi-query reports
             if (    (   not exists $self->{_values}->{"RESULT-algorithm_name"}
                      or not exists $self->{_values}->{"RESULT-algorithm_version"}
@@ -295,6 +295,7 @@ sub next_result {
                      )
                 ) {
                 if (   $self->{'_reporttype'} eq 'HMMSEARCH'
+                    or $self->{'_reporttype'} eq 'PHMMER'
                     or $self->{'_reporttype'} eq 'NHMMER'
                     ) {
                     my ($qry_file)    = $self->{_hmmfileline} =~ m/^\#\squery (?:\w+ )?file\:\s+(\S+)/;
@@ -326,8 +327,8 @@ sub next_result {
                 }
             }
 
-            unless (s/\s+\[[L|M]\=(\d+)\]$//) {
-                warn "Error parsing length for query, offending line $_\n";
+            unless ($buffer =~ s/\s+\[[L|M]\=(\d+)\]$//) {
+                warn "Error parsing length for query, offending line $buffer\n";
                 exit(0);
             }
             my $querylen = $1;
@@ -338,27 +339,27 @@ sub next_result {
             );
             $self->element(
                 {   'Name' => 'HMMER_query-def',
-                    'Data' => $_
+                    'Data' => $buffer
                 }
             );
         }
 
         # Get Accession data
-        elsif ( $_ =~ s/^Accession:\s+// ) {
-            s/\s+$//;
+        elsif ( $buffer =~ s/^Accession:\s+// ) {
+            $buffer =~ s/\s+$//;
             $self->element(
                 {   'Name' => 'HMMER_query-acc',
-                    'Data' => $_
+                    'Data' => $buffer
                 }
             );
         }
 
         # Get description data
-        elsif ( $_ =~ s/^Description:\s+// ) {
-            s/\s+$//;
+        elsif ( $buffer =~ s/^Description:\s+// ) {
+            $buffer =~ s/\s+$//;
             $self->element(
                 {   'Name' => 'HMMER_querydesc',
-                    'Data' => $_
+                    'Data' => $buffer
                 }
             );
         }
@@ -368,24 +369,25 @@ sub next_result {
             defined $self->{'_reporttype'}
             && (   $self->{'_reporttype'} eq 'HMMSEARCH'
                 || $self->{'_reporttype'} eq 'HMMSCAN'
+                || $self->{'_reporttype'} eq 'PHMMER'
                 || $self->{'_reporttype'} eq 'NHMMER' )
             )
         {
             # Complete sequence table data above inclusion threshold,
             # hmmsearch or hmmscan
-            if ( $_ =~ m/Scores for complete sequence/ ) {
-                while ( defined( $_ = $self->_readline ) ) {
-                    if (   $_ =~ m/inclusion threshold/
-                        || m/Domain( and alignment)? annotation for each/
-                        || m/\[No hits detected/
-                        || m!^//! )
+            if ( $buffer =~ m/Scores for complete sequence/ ) {
+                while ( defined( $buffer = $self->_readline ) ) {
+                    if (   $buffer =~ m/inclusion threshold/
+                        || $buffer =~ m/Domain( and alignment)? annotation for each/
+                        || $buffer =~ m/\[No hits detected/
+                        || $buffer =~ m!^//! )
                     {
-                        $self->_pushback($_);
+                        $self->_pushback($buffer);
                         last;
                     }
-                    elsif (   $_ =~ m/^\s+E-value\s+score/
-                           || $_ =~ m/\-\-\-/
-                           || $_ =~ m/^$/
+                    elsif (   $buffer =~ m/^\s+E-value\s+score/
+                           || $buffer =~ m/\-\-\-/
+                           || $buffer =~ m/^$/
                         )
                     {
                         next;
@@ -397,7 +399,7 @@ sub next_result {
                         $score_best, $bias_best,  $exp,       $n,
                         $hitid,      $desc,       @hitline
                     );
-                    @hitline    = split( " ", $_ );
+                    @hitline    = split( " ", $buffer );
                     $eval_full  = shift @hitline;
                     $score_full = shift @hitline;
                     $bias_full  = shift @hitline;
@@ -418,19 +420,19 @@ sub next_result {
             }
 
             # nhmmer
-            elsif ( /Scores for complete hits/ ) {
-                while ( defined( $_ = $self->_readline ) ) {
-                    if (   /inclusion threshold/
-                        || /Annotation for each hit/
-                        || /\[No hits detected/
-                        || m!^//! )
+            elsif ( $buffer =~ /Scores for complete hits/ ) {
+                while ( defined( $buffer = $self->_readline ) ) {
+                    if (   $buffer =~ /inclusion threshold/
+                        || $buffer =~ /Annotation for each hit/
+                        || $buffer =~ /\[No hits detected/
+                        || $buffer =~ m!^//! )
                     {
-                        $self->_pushback($_);
+                        $self->_pushback($buffer);
                         last;
                     }
-                    elsif (   $_ =~ m/^\s+E-value\s+score/
-                           || $_ =~ m/\-\-\-/
-                           || $_ =~ m/^$/
+                    elsif (   $buffer =~ m/^\s+E-value\s+score/
+                           || $buffer =~ m/\-\-\-/
+                           || $buffer =~ m/^$/
                         )
                     {
                         next;
@@ -441,7 +443,7 @@ sub next_result {
                     my ($eval,  $score, $bias, $hitid,
                         $start, $end,   $desc, @hitline
                     );
-                    @hitline = split( " ", $_ );
+                    @hitline = split( " ", $buffer );
                     $eval    = shift @hitline;
                     $score   = shift @hitline;
                     $bias    = shift @hitline;
@@ -458,18 +460,18 @@ sub next_result {
             }
 
             # Complete sequence table data below inclusion threshold
-            elsif ( /inclusion threshold/ ) {
-                while ( defined( $_ = $self->_readline ) ) {
-                    if (   /Domain( and alignment)? annotation for each/
-                        || /Internal pipeline statistics summary/ 
-                        || /Annotation for each hit\s+\(and alignments\)/
+            elsif ( $buffer =~ /inclusion threshold/ ) {
+                while ( defined( $buffer = $self->_readline ) ) {
+                    if (   $buffer =~ /Domain( and alignment)? annotation for each/
+                        || $buffer =~ /Internal pipeline statistics summary/
+                        || $buffer =~ /Annotation for each hit\s+\(and alignments\)/
                         )
                     {
-                        $self->_pushback($_);
+                        $self->_pushback($buffer);
                         last;
                     }
-                    elsif (   $_ =~ m/inclusion threshold/
-                           || $_ =~ m/^$/
+                    elsif (   $buffer =~ m/inclusion threshold/
+                           || $buffer =~ m/^$/
                         )
                     {
                         next;
@@ -481,7 +483,7 @@ sub next_result {
                         $score_best, $bias_best,  $exp,       $n,
                         $hitid,      $desc,       @hitline
                     );
-                    @hitline    = split( " ", $_ );
+                    @hitline    = split( " ", $buffer );
                     $eval_full  = shift @hitline;
                     $score_full = shift @hitline;
                     $bias_full  = shift @hitline;
@@ -503,22 +505,22 @@ sub next_result {
 
             # Domain annotation for each sequence table data,
             # for hmmscan, hmmsearch & nhmmer
-            elsif (   /Domain( and alignment)? annotation for each/
-                   or /Annotation for each hit\s+\(and alignments\)/
+            elsif (   $buffer =~ /Domain( and alignment)? annotation for each/
+                   or $buffer =~ /Annotation for each hit\s+\(and alignments\)/
                    ) {
                 @hsp_list = ();    # Here for multi-query reports
                 my $name;
                 my $annot_counter = 0;
 
-                while ( defined( $_ = $self->_readline ) ) {
-                    if (   /\[No targets detected/
-                        || /Internal pipeline statistics/ )
+                while ( defined( $buffer = $self->_readline ) ) {
+                    if (   $buffer =~ /\[No targets detected/
+                        || $buffer =~ /Internal pipeline statistics/ )
                     {
-                        $self->_pushback($_);
+                        $self->_pushback($buffer);
                         last;
                     }
 
-                    if ( $_ =~ m/^\>\>\s(\S*)\s+(.*)/ ) {
+                    if ( $buffer =~ m/^\>\>\s(\S*)\s+(.*)/ ) {
                         $name    = $1;
                         my $desc = $2;
                         $annot_counter++;
@@ -534,27 +536,27 @@ sub next_result {
                             $hit_list[ $hitinfo{"$name.$annot_counter"} ][1] = $desc;
                         }
 
-                        while ( defined( $_ = $self->_readline ) ) {
-                            if (   $_ =~ m/Internal pipeline statistics/
-                                || $_ =~ m/Alignments for each domain/
-                                || $_ =~ m/^\s+Alignment:/
-                                || $_ =~ m/^\>\>/ )
+                        while ( defined( $buffer = $self->_readline ) ) {
+                            if (   $buffer =~ m/Internal pipeline statistics/
+                                || $buffer =~ m/Alignments for each domain/
+                                || $buffer =~ m/^\s+Alignment:/
+                                || $buffer =~ m/^\>\>/ )
                             {
-                                $self->_pushback($_);
+                                $self->_pushback($buffer);
                                 last;
                             }
-                            elsif (   $_ =~ m/^\s+score\s+bias/
-                                   || $_ =~ m/^\s+\#\s+score/
-                                   || $_ =~ m/^\s+------\s+/
-                                   || $_ =~ m/^\s\-\-\-\s+/
-                                   || $_ =~ m/^$/
+                            elsif (   $buffer =~ m/^\s+score\s+bias/
+                                   || $buffer =~ m/^\s+\#\s+score/
+                                   || $buffer =~ m/^\s+------\s+/
+                                   || $buffer =~ m/^\s\-\-\-\s+/
+                                   || $buffer =~ m/^$/
                                 )
                             {
                                 next;
                             }
 
                             # Grab hsp data from table, push into @hsp;
-                            if ($self->{'_reporttype'} =~ m/(?:HMMSCAN|HMMSEARCH|NHMMER)/) {
+                            if ($self->{'_reporttype'} =~ m/(?:HMMSCAN|HMMSEARCH|PHMMER|NHMMER)/) {
                                 my ( $domain_num, $score,    $bias,
                                      $ceval,      $ieval,
                                      $hmm_start,  $hmm_stop, $hmm_cov,
@@ -569,7 +571,8 @@ sub next_result {
                                       $hmm_start,  $hmm_stop, $hmm_cov,
                                       $seq_start,  $seq_stop, $seq_cov,
                                       $env_start,  $env_stop, $env_cov,
-                                      $acc ) = (
+                                      $acc )
+                                       = ( $buffer =~
                                             m|^\s+(\d+)\s\!*\?*\s+     # domain number
                                               (\S+)\s+(\S+)\s+         # score, bias
                                               (\S+)\s+(\S+)\s+         # c-eval, i-eval
@@ -578,13 +581,13 @@ sub next_result {
                                               (\d+)\s+(\d+)\s+(\S+)\s+ # env start, stop, coverage
                                               (\S+)                    # posterior probability accuracy
                                                \s*$|ox
-                                        )
+                                          )
                                     ) {
                                     # Values assigned when IF succeeded
 
                                     # Try to get the Hit length from the alignment information
                                     $hitlength = 0;
-                                    if ($self->{'_reporttype'} eq 'HMMSEARCH') {
+                                    if ($self->{'_reporttype'} eq 'HMMSEARCH' || $self->{'_reporttype'} eq 'PHMMER') {
                                         # For Hmmsearch, if seq coverage ends in ']' it means that the alignment
                                         # runs until the end. In that case add the END coordinate to @hitinfo
                                         # to use it as Hit Length
@@ -606,20 +609,21 @@ sub next_result {
                                          $hmm_start, $hmm_stop, $hmm_cov,
                                          $seq_start, $seq_stop, $seq_cov,
                                          $env_start, $env_stop, $env_cov,
-                                         $hitlength, $acc ) = (
-                                            m|^\s+[!?]\s+
-                                              (\S+)\s+(\S+)\s+(\S+)\s+ # score, bias, evalue
-                                              (\d+)\s+(\d+)\s+(\S+)\s+ # hmm start, stop, coverage
-                                              (\d+)\s+(\d+)\s+(\S+)\s+ # seq start, stop, coverage
-                                              (\d+)\s+(\d+)\s+(\S+)\s+ # env start, stop, coverage
-                                              (\d+)\s+(\S+)            # target length, pp accuracy
-                                               .*$|ox
-                                        )
+                                         $hitlength, $acc )
+                                          = ( $buffer =~
+                                                m|^\s+[!?]\s+
+                                                  (\S+)\s+(\S+)\s+(\S+)\s+ # score, bias, evalue
+                                                  (\d+)\s+(\d+)\s+(\S+)\s+ # hmm start, stop, coverage
+                                                  (\d+)\s+(\d+)\s+(\S+)\s+ # seq start, stop, coverage
+                                                  (\d+)\s+(\d+)\s+(\S+)\s+ # env start, stop, coverage
+                                                  (\d+)\s+(\S+)            # target length, pp accuracy
+                                                   .*$|ox
+                                             )
                                     ) {
                                     # Values assigned when IF succeeded
                                 }
                                 else {
-                                    print "Missed this line: $_\n";
+                                    print STDERR "Missed this line: $buffer\n";
                                     next;
                                 }
 
@@ -649,7 +653,7 @@ sub next_result {
                             }
                         }
                     }
-                    elsif ( /Alignment(?:s for each domain)?:/ ) {
+                    elsif ( $buffer =~ /Alignment(?:s for each domain)?:/ ) {
                         #line counter
                         my $count = 0;
 
@@ -667,20 +671,26 @@ sub next_result {
                         my $align_offset = 0;
                         my $align_length = 0;
 
-                        while ( defined( $_ = $self->_readline ) ) {
-                            if (   $_ =~ m/^\>\>/
-                                || $_ =~ m/Internal pipeline statistics/ )
+                        while ( defined( $buffer = $self->_readline ) ) {
+                            if (   $buffer =~ m/^\>\>/
+                                || $buffer =~ m/Internal pipeline statistics/ )
                             {
-                                $self->_pushback($_);
+                                $self->_pushback($buffer);
                                 last;
                             }
-                            elsif ($_ =~ m/^$/ )
+                            elsif ($buffer =~ m/^$/ )
                             {
+                                # Reset these scalars on empty lines to help
+                                # distinguish between the consensus structure/reference
+                                # tracks (CS|RF lines) and homology lines ending in
+                                # CS or RF aminoacids
+                                $align_offset = 0;
+                                $align_length = 0;
                                 next;
                             }
 
-                            if (   $_ =~ /\s\s\=\=\sdomain\s(\d+)\s+/
-                                or $_ =~ /\s\sscore:\s\S+\s+/
+                            if (   $buffer =~ /\s\s\=\=\sdomain\s(\d+)\s+/
+                                or $buffer =~ /\s\sscore:\s\S+\s+/
                                 ) {
                                 my $domainnum = $1 || 1;
                                 $count = 0;
@@ -693,9 +703,12 @@ sub next_result {
                                 $pline      = $$hsp[-1];
                                 $lastdomain = $name;
                             }
-                            # model data track, some reports don't have
-                            elsif ( $_ =~ m/\s+\S+\s(?:CS|RF)$/ ) {
-                                my @data = split( " ", $_ );
+                            # Consensus Structure or Reference track, some reports
+                            # don't have it. Since it appears on top of the alignment,
+                            # the reset of $align_length to 0 between alignment blocks
+                            # avoid confusing homology lines with it.
+                            elsif ( $buffer =~ m/\s+\S+\s(?:CS|RF)$/ and $align_length == 0 ) {
+                                my @data = split( " ", $buffer );
                                 $csline .= $data[-2];
                                 $max_count++;
                                 $count++;
@@ -706,11 +719,13 @@ sub next_result {
                             elsif (    $count == $max_count - 3
                                    or  $count == $max_count - 1
                                    ) {
-                                my @data = split( " ", $_ );
+                                my @data = split( " ", $buffer );
 
                                 my $line_offset = 0;
-                                while ($_ =~ m/$data[-2]/g) {
-                                    $line_offset = pos;
+                                # Use \Q\E on match to avoid errors on alignments
+                                # that include stop codons (*)
+                                while ($buffer =~ m/\Q$data[-2]\E/g) {
+                                    $line_offset = pos $buffer;
                                 }
                                 if ($line_offset != 0) {
                                     $align_length = length $data[-2];
@@ -738,13 +753,13 @@ sub next_result {
                             # leading/lagging whitespace while preserving
                             # gap data (latter isn't done, former is)
                             elsif ( $count == $max_count - 2 ) {
-                                $midline .= substr $_, $align_offset, $align_length;
+                                $midline .= substr $buffer, $align_offset, $align_length;
                                 $count++;
                                 next;
                             }
                             # posterior probability track
                             elsif ( $count == $max_count ) {
-                                my @data   = split(" ", $_);
+                                my @data   = split(" ", $buffer);
                                 $pline    .= $data[-2];
                                 $count     = 0;
                                 $max_count = 3;
@@ -756,7 +771,7 @@ sub next_result {
                                 next;
                             }
                             else {
-                                print "Missed this line: $_\n";
+                                print STDERR "Missed this line: $buffer\n";
                             }
                         }
                     }
@@ -764,7 +779,7 @@ sub next_result {
             }
 
             # End of report
-            elsif ( m/Internal pipeline statistics/ || m!^//! ) {
+            elsif ( $buffer =~ m/Internal pipeline statistics/ || $buffer =~ m!^//! ) {
                 # If within hit, hsp close;
                 if ( $self->within_element('hit') ) {
                     if ( $self->within_element('hsp') ) {
@@ -774,8 +789,8 @@ sub next_result {
                 }
 
                 # Grab summary statistics of run
-                while ( defined( $_ = $self->_readline ) ) {
-                    last if ( $_ =~ m/^\/\/$/ );
+                while ( defined( $buffer = $self->_readline ) ) {
+                    last if ( $buffer =~ m/^\/\/$/ );
                 }
 
                 # Do a lot of processing of hits and hsps here
@@ -974,10 +989,10 @@ sub next_result {
             }
         }
         else {
-            print "Missed line: $_\n";
-            $self->debug($_);
+            print STDERR "Missed this line: $buffer\n";
+            $self->debug($buffer);
         }
-        $last = $_;
+        $last = $buffer;
     }
     $self->end_element( { 'Name' => 'HMMER_Output' } );
     my $result = $self->end_document();
@@ -1034,7 +1049,7 @@ sub end_element {
     my $rc;
 
     if ( $nm eq 'HMMER_program' ) {
-        if ( $self->{'_last_data'} =~ /(N?HMM\S+)/i ) {
+        if ( $self->{'_last_data'} =~ /([NP]?HMM\S+)/i ) {
             $self->{'_reporttype'} = uc $1;
         }
     }
@@ -1042,15 +1057,15 @@ sub end_element {
     # Hsp are sort of weird, in that they end when another
     # object begins so have to detect this in end_element for now
     if ( $nm eq 'Hsp' ) {
-        foreach (qw(Hsp_csline Hsp_qseq Hsp_midline Hsp_hseq Hsp_pline)) {
-            my $data = $self->{'_last_hspdata'}->{$_};
-            if ( $data && $_ eq 'Hsp_hseq' ) {
+        foreach my $line (qw(Hsp_csline Hsp_qseq Hsp_midline Hsp_hseq Hsp_pline)) {
+            my $data = $self->{'_last_hspdata'}->{$line};
+            if ( $data && $line eq 'Hsp_hseq' ) {
 
                 # replace hmm '.' gap symbol by '-'
                 $data =~ s/\./-/g;
             }
             $self->element(
-                {   'Name' => $_,
+                {   'Name' => $line,
                     'Data' => $data
                 }
             );
@@ -1164,11 +1179,11 @@ sub characters {
 sub within_element {
     my ( $self, $name ) = @_;
     return 0
-        if ( !defined $name
-        || !defined $self->{'_elements'}
-        || scalar @{ $self->{'_elements'} } == 0 );
-    foreach ( @{ $self->{'_elements'} } ) {
-        return 1 if ( $_ eq $name );
+        if (   !defined $name
+            || !defined $self->{'_elements'}
+            || scalar @{ $self->{'_elements'} } == 0 );
+    foreach my $element ( @{ $self->{'_elements'} } ) {
+        return 1 if ( $element eq $name );
     }
     return 0;
 }
diff --git a/Bio/SearchIO/infernal.pm b/Bio/SearchIO/infernal.pm
index 35aa457..c521743 100644
--- a/Bio/SearchIO/infernal.pm
+++ b/Bio/SearchIO/infernal.pm
@@ -31,13 +31,14 @@ Bio::SearchIO::infernal - SearchIO-based Infernal parser
 =head1 DESCRIPTION
 
 This is a SearchIO-based parser for Infernal output from the cmsearch program.
-It currently parses cmsearch output for Infernal versions 0.7-1.0; older
+It currently parses cmsearch output for Infernal versions 0.7-1.1; older
 versions may work but will not be supported.
 
-As the first stable version has been released (and output has stabilized) it is
-highly recommended that users upgrade to using the latest Infernal release.
-Support for the older pre-v.1 developer releases will be dropped for future core
-1.6 releases. 
+The latest version of Infernal is 1.1. The output has changed substantially
+relative to version 1.0. Versions 1.x are stable releases (and output has
+stabilized) therefore it is highly recommended that users upgrade to using
+the latest Infernal release. Support for the older pre-v.1 developer releases
+will be dropped for future core 1.6 releases.
 
 =head1 FEEDBACK
 
@@ -76,6 +77,7 @@ Email cjfields-at-uiuc-dot-edu
 =head1 CONTRIBUTORS
 
   Jeffrey Barrick, Michigan State University
+  Paul Cantalupo, University of Pittsburgh
 
 =head1 APPENDIX
 
@@ -105,42 +107,48 @@ our %MAPPING = (
         'Hsp_pvalue'      => 'HSP-pvalue', # pvalues only in v0.81, optional
         'Hsp_query-from'  => 'HSP-query_start',
         'Hsp_query-to'    => 'HSP-query_end',
+        'Hsp_query-strand'=> 'HSP-query_strand',
         'Hsp_hit-from'    => 'HSP-hit_start', 
         'Hsp_hit-to'      => 'HSP-hit_end', 
+        'Hsp_hit-strand'  => 'HSP-hit_strand',
         'Hsp_gaps'        => 'HSP-hsp_gaps', 
         'Hsp_hitgaps'     => 'HSP-hit_gaps',
         'Hsp_querygaps'   => 'HSP-query_gaps',
         'Hsp_qseq'        => 'HSP-query_seq',
+        'Hsp_ncline'      => 'HSP-nc_seq',
         'Hsp_hseq'        => 'HSP-hit_seq',
         'Hsp_midline'     => 'HSP-homology_seq',
+        'Hsp_pline'       => 'HSP-pp_seq',
         'Hsp_structure'   => 'HSP-meta',
         'Hsp_align-len'   => 'HSP-hsp_length',
         'Hsp_stranded'    => 'HSP-stranded',
-        
+
         'Hit_id'        => 'HIT-name',
         'Hit_len'       => 'HIT-length',
         'Hit_gi'        => 'HIT-ncbi_gi',
         'Hit_accession' => 'HIT-accession',
+        'Hit_desc'      => 'HIT-description',
         'Hit_def'       => 'HIT-description',
-        'Hit_signif'    => 'HIT-significance', # evalues only in v0.81, optional
-        'Hit_p'         => 'HIT-p',            # pvalues in 1.0, optional
-        'Hit_score'     => 'HIT-score', # best HSP bit score
-        'Hit_bits'      => 'HIT-bits', # best HSP bit score
- 
+        'Hit_signif'    => 'HIT-significance', # evalues in v1.1 and v0.81, optional
+        'Hit_p'         => 'HIT-p',            # pvalues only in 1.0, optional
+        'Hit_score'     => 'HIT-score', # best HSP bit score (in v1.1, the only HSP bit score)
+        'Hit_bits'      => 'HIT-bits',  # best HSP bit score (ditto)
+
         'Infernal_program'  => 'RESULT-algorithm_name', # get/set 
         'Infernal_version'  => 'RESULT-algorithm_version', # get/set 
         'Infernal_query-def'=> 'RESULT-query_name', # get/set 
         'Infernal_query-len'=> 'RESULT-query_length', 
         'Infernal_query-acc'=> 'RESULT-query_accession', # get/set 
         'Infernal_querydesc'=> 'RESULT-query_description', # get/set
+        'Infernal_cm'       => 'RESULT-cm_name',
         'Infernal_db'       => 'RESULT-database_name',  # get/set 
-        'Infernal_db-len'   => 'RESULT-database_entries', # none yet
-        'Infernal_db-let'   => 'RESULT-database_letters', # none yet
+        'Infernal_db-len'   => 'RESULT-database_entries', # in v1.1 only
+        'Infernal_db-let'   => 'RESULT-database_letters', # in v1.1 only
 	     );
 
 my $MINSCORE = 0;
 my $DEFAULT_ALGORITHM = 'cmsearch';
-my $DEFAULT_VERSION = '1.0';
+my $DEFAULT_VERSION = '1.1';
 
 my @VALID_SYMBOLS = qw(5-prime 3-prime single-strand unknown gap);
 my %STRUCTURE_SYMBOLS = (
@@ -188,7 +196,7 @@ sub _initialize {
     $handler->register_factory(
         'result',
         Bio::Factory::ObjectFactory->new(
-            -type      => 'Bio::Search::Result::GenericResult',
+            -type      => 'Bio::Search::Result::INFERNALResult',
             -interface => 'Bio::Search::Result::ResultI',
             -verbose   => $self->verbose
         )
@@ -211,13 +219,13 @@ sub _initialize {
             -verbose   => $self->verbose
         )
     );
-	
+
     defined $model     && $self->model($model);
     defined $database  && $self->database($database);
     defined $accession && $self->query_accession($accession);
     defined $convert   && $self->convert_meta($convert);
     defined $desc      && $self->query_description($desc);
-    
+
     $version ||= $DEFAULT_VERSION;
     $self->version($version);
     $symbols ||= \%STRUCTURE_SYMBOLS;
@@ -247,11 +255,20 @@ sub next_result {
             next if $line =~ m{^\s*$};
             # newer output starts with model name
             if ($line =~ m{^\#\s+cmsearch\s}) {
-                $self->{'_handlerset'} = 'latest';
-			} elsif ($line =~ m{^CM\s\d+:}) {
-                $self->{'_handlerset'} = 'pre-1.0';
-            } else {
-                $self->{'_handlerset'} ='old';
+              my $secondline = $self->_readline;
+              if ($secondline =~ m{INFERNAL 1\.1}) {
+                $self->{'_handlerset'} = '1.1';
+              }
+              else {
+                $self->{'_handlerset'} = 'latest';  # v1.0
+              }
+              $self->_pushback($secondline);
+            }
+            elsif ($line =~ m{^CM\s\d+:}) {
+              $self->{'_handlerset'} = 'pre-1.0';
+            }
+            else {
+              $self->{'_handlerset'} ='old';
             }
             last;
         }
@@ -263,11 +280,308 @@ sub next_result {
 		#	-version => 1.007);
 		#}
     }
-    return ($self->{'_handlerset'} eq 'latest')  ? $self->_parse_latest :
-		   ($self->{'_handlerset'} eq 'pre-1.0') ? $self->_parse_pre :
-			$self->_parse_old;
+    return ($self->{'_handlerset'} eq '1.1')     ? $self->_parse_v1_1 :
+           ($self->{'_handlerset'} eq 'latest')  ? $self->_parse_latest :
+           ($self->{'_handlerset'} eq 'pre-1.0') ? $self->_parse_pre :
+           $self->_parse_old;
+}
+
+
+sub _parse_v1_1 {
+  my ($self) = @_;
+  my $seentop = 0;
+  local $/ = "\n";
+  my ($accession, $description) = ($self->query_accession, $self->query_description);
+  my ($buffer, $last, %modelcounter, @hit_list, %hitindex,
+                                     @hsp_list, %hspindex);
+  $self->start_document();
+  $buffer = $self->_readline;
+  if ( !defined $buffer || $buffer =~ m/^\[ok/ ) {  # end of report
+      return undef;
+  }
+  else {
+      $self->_pushback($buffer);
+  }
+
+  PARSER: # Parse each line of report
+  while ( defined( $buffer = $self->_readline ) ) {
+    my $hit_counter = 0;
+    my $lineorig = $buffer;
+    chomp $buffer;
+
+    # INFERNAL program name
+    if ( $buffer =~ m/^\#\s(\S+)\s\:\:\s/ ) {
+      $seentop = 1;
+      my $prog = $1;
+      $self->start_element( { 'Name' => 'Result' } );
+      $self->element_hash( { 'Infernal_program' => uc($prog) } );
+    }
+
+    # INFERNAL version and release date
+    elsif ( $buffer =~ m/^\#\sINFERNAL\s+(\S+)\s+\((.+)\)/ ) {
+      my $version     = $1;
+      my $versiondate = $2;
+      $self->{'_cmidline'} = $buffer;
+      $self->element_hash( { 'Infernal_version' => $version } );
+    }
+
+    # Query info
+    elsif ( $buffer =~ /^\#\squery (?:\w+ )?file\:\s+(\S+)/ ) {
+      $self->{'_cmfileline'} = $lineorig;
+      $self->element_hash( { 'Infernal_cm' => $1 } );
+    }
+
+    # Database info
+    elsif ( $buffer =~ m/^\#\starget\s\S+\sdatabase\:\s+(\S+)/ ) {
+      $self->{'_cmseqline'} = $lineorig;
+      $self->element_hash( { 'Infernal_db' => $1 } );
+    }
+
+    # Query data
+    elsif ( $buffer =~ m/^Query:\s+(\S+)\s+\[CLEN=(\d+)\]$/ ) {
+      $self->element_hash( { 'Infernal_query-def' => $1, 
+                             'Infernal_query-len' => $2,
+                             'Infernal_query-acc' => $accession,
+                             'Infernal_querydesc' => $description,
+                            } );
+    }
+
+    # Get query accession
+    elsif ( $buffer =~ s/^Accession:\s+// && ! $accession) {
+      $buffer =~ s/\s+$//;
+      $self->element_hash( { 'Infernal_query-acc' => $buffer } );
+    }
+
+    # Get query description
+    elsif ( $buffer =~ s/^Description:\s+// && ! $description) {
+      $buffer =~ s/\s+$//;
+      $self->element_hash( { 'Infernal_querydesc' => $buffer } );
+    }
+
+    # Process hit table - including those below inclusion threshold
+    elsif ( $buffer =~ m/^Hit scores:/) {
+      @hit_list = ();   # here is case there are multi-query reports
+      while ( defined( $buffer = $self->_readline ) ) {
+        if ( $buffer =~ m/^Hit alignments:/ ) {
+          $self->_pushback($buffer);
+          last;
+        }
+        elsif (   $buffer =~ m/^\s+rank\s+E-value/
+               || $buffer =~ m/\-\-\-/
+               || $buffer =~ m/^$/
+               || $buffer =~ m/No hits detected/ ) {
+          next;
+        }
+
+        # Process hit
+        $hit_counter++;
+        my ($rank, $threshold, $eval, $score,
+            $bias, $hitid, $start, $end, $strand,
+            $mdl, $truc, $gc, @desc) = split( " ", $buffer );
+        my $desc = join " ", @desc;
+        $desc = '' if ( !defined($desc) );
+
+        push @hit_list, [ $hitid, $desc, $eval, $score ];
+        $hitindex{ $hitid.$hit_counter } = $#hit_list;
+      }
+    }
+
+    # Process hit alignments
+    elsif ( $buffer =~ /^Hit alignments:/ ) {
+      my $hitid;
+      my $align_counter = 0;
+      while ( defined( $buffer = $self->_readline ) ) {
+        if ( $buffer =~ /^Internal CM pipeline statistics summary/ ) {
+          $self->_pushback($buffer);
+          last;
+        }
+        if ( $buffer =~ m/^\>\>\s(\S*)\s+(.*)/ ) {  # defline of hit
+          $hitid    = $1;
+          my $desc = $2;
+          $align_counter++;
+          my $hitid_alignctr = $hitid.$align_counter;
+          $modelcounter{$hitid_alignctr} = 0;
+
+          # The Hit Description from the Hit table can be truncated if
+          # it is too long, so use the '>>' line description instead
+          $hit_list[ $hitindex{$hitid_alignctr} ][1] = $desc;
+
+          # Process hit information table
+          while ( defined( $buffer = $self->_readline ) ) {
+            if (   $buffer =~ m/^Internal CM pipeline statistics/
+                || $buffer =~ m/NC$/
+                || $buffer =~ m/^\>\>/ ) {
+              $self->_pushback($buffer);
+              last;
+            }
+            elsif (   $buffer =~ m/^\s+rank\s+E-value/
+                   || $buffer =~ m/^\s----/
+                   || $buffer =~ m/^$/
+                   || $buffer =~ m/No hits detected/ ) {
+              next;
+            }
+
+            # Get hsp data from table, push into @hsp;
+            my ( $rank,      $threshold, $eval,
+                 $score,     $bias,      $model,
+                 $cm_start,  $cm_stop,   $cm_cov,
+                 $seq_start, $seq_stop,  $seq_strand, $seq_cov,
+                 $acc,       $trunc,     $gc,
+                 ) = split( " ", $buffer );
+
+            # Try to get the Hit Length from the alignment information.
+            # For cmsearch, if sequence coverage ends in ']' it means that the
+            # alignment runs full-length flush to the end of the target.
+            my $hitlength = ( $seq_cov =~ m/\]$/ ) ? $seq_stop : 0;
+
+            my $tmphit = $hit_list[ $hitindex{$hitid_alignctr} ];
+            if ( !defined $tmphit ) {
+              $self->warn("Incomplete information: can't find HSP $hitid in list of hits\n");
+              next;
+            }
+
+            push @hsp_list, [ $hitid,
+                              $cm_start, $cm_stop,
+                              $seq_start, $seq_stop,
+                              $score,     $eval,
+                              $hitlength];
+            $modelcounter{$hitid_alignctr}++;
+            my $hsp_key = $hitid_alignctr . "_" . $modelcounter{$hitid_alignctr};
+            $hspindex{$hsp_key} = $#hsp_list;
+          }
+        }
+        elsif ( $buffer =~ m/NC$/ ) { # start of HSP
+          # need CS line to get number of spaces before structure data
+          my $csline = $self->_readline;
+          $csline =~ m/^(\s+)\S+ CS$/;
+          my $offset = length($1);
+          $self->_pushback($csline);
+          $self->_pushback($buffer); # set up for loop
+
+          my ($ct, $strln) = 0;
+          my $hspdata;
+          HSP:
+          my %hspline = ('0' => 'nc',    '1' => 'meta',
+                         '2' => 'query', '3' => 'midline',
+                         '4' => 'hit',   '5' => 'pp');
+          HSP:
+          while (defined ($buffer = $self->_readline)) {
+            chomp $buffer;
+            if (   $buffer =~ /^>>\s/
+                || $buffer =~ /^Internal CM pipeline statistics/) {
+              $self->_pushback($buffer);
+              last HSP;
+            }
+            elsif ( $ct % 6 == 0 && $buffer =~ /^$/ ) {
+              next;
+            }
+            my $iterator = $ct % 6;
+            # NC line ends with ' NC' so remove these from the strlen count
+            $strln = ( length($buffer) - 3 ) if $iterator == 0;
+            my $data = substr($buffer, $offset, $strln-$offset);
+            $hspdata->{ $hspline{$iterator} } .= $data;
+
+            $ct++;
+          } # 'HSP' while loop
+
+          my $strlen = 0;
+          # catch any insertions and add them into the actual length
+          while ($hspdata->{'query'} =~ m{\*\[\s*(\d+)\s*\]\*}g) {
+            $strlen += $1;
+          }
+          # add on the actual residues
+          $strlen += $hspdata->{'query'} =~ tr{A-Za-z}{A-Za-z};
+          my $metastr = ($self->convert_meta) ? ($self->simple_meta($hspdata->{'meta'})) :
+                              $hspdata->{'meta'};
+
+          my $hitid_alignctr = $hitid . $align_counter;
+          my $hsp_key = $hitid_alignctr . "_" . $modelcounter{$hitid_alignctr};
+          my $hsp = $hsp_list[ $hspindex{$hsp_key} ];
+          push (@$hsp, $hspdata->{'nc'},    $metastr,
+                       $hspdata->{'query'}, $hspdata->{'midline'},
+                       $hspdata->{'hit'},   $hspdata->{'pp'});
+        }
+      }
+    }  # end of 'Hit alignments:' section of report
+
+    # Process internal pipeline stats (end of report)
+    elsif ( $buffer =~ m/Internal CM pipeline statistics summary:/ ) {
+      while ( defined( $buffer = $self->_readline ) ) {
+        last if ( $buffer =~ m!^//! );
+
+        if ( $buffer =~ /^Target sequences:\s+(\d+)\s+\((\d+) residues/ ) {
+          $self->element_hash( { 'Infernal_db-len' => $1,
+                                 'Infernal_db-let' => $2, } );
+        }
+      }
+      last;    # of the outer while defined $self->readline
+    }
+
+    # Leftovers
+    else {
+      #print STDERR "Missed line: $buffer\n";
+      $self->debug($buffer);
+    }
+    $last = $buffer;
+  } # PARSER end
+
+  # Final processing of hits and hsps
+  my $hit_counter = 0;
+  foreach my $hit ( @hit_list ) {
+    $hit_counter++;
+    my ($hit_name, $hit_desc, $hit_signif, $hit_score) = @$hit;
+    my $num_hsp = $modelcounter{$hit_name . $hit_counter} || 0;
+
+    $self->start_element( { 'Name' => 'Hit' } );
+    $self->element_hash( {'Hit_id'    => $hit_name,
+                          'Hit_desc'  => $hit_desc,
+                          'Hit_signif'=> $hit_signif,
+                          'Hit_score' => $hit_score,
+                          'Hit_bits'  => $hit_score, } );
+    for my $i ( 1 .. $num_hsp ) {
+      my $hsp_key = $hit_name . $hit_counter . "_" . $i;
+      my $hsp = $hsp_list[ $hspindex{$hsp_key} ];
+      if ( defined $hsp ) {
+        my $hspid = shift @$hsp;
+
+        my ($cm_start,  $cm_stop, $seq_start, $seq_stop,
+            $score,     $eval,    $hitlength, $ncline,
+            $csline, $qseq, $midline, $hseq, $pline) = @$hsp;
+        if ( $hitlength != 0 ) {
+            $self->element(
+                { 'Name' => 'Hit_len', 'Data' => $hitlength }
+            );
+        }
+
+        $self->start_element( { 'Name' => 'Hsp' } );
+        $self->element_hash( { 'Hsp_stranded'   => 'HIT',
+                               'Hsp_query-from' => $cm_start,
+                               'Hsp_query-to'   => $cm_stop,
+                               'Hsp_hit-from'   => $seq_start,
+                               'Hsp_hit-to'     => $seq_stop,
+                               'Hsp_score'      => $score,
+                               'Hsp_bit-score'  => $score,
+                               'Hsp_evalue'     => $eval,
+                               'Hsp_ncline'     => $ncline,
+                               'Hsp_structure'  => $csline,
+                               'Hsp_qseq'       => $qseq,
+                               'Hsp_midline'    => $midline,
+                               'Hsp_hseq'       => $hseq,
+                               'Hsp_pline'      => $pline,
+                             } );
+
+        $self->end_element( { 'Name' => 'Hsp' } );
+      }
+    }
+    $self->end_element( { 'Name' => 'Hit' } );
+  }
+
+  $self->end_element( { 'Name' => 'Result' } );
+  my $result = $self->end_document();
+  return $result;
 }
 
+
 =head2 start_element
 
  Title   : start_element
@@ -323,6 +637,14 @@ sub end_element {
                 $self->{'_values'} );
         }
         my $lastelem = shift @{ $self->{'_elements'} };
+
+        # Infernal 1.1 allows one to know hit->length in some instances
+        # so remove it so it doesn't carry over to next hit. Tried flushing
+        # all 'type' values from {_values} buffer but it breaks legacy tests
+        if ($type eq 'hit' ) {
+          delete $self->{_values}{'HIT-length'};
+          delete $self->{_values}{'HSP-hit_length'};
+        }
     }
     elsif ( $MAPPING{$nm} ) {
         if ( ref( $MAPPING{$nm} ) =~ /hash/i ) {
@@ -519,7 +841,7 @@ sub model {
 
  Title   : database
  Usage   : my $database = $parser->database();
- Function: Get/Set database; Infernal currently does not output
+ Function: Get/Set database; pre-v.1 versions of Infernal do not output
            the database name
  Returns : String (database name)
  Args    : [optional] String (database name)
@@ -536,7 +858,7 @@ sub database {
 
  Title   : algorithm
  Usage   : my $algorithm = $parser->algorithm();
- Function: Get/Set algorithm; current versions of Infernal do not output
+ Function: Get/Set algorithm; pre-v.1 versions of Infernal do not output
            the algorithm name
  Returns : String (algorithm name)
  Args    : [optional] String (algorithm name)
@@ -553,7 +875,7 @@ sub algorithm {
 
  Title   : query_accession
  Usage   : my $acc = $parser->query_accession();
- Function: Get/Set query (model) accession; Infernal currently does not output
+ Function: Get/Set query (model) accession; pre-v1.1 Infernal does not output
            the accession number (Rfam accession #)
  Returns : String (accession)
  Args    : [optional] String (accession)
@@ -570,7 +892,7 @@ sub query_accession {
 
  Title   : query_description
  Usage   : my $acc = $parser->query_description();
- Function: Get/Set query (model) description; Infernal currently does not output
+ Function: Get/Set query (model) description; pre-v1.1 Infernal does not output
            the Rfam description
  Returns : String (description)
  Args    : [optional] String (description)
@@ -731,8 +1053,8 @@ sub _parse_latest {
 			# store absolute DB length
 			$self->element_hash({
 					'Infernal_db-let'   => $1 * 1e6
-				});		
-		}		
+				});
+		}
 		elsif ($line =~ m{^CM(?:\s(\d+))?:\s*(\S+)}xms) {
 			# not sure, but it's possible single reports may contain multiple
 			# models; if so, they should be rolled over into a new ResultI
@@ -794,7 +1116,7 @@ sub _parse_latest {
             if (!$self->in_element('hsp')) {
                 $self->start_element({'Name' => 'Hsp'});
             }
-            
+
             # hsp is similar to older output
         } elsif ($line =~ m{^(\s+)[<>\{\}\(\)\[\]:_,-\.]+}xms) { # start of HSP
             $self->_pushback($line); # set up for loop
@@ -816,7 +1138,7 @@ sub _parse_latest {
                 # it is possible to have homology lines consisting
                 # entirely of spaces if the subject has a large
                 # insertion where nothing matches the model
-                
+
                 # exit loop if at end of file or upon next hit/HSP
                 if ($line =~ m{^\s{0,2}\S+}) {
                     $self->_pushback($line);
@@ -827,31 +1149,31 @@ sub _parse_latest {
                 # strlen set only with structure lines (proper length)
                 $strln = length($line) if $iterator == 0;
                 # only grab the data needed (hit start and stop in hit line above)
-												
+
                 my $data = substr($line, $offset, $strln-$offset);
                 $hsp->{ $hsp_key{$iterator} } .= $data;
-                
+
                 $ct++;
             }
-            
+
             # query start, end are from the actual query length (entire hit is
             # mapped to CM data, so all CM data is represented)
             # works for now...
-            if ($self->in_element('hsp')) {				
+            if ($self->in_element('hsp')) {
 				# In some cases with HSPs unaligned residues are present in
 				# the hit or query (Ex: '*[ 8]*' is 8 unaligned residues).
 				# This info needs to be passed on unmodifed to the HSP class
 				# and handled there as it is subjectively changed based on
 				# use.
                 my $strlen = 0;
-				
+
 				# catch any insertions and add them into the actual length
 				while ($hsp->{'query'} =~ m{\*\[\s*(\d+)\s*\]\*}g) {
 					$strlen += $1;
 				}
 				# add on the actual residues
 				$strlen += $hsp->{'query'} =~ tr{A-Za-z}{A-Za-z};
-				
+
                 my $metastr = ($self->convert_meta) ? ($self->simple_meta($hsp->{'meta'})) :
                             $hsp->{'meta'};
                 $self->element_hash(
@@ -973,7 +1295,7 @@ sub _parse_pre {
             if (!$self->in_element('hsp')) {
                 $self->start_element({'Name' => 'Hsp'});
             }
-            
+
             # hsp is similar to older output
         } elsif ($line =~ m{^(\s+)[<>\{\}\(\)\[\]:_,-\.]+}xms) { # start of HSP
             $self->_pushback($line); # set up for loop
@@ -995,7 +1317,7 @@ sub _parse_pre {
                 # it is possible to have homology lines consisting
                 # entirely of spaces if the subject has a large
                 # insertion where nothing matches the model
-                
+
                 # exit loop if at end of file or upon next hit/HSP
                 if ($line =~ m{^\s{0,2}\S+}) {
                     $self->_pushback($line);
@@ -1006,19 +1328,19 @@ sub _parse_pre {
                 # strlen set only with structure lines (proper length)
                 $strln = length($line) if $iterator == 0;
                 # only grab the data needed (hit start and stop in hit line above)
-												
+
                 my $data = substr($line, $offset, $strln-$offset);
                 $hsp->{ $hsp_key{$iterator} } .= $data;
-                
+
                 $ct++;
             }
-            
+
             # query start, end are from the actual query length (entire hit is
             # mapped to CM data, so all CM data is represented)
             # works for now...
             if ($self->in_element('hsp')) {
                 my $strlen = $hsp->{'query'} =~ tr{A-Za-z}{A-Za-z};
-                
+
                 my $metastr;
                 $metastr = ($self->convert_meta) ? ($self->simple_meta($hsp->{'meta'})) :
                             ($hsp->{'meta'});
diff --git a/Bio/Seq.pm b/Bio/Seq.pm
index e839741..0b020e0 100644
--- a/Bio/Seq.pm
+++ b/Bio/Seq.pm
@@ -1043,15 +1043,16 @@ This includes methods for retrieving, adding, and removing features.
            feature object in order to traverse all features associated
            with this sequence.
 
-           Top-level features can be obtained by tag, specified in 
+           Specific features can be obtained by primary tag, specified in 
            the argument.
 
            Use get_all_SeqFeatures() if you want the feature tree
            flattened into one single array.
 
- Example :
+ Example : my @feats = $seq->get_SeqFeatures or
+           my @genefeats = $seq->get_SeqFeatures('gene')
  Returns : an array of Bio::SeqFeatureI implementing objects
- Args    : [optional] scalar string (feature tag)
+ Args    : [optional] string (feature tag)
 
 =cut
 
@@ -1163,25 +1164,31 @@ sub add_SeqFeature {
 
  Title   : remove_SeqFeatures
  Usage   : $seq->remove_SeqFeatures();
- Function: Flushes all attached SeqFeatureI objects.
-
-           To remove individual feature objects, delete those from the returned
-           array and re-add the rest.
- Example :
- Returns : The array of Bio::SeqFeatureI objects removed from this seq.
- Args    : None
+ Function: Removes all attached SeqFeatureI objects or those with the 
+           specified primary tag
+ Example : my @gene_feats = $seq->remove_seqFeatures('gene') or
+           my @feats = $seq->remove_seqFeatures()
+ Returns : The array of Bio::SeqFeatureI objects removed from the sequence
+ Args    : None, or a feature primary tag
 
 =cut
 
 sub remove_SeqFeatures {
-    my $self = shift;
-
+    my ( $self, $tag ) = @_;
     return () unless $self->{'_as_feat'};
-    my @feats = @{$self->{'_as_feat'}};
-    $self->{'_as_feat'} = [];
-    return @feats;
-}
 
+    if ( $tag ) {
+        my @selected_feats   = grep { $_->primary_tag eq $tag } @{ $self->{'_as_feat'} };
+        my @unselected_feats = grep { $_->primary_tag ne $tag } @{ $self->{'_as_feat'} };
+        $self->{'_as_feat'} = \@unselected_feats;
+        return @selected_feats;
+    }
+    else {
+        my @all_feats = @{ $self->{'_as_feat'} };
+        $self->{'_as_feat'} = [];
+        return @all_feats;
+    }
+}
 
 =head1 Methods provided in the Bio::PrimarySeqI interface
 
@@ -1191,8 +1198,8 @@ or other information as expected. See L<Bio::PrimarySeq>
 for more information.
 
 Sequence Features are B<not> transferred to the new objects.
-This is possibly a mistake. Anyone who feels the urge in
-dealing with this is welcome to give it a go.
+To reverse complement and include the features use
+L<Bio::SeqUtils::revcom_with_features>.
 
 =head2 revcom
 
diff --git a/Bio/SeqFeature/Generic.pm b/Bio/SeqFeature/Generic.pm
index 7365b0f..772d5fe 100644
--- a/Bio/SeqFeature/Generic.pm
+++ b/Bio/SeqFeature/Generic.pm
@@ -180,7 +180,8 @@ sub new {
                     -phase          the phase of the feature (0..2)
                     -primary_tag    primary tag 
                     -primary        (synonym for -primary_tag)
-                    -source         source tag
+                    -source_tag     source tag
+                    -source         (synonym for -source_tag)
                     -frame          frame
                     -score          score value
                     -tag            a reference to a tag/value hash
@@ -196,7 +197,7 @@ sub set_attributes {
     my ($self, at args) = @_;
     my ($start, $end, $strand, $primary_tag, $source_tag, $primary, 
         $source, $frame, $score, $tag, $gff_string, $gff1_string,
-        $seqname, $seqid, $annot, $location,$display_name, $pid,$phase) =
+        $seqname, $seqid, $annot, $location, $display_name, $pid, $phase) =
             $self->_rearrange([qw(START
                                   END
                                   STRAND
@@ -224,18 +225,20 @@ sub set_attributes {
         $self->_from_gff_stream($gff1_string);
     };
     
-    $pid                    && $self->primary_id($pid);
-    $primary_tag            && $self->primary_tag($primary_tag);
-    $source_tag             && $self->source_tag($source_tag);
-    $primary                && $self->primary_tag($primary);
-    $source                 && $self->source_tag($source);
-    defined $start          && $self->start($start);
-    defined $end            && $self->end($end);
-    defined $strand         && $self->strand($strand);
-    defined $frame          && $self->frame($frame);
-    defined $display_name   && $self->display_name($display_name);
-    defined $score          && $self->score($score);
-    $annot                  && $self->annotation($annot);
+    $pid                  && $self->primary_id($pid);
+    $primary_tag          && $self->primary_tag($primary_tag);
+    $source_tag           && $self->source_tag($source_tag);
+    $primary              && $self->primary_tag($primary);
+    $source               && $self->source_tag($source);
+    $annot                && $self->annotation($annot);
+    defined $start        && $self->start($start);
+    defined $end          && $self->end($end);
+    defined $strand       && $self->strand($strand);
+    defined $frame        && $self->frame($frame);
+    defined $display_name && $self->display_name($display_name);
+    defined $score        && $self->score($score);
+    defined $phase        && $self->phase($phase);
+
     if($seqname) {
         $self->warn("-seqname is deprecated. Please use -seq_id instead.");
         $seqid = $seqname unless $seqid;
@@ -246,7 +249,6 @@ sub set_attributes {
             $self->add_tag_value($t, UNIVERSAL::isa($tag->{$t}, "ARRAY") ? @{$tag->{$t}} : $tag->{$t});
         }
     };
-    defined $phase          && $self->phase($phase);
 }
 
 
@@ -683,7 +685,9 @@ sub attach_seq {
  Function: returns the truncated sequence (if there) for this
  Example :
  Returns : sub seq (a Bio::PrimarySeqI compliant object) on attached sequence
-           bounded by start & end, or undef if there is no sequence attached
+           bounded by start & end, or undef if there is no sequence attached.
+           If the strand is defined and set to -1, the returned sequence is
+           the reverse-complement of the region
  Args    : none
 
 =cut
@@ -701,17 +705,32 @@ sub seq {
 
     # assumming our seq object is sensible, it should not have to yank
     # the entire sequence out here.
+    my $seq;
+    my $start = $self->start;
+    my $end   = $self->end;
+    # Check circular sequences cut by origin (e.g. join(2006035..2007700,1..257))
+    if (    $self->{'_gsf_seq'}->is_circular
+        and $self->location->isa('Bio::Location::SplitLocationI')
+        and $start > $end
+        ) {
+        my $primary_seq_length = $self->{'_gsf_seq'}->length;
 
-    my $seq = $self->{'_gsf_seq'}->trunc($self->start(), $self->end());
+        # Get duplicate object with the first sequence piece using trunc()
+        $seq = $self->{'_gsf_seq'}->trunc($start, $primary_seq_length);
 
+        # Get post-origin sequence and build the complete sequence
+        my $post_origin  = $self->{'_gsf_seq'}->subseq(1, $end);
+        my $complete_seq = $seq->seq() . $post_origin;
 
-    if ( defined $self->strand &&
-        $self->strand == -1 ) {
+        # Add complete sequence to object
+        $seq->seq($complete_seq);
+    }
+    else {
+        $seq = $self->{'_gsf_seq'}->trunc($start, $end);
+    }
 
-        # ok. this does not work well (?)
-        #print STDERR "Before revcom", $seq->str, "\n";
+    if ( defined $self->strand && $self->strand == -1 ) {
         $seq = $seq->revcom;
-        #print STDERR "After  revcom", $seq->str, "\n";
     }
 
     return $seq;
diff --git a/Bio/SeqFeatureI.pm b/Bio/SeqFeatureI.pm
index fec7c40..3179930 100644
--- a/Bio/SeqFeatureI.pm
+++ b/Bio/SeqFeatureI.pm
@@ -298,7 +298,9 @@ sub attach_seq {
            for this feature
  Example :
  Returns : sub seq (a Bio::PrimarySeqI compliant object) on attached sequence
-           bounded by start & end, or undef if there is no sequence attached
+           bounded by start & end, or undef if there is no sequence attached.
+           If the strand is defined and set to -1, the returned sequence is
+           the reverse-complement of the region
  Args    : none
 
 
@@ -522,12 +524,13 @@ sub spliced_seq {
     my @locset = $self->location->each_Location;
     my @locs;
     if ( not $nosort ) {
-        @locs = map { $_->[0] }
+#        @locs = map { $_->[0] }
         # sort so that most negative is first basically to order
         # the features on the opposite strand 5'->3' on their strand
         # rather than they way most are input which is on the fwd strand
 
-        sort { $a->[1] <=> $b->[1] } # Yes Tim, Schwartzian transformation
+#        sort { $a->[1] <=> $b->[1] } # Yes Tim, Schwartzian transformation
+		my @proc_locs =
         map {
              $fstrand = $_->strand unless defined $fstrand;
              $mixed   = 1 if defined $_->strand && $fstrand != $_->strand;
@@ -538,6 +541,16 @@ sub spliced_seq {
              [ $_, $_->start * ($_->strand || 1) ];
         } @locset;
 
+		my @sort_locs;
+		if ( $fstrand == 1 ) {
+			@sort_locs = sort { $a->[1] <=> $b->[1] } @proc_locs; # Yes Tim, Schwartzian transformation
+		}elsif ( $fstrand == -1 ){
+			@sort_locs = sort { $b->[1] <=> $a->[1] } @proc_locs; # Yes Tim, Schwartzian transformation
+		} else {
+			@sort_locs = @proc_locs;
+		}
+		@locs = map { $_->[0] } @sort_locs;
+
         if ( $mixed ) {
             $self->warn(  "Mixed strand locations, spliced seq using the "
                         . "input order rather than trying to sort");
diff --git a/Bio/SeqIO/embl.pm b/Bio/SeqIO/embl.pm
index 1b43894..d3615d5 100644
--- a/Bio/SeqIO/embl.pm
+++ b/Bio/SeqIO/embl.pm
@@ -302,13 +302,13 @@ sub next_seq {
                   my ($date, $version) = split(' ', $line, 2);
                   $date =~ tr/,//d; # remove comma if new version
                   if ($version) {
-                  if ($version =~ /\(Rel\. (\d+), Created\)/xms ) {
+                  if ($version =~ /\(Rel\. (\d+), Created\)/ms ) {
                       my $release = Bio::Annotation::SimpleValue->new(
                                                                       -tagname    => 'creation_release',
                                                                       -value      => $1
                                                                      );
                       $annotation->add_Annotation($release);
-                  } elsif ($version =~ /\(Rel\. (\d+), Last updated, Version (\d+)\)/xms ) {
+                  } elsif ($version =~ /\(Rel\. (\d+), Last updated, Version (\d+)\)/ms ) {
                       my $release = Bio::Annotation::SimpleValue->new(
                                                                       -tagname    => 'update_release',
                                                                       -value      => $1
@@ -677,7 +677,7 @@ sub write_seq {
             my @dates =  $seq->get_dates();
             my $ct = 1;
             my $date_flag = 0;
-            my ($cr) = $seq->annotation->get_Annotations("creation_release");
+	    my ($cr) = $seq->annotation->get_Annotations("creation_release");
             my ($ur) = $seq->annotation->get_Annotations("update_release");
             my ($uv) = $seq->annotation->get_Annotations("update_version");
 
@@ -688,10 +688,10 @@ sub write_seq {
             foreach my $dt (@dates) {
                 if (!$date_flag) {
                     $self->_write_line_EMBL_regex("DT   ","DT   ",
-                                                  $dt." (Rel. $cr, Created)",
+                                                  $dt." (Rel. ".($cr->value()).", Created)",
                                                   '\s+|$',80) if $ct == 1;
                     $self->_write_line_EMBL_regex("DT   ","DT   ",
-                                                  $dt." (Rel. $ur, Last updated, Version $uv)",
+                                                  $dt." (Rel. ".($ur->value()).", Last updated, Version ".($uv->value()).")",
                                                   '\s+|$',80) if $ct == 2;
                 } else {        # other formats?
                     $self->_write_line_EMBL_regex("DT   ","DT   ",
@@ -969,7 +969,7 @@ sub _print_EMBL_FTHelper {
             #
             # Long qualifiers, that will be line wrapped, are always quoted
             elsif (!$FTQUAL_NO_QUOTE{$tag} or length("/$tag=$value")>=60) {
-                my $pat = $value =~ /\s/ ? '\s|\-|$' : '.|\-|$';
+                my $pat = $value =~ /\s+/ ? '\s+|\-|$' : '.|\-|$';
                 $self->_write_line_EMBL_regex("FT                   ",
                                               "FT                   ",
                                               "/$tag=\"$value\"",$pat,80) || return;
@@ -1356,11 +1356,14 @@ sub _read_FTHelper_EMBL {
 
     # Now parse and add any qualifiers.  (@qual is kept
     # intact to provide informative error messages.)
-  QUAL: for (my $i = 0; $i < @qual; $i++) {
-        $_ = $qual[$i];
-        my( $qualifier, $value ) = m{^/([^=]+)(?:=(.+))?}
+  QUAL:
+    for (my $i = 0; $i < @qual; $i++) {
+        my $data = $qual[$i];
+        my ( $qualifier, $value ) = ($data =~ m{^/([^=]+)(?:=\s*(.+))?})
             or $self->throw("Can't see new qualifier in: $_\nfrom:\n"
                             . join('', map "$_\n", @qual));
+        $qualifier = '' if not defined $qualifier;
+
         if (defined $value) {
             # Do we have a quoted value?
             if (substr($value, 0, 1) eq '"') {
@@ -1463,7 +1466,7 @@ sub _write_line_EMBL_regex {
 
   CHUNK: while($line) {
         foreach my $pat ($regex, '[,;\.\/-]\s|'.$regex, '[,;\.\/-]|'.$regex) {
-            if ($line =~ m/^(.{0,$subl})($pat)(.*)/ ) {
+            if ($line =~ m/^(.{1,$subl})($pat)(.*)/ ) {
                 my $l = $1.$2;
                 $l =~ s/#/ /g  # remove word wrap protection char '#'
                     if $pre1 eq "RA   ";
diff --git a/Bio/SeqIO/embldriver.pm b/Bio/SeqIO/embldriver.pm
index 82fe9c2..1712ae4 100644
--- a/Bio/SeqIO/embldriver.pm
+++ b/Bio/SeqIO/embldriver.pm
@@ -346,7 +346,7 @@ sub write_seq {
 
  Title   : seqhandler
  Usage   : $stream->seqhandler($handler)
- Function: Get/Set teh Bio::Seq::HandlerBaseI object
+ Function: Get/Set the Bio::Seq::HandlerBaseI object
  Returns : Bio::Seq::HandlerBaseI 
  Args    : Bio::Seq::HandlerBaseI 
 
diff --git a/Bio/SeqIO/entrezgene.pm b/Bio/SeqIO/entrezgene.pm
index e2f7dd5..76a9e3c 100644
--- a/Bio/SeqIO/entrezgene.pm
+++ b/Bio/SeqIO/entrezgene.pm
@@ -196,7 +196,7 @@ sub next_seq {
 
     #Basic data
     #$xval->{summary}=~s/\n//g;
-    my $seq = Bio::Seq->new(
+    $seq = Bio::Seq->new(
         -display_id       => $xval->{gene}{locus},
         -accession_number => $xval->{'track-info'}{geneid},
         -desc             => $xval->{summary}
diff --git a/Bio/SeqIO/gbdriver.pm b/Bio/SeqIO/gbdriver.pm
index 14b7e27..e18d857 100644
--- a/Bio/SeqIO/gbdriver.pm
+++ b/Bio/SeqIO/gbdriver.pm
@@ -396,7 +396,7 @@ sub write_seq {
 
  Title   : seqhandler
  Usage   : $stream->seqhandler($handler)
- Function: Get/Set teh Bio::Seq::HandlerBaseI object
+ Function: Get/Set the Bio::Seq::HandlerBaseI object
  Returns : Bio::Seq::HandlerBaseI 
  Args    : Bio::Seq::HandlerBaseI 
 
diff --git a/Bio/SeqIO/genbank.pm b/Bio/SeqIO/genbank.pm
index 194a6a6..7e28e94 100644
--- a/Bio/SeqIO/genbank.pm
+++ b/Bio/SeqIO/genbank.pm
@@ -499,7 +499,9 @@ sub next_seq {
                 }
             }
 
-            # Comments
+            # Comments may be plain text or Structured Comments.
+            # Structured Comments are made up of tag/value pairs and have beginning 
+            # and end delimiters like ##*-Data-START## and ##*-Data-END##
             elsif ($line =~ /^COMMENT\s+(\S.*)/) {
                 if ($annotation) {
                     my $comment = $1;
@@ -507,8 +509,20 @@ sub next_seq {
                         last if ($line =~ /^\S/);
                         $comment .= $line;
                     }
-                    $comment =~ s/\n/ /g;
                     $comment =~ s/  +/ /g;
+                    # Structured Comment, do not remove returns in the tabular section
+                    if ( my ( $text, $table )= $comment
+                        =~ /([^#]*)(##\S+Data-START##.+?##\S+Data-END##)/is
+                        ) {
+                        $text    =~ s/\n/ /g if $text;
+                        $table   =~ s/START##/START##\n/;
+                        $table   =~ s/^\s+//gm;
+                        $comment = $text . "\n" . $table;
+                    }
+                    # Plain text, remove returns
+                    else {
+                        $comment =~ s/\n/ /g;
+                    }
                     $annotation->add_Annotation(
                         'comment',
                         Bio::Annotation::Comment->new(
@@ -1179,7 +1193,6 @@ sub write_seq {
                 $self->_print($cline);
                 $ct++;
             }
-            $self->_show_dna(0);
         }
         if ( $seq->length == 0 ) {
             $self->_show_dna(0);
@@ -1551,8 +1564,9 @@ sub _read_GenBank_Species {
             chomp $data;
             $tag = 'CLASSIFICATION' if (    $tag ne 'CLASSIFICATION'
                                         and $tag eq 'ORGANISM'
-                                        # Don't match "str." or "var." (NC_021815)
-                                        and  $line =~ m{(?<!\bstr|\bvar)[;\.]+});
+                                        # Don't match "str." or "var." (fix NC_021815),
+                                        # and don't match ".1" (fix NC_021902)
+                                        and $line =~ m{(?<!\bstr|\bvar)[;\.]+(?!\d)});
         }
         (exists $ann->{$tag}) ? ($ann->{$tag} .= ' '.$data) : ($ann->{$tag} .= $data);
         $line = undef;
@@ -1702,10 +1716,10 @@ sub _read_FTHelper_GenBank {
   QUAL:
     for (my $i = 0; $i < @qual; $i++) {
         my $data = $qual[$i];
-        my ( $qualifier, $value ) = ($data =~ m{^/([^=]+)(?:=(.+))?})
+        my ( $qualifier, $value ) = ($data =~ m{^/([^=]+)(?:=\s*(.+))?})
             or $self->warn(  "cannot see new qualifier in feature $key: "
-                           . $qual[$i]);
-        $qualifier = '' unless( defined $qualifier );
+                           . $data);
+        $qualifier = '' if not defined $qualifier;
 
         if (defined $value) {
             # Do we have a quoted value?
diff --git a/Bio/SeqIO/largefasta.pm b/Bio/SeqIO/largefasta.pm
index 44a7f12..c11c089 100644
--- a/Bio/SeqIO/largefasta.pm
+++ b/Bio/SeqIO/largefasta.pm
@@ -163,7 +163,7 @@ sub write_seq {
      $self->_print (">",$top,"\n");
      my $end = $seq->length();
      my $start = 1;
-     while( $start < $end ) {
+     while( $start <= $end ) {
 	 my $stop = $start + $FASTALINELEN - 1;
 	 $stop = $end if( $stop > $end );
 	 $self->_print($seq->subseq($start,$stop), "\n");
diff --git a/Bio/SeqIO/nexml.pm b/Bio/SeqIO/nexml.pm
index ea48285..02299ca 100644
--- a/Bio/SeqIO/nexml.pm
+++ b/Bio/SeqIO/nexml.pm
@@ -145,31 +145,41 @@ sub doc {
 }
 
 sub _parse {
-	my ($self) = @_;
-	my $fac = Bio::Nexml::Factory->new();
-	
-    $self->{'_parsed'}   = 1;
+    my ($self) = @_;
+    
+    $self->{'_parsed'}  = 1;
     $self->{'_seqiter'} = 0;
-	
-	$self->doc(Bio::Phylo::IO->parse(
- 	'-file'       => $self->{'_file'},
- 	'-format'     => 'nexml',
- 	'-as_project' => '1'
- 	));
- 
- 	
- 		
- 	$self->{'_seqs'} = $fac->create_bperl_seq($self);
- 		
- 	
- 	unless(@{ $self->{'_seqs'} } == 0)
- 	{
-# 		self->debug("no seqs in $self->{_file}");
- 	}
- }
- 
- 
- 
+    my $fac = Bio::Nexml::Factory->new();
+    
+    # Only pass filename if filehandle is not available,
+    # or "Bio::Phylo" will create a new filehandle that ends
+    # out of scope and can't be closed directly, leaving 2 open
+    # filehandles for the same file (so file can't be deleted)
+    my $file_arg;
+    my $file_value;
+    if (     exists $self->{'_filehandle'}
+        and defined $self->{'_filehandle'}
+        ) {
+        $file_arg   = '-handle';
+        $file_value = $self->{'_filehandle'};
+    }
+    else {
+        $file_arg   = '-file';
+        $file_value = $self->{'_file'};
+    }
+    
+    $self->doc(Bio::Phylo::IO->parse(
+                                     $file_arg     => $file_value,
+                                     '-format'     => 'nexml',
+                                     '-as_project' => '1'
+                                     )
+    );
+    $self->{'_seqs'} = $fac->create_bperl_seq($self);
+    
+    unless(@{ $self->{'_seqs'} } == 0) {
+#        self->debug("no seqs in $self->{_file}");
+    }
+}
 
 =head2 write_seq
 
diff --git a/Bio/SeqIO/phd.pm b/Bio/SeqIO/phd.pm
index db5a6bd..7c24341 100644
--- a/Bio/SeqIO/phd.pm
+++ b/Bio/SeqIO/phd.pm
@@ -163,7 +163,7 @@ sub next_seq {
         } elsif ($entry =~ /^END_SEQUENCE/) {
             # the sequence may be over, but some other info can come after
             next;
-        } elsif ($entry =~ /^WR{/) {
+        } elsif ($entry =~ /^WR\{/) {
             # Whole-Read items 
             # Programs like Consed or Autofinish add it to phd file. See doc:
             #   http://www.phrap.org/consed/distributions/README.16.0.txt
diff --git a/Bio/SeqIO/swissdriver.pm b/Bio/SeqIO/swissdriver.pm
index 00f149d..408e2e6 100644
--- a/Bio/SeqIO/swissdriver.pm
+++ b/Bio/SeqIO/swissdriver.pm
@@ -260,7 +260,7 @@ sub write_seq {
 
  Title   : seqhandler
  Usage   : $stream->seqhandler($handler)
- Function: Get/Set teh Bio::Seq::HandlerBaseI object
+ Function: Get/Set the Bio::Seq::HandlerBaseI object
  Returns : Bio::Seq::HandlerBaseI 
  Args    : Bio::Seq::HandlerBaseI 
 
diff --git a/Bio/SeqIO/table.pm b/Bio/SeqIO/table.pm
index 33ce7fc..64ff882 100644
--- a/Bio/SeqIO/table.pm
+++ b/Bio/SeqIO/table.pm
@@ -23,12 +23,11 @@ Bio::SeqIO::table - sequence input/output stream from a delimited table
 
 =head1 SYNOPSIS
 
-  # It is probably best not to use this object directly, but
-  # rather go through the SeqIO handler system. Go:
+  # Do not to use this object directly, use Bio::SeqIO, for example:
 
-  $stream = Bio::SeqIO->new(-file => $filename, -format => 'table');
+  $in = Bio::SeqIO->new(-file => $filename, -format => 'table');
 
-  while ( my $seq = $stream->next_seq() ) {
+  while ( my $seq = $in->next_seq() ) {
 	# do something with $seq
   }
 
@@ -126,6 +125,8 @@ use base qw(Bio::SeqIO);
                     containing the accession number of the sequence
  -seq               The one-based index of the column containing
                     the sequence string of the sequence
+ -desc              The one-based index of the column containing
+                    the description of the sequence
  -species           The one-based index of the column containing the
                     species for the sequence record; if not a
                     number, will be used as the static species
@@ -178,6 +179,7 @@ sub _initialize {
         $header,
         $delim,
         $display_id,
+        $desc,
         $accnr,
         $seq,
         $taxon,
@@ -188,6 +190,7 @@ sub _initialize {
                                   HEADER
                                   DELIM
                                   DISPLAY_ID
+                                  DESC
                                   ACCESSION_NUMBER
                                   SEQ
                                   SPECIES
@@ -209,6 +212,7 @@ sub _initialize {
     $attrs->{-display_id} = $display_id if defined($display_id);
     $attrs->{-accession_number} = $accnr if defined($accnr);
     $attrs->{-seq} = $seq if defined($seq);
+    $attrs->{-desc} = $desc if defined($desc);
     if (defined($taxon)) {
         if (ref($taxon) || ($taxon =~ /^\d+$/)) {
             # either a static object, or a column reference
@@ -582,6 +586,17 @@ sub trim_values{
     return $self->{'trim_values'};
 }
 
+=head2 write_seq
+
+ Title: write_seq
+ Usage: write_seq() is not implemented for table format output.
+
+=cut
+
+sub write_seq {
+    shift->throw("write_seq() not implemented for 'table' format");
+}
+
 =head1 Internal methods
 
 All methods with a leading underscore are not meant to be part of the
diff --git a/Bio/Taxon.pm b/Bio/Taxon.pm
index 245ebaa..7623cc9 100644
--- a/Bio/Taxon.pm
+++ b/Bio/Taxon.pm
@@ -226,6 +226,11 @@ sub new {
     defined $div        && $self->division($div);
     defined $dbh        && $self->db_handle($dbh);
     
+    # Making an administrative decision to override this behavior, particularly
+    # for optimization reasons (if it works to cache it up front, why not?
+    # Please trust your implementations to get it right)
+    
+    # Original note:
     # deprecated and will issue a warning when method called,
     # eventually to be removed completely as option
     defined $parent_id  && $self->parent_id($parent_id);
@@ -396,14 +401,16 @@ sub ncbi_taxid {
            parent_taxon_id() is a synonym of this method.
  Returns : value of parent_id (a scalar)
  Args    : none
- Status  : deprecated
 
 =cut
 
 sub parent_id {
     my $self = shift;
     if (@_) {
-        $self->warn("You can no longer set the parent_id - use ancestor() instead");
+        $self->{parent_id} = shift;
+    }
+    if (defined $self->{parent_id}) {
+        return $self->{parent_id}
     }
     my $ancestor = $self->ancestor() || return;
     return $ancestor->id;
@@ -411,6 +418,26 @@ sub parent_id {
 
 *parent_taxon_id = \&parent_id;
 
+=head2 trusted_parent_id
+
+ Title   : trusted_parent_id
+ Usage   : $taxon->trusted_parent_id()
+ Function: If the parent_id is explicitly set, trust it
+ Returns : simple boolean value (whether or not it has been set)
+ Args    : none
+ Notes   : Previously, the parent_id method was to be deprecated in favor of
+           using ancestor(). However this removes one key optimization point,
+           namely when an implementation has direct access to the taxon's
+           parent ID when retrieving the information for the taxon ID.  This
+           method is in place so implementations can choose to (1) check whether
+           the parent_id is set and (2) trust that the implementation (whether
+           it is self or another implementation) set the parent_id correctly.
+
+=cut
+
+sub trusted_parent_id {
+    return defined $_[0]->{parent_id};
+}
 
 =head2 genetic_code
 
@@ -526,6 +553,7 @@ sub ancestor {
     my $dbh = $self->db_handle;
     #*** could avoid the db lookup if we knew our current id was definitely
     #    information from the db...
+
     my $definitely_from_dbh = $self->_get_similar_taxon_from_db($self);
     return $dbh->ancestor($definitely_from_dbh);
 }
diff --git a/Bio/Tools/Alignment/Consed.pm b/Bio/Tools/Alignment/Consed.pm
index 455acb2..7aa46a8 100644
--- a/Bio/Tools/Alignment/Consed.pm
+++ b/Bio/Tools/Alignment/Consed.pm
@@ -1709,7 +1709,7 @@ Recursion is kewl, but this sub should likely be _reverse_recurse.
 
 
 sub reverse_recurse($$) {
-    my ($r_source,my $r_destination) = @_;
+    my ($r_source,$r_destination) = @_;
     if (!@$r_source) {
         return $r_destination;
     }
diff --git a/Bio/Tools/Analysis/Protein/GOR4.pm b/Bio/Tools/Analysis/Protein/GOR4.pm
index ddc87c0..352a8b3 100644
--- a/Bio/Tools/Analysis/Protein/GOR4.pm
+++ b/Bio/Tools/Analysis/Protein/GOR4.pm
@@ -153,12 +153,12 @@ use Bio::SeqIO;
 use HTTP::Request::Common qw(POST);
 use Bio::SeqFeature::Generic;
 use Bio::Seq::Meta::Array;
-
+$ENV{PERL_LWP_SSL_VERIFY_HOSTNAME} = 0;
 
 use base qw(Bio::Tools::Analysis::SimpleAnalysisBase);
 
 use constant MIN_STRUC_LEN => 3;
-my $URL = 'http://npsa-pbil.ibcp.fr/cgi-bin/secpred_gor4.pl';
+my $URL = 'https://npsa-prabi.ibcp.fr/cgi-bin/secpred_sopma.pl';
 my $ANALYSIS_NAME = 'GOR4';
 my $ANALYSIS_SPEC = {name => 'Gor4', type => 'Protein'};
 my $INPUT_SPEC    = [
@@ -366,11 +366,9 @@ sub  _run {
     my $out = 'http://npsa-pbil.ibcp.fr/'.$next;
     my $req2 = HTTP::Request->new(GET=>$out);
     my $resp2 = $self->request($req2);
-	$self->status('COMPLETED') if $resp2 ne '';
+    $self->status('COMPLETED') if $resp2 ne '';
     $self->{'_result'} = $resp2->content;
 }
 
 
-
-
 1;
diff --git a/Bio/Tools/Analysis/Protein/HNN.pm b/Bio/Tools/Analysis/Protein/HNN.pm
index ef9af04..936756a 100644
--- a/Bio/Tools/Analysis/Protein/HNN.pm
+++ b/Bio/Tools/Analysis/Protein/HNN.pm
@@ -154,7 +154,7 @@ use Bio::SeqIO;
 use HTTP::Request::Common qw (POST);
 use Bio::SeqFeature::Generic;
 use Bio::Seq::Meta::Array;
-
+$ENV{PERL_LWP_SSL_VERIFY_HOSTNAME} = 0;
 
 use base qw(Bio::Tools::Analysis::SimpleAnalysisBase);
 
@@ -195,9 +195,10 @@ sub  _run {
     # delay repeated calls by default by 3 sec, set delay() to change
     $self->sleep;
     $self->status('TERMINATED_BY_ERROR');
-    my $request = POST 'http://npsa-pbil.ibcp.fr/cgi-bin/secpred_hnn.pl',
+    my $request = POST 'https://npsa-prabi.ibcp.fr/cgi-bin/secpred_hnn.pl',
         Content_Type => 'form-data',
-            Content  => [title => "",
+            Content  => [
+			 title => "",
                          notice => $self->seq->seq,
                          ali_width => 70,
                         ];
diff --git a/Bio/Tools/Analysis/Protein/Mitoprot.pm b/Bio/Tools/Analysis/Protein/Mitoprot.pm
index 637a313..717191d 100644
--- a/Bio/Tools/Analysis/Protein/Mitoprot.pm
+++ b/Bio/Tools/Analysis/Protein/Mitoprot.pm
@@ -146,8 +146,7 @@ use Bio::SeqFeature::Generic;
 use base qw(Bio::Tools::Analysis::SimpleAnalysisBase);
 $FLOAT = '[+-]?\d*\.\d*';
 
-my $URL = 'http://ihg.gsf.de/cgi-bin/paolo/mitofilter?';
-
+my $URL = 'https://ihg.gsf.de/cgi-bin/paolo/mitofilter?';
 
 my %STATUS =  map { $_ => 1 } qw(CREATED COMPLETED TERMINATED_BY_ERROR);
 
@@ -311,7 +310,7 @@ sub _run {
     $self->sleep;
 
     $self->status('TERMINATED_BY_ERROR');
-    my $url = $self->url . "seq=".lc($self->seq->seq). "&seqnam=";
+    my $url = $self->url . "seq=" . lc($self->seq->seq) . "&seqnam=";
     my $request = GET $url;
     my $content = $self->request($request);
     my $text = $content->content; #1st reponse
diff --git a/Bio/Tools/Analysis/Protein/Sopma.pm b/Bio/Tools/Analysis/Protein/Sopma.pm
index 34c82b7..526554b 100644
--- a/Bio/Tools/Analysis/Protein/Sopma.pm
+++ b/Bio/Tools/Analysis/Protein/Sopma.pm
@@ -154,12 +154,12 @@ use Bio::SeqIO;
 use HTTP::Request::Common qw (POST);
 use Bio::SeqFeature::Generic;
 use Bio::Seq::Meta::Array;
-
+$ENV{PERL_LWP_SSL_VERIFY_HOSTNAME} = 0;
 
 use base qw(Bio::Tools::Analysis::SimpleAnalysisBase);
 
 #extends array for 2struc.
-my $URL = 'http://npsa-pbil.ibcp.fr/cgi-bin/secpred_sopma.pl';
+my $URL = 'https://npsa-prabi.ibcp.fr/cgi-bin/secpred_sopma.pl';
 my $ANALYSIS_NAME= 'Sopma';
 my $ANALYSIS_SPEC= {name => 'Sopma', type => 'Protein'};
 my $INPUT_SPEC = [
@@ -450,7 +450,7 @@ sub  _run {
     # delay repeated calls by default by 3 sec, set delay() to change
     $self->sleep;
     $self->status('TERMINATED_BY_ERROR');
-    my $request = POST 'http://npsa-pbil.ibcp.fr/cgi-bin/secpred_sopma.pl',
+    my $request = POST 'https://npsa-prabi.ibcp.fr/cgi-bin/secpred_sopma.pl',
         Content_Type => 'form-data',
             Content  => [title     => "",
                          notice    => $self->seq->seq,
@@ -465,6 +465,7 @@ sub  _run {
 
     #### get text only version of results ## 
     my ($next) = $text =~ /Prediction.*?=(.*?)>/;
+    return $self unless $next;
     my $out    = "http://npsa-pbil.ibcp.fr/". "$next";
     my $req2   = HTTP::Request->new(GET=>$out);
     my $resp2  = $self->request ($req2);
diff --git a/Bio/Tools/CodonTable.pm b/Bio/Tools/CodonTable.pm
index d008e31..3bbc194 100644
--- a/Bio/Tools/CodonTable.pm
+++ b/Bio/Tools/CodonTable.pm
@@ -127,13 +127,11 @@ only differences are in available initiator codons.
 
 
 NCBI Genetic Codes home page:
+     (Last update of the Genetic Codes: April 30, 2013)
      http://www.ncbi.nlm.nih.gov/Taxonomy/Utils/wprintgc.cgi?mode=c
 
-EBI Translation Table Viewer:
-     http://www.ebi.ac.uk/cgi-bin/mutations/trtables.cgi
-
-Amended ASN.1 version with ids 16 and 21 is at:
-     ftp://ftp.ebi.ac.uk/pub/databases/geneticcode/
+ASN.1 version with ids 1 to 25 is at:
+     ftp://ftp.ncbi.nih.gov/entrez/misc/data/gc.prt
 
 Thanks to Matteo diTomasso for the original Perl implementation
 of these tables.
@@ -202,31 +200,34 @@ BEGIN {
 
     @NAMES =            #id
     (
+     'Strict', #0, special option for ATG-only start
      'Standard',        #1
      'Vertebrate Mitochondrial',#2
      'Yeast Mitochondrial',# 3
-     'Mold, Protozoan, and CoelenterateMitochondrial and Mycoplasma/Spiroplasma',#4
+     'Mold, Protozoan, and Coelenterate Mitochondrial and Mycoplasma/Spiroplasma',#4
      'Invertebrate Mitochondrial',#5
      'Ciliate, Dasycladacean and Hexamita Nuclear',# 6
      '', '',
-     'Echinoderm Mitochondrial',#9
+     'Echinoderm and Flatworm Mitochondrial',#9
      'Euplotid Nuclear',#10
-     '"Bacterial"',# 11
+     'Bacterial, Archaeal and Plant Plastid',# 11
      'Alternative Yeast Nuclear',# 12
      'Ascidian Mitochondrial',# 13
-     'Flatworm Mitochondrial',# 14
+     'Alternative Flatworm Mitochondrial',# 14
      'Blepharisma Nuclear',# 15
      'Chlorophycean Mitochondrial',# 16
      '', '',  '', '',
      'Trematode Mitochondrial',# 21
      'Scenedesmus obliquus Mitochondrial', #22
      'Thraustochytrium Mitochondrial', #23
-     'Strict', #24, option for only ATG start
+     'Pterobranchia Mitochondrial', #24
+     'Candidate Division SR1 and Gracilibacteria', #25
      );
 
     @TABLES =
     qw(
        FFLLSSSSYY**CC*WLLLLPPPPHHQQRRRRIIIMTTTTNNKKSSRRVVVVAAAADDEEGGGG
+       FFLLSSSSYY**CC*WLLLLPPPPHHQQRRRRIIIMTTTTNNKKSSRRVVVVAAAADDEEGGGG
        FFLLSSSSYY**CCWWLLLLPPPPHHQQRRRRIIMMTTTTNNKKSS**VVVVAAAADDEEGGGG
        FFLLSSSSYY**CCWWTTTTPPPPHHQQRRRRIIMMTTTTNNKKSSRRVVVVAAAADDEEGGGG
        FFLLSSSSYY**CCWWLLLLPPPPHHQQRRRRIIIMTTTTNNKKSSRRVVVVAAAADDEEGGGG
@@ -245,7 +246,8 @@ BEGIN {
        FFLLSSSSYY**CCWWLLLLPPPPHHQQRRRRIIMMTTTTNNNKSSSSVVVVAAAADDEEGGGG
        FFLLSS*SYY*LCC*WLLLLPPPPHHQQRRRRIIIMTTTTNNKKSSRRVVVVAAAADDEEGGGG
        FF*LSSSSYY**CC*WLLLLPPPPHHQQRRRRIIIMTTTTNNKKSSRRVVVVAAAADDEEGGGG
-       FFLLSSSSYY**CC*WLLLLPPPPHHQQRRRRIIIMTTTTNNKKSSRRVVVVAAAADDEEGGGG
+       FFLLSSSSYY**CCWWLLLLPPPPHHQQRRRRIIIMTTTTNNKKSSSKVVVVAAAADDEEGGGG
+       FFLLSSSSYY**CCGWLLLLPPPPHHQQRRRRIIIMTTTTNNKKSSRRVVVVAAAADDEEGGGG
        );
 
    #           (bases used for these tables, for reference)
@@ -255,6 +257,7 @@ BEGIN {
 
     @STARTS =
     qw(
+       -----------------------------------M----------------------------
        ---M---------------M---------------M----------------------------
        --------------------------------MMMM---------------M------------
        ----------------------------------MM----------------------------
@@ -262,11 +265,11 @@ BEGIN {
        ---M----------------------------MMMM---------------M------------
        -----------------------------------M----------------------------
        '' ''
-       -----------------------------------M----------------------------
+       -----------------------------------M---------------M------------
        -----------------------------------M----------------------------
        ---M---------------M------------MMMM---------------M------------
        -------------------M---------------M----------------------------
-       -----------------------------------M----------------------------
+       ---M------------------------------MM---------------M------------
        -----------------------------------M----------------------------
        -----------------------------------M----------------------------
        -----------------------------------M----------------------------
@@ -274,22 +277,23 @@ BEGIN {
        -----------------------------------M---------------M------------
        -----------------------------------M----------------------------
        --------------------------------M--M---------------M------------
-       -----------------------------------M----------------------------
+       ---M---------------M---------------M---------------M------------
+       ---M-------------------------------M---------------M------------
        );
 
     my @nucs = qw(t c a g);
     my $x = 0;
     ($CODONS, $TRCOL) = ({}, {});
     for my $i (@nucs) {
-    for my $j (@nucs) {
-        for my $k (@nucs) {
-        my $codon = "$i$j$k";
-        $CODONS->{$codon} = $x;
-        $TRCOL->{$x} = $codon;
-        $x++;
+        for my $j (@nucs) {
+            for my $k (@nucs) {
+                my $codon = "$i$j$k";
+                $CODONS->{$codon} = $x;
+                $TRCOL->{$x} = $codon;
+                $x++;
+            }
         }
     }
-    }
     %IUPAC_DNA = Bio::Tools::IUPAC->iupac_iub();
     %IUPAC_AA = Bio::Tools::IUPAC->iupac_iup();
     %THREELETTERSYMBOLS = Bio::SeqUtils->valid_aa(2);
@@ -316,25 +320,26 @@ sub new {
  Title   : id
  Usage   : $obj->id(3); $id_integer = $obj->id();
  Function: Sets or returns the id of the translation table.  IDs are
-           integers from 1 to 15, excluding 7 and 8 which have been
-           removed as redundant. If an invalid ID is given the method
-           returns 0, false.
+           integers from 0 (special ATG-only start) to 25, excluding
+           7-8 and 17-20 which have been removed. If an invalid ID is
+           given the method returns 1, the standard table.
  Example :
- Returns : value of id, a scalar, 0 if not a valid
+ Returns : value of id, a scalar, warn and fall back to 1 (standard table)
+           if specified id is not valid
  Args    : newvalue (optional)
 
 =cut
 
 sub id{
-   my ($self,$value) = @_;
-   if( defined $value) {
-       if (  !(defined $TABLES[$value-1]) or $TABLES[$value-1] eq '') {
-       $self->warn("Not a valid codon table ID [$value] ");
-       $value = 0;
-       }
-       $self->{'id'} = $value;
-   }
-   return $self->{'id'};
+    my ($self,$value) = @_;
+    if( defined $value) {
+        if (  not defined $TABLES[$value] or $TABLES[$value] eq '') {
+            $self->warn("Not a valid codon table ID [$value], using [1] instead ");
+            $value = 1;
+        }
+        $self->{'id'} = $value;
+    }
+    return $self->{'id'};
 }
 
 =head2 name
@@ -353,7 +358,7 @@ sub name{
    my ($self) = @_;
 
    my ($id) = $self->{'id'};
-   return $NAMES[$id-1];
+   return $NAMES[$id];
 }
 
 =head2 tables
@@ -372,8 +377,8 @@ sub name{
 
 sub tables{
   my %tables;
-  for my $id (1 .. @NAMES) {
-    my $name = $NAMES[$id-1];
+  for my $id (0 .. $#NAMES) {
+    my $name = $NAMES[$id];
     $tables{$id} = $name if $name;
   }
   return \%tables;
@@ -424,37 +429,38 @@ sub translate {
     if ($seq =~ /[^actg]/ ) { #ambiguous chars
         for (my $i = 0; $i < (length($seq) - (CODONSIZE-1)); $i+= CODONSIZE) {
             my $triplet = substr($seq, $i, CODONSIZE);
-        if( $triplet eq $CODONGAP ) {
-        $protein .= $GAP;
-        } elsif (exists $CODONS->{$triplet}) {
-        $protein .= substr($TABLES[$id-1], 
-                   $CODONS->{$triplet},1);
-        } else {
-        $protein .= $self->_translate_ambiguous_codon($triplet);
+            if( $triplet eq $CODONGAP ) {
+                $protein .= $GAP;
+            } elsif (exists $CODONS->{$triplet}) {
+                $protein .= substr($TABLES[$id],
+                           $CODONS->{$triplet},1);
+            } else {
+                $protein .= $self->_translate_ambiguous_codon($triplet);
+            }
         }
-    }
     } else { # simple, strict translation
-    for (my $i = 0; $i < (length($seq) - (CODONSIZE -1)); $i+=CODONSIZE) {
-            my $triplet = substr($seq, $i, CODONSIZE); 
+        for (my $i = 0; $i < (length($seq) - (CODONSIZE -1)); $i+=CODONSIZE) {
+            my $triplet = substr($seq, $i, CODONSIZE);
             if( $triplet eq $CODONGAP ) {
-        $protein .= $GAP;
-        } if (exists $CODONS->{$triplet}) {
-                $protein .= substr($TABLES[$id-1], $CODONS->{$triplet}, 1);
-        } else {
+                $protein .= $GAP;
+            }
+            if (exists $CODONS->{$triplet}) {
+                $protein .= substr($TABLES[$id], $CODONS->{$triplet}, 1);
+            } else {
                 $protein .= 'X';
             }
         }
     }
     if ($partial == 2 && $complete_codon) { # 2 overhanging nucleotides
-    my $triplet = substr($seq, ($partial -4)). "n";
-    if( $triplet eq $CODONGAP ) {
-        $protein .= $GAP;
-    } elsif (exists $CODONS->{$triplet}) {
-        my $aa = substr($TABLES[$id-1], $CODONS->{$triplet},1);       
-        $protein .= $aa;
-    } else {
-        $protein .= $self->_translate_ambiguous_codon($triplet, $partial);
-    }
+        my $triplet = substr($seq, ($partial -4)). "n";
+        if( $triplet eq $CODONGAP ) {
+            $protein .= $GAP;
+        } elsif (exists $CODONS->{$triplet}) {
+            my $aa = substr($TABLES[$id], $CODONS->{$triplet},1);
+            $protein .= $aa;
+        } else {
+            $protein .= $self->_translate_ambiguous_codon($triplet, $partial);
+        }
     }
     return $protein;
 }
@@ -467,23 +473,23 @@ sub _translate_ambiguous_codon {
     my @codons = $self->unambiguous_codons($triplet);
     my %aas =();
     foreach my $codon (@codons) {
-    $aas{substr($TABLES[$id-1],$CODONS->{$codon},1)} = 1;
+        $aas{substr($TABLES[$id],$CODONS->{$codon},1)} = 1;
     }
     my $count = scalar keys %aas;
     if ( $count == 1 ) {
-    $aa = (keys %aas)[0];
+        $aa = (keys %aas)[0];
     }
     elsif ( $count == 2 ) {
-    if ($aas{'D'} and $aas{'N'}) {
-        $aa = 'B';
-    }
-    elsif ($aas{'E'} and $aas{'Q'}) {
-        $aa = 'Z';
-    } else {
-        $partial ? ($aa = '') : ($aa = 'X');
-    }
+        if ($aas{'D'} and $aas{'N'}) {
+            $aa = 'B';
+        }
+        elsif ($aas{'E'} and $aas{'Q'}) {
+            $aa = 'Z';
+        } else {
+            $partial ? ($aa = '') : ($aa = 'X');
+        }
     } else {
-    $partial ? ($aa = '') :  ($aa = 'X');
+        $partial ? ($aa = '') :  ($aa = 'X');
     }
     return $aa;
 }
@@ -520,7 +526,7 @@ sub translate_strict{
 
    return 'X' unless defined $CODONS->{$value};
 
-   return substr( $TABLES[$id-1], $CODONS->{$value}, 1 );
+   return substr( $TABLES[$id], $CODONS->{$value}, 1 );
 }
 
 =head2 revtranslate
@@ -554,8 +560,9 @@ sub revtranslate {
         $value = ucfirst $value;
         $value = $THREELETTERSYMBOLS{$value};
     }
-    if ( defined $value and $value =~ /$VALID_PROTEIN/
-          and length($value) == 1 ) {
+    if (    defined $value and $value =~ /$VALID_PROTEIN/
+        and length($value) == 1
+        ) {
         my $id = $self->{'id'};
 
         $value = uc $value;
@@ -563,18 +570,18 @@ sub revtranslate {
         foreach my $aa (@aas) {
             #print $aa, " -2\n";
             $aa = '\*' if $aa eq '*';
-          while ($TABLES[$id-1] =~ m/$aa/g) {
-              my $p = pos $TABLES[$id-1];
-              push (@codons, $TRCOL->{--$p});
-          }
+            while ($TABLES[$id] =~ m/$aa/g) {
+                my $p = pos $TABLES[$id];
+                push (@codons, $TRCOL->{--$p});
+            }
         }
     }
 
-   if ($coding and uc ($coding) eq 'RNA') {
-       for my $i (0..$#codons)  {
-          $codons[$i] =~ tr/t/u/;
-       }
-   }
+    if ($coding and uc ($coding) eq 'RNA') {
+        for my $i (0..$#codons)  {
+            $codons[$i] =~ tr/t/u/;
+        }
+    }
 
    return @codons;
 }
@@ -597,7 +604,6 @@ sub revtranslate {
 =cut
 
 sub reverse_translate_all {
-
     my ($self, $obj, $cut, $threshold) = @_;
 
     ## check args are OK
@@ -642,7 +648,6 @@ sub reverse_translate_all {
     }
 
     return $self->_make_iupac_string(\@data);
-
 }
 
 =head2 reverse_translate_best
@@ -689,7 +694,7 @@ sub reverse_translate_best {
             $self->throw("Input sequence contains invalid character: $aa");
         }
     }
-   $str;
+   return $str;
 }
 
 =head2 is_start_codon
@@ -742,10 +747,10 @@ sub _codon_is {
 
    my $id = $self->{'id'};
    for my $c ( $self->unambiguous_codons($value) ) {
-       my $m = substr( $table->[$id-1], $CODONS->{$c}, 1 );
-       return 0 unless $m eq $key;
+       my $m = substr( $table->[$id], $CODONS->{$c}, 1 );
+       if ($m eq $key) { return 1; }
    }
-   return 1;
+   return 0;
 }
 
 =head2 is_unknown_codon
@@ -818,21 +823,19 @@ sub _unambiquous_codons {
 sub add_table {
     my ($self, $name, $table, $starts) = @_;
 
-    $name ||= 'Custom'. scalar @NAMES + 1;
-    $starts ||= $STARTS[0]; 
+    $name   ||= 'Custom' . $#NAMES + 1;
+    $starts ||= $STARTS[1];
     $self->throw('Suspect input!')
         unless length($table) == 64 and length($starts) == 64;
 
-    push @NAMES, $name;
+    push @NAMES,  $name;
     push @TABLES, $table;
     push @STARTS, $starts;
 
-    return scalar @NAMES;
-
+    return $#NAMES;
 }
 
 sub _make_iupac_string {
-
     my ($self, $cod_ref) = @_;
     if(ref($cod_ref) ne 'ARRAY') {
         $self->throw(" I need a reference to a list of references to codons, ".
@@ -855,7 +858,6 @@ sub _make_iupac_string {
         }
     }
     return $iupac_string;
-
 }
 
 
diff --git a/Bio/Tools/Run/RemoteBlast.pm b/Bio/Tools/Run/RemoteBlast.pm
index 943ac4d..48984c9 100644
--- a/Bio/Tools/Run/RemoteBlast.pm
+++ b/Bio/Tools/Run/RemoteBlast.pm
@@ -49,6 +49,9 @@ via HTTP
 
   my $str = Bio::SeqIO->new(-file=>'amino.fa' , -format => 'fasta' );
 
+  #optional: send BLAST request to a cloud service provider instead of NCBI
+  #$factory->set_url_base("http://host.my.cloud.service.provider.com/cgi-bin/blast.cgi");
+
   while (my $input = $str->next_seq()){
     #Blast a sequence against a database:
 
@@ -161,6 +164,7 @@ use IO::String;
 use Bio::SearchIO;
 use LWP;
 use HTTP::Request::Common;
+use Bio::Root::Version;
 
 use constant {
     NOT_FINISHED => 0,
@@ -712,11 +716,13 @@ sub _load_input {
 
  Title   : set_url_base
  Usage   : $self->set_url_base($url)
- Function: Method to override the default NCBI BLAST database
+ Function: Method to override the default URL to access the NCBI BLAST web service
  Returns : None
- Args    : string (database url like
+ Args    : string (URL used for remote BLAST searches)
  NOTE    : This is highly experimental; we cannot maintain support on
-           databases other than the default NCBI database at this time
+           web services other than the default NCBI BLAST web service at this
+           time. Only some URL parameters may be supported by other BLAST
+           web services.
 
 =cut
 
@@ -729,7 +735,7 @@ sub set_url_base {
 
  Title   : get_url_base
  Usage   : my $url = $self->set_url_base
- Function: Get the current URL for BLAST database searching
+ Function: Get the current URL for BLAST searching
  Returns : string (URL used for remote blast searches)
  Args    : None
 
diff --git a/Bio/Tools/Run/StandAloneBlast.pm b/Bio/Tools/Run/StandAloneBlast.pm
deleted file mode 100644
index ecd3495..0000000
--- a/Bio/Tools/Run/StandAloneBlast.pm
+++ /dev/null
@@ -1,634 +0,0 @@
-#
-# BioPerl module for Bio::Tools::Run::StandAloneBlast
-#
-# Copyright Peter Schattner
-#
-# You may distribute this module under the same terms as perl itself
-
-# POD documentation - main docs before the code
-
-=head1 NAME
-
-Bio::Tools::Run::StandAloneBlast - Object for the local execution 
-of the NCBI BLAST program suite (blastall, blastpgp, bl2seq). 
-There is experimental support for WU-Blast and NCBI rpsblast.
-
-=head1 SYNOPSIS
-
- # Local-blast "factory object" creation and blast-parameter
- # initialization:
- @params = (-database => 'swissprot', -outfile => 'blast1.out');
- $factory = Bio::Tools::Run::StandAloneBlast->new(@params);
-
- # Blast a sequence against a database:
- $str = Bio::SeqIO->new(-file=>'t/amino.fa', -format => 'Fasta');
- $input = $str->next_seq();
- $input2 = $str->next_seq();
- $blast_report = $factory->blastall($input);
-
- # Run an iterated Blast (psiblast) of a sequence against a database:
- $factory->j(3);    # 'j' is blast parameter for # of iterations
- $factory->outfile('psiblast1.out');
- $factory = Bio::Tools::Run::StandAloneBlast->new(@params);
- $blast_report = $factory->blastpgp($input);
-
- # Use blast to align 2 sequences against each other:
- $factory = Bio::Tools::Run::StandAloneBlast->new(-outfile => 'bl2seq.out');
- $factory->bl2seq($input, $input2);
-
- # Experimental support for WU-Blast 2.0
- my $factory = Bio::Tools::Run::StandAloneBlast->new(-program =>"wublastp",
-                                                     -database =>"swissprot",
-                                                     -e => 1e-20); 
- my $blast_report = $factory->wublast($seq);
-
- # Experimental support for NCBI rpsblast
- my $factory = Bio::Tools::Run::StandAloneBlast->new(-db => 'CDD/Cog', 
-                                                     -expect => 0.001);
- $factory->F('T'); # turn on SEG filtering of query sequence
- my $blast_report = $factory->rpsblast($seq);
-
- # Use the experimental fast Blast parser, 'blast_pull'
- my $factory = Bio::Tools::Run::StandAloneBlast->new(-_READMETHOD =>'blast_pull',
-                                                     @other_params);
-
- # Various additional options and input formats are available,
- # see the DESCRIPTION section for details.
-
-=head1 DESCRIPTION
-
-This DESCRIPTION only documents Bio::Tools::Run::StandAloneBlast, a
-Bioperl object for running the NCBI standAlone BLAST package. Blast
-itself is a large & complex program - for more information regarding
-BLAST, please see the BLAST documentation which accompanies the BLAST
-distribution. BLAST is available from ftp://ncbi.nlm.nih.gov/blast/.
-
-A source of confusion in documenting a BLAST interface is that the
-term "program" is used in - at least - three different ways in the
-BLAST documentation. In this DESCRIPTION, "program" will refer to the
-BLAST routine set by the BLAST C<-p> parameter that can be set to blastn,
-blastp, tblastx etc. We will use the term Blast "executable" to refer
-to the various different executable files that may be called - ie.
-blastall, blastpgp or bl2seq. In addition, there are several BLAST
-capabilities, which are also referred to as "programs", and are
-implemented by using specific combinations of BLAST executables,
-programs and parameters. They will be referred by their specific
-names - eg PSIBLAST and PHIBLAST.
-
-Before running StandAloneBlast it is necessary: to install BLAST 
-on your system, to edit set the environmental variable $BLASTDIR 
-or your $PATH variable to point to the BLAST directory, and to 
-ensure that users have execute privileges for the BLAST program.  
-
-If the databases which will be searched by BLAST are located in the 
-data subdirectory of the blast program directory (the default 
-installation location), StandAloneBlast will find them; however, 
-if the database files are located in any other location, environmental 
-variable $BLASTDATADIR will need to be set to point to that directory.
-
-The use of the StandAloneBlast module is as follows: Initially, a
-local blast "factory object" is created. The constructor may be passed
-an optional array of (non-default) parameters to be used by the
-factory, eg:
-
- @params = (-program => 'blastn', -database => 'ecoli.nt');
- $factory = Bio::Tools::Run::StandAloneBlast->new(@params);
-
-Any parameters not explicitly set will remain as the defaults of the
-BLAST executable. Note each BLAST executable has somewhat different
-parameters and options. See the BLAST Documentation for a description
-or run the BLAST executable from the command line followed solely with
-a "-" to see a list of options and default values for that executable;
-eg E<gt>blastall -.
-
-BLAST parameters can be changed and/or examined at any time after the
-factory has been created. The program checks that any
-parameter/switch being set/read is valid. Except where specifically
-noted, StandAloneBlast uses the same single-letter, case-sensitive
-parameter names as the actual blast program. Currently no checks are
-included to verify that parameters are of the proper type (e.g. string
-or numeric) or that their values are within the proper range.
-
-As an example, to change the value of the Blast parameter 'e' ('e' is
-the parameter for expectation-value cutoff) 
-
-  $expectvalue = 0.01;
-  $factory->e($expectvalue);
-
-Note that for improved script readibility one can modify the name of
-the (ncbi) BLAST parameters as desired as long as the initial letter (and
-case) of the parameter are preserved, e.g.:
-
-  $factory->expectvalue($expectvalue);
-
-Unfortunately, some of the BLAST parameters are not the single 
-letter one might expect (eg "iteration round" in blastpgp is 'j'). 
-Again one can check by using, for example:
-
-  > blastpgp -
-
-Wublast parameters need to be complete (ie. don't truncate them to their
-first letter), but are case-insensitive.
-
-Once the factory has been created and the appropriate parameters set,
-one can call one of the supported blast executables. The input
-sequence(s) to these executables may be fasta file(s) as described in
-the BLAST documentation.
-
-  $inputfilename = 't/testquery.fa';
-  $blast_report = $factory->blastall($inputfilename);
-
-In addition, sequence input may be in the form of either a Bio::Seq
-object or (a reference to) an array of Bio::Seq objects, e.g.:
-
-  $input = Bio::Seq->new(-id => "test query",
-                         -seq => "ACTACCCTTTAAATCAGTGGGGG");
-  $blast_report = $factory->blastall($input);
-
-NOTE: Use of the BPlite method has been deprecated and is no longer supported.
-
-For blastall and non-psiblast blastpgp runs, report object is a L<Bio::SearchIO>
-object, selected by the user with the parameter _READMETHOD. The leading
-underscore is needed to distinguish this option from options which are passed to
-the BLAST executable. The default parser is Bio::SearchIO::blast. In any case,
-the "raw" blast report is also available. The filename is set by the 'outfile'
-parameter and has the default value of "blastreport.out".
-
-For psiblast execution in the BLAST "jumpstart" mode, the program must
-be passed (in addition to the query sequence itself) an alignment
-containing the query sequence (in the form of a SimpleAlign object) as
-well as a "mask" specifying at what residues position-specific scoring
-matrices (PSSMs) are to used and at what residues default scoring
-matrices (eg BLOSUM) are to be used. See psiblast documentation for
-more details. The mask itself is a string of 0's and 1's which is the
-same length as each sequence in the alignment and has a "1" at
-locations where (PSSMs) are to be used and a "0" at all other
-locations. So for example:
-
-  $str = Bio::AlignIO->new(-file => "cysprot.msf", 
-                           -format => 'msf');
-  $aln = $str->next_aln();
-  $len = $aln->length_aln();
-  $mask = '1' x $len;
-  # simple case where PSSM's to be used at all residues
-  $report = $factory->blastpgp("cysprot1.fa", $aln, $mask);
-
-For bl2seq execution, StandAloneBlast.pm can be combined with
-AlignIO.pm to directly produce a SimpleAlign object from the alignment
-of the two sequences produced by bl2seq as in:
-
-  # Get 2 sequences
-  $str = Bio::SeqIO->new(-file=>'t/amino.fa' , -format => 'Fasta');
-  my $seq3 = $str->next_seq();
-  my $seq4 = $str->next_seq();
-
-  # Run bl2seq on them
-  $factory = Bio::Tools::Run::StandAloneBlast->new(-program => 'blastp',
-                                                   -outfile => 'bl2seq.out');
-  my $bl2seq_report = $factory->bl2seq($seq3, $seq4);
-
-  # Use AlignIO.pm to create a SimpleAlign object from the bl2seq report
-  $str = Bio::AlignIO->new(-file=> 'bl2seq.out',-format => 'bl2seq');
-  $aln = $str->next_aln();
-
-For more examples of syntax and use of StandAloneBlast.pm, the user is
-encouraged to run the scripts standaloneblast.pl in the bioperl
-examples/tools directory and StandAloneBlast.t in the bioperl t/ 
-directory.
-
-=head1 FEEDBACK
-
-=head2 Mailing Lists
-
-User feedback is an integral part of the evolution of this and other
-Bioperl modules. Send your comments and suggestions preferably to one
-of the Bioperl mailing lists.  Your participation is much appreciated.
-
-  bioperl-l at bioperl.org                  - General discussion
-  http://bioperl.org/wiki/Mailing_lists  - About the mailing lists
-
-=head2 Support 
-
-Please direct usage questions or support issues to the mailing list:
-
-I<bioperl-l at bioperl.org>
-
-rather than to the module maintainer directly. Many experienced and 
-reponsive experts will be able look at the problem and quickly 
-address it. Please include a thorough description of the problem 
-with code and data examples if at all possible.
-
-=head2 Reporting Bugs
-
-Report bugs to the Bioperl bug tracking system to help us keep track
-the bugs and their resolution.  Bug reports can be submitted via 
-the web:
-
-  https://github.com/bioperl/bioperl-live/issues
-
-=head1 AUTHOR - Peter Schattner
-
-Email schattner at alum.mit.edu
-
-=head1 MAINTAINER - Torsten Seemann
-
-Email torsten at infotech.monash.edu.au
-
-=head1 CONTRIBUTORS
-
-Sendu Bala  bix at sendu.me.uk (reimplementation)
-
-=head1 APPENDIX
-
-The rest of the documentation details each of the object
-methods. Internal methods are usually preceded with a _
-
-=cut
-
-package Bio::Tools::Run::StandAloneBlast;
-
-use strict;
-use warnings;
-
-use Bio::Root::IO;
-use Bio::Seq;
-use Bio::SeqIO;
-use Bio::SearchIO;
-use File::Spec;
-
-use base qw(Bio::Tools::Run::WrapperBase Bio::Factory::ApplicationFactoryI);
-
-our $AUTOLOAD;
-our $DEFAULTBLASTTYPE = 'NCBI';
-our $DEFAULTREADMETHOD = 'BLAST';
-
-# If local BLAST databases are not stored in the standard
-# /data directory, the variable BLASTDATADIR will need to be 
-# set explicitly 
-our $DATADIR = $ENV{'BLASTDATADIR'} || $ENV{'BLASTDB'};
-if (! defined $DATADIR && defined $ENV{'BLASTDIR'}) {
-    my $dir = Bio::Root::IO->catfile($ENV{'BLASTDIR'}, 'data');
-    if (-d $dir) {
-        $DATADIR = $dir;
-    }
-    elsif ($ENV{'BLASTDIR'} =~ /bin/) {
-        $dir = $ENV{'BLASTDIR'};
-        $dir =~ s/bin/data/;
-        $DATADIR = $dir if -d $dir;
-    }
-}
-
-=head2 new
-
- Title   : new
- Usage   : my $obj = Bio::Tools::Run::StandAloneBlast->new();
- Function: Builds a newBio::Tools::Run::StandAloneBlast object 
- Returns : Bio::Tools::Run::StandAloneNCBIBlast or StandAloneWUBlast
- Args    : -quiet => boolean # make program execution quiet
-           -_READMETHOD => 'BLAST' (default, synonym 'SearchIO') || 'blast_pull'
-                           # the parsing method, case insensitive
-
-Essentially all BLAST parameters can be set via StandAloneBlast.pm.
-Some of the most commonly used parameters are listed below. All
-parameters have defaults and are optional except for -p in those programs that
-have it. For a complete listing of settable parameters, run the relevant
-executable BLAST program with the option "-" as in blastall -
-Note that the input parameters (-i, -j, -input) should not be set directly by
-you: this module sets them when you call one of the executable methods.
-
-Blastall
-
-  -p  Program Name [String]
-        Input should be one of "blastp", "blastn", "blastx", 
-        "tblastn", or "tblastx".
-  -d  Database [String] default = nr
-        The database specified must first be formatted with formatdb.
-        Multiple database names (bracketed by quotations) will be accepted.
-        An example would be -d "nr est"
-  -e  Expectation value (E) [Real] default = 10.0
-  -o  BLAST report Output File [File Out]  Optional,
-	    default = ./blastreport.out ; set by StandAloneBlast.pm		
-  -S  Query strands to search against database (for blast[nx], and tblastx). 3 is both, 1 is top, 2 is bottom [Integer]
-	    default = 3
-
-Blastpgp (including Psiblast)
-
-  -j  is the maximum number of rounds (default 1; i.e., regular BLAST)
-  -h  is the e-value threshold for including sequences in the
-	    score matrix model (default 0.001)
-  -c  is the "constant" used in the pseudocount formula specified in the paper (default 10)
-  -B  Multiple alignment file for PSI-BLAST "jump start mode"  Optional
-  -Q  Output File for PSI-BLAST Matrix in ASCII [File Out]  Optional
-
-rpsblast
-
-  -d  Database [String] default = (none - you must specify a database)
-        The database specified must first be formatted with formatdb.
-        Multiple database names (bracketed by quotations) will be accepted.
-        An example would be -d "Cog Smart"
-  -e  Expectation value (E) [Real] default = 10.0
-  -o  BLAST report Output File [File Out]  Optional,
-	    default = ./blastreport.out ; set by StandAloneBlast.pm		
-
-Bl2seq
-
-  -p  Program name: blastp, blastn, blastx. For blastx 1st argument should be nucleotide [String]
-    default = blastp
-  -o  alignment output file [File Out] default = stdout
-  -e  Expectation value (E) [Real]  default = 10.0
-  -S  Query strands to search against database (blastn only).  3 is both, 1 is top, 2 is bottom [Integer]
-    default = 3
-
-WU-Blast
-
-  -p Program Name [String] 
-        Input should be one of "wublastp", "wublastn", "wublastx", 
-        "wutblastn", or "wutblastx".
-  -d  Database [String] default = nr
-        The database specified must first be formatted with xdformat.
-  -E  Expectation value (E) [Real] default = 10.0
-  -o  BLAST report Output File [File Out]  Optional,
-	    default = ./blastreport.out ; set by StandAloneBlast.pm		
-
-=cut
-
-sub new {
-    my ($caller, @args) = @_;
-    my $class = ref($caller) || $caller;
-    
-    # Because of case-sensitivity issues, ncbi and wublast methods are
-    # mutually exclusive. We can't load ncbi methods if we start with wublast
-    # (and vice versa) since wublast e() and E() should be the same thing,
-    # whilst they must be different things in ncbi blast.
-    #
-    # Solution: split StandAloneBlast out into two more modules for NCBI and WU
-    
-    if ($class =~ /NCBI|WU/) {
-        return $class->SUPER::new(@args);
-    }
-    
-    my %args = @args;
-    my $blasttype = $DEFAULTBLASTTYPE;
-    while (my ($attr, $value) = each %args) {
-        if ($attr =~/^-?\s*program\s*$|^-?p$/) {
-            if ($value =~ /^wu*/) {
-                $blasttype = 'WU';
-            }
-        }
-    }
-    
-    my $module = "Bio::Tools::Run::StandAlone${blasttype}Blast";
-    Bio::Root::Root->_load_module($module);
-    return $module->new(@args);
-}
-
-=head2 executable
-
- Title   : executable
- Usage   : my $exe = $blastfactory->executable('blastall');
- Function: Finds the full path to the executable
- Returns : string representing the full path to the exe
- Args    : [optional] name of executable to set path to 
-           [optional] boolean flag whether or not warn when exe is not found
-
-=cut
-
-sub executable {
-    my ($self, $exename, $exe, $warn) = @_;
-    $exename = 'blastall' unless (defined $exename || $self =~ /WUBlast/);
-    $self->program_name($exename);
-    
-    if( defined $exe && -x $exe ) {
-        $self->{'_pathtoexe'}->{$exename} = $exe;
-    }
-    unless( defined $self->{'_pathtoexe'}->{$exename} ) {
-        my $f = $self->program_path($exename);	    
-        $exe = $self->{'_pathtoexe'}->{$exename} = $f if(-e $f && -x $f );
-        
-        # This is how I meant to split up these conditionals --jason
-        # if exe is null we will execute this (handle the case where
-        # PROGRAMDIR pointed to something invalid)
-        unless( $exe )  {  # we didn't find it in that last conditional
-            if( ($exe = $self->io->exists_exe($exename)) && -x $exe ) {
-                $self->{'_pathtoexe'}->{$exename} = $exe;
-            }
-            else { 
-                $self->warn("Cannot find executable for $exename") if $warn;
-                $self->{'_pathtoexe'}->{$exename} = undef;
-            }
-        }
-   }
-   return $self->{'_pathtoexe'}->{$exename};
-}
-
-=head2 program_dir
-
- Title   : program_dir
- Usage   : my $dir = $factory->program_dir();
- Function: Abstract get method for dir of program. 
- Returns : string representing program directory 
- Args    : none 
-
-=cut
-
-sub program_dir {
-    my $self = shift;
-    $self =~ /NCBIBlast/? $ENV{'BLASTDIR'}: $ENV{'WUBLASTDIR'};
-}
-
-sub program_name {
-    my $self = shift;
-    if (@_) { $self->{program_name} = shift }
-    return $self->{program_name} || '';
-}
-
-sub program {
-    my $self = shift;
-    if( wantarray ) {
-	return ($self->executable, $self->p());
-    } else {
-	return $self->executable(@_);
-    }
-}
-
-=head2  _setinput
-
- Title   :  _setinput
- Usage   :  Internal function, not to be called directly	
- Function:   Create input file(s) for Blast executable
- Example :
- Returns : name of file containing Blast data input
- Args    : Seq object reference or input file name
-
-=cut
-
-sub _setinput {
-	my ($self, $executable, $input1, $input2) = @_;
-	my ($seq, $temp, $infilename1, $infilename2,$fh ) ;
-	#  If $input1 is not a reference it better be the name of a file with
-	#  the sequence/ alignment data...
-	$self->io->_io_cleanup();
-
-    SWITCH: {
-        unless (ref $input1) {
-			$infilename1 = (-e $input1) ? $input1 : 0 ;
-			last SWITCH; 
-        }
-        
-		# $input may be an array of BioSeq objects...
-        if (ref($input1) =~ /ARRAY/i ) {
-			($fh,$infilename1) = $self->io->tempfile();
-			$temp =  Bio::SeqIO->new(-fh=> $fh, -format => 'fasta');
-			foreach $seq (@$input1) {
-				unless ($seq->isa("Bio::PrimarySeqI")) {return 0;}
-				$seq->display_id($seq->display_id);
-				$temp->write_seq($seq);
-			}
-			close $fh;
-			$fh = undef;
-			last SWITCH;
-        }
-        
-		#  $input may be a single BioSeq object...
-        elsif ($input1->isa("Bio::PrimarySeqI")) {
-			($fh,$infilename1) = $self->io->tempfile();
-            
-			# just in case $input1 is taken from an alignment and has spaces (ie
-			# deletions) indicated within it, we have to remove them - otherwise
-			# the BLAST programs will be unhappy
-			my $seq_string =  $input1->seq();
-			$seq_string =~ s/\W+//g; # get rid of spaces in sequence
-			$input1->seq($seq_string);
-			$temp =  Bio::SeqIO->new(-fh=> $fh, '-format' => 'fasta');
-			$temp->write_seq($input1);
-			close $fh;
-			undef $fh;
-			last SWITCH;
-        }
-        
-        $infilename1 = 0; # Set error flag if you get here
-	}
-	
-    unless ($input2) { return $infilename1; }
-    
-    SWITCH2: {
-        unless (ref $input2) {
-			$infilename2 =   (-e $input2) ? $input2 : 0 ;
-			last SWITCH2; 
-        }
-        if ($input2->isa("Bio::PrimarySeqI")  && $executable  eq 'bl2seq' ) {
-			($fh,$infilename2) = $self->io->tempfile();
-            
-			$temp =  Bio::SeqIO->new(-fh=> $fh, '-format' => 'Fasta');
-			$temp->write_seq($input2);
-			close $fh;
-			undef $fh;
-			last SWITCH2;
-        }
-        
-		# Option for using psiblast's pre-alignment "jumpstart" feature
-        elsif ($input2->isa("Bio::SimpleAlign") && $executable eq 'blastpgp' ) {
-			# a bit of a lie since it won't be a fasta file
-            ($fh,$infilename2) = $self->io->tempfile(); 
-            
-            # first we retrieve the "mask" that determines which residues should
-            # by scored according to their position and which should be scored
-            # using the non-position-specific matrices
-            my @mask = split("", shift );	#  get mask
-            
-            # then we have to convert all the residues in every sequence to upper
-            # case at the positions that we want psiblast to use position specific
-            # scoring
-            foreach $seq ( $input2->each_seq() ) {
-                my @seqstringlist = split("",$seq->seq());
-                for (my $i = 0; $i < scalar(@mask); $i++) {
-                    unless ( $seqstringlist[$i] =~ /[a-zA-Z]/ ) {next}
-                    $seqstringlist[$i] = $mask[$i] ? uc $seqstringlist[$i]: lc $seqstringlist[$i] ;
-                }
-                my $newseqstring = join("", @seqstringlist);
-                $seq->seq($newseqstring);
-            }
-            
-            # Now we need to write out the alignment to a file 
-            # in the "psi format" which psiblast is expecting
-            $input2->map_chars('\.','-');
-            $temp =  Bio::AlignIO->new(-fh=> $fh, '-format' => 'psi');
-            $temp->write_aln($input2);
-            close $fh;
-            undef $fh;
-            last SWITCH2;
-        }
-        
-        $infilename2 = 0; # Set error flag if you get here
-	}
-    
-	return ($infilename1, $infilename2);
-}
-
-=head1 Bio::Tools::Run::WrapperBase methods
-
-=cut
-
-=head2 no_param_checks
-
- Title   : no_param_checks
- Usage   : $obj->no_param_checks($newval)
- Function: Boolean flag as to whether or not we should
-           trust the sanity checks for parameter values  
- Returns : value of no_param_checks
- Args    : newvalue (optional)
-
-=cut
-
-=head2 save_tempfiles
-
- Title   : save_tempfiles
- Usage   : $obj->save_tempfiles($newval)
- Function: 
- Returns : value of save_tempfiles
- Args    : newvalue (optional)
-
-=cut
-
-=head2 outfile_name
-
- Title   : outfile_name
- Usage   : my $outfile = $tcoffee->outfile_name();
- Function: Get/Set the name of the output file for this run
-           (if you wanted to do something special)
- Returns : string
- Args    : [optional] string to set value to
-
-=cut
-
-=head2 tempdir
-
- Title   : tempdir
- Usage   : my $tmpdir = $self->tempdir();
- Function: Retrieve a temporary directory name (which is created)
- Returns : string which is the name of the temporary directory
- Args    : none
-
-=cut
-
-=head2 cleanup
-
- Title   : cleanup
- Usage   : $tcoffee->cleanup();
- Function: Will cleanup the tempdir directory after a PAML run
- Returns : none
- Args    : none
-
-=cut
-
-=head2 io
-
- Title   : io
- Usage   : $obj->io($newval)
- Function:  Gets a Bio::Root::IO object
- Returns : Bio::Root::IO
- Args    : none
-
-=cut
-
-1;
diff --git a/Bio/Tools/Run/StandAloneNCBIBlast.pm b/Bio/Tools/Run/StandAloneNCBIBlast.pm
deleted file mode 100644
index 7dcdef9..0000000
--- a/Bio/Tools/Run/StandAloneNCBIBlast.pm
+++ /dev/null
@@ -1,538 +0,0 @@
-#
-# BioPerl module for Bio::Tools::Run::StandAloneBlast
-#
-# Copyright Peter Schattner
-#
-# You may distribute this module under the same terms as perl itself
-
-# POD documentation - main docs before the code
-
-=head1 NAME
-
-Bio::Tools::Run::StandAloneNCBIBlast - Object for the local execution 
-of the NCBI BLAST program suite (blastall, blastpgp, bl2seq). With
-experimental support for NCBI rpsblast.
-
-=head1 SYNOPSIS
-
- # Do not use directly; see Bio::Tools::Run::StandAloneBlast
-
-=head1 DESCRIPTION
-
-See Bio::Tools::Run::StandAloneBlast
-
-=head1 FEEDBACK
-
-=head2 Mailing Lists
-
-User feedback is an integral part of the evolution of this and other
-Bioperl modules. Send your comments and suggestions preferably to one
-of the Bioperl mailing lists.  Your participation is much appreciated.
-
-  bioperl-l at bioperl.org                  - General discussion
-  http://bioperl.org/wiki/Mailing_lists  - About the mailing lists
-
-=head2 Support 
-
-Please direct usage questions or support issues to the mailing list:
-
-I<bioperl-l at bioperl.org>
-
-rather than to the module maintainer directly. Many experienced and 
-reponsive experts will be able look at the problem and quickly 
-address it. Please include a thorough description of the problem 
-with code and data examples if at all possible.
-
-=head2 Reporting Bugs
-
-Report bugs to the Bioperl bug tracking system to help us keep track
-the bugs and their resolution.  Bug reports can be submitted via 
-the web:
-
-  https://github.com/bioperl/bioperl-live/issues
-
-=head1 AUTHOR - Peter Schattner
-
-Email schattner at alum.mit.edu
-
-=head1 MAINTAINER - Torsten Seemann
-
-Email torsten at infotech.monash.edu.au
-
-=head1 CONTRIBUTORS
-
-Sendu Bala  bix at sendu.me.uk (reimplementation)
-
-=head1 APPENDIX
-
-The rest of the documentation details each of the object
-methods. Internal methods are usually preceded with a _
-
-=cut
-
-package Bio::Tools::Run::StandAloneNCBIBlast;
-
-use strict;
-use warnings;
-
-use base qw(Bio::Tools::Run::StandAloneBlast);
-
-our $AUTOLOAD;
-our $DEFAULTREADMETHOD = 'BLAST';
-
-# If local BLAST databases are not stored in the standard
-# /data directory, the variable BLASTDATADIR will need to be 
-# set explicitly 
-our $DATADIR = $Bio::Tools::Run::StandAloneBlast::DATADIR;
-
-our %GENERAL_PARAMS  = (i => 'input',
-                        o => 'outfile',
-                        p => 'program',
-                        d => 'database');
-our @BLASTALL_PARAMS = qw(A B C D E F G K L M O P Q R S W X Y Z a b e f l m q r t v w y z n);
-our @BLASTALL_SWITCH = qw(I g J T U n V s);
-our @BLASTPGP_PARAMS = qw(A B C E F G H I J K L M N O P Q R S T U W X Y Z a b c e f h j k l m q s t u v y z);
-our @RPSBLAST_PARAMS = qw(F I J L N O P T U V X Y Z a b e l m v y z);
-our @BL2SEQ_PARAMS   = qw(A D E F G I J M S T U V W X Y a e g j m q r t);
-
-our @OTHER_PARAMS = qw(_READMETHOD);
-
-
-=head2 new
-
- Title   : new
- Usage   : my $obj = Bio::Tools::Run::StandAloneBlast->new();
- Function: Builds a newBio::Tools::Run::StandAloneBlast object 
- Returns : Bio::Tools::Run::StandAloneBlast
- Args    : -quiet => boolean # make program execution quiet
-           -_READMETHOD => 'BLAST' (default, synonym 'SearchIO') || 'blast_pull'
-                           # the parsing method, case insensitive
-
-Essentially all BLAST parameters can be set via StandAloneBlast.pm.
-Some of the most commonly used parameters are listed below. All
-parameters have defaults and are optional except for -p in those programs that
-have it. For a complete listing of settable parameters, run the relevant
-executable BLAST program with the option "-" as in blastall -
-Note that the input parameters (-i, -j, -input) should not be set directly by
-you: this module sets them when you call one of the executable methods.
-
-Blastall
-
-  -p  Program Name [String]
-        Input should be one of "blastp", "blastn", "blastx", 
-        "tblastn", or "tblastx".
-  -d  Database [String] default = nr
-        The database specified must first be formatted with formatdb.
-        Multiple database names (bracketed by quotations) will be accepted.
-        An example would be -d "nr est"
-  -e  Expectation value (E) [Real] default = 10.0
-  -o  BLAST report Output File [File Out]  Optional,
-	    default = ./blastreport.out ; set by StandAloneBlast.pm		
-  -S  Query strands to search against database (for blast[nx], and tblastx). 3 is both, 1 is top, 2 is bottom [Integer]
-	    default = 3
-
-Blastpgp (including Psiblast)
-
-  -j  is the maximum number of rounds (default 1; i.e., regular BLAST)
-  -h  is the e-value threshold for including sequences in the
-	    score matrix model (default 0.001)
-  -c  is the "constant" used in the pseudocount formula specified in the paper (default 10)
-  -B  Multiple alignment file for PSI-BLAST "jump start mode"  Optional
-  -Q  Output File for PSI-BLAST Matrix in ASCII [File Out]  Optional
-
-rpsblast
-
-  -d  Database [String] default = (none - you must specify a database)
-        The database specified must first be formatted with formatdb.
-        Multiple database names (bracketed by quotations) will be accepted.
-        An example would be -d "Cog Smart"
-  -e  Expectation value (E) [Real] default = 10.0
-  -o  BLAST report Output File [File Out]  Optional,
-	    default = ./blastreport.out ; set by StandAloneBlast.pm		
-
-Bl2seq
-
-  -p  Program name: blastp, blastn, blastx. For blastx 1st argument should be nucleotide [String]
-    default = blastp
-  -o  alignment output file [File Out] default = stdout
-  -e  Expectation value (E) [Real]  default = 10.0
-  -S  Query strands to search against database (blastn only).  3 is both, 1 is top, 2 is bottom [Integer]
-    default = 3
-
-=cut
-
-sub new {
-    my ($caller, @args) = @_;
-    my $self = $caller->SUPER::new(@args);
-    
-    # StandAloneBlast is special in that "one can modify the name of
-    # the (ncbi) BLAST parameters as desired as long as the initial letter (and
-    # case) of the parameter are preserved". We handle this by truncating input
-    # args to their first char
-    my %args = @args;
-    @args = ();
-    while (my ($attr, $value) = each %args) {
-        $attr =~ s/^-//;
-        $attr = substr($attr, 0, 1) unless $attr =~ /^_/;
-        push(@args, $attr, $value);
-    }
-    
-    $self->_set_from_args(\@args, -methods => {(map { $_ => $GENERAL_PARAMS{$_} } keys %GENERAL_PARAMS),
-                                               (map { $_ => $_ } (@OTHER_PARAMS,
-                                                                  @BLASTALL_PARAMS,
-                                                                  @BLASTALL_SWITCH,
-                                                                  @BLASTPGP_PARAMS,
-                                                                  @RPSBLAST_PARAMS,
-                                                                  @BL2SEQ_PARAMS))},
-                                  -code => { map { $_ => 'my $self = shift;
-                                                          if (@_) {
-                                                              my $value = shift;
-                                                              if ($value && $value ne \'F\') {
-                                                                  $value = \'T\';
-                                                              }
-                                                              else {
-                                                                  $value = \'F\';
-                                                              }
-                                                              $self->{\'_\'.$method} = $value;
-                                                          }
-                                                          return $self->{\'_\'.$method} || return;' } @BLASTALL_SWITCH },  # these methods can take boolean or 'T' and 'F'
-                                  -create => 1,
-                                  -force => 1,
-                                  -case_sensitive => 1);
-    
-    my ($tfh, $tempfile) = $self->io->tempfile();
-    my $outfile = $self->o || $self->outfile || $tempfile;
-    $self->o($outfile);
-    close($tfh);
-    
-    $self->_READMETHOD($DEFAULTREADMETHOD) unless $self->_READMETHOD;
-    
-    return $self;
-}
-
-# StandAloneBlast is special in that "one can modify the name of
-# the (ncbi) BLAST parameters as desired as long as the initial letter (and
-# case) of the parameter are preserved". We handle this with AUTOLOAD
-# redirecting to the automatically created methods from _set_from_args() !
-sub AUTOLOAD {
-    my $self = shift;
-    my $attr = $AUTOLOAD;
-    $attr =~ s/.*:://;
-    
-    my $orig = $attr;
-    
-    $attr = substr($attr, 0, 1);
-    
-    $self->can($attr) || $self->throw("Unallowed parameter: $orig !");
-    
-    return $self->$attr(@_);
-}
-
-=head2  blastall
-
- Title   : blastall
- Usage   :  $blast_report = $factory->blastall('t/testquery.fa');
-	or
-	       $input = Bio::Seq->new(-id=>"test query",
-				      -seq=>"ACTACCCTTTAAATCAGTGGGGG");
-	       $blast_report = $factory->blastall($input);
-	or 
-	      $seq_array_ref = \@seq_array;  
-         # where @seq_array is an array of Bio::Seq objects
-	      $blast_report = $factory->blastall($seq_array_ref);
- Returns : Reference to a Blast object containing the blast report.
- Args    : Name of a file or Bio::Seq object or an array of 
-           Bio::Seq object containing the query sequence(s). 
-           Throws an exception if argument is not either a string 
-           (eg a filename) or a reference to a Bio::Seq object 
-           (or to an array of Seq objects).  If argument is string, 
-           throws exception if file corresponding to string name can 
-           not be found.
-
-=cut
-
-sub blastall {
-    my ($self, $input1) = @_;
-    $self->io->_io_cleanup();
-    my $executable = 'blastall';
-    
-    # Create input file pointer
-    my $infilename1 = $self->_setinput($executable, $input1) || $self->throw("$input1 not Bio::Seq object or array of Bio::Seq objects or file name!");
-    $self->i($infilename1);
-    
-    my $blast_report = $self->_generic_local_blast($executable);
-}
-
-=head2  blastpgp
-
- Title   : blastpgp
- Usage   :  $blast_report = $factory-> blastpgp('t/testquery.fa');
-	or
-	       $input = Bio::Seq->new(-id=>"test query",
-				      -seq=>"ACTADDEEQQPPTCADEEQQQVVGG");
-	       $blast_report = $factory->blastpgp ($input);
-	or
-	      $seq_array_ref = \@seq_array;  
-         # where @seq_array is an array of Bio::Seq objects
-	      $blast_report = $factory-> blastpgp(\@seq_array);
- Returns : Reference to a Bio::SearchIO object containing the blast report 
- Args    : Name of a file or Bio::Seq object. In psiblast jumpstart 
-           mode two additional arguments are required: a SimpleAlign 
-           object one of whose elements is the query and a "mask" to 
-           determine how BLAST should select scoring matrices see 
-           DESCRIPTION above for more details.
-
-           Throws an exception if argument is not either a string 
-           (eg a filename) or a reference to a Bio::Seq object 
-           (or to an array of Seq objects).  If argument is string, 
-           throws exception if file corresponding to string name can 
-           not be found.
- Returns : Reference to Bio::SearchIO object containing the blast report.
-
-=cut
-
-sub blastpgp {
-    my $self = shift;
-    my $executable = 'blastpgp';
-    my $input1 = shift;
-    my $input2 = shift;
-    # used by blastpgp's -B option to specify which 
-    # residues are position aligned
-    my $mask = shift;
-    
-    my ($infilename1, $infilename2 ) = $self->_setinput($executable, 
-                                                        $input1, $input2, 
-                                                        $mask);
-    if (!$infilename1) {$self->throw("$input1 not Bio::Seq object or array of Bio::Seq objects or file name!");}
-    $self->i($infilename1);	# set file name of sequence to be blasted to inputfilename1 (-i param of blastpgp)
-    if ($input2) {
-        unless ($infilename2) {$self->throw("$input2 not SimpleAlign Object in pre-aligned psiblast\n");}
-        $self->B($infilename2);	# set file name of partial alignment to inputfilename2 (-B param of blastpgp)
-    }
-    
-    my $blast_report = $self->_generic_local_blast($executable);
-}
-
-=head2  rpsblast
-
- Title   : rpsblast
- Usage   :  $blast_report = $factory->rpsblast('t/testquery.fa');
-	or
-	       $input = Bio::Seq->new(-id=>"test query",
-				      -seq=>"MVVLCRADDEEQQPPTCADEEQQQVVGG");
-	       $blast_report = $factory->rpsblast($input);
-	or
-	      $seq_array_ref = \@seq_array;  
-         # where @seq_array is an array of Bio::Seq objects
-	      $blast_report = $factory->rpsblast(\@seq_array);
- Args    : Name of a file or Bio::Seq object or an array of 
-           Bio::Seq object containing the query sequence(s). 
-           Throws an exception if argument is not either a string 
-           (eg a filename) or a reference to a Bio::Seq object 
-           (or to an array of Seq objects).  If argument is string, 
-           throws exception if file corresponding to string name can 
-           not be found.
- Returns : Reference to a Bio::SearchIO object containing the blast report 
-
-=cut
-
-sub rpsblast {
-    my ($self, $input1) = @_;
-    $self->io->_io_cleanup();
-    my $executable = 'rpsblast';
-    
-    # Create input file pointer
-    my $infilename1 = $self->_setinput($executable, $input1) || $self->throw("$input1 not Bio::Seq object or array of Bio::Seq objects or file name!");
-    $self->i($infilename1);
-    
-    my $blast_report = $self->_generic_local_blast($executable);
-}
-
-=head2   bl2seq
-
- Title   : bl2seq
- Usage   : $factory-> bl2seq('t/seq1.fa', 't/seq2.fa');
-	or
-	  $input1 = Bio::Seq->new(-id=>"test query1",
-				  -seq=>"ACTADDEEQQPPTCADEEQQQVVGG");
-	  $input2 = Bio::Seq->new(-id=>"test query2",
-				  -seq=>"ACTADDEMMMMMMMDEEQQQVVGG");
-	  $blast_report = $factory->bl2seq ($input1,  $input2);
- Returns : Reference to a BPbl2seq object containing the blast report.
- Args    : Names of 2 files  or 2 Bio::Seq objects containing the 
-           sequences to be aligned by bl2seq.
-
-           Throws an exception if argument is not either a pair of 
-           strings (eg filenames) or references to Bio::Seq objects.  
-           If arguments are strings, throws exception if files 
-           corresponding to string names can not be found.
-
-=cut
-
-sub bl2seq {
-    my $self = shift;
-    my $executable = 'bl2seq';
-    my $input1 = shift;
-    my $input2 = shift;
-    
-    # Create input file pointer
-    my ($infilename1, $infilename2 ) = $self->_setinput($executable, 
-							  $input1, $input2);
-    if (!$infilename1){$self->throw(" $input1  not Seq Object or file name!");}
-    if (!$infilename2){$self->throw("$input2  not Seq Object or file name!");}
-    
-    $self->i($infilename1);	# set file name of first sequence to 
-                            # be aligned to inputfilename1 
-                            # (-i param of bl2seq)
-    $self->j($infilename2);	# set file name of first sequence to 
-                            # be aligned to inputfilename2 
-                            # (-j param of bl2seq)
-    
-    my $blast_report = $self->_generic_local_blast($executable);   
-}
-
-=head2  _generic_local_blast
-
- Title   : _generic_local_blast
- Usage   : internal function not called directly
- Returns : Bio::SearchIO 
- Args    : Reference to calling object and name of BLAST executable 
-
-=cut
-
-sub _generic_local_blast {
-    my $self = shift;
-    my $executable = shift;
-    
-    # Create parameter string to pass to Blast program
-    my $param_string = $self->_setparams($executable);
-    
-    # run Blast
-    my $blast_report = $self->_runblast($executable, $param_string);
-}
-
-=head2  _runblast
-
- Title   :  _runblast
- Usage   :  Internal function, not to be called directly	
- Function:   makes actual system call to Blast program
- Example :
- Returns : Report Bio::SearchIO object in the appropriate format 
- Args    : Reference to calling object, name of BLAST executable, 
-           and parameter string for executable 
-
-=cut
-
-sub _runblast {
-	my ($self, $executable, $param_string) = @_;
-	my ($blast_obj, $exe);
-	if (! ($exe = $self->executable($executable)) ) {
-		$self->warn("cannot find path to $executable");
-		return;
-	}
-    
-    # Use double quotes if executable path have empty spaces
-    if ($exe =~ m/ /) {
-        $exe = "\"$exe\"";
-    }
-	my $commandstring = $exe.$param_string;
-    
-	$self->debug("$commandstring\n");
-	system($commandstring) && $self->throw("$executable call crashed: $? | $! | $commandstring\n");
-    
-    # set significance cutoff to set expectation value or default value
-	# (may want to make this value vary for different executables)
-	my $signif = $self->e() || 1e-5; 
-    
-    # get outputfilename
-	my $outfile = $self->o();
-    
-    # this should allow any blast SearchIO parser (not just 'blast_pull' or 'blast',
-    # but 'blastxml' and 'blasttable').  Fall back to 'blast' if not stipulated.
-    my $method = $self->_READMETHOD;
-	if ($method =~ /^(?:blast|SearchIO)/i )  {
-        $method = 'blast' if $method =~ m{SearchIO}i;
-		$blast_obj = Bio::SearchIO->new(-file => $outfile,
-                                        -format => $method);
-	}
-    # should these be here?  They have been deprecated...
-    elsif ($method =~ /BPlite/i ) {
-		if ($executable =~ /bl2seq/i)  {
-			# Added program info so BPbl2seq can compute strand info
-			$self->throw("Use of Bio::Tools::BPbl2seq is deprecated; use Bio::SearchIO modules instead");
-		}
-        elsif ($executable =~ /blastpgp/i && defined $self->j() && $self->j() > 1) {
-			$self->throw("Use of Bio::Tools::BPpsilite is deprecated; use Bio::SearchIO modules instead");
-		}
-        elsif ($executable =~ /blastall|rpsblast/i) { 
-			$self->throw("Use of Bio::Tools::BPlite is deprecated; use Bio::SearchIO modules instead");
-		}
-        else { 
-			$self->warn("Unrecognized executable $executable");
-		}
-	}
-    else {
-		$self->warn("Unrecognized readmethod $method");
-	}
-    
-	return $blast_obj;
-}
-
-=head2  _setparams
-
- Title   : _setparams
- Usage   : Internal function, not to be called directly	
- Function: Create parameter inputs for Blast program
- Example :
- Returns : parameter string to be passed to Blast 
- Args    : Reference to calling object and name of BLAST executable
-
-=cut
-
-sub _setparams {
-    my ($self, $executable) = @_;
-    my ($attr, $value, @execparams);
-    
-    if    ($executable eq 'blastall') { @execparams = (@BLASTALL_PARAMS,
-                                                       @BLASTALL_SWITCH); }
-    elsif ($executable eq 'blastpgp') { @execparams =  @BLASTPGP_PARAMS;  }
-    elsif ($executable eq 'rpsblast') { @execparams =  @RPSBLAST_PARAMS;  }
-    elsif ($executable eq 'bl2seq'  ) { @execparams =  @BL2SEQ_PARAMS;    }
-    
-    # we also have all the general params
-    push(@execparams, keys %GENERAL_PARAMS);
-    
-    my $database = $self->d;
-    if ($database && $executable ne 'bl2seq') {
-        # Need to prepend datadirectory to database name
-        my @dbs = split(/ /, $database);
-        for my $i (0..$#dbs) {
-            # (works with multiple databases)
-            if (! (-e $dbs[$i].".nin" || -e $dbs[$i].".pin") &&
-                ! (-e $dbs[$i].".nal" || -e $dbs[$i].".pal") ) {
-                $dbs[$i] = File::Spec->catdir($DATADIR, $dbs[$i]);
-            }
-        }
-        $self->d('"'.join(" ", @dbs).'"');
-    }
-    
-    # workaround for problems with shell metacharacters [bug 2707]
-    # simply quoting does not always work!
-    my $tmp = $self->o;
-    $self->o(quotemeta($tmp)) if ($tmp && $^O !~ /^MSWin/);
-    
-    my $param_string = $self->SUPER::_setparams(-params => [@execparams],
-                                                -dash => 1);
-    
-    $self->o($tmp) if ($tmp && $^O !~ /^MSWin/);
-
-    $self->d($database) if $database;
-    
-    if ($self->quiet()) { 
-        $param_string .= ' 2> '.File::Spec->devnull;
-    }
-    
-    return $param_string;
-}
-
-1;
diff --git a/Bio/Tools/Run/StandAloneWUBlast.pm b/Bio/Tools/Run/StandAloneWUBlast.pm
deleted file mode 100644
index 2732399..0000000
--- a/Bio/Tools/Run/StandAloneWUBlast.pm
+++ /dev/null
@@ -1,299 +0,0 @@
-#
-# BioPerl module for Bio::Tools::Run::StandAloneBlast
-#
-# Copyright Peter Schattner
-#
-# You may distribute this module under the same terms as perl itself
-
-# POD documentation - main docs before the code
-
-=head1 NAME
-
-Bio::Tools::Run::StandAloneWUBlast - Object for the local execution 
-of WU-Blast.
-
-=head1 SYNOPSIS
-
- # Do not use directly; use Bio::Tools::Run::StandAloneBlast
-
-=head1 DESCRIPTION
-
-See Bio::Tools::Run::StandAloneBlast
-
-=head1 FEEDBACK
-
-=head2 Mailing Lists
-
-User feedback is an integral part of the evolution of this and other
-Bioperl modules. Send your comments and suggestions preferably to one
-of the Bioperl mailing lists.  Your participation is much appreciated.
-
-  bioperl-l at bioperl.org                  - General discussion
-  http://bioperl.org/wiki/Mailing_lists  - About the mailing lists
-
-=head2 Support 
-
-Please direct usage questions or support issues to the mailing list:
-
-I<bioperl-l at bioperl.org>
-
-rather than to the module maintainer directly. Many experienced and 
-reponsive experts will be able look at the problem and quickly 
-address it. Please include a thorough description of the problem 
-with code and data examples if at all possible.
-
-=head2 Reporting Bugs
-
-Report bugs to the Bioperl bug tracking system to help us keep track
-the bugs and their resolution.  Bug reports can be submitted via 
-the web:
-
-  https://github.com/bioperl/bioperl-live/issues
-
-=head1 AUTHOR - Peter Schattner
-
-Email schattner at alum.mit.edu
-
-=head1 MAINTAINER - Torsten Seemann
-
-Email torsten at infotech.monash.edu.au
-
-=head1 CONTRIBUTORS
-
-Sendu Bala  bix at sendu.me.uk (reimplementation)
-
-=head1 APPENDIX
-
-The rest of the documentation details each of the object
-methods. Internal methods are usually preceded with a _
-
-=cut
-
-package Bio::Tools::Run::StandAloneWUBlast;
-
-use strict;
-
-use base qw(Bio::Tools::Run::StandAloneBlast);
-
-our $AUTOLOAD;
-our $DEFAULTREADMETHOD = 'BLAST';
-
-# If local BLAST databases are not stored in the standard
-# /data directory, the variable BLASTDATADIR will need to be 
-# set explicitly 
-our $DATADIR = $Bio::Tools::Run::StandAloneBlast::DATADIR;
-
-our %GENERAL_PARAMS  = (i => 'input',
-                        o => 'outfile',
-                        p => 'program',
-                        d => 'database');
-our @WUBLAST_PARAMS  = qw(e s e2 s2 w t x m y z l k h v b q r
-    matrix filter wordmask filter maskextra  hitdist wink ctxfactor gape
-    gaps gape2 gaps2 gapw gapx olf golf  olmax golmax gapdecayrate
-    topcombon topcomboe sumstatsmethod hspsepqmax hspsepsmax gapsepqmax
-    gapsepsmax altscore hspmax gspmax qoffset nwstart nwlen qrecmin qrecmax 
-    dbrecmin dbrecmax vdbdescmax dbchunks sort_by_pvalue  cpus putenv
-    getenv progress);
-our @WUBLAST_SWITCH = qw(kap sump poissonp lcfilter lcmask echofilter
-    stats nogap gapall pingpong nosegs postsw span2 span1 span prune
-    consistency links ucdb gi noseqs qtype qres sort_by_pvalue
-    sort_by_count sort_by_highscore sort_by_totalscore
-    sort_by_subjectlength mmio nonnegok novalidctxok shortqueryok notes
-    warnings errors endputenv getenv endgetenv abortonerror abortonfatal);
-
-our @OTHER_PARAMS = qw(_READMETHOD);
-
-
-=head2 new
-
- Title   : new
- Usage   : my $obj = Bio::Tools::Run::StandAloneBlast->new();
- Function: Builds a newBio::Tools::Run::StandAloneBlast object 
- Returns : Bio::Tools::Run::StandAloneBlast
- Args    : -quiet => boolean # make program execution quiet
-           -_READMETHOD => 'BLAST' (default, synonym 'SearchIO') || 'blast_pull'
-                           # the parsing method, case insensitive
-
-Essentially all BLAST parameters can be set via StandAloneBlast.pm.
-Some of the most commonly used parameters are listed below. All
-parameters have defaults and are optional except for -p.
-
-  -p Program Name [String] 
-        Input should be one of "wublastp", "wublastn", "wublastx", 
-        "wutblastn", or "wutblastx".
-  -d  Database [String] default = nr
-        The database specified must first be formatted with xdformat.
-  -E  Expectation value (E) [Real] default = 10.0
-  -o  BLAST report Output File [File Out]  Optional,
-	    default = ./blastreport.out ; set by StandAloneBlast.pm		
-
-=cut
-
-sub new {
-    my ($caller, @args) = @_;
-    my $self = $caller->SUPER::new(@args);
-    
-    $self->_set_from_args(\@args, -methods => {(map { $_ => $GENERAL_PARAMS{$_} } keys %GENERAL_PARAMS),
-                                               (map { $_ => $_ } (@OTHER_PARAMS,
-                                                                  @WUBLAST_PARAMS,
-                                                                  @WUBLAST_SWITCH))},
-                                  -create => 1,
-                                  -force => 1);
-    
-    my ($tfh, $tempfile) = $self->io->tempfile();
-    my $outfile = $self->o || $self->outfile || $tempfile;
-    $self->o($outfile);
-    close($tfh);
-    
-    $self->_READMETHOD($DEFAULTREADMETHOD) unless $self->_READMETHOD;
-    
-    return $self;
-}
-
-# We let get/setter method names be case-insensitve
-sub AUTOLOAD {
-    my $self = shift;
-    my $attr = $AUTOLOAD;
-    $attr =~ s/.*:://;
-    
-    my $orig = $attr;
-    
-    $attr = lc($attr);
-    
-    $self->can($attr) || $self->throw("Unallowed parameter: $orig !");
-    
-    return $self->$attr(@_);
-}
-
-=head2  wublast
-
- Title   : wublast
- Usage   :  $blast_report = $factory->wublast('t/testquery.fa');
-	or
-	       $input = Bio::Seq->new(-id=>"test query",
-				      -seq=>"ACTACCCTTTAAATCAGTGGGGG");
-	       $blast_report = $factory->wublast($input);
-	or 
-	      $seq_array_ref = \@seq_array;  # where @seq_array is an array of Bio::Seq objects
-	      $blast_report = $factory->wublast(\@seq_array);
- Returns :  Reference to a Blast object 
- Args    : Name of a file or Bio::Seq object or an array of 
-           Bio::Seq object containing the query sequence(s). 
-           Throws an exception if argument is not either a string 
-           (eg a filename) or a reference to a Bio::Seq object 
-           (or to an array of Seq objects).  If argument is string, 
-           throws exception if file corresponding to string name can 
-           not be found.
-
-=cut
-
-sub wublast {
-    my ($self, $input1) = @_;
-    $self->io->_io_cleanup();
-    my $executable = 'wublast';
-    
-    # Create input file pointer
-    my $infilename1 = $self->_setinput($executable, $input1) || $self->throw("$input1 not Bio::Seq object or array of Bio::Seq objects or file name!");
-    $self->i($infilename1);
-    
-    my $blast_report = $self->_generic_local_wublast($executable);
-}
-
-=head2  _generic_local_wublast
-
- Title   : _generic_local_wublast
- Usage   :  internal function not called directly
- Returns :  Blast object
- Args    :   Reference to calling object and name of BLAST executable 
-
-=cut
-
-sub _generic_local_wublast {
-    my $self = shift;
-    my $executable = shift;
-    
-    # Create parameter string to pass to Blast program
-    my $param_string = $self->_setparams($executable);
-    $param_string = " ".$self->database." ".$self->input." ".$param_string;
-    
-    # run Blast
-    my $blast_report = $self->_runwublast($executable, $param_string);
-}
-
-=head2  _runwublast
-
- Title   :  _runwublast
- Usage   :  Internal function, not to be called directly	
- Function:   makes actual system call to WU-Blast program
- Example :
- Returns : Report Blast object
- Args    : Reference to calling object, name of BLAST executable, 
-           and parameter string for executable 
-
-=cut
-
-sub _runwublast {
-	my ($self, $executable, $param_string) = @_;
-	my ($blast_obj, $exe);
-	if (! ($exe = $self->executable($self->p))){
-        $self->warn("cannot find path to $executable");
-        return;
-	}
-    
-    # Use double quotes if executable path have empty spaces
-    if ($exe =~ m/ /) {
-        $exe = "\"$exe\"";
-    }
-	my $commandstring = $exe.$param_string;
-    
-	$self->debug("$commandstring\n");
-	system($commandstring) && $self->throw("$executable call crashed: $? | $! | $commandstring\n");
-    
-    # get outputfilename
-	my $outfile = $self->o();	
-	$blast_obj = Bio::SearchIO->new(-file => $outfile, -format => 'blast');
-    
-	return $blast_obj;
-}
-
-=head2  _setparams
-
- Title   : _setparams
- Usage   : Internal function, not to be called directly	
- Function: Create parameter inputs for Blast program
- Example :
- Returns : parameter string to be passed to Blast 
- Args    : Reference to calling object and name of BLAST executable
-
-=cut
-
-sub _setparams {
-    my ($self, $executable) = @_;
-    my ($attr, $value, @execparams);
-    
-    @execparams = @WUBLAST_PARAMS;
-    
-    # of the general params, wublast only takes outfile at
-    # this stage (we add in program, input and database manually elsewhere)
-    push(@execparams, 'o');
-    
-    # workaround for problems with shell metacharacters [bug 2707]
-    # simply quoting does not always work!
-    # Fixed so Windows files are not quotemeta'd
-    my $tmp = $self->o;
-    $self->o(quotemeta($tmp)) if ($tmp && $^O !~ /^MSWin/);
-    
-    my $param_string = $self->SUPER::_setparams(-params => [@execparams],
-                                                -switches => \@WUBLAST_SWITCH,
-                                                -dash => 1);
-    
-    $self->o($tmp) if ($tmp && $^O !~ /^MSWin/);
-    
-    if ($self->quiet()) { 
-        $param_string .= ' 2> '.File::Spec->devnull;
-    }
-    
-    return $param_string;
-}
-
-1;
diff --git a/Bio/Tools/Run/WrapperBase.pm b/Bio/Tools/Run/WrapperBase.pm
deleted file mode 100644
index 74efe37..0000000
--- a/Bio/Tools/Run/WrapperBase.pm
+++ /dev/null
@@ -1,511 +0,0 @@
-#
-# BioPerl module for Bio::Tools::Run::WrapperBase
-#
-# Please direct questions and support issues to <bioperl-l at bioperl.org>
-#
-# Cared for by Jason Stajich <jason at bioperl.org>
-#
-# Copyright Jason Stajich
-#
-# You may distribute this module under the same terms as perl itself
-
-# POD documentation - main docs before the code
-
-=head1 NAME
-
-Bio::Tools::Run::WrapperBase - A Base object for wrappers around executables
-
-=head1 SYNOPSIS
-
-  # do not use this object directly, it provides the following methods
-  # for its subclasses
-
-  my $errstr = $obj->error_string();
-  my $exe    = $obj->executable();
-  $obj->save_tempfiles($booleanflag)
-  my $outfile= $obj->outfile_name();
-  my $tempdir= $obj->tempdir(); # get a temporary dir for executing
-  my $io     = $obj->io;  # Bio::Root::IO object
-  my $cleanup= $obj->cleanup(); # remove tempfiles
-
-  $obj->run({-arg1 => $value});
-
-=head1 DESCRIPTION
-
-This is a basic module from which to build executable wrapper modules.
-It has some basic methods to help when implementing new modules.
-
-=head1 FEEDBACK
-
-=head2 Mailing Lists
-
-User feedback is an integral part of the evolution of this and other
-Bioperl modules. Send your comments and suggestions preferably to
-the Bioperl mailing list.  Your participation is much appreciated.
-
-  bioperl-l at bioperl.org                  - General discussion
-  http://bioperl.org/wiki/Mailing_lists  - About the mailing lists
-
-=head2 Support
-
-Please direct usage questions or support issues to the mailing list:
-
-I<bioperl-l at bioperl.org>
-
-rather than to the module maintainer directly. Many experienced and
-reponsive experts will be able look at the problem and quickly
-address it. Please include a thorough description of the problem
-with code and data examples if at all possible.
-
-=head2 Reporting Bugs
-
-Report bugs to the Bioperl bug tracking system to help us keep track of
-the bugs and their resolution. Bug reports can be submitted via the
-web:
-
-  https://github.com/bioperl/bioperl-live/issues
-
-=head1 AUTHOR - Jason Stajich
-
-Email jason-at-bioperl.org
-
-=head1 CONTRIBUTORS
-
-Sendu Bala, bix at sendu.me.uk
-
-=head1 APPENDIX
-
-The rest of the documentation details each of the object methods.
-Internal methods are usually preceded with a _
-
-=cut
-
-
-# Let the code begin...
-
-
-package Bio::Tools::Run::WrapperBase;
-use strict;
-
-# Object preamble - inherits from Bio::Root::Root
-
-use base qw(Bio::Root::Root);
-
-use File::Spec;
-use File::Path qw(); # don't import anything
-
-=head2 run
-
- Title   : run
- Usage   : $wrapper->run({ARGS HERE});
- Function: Support generic running with args passed in
-           as a hashref
- Returns : Depends on the implementation, status OR data
- Args    : hashref of named arguments
-
-
-=cut
-
-sub run {
-   my ($self, at args) = @_;
-   $self->throw_not_implemented();
-}
-
-
-=head2 error_string
-
- Title   : error_string
- Usage   : $obj->error_string($newval)
- Function: Where the output from the last analysis run is stored.
- Returns : value of error_string
- Args    : newvalue (optional)
-
-
-=cut
-
-sub error_string{
-   my ($self,$value) = @_;
-   if( defined $value) {
-      $self->{'_error_string'} = $value;
-    }
-    return $self->{'_error_string'} || '';
-}
-
-=head2 arguments
-
- Title   : arguments
- Usage   : $obj->arguments($newval)
- Function: Commandline parameters
- Returns : value of arguments
- Args    : newvalue (optional)
-
-
-=cut
-
-sub arguments {
-  my ($self,$value) = @_;
-  if(defined $value) {
-    $self->{'_arguments'} = $value;
-  }
-  return $self->{'_arguments'} || '';
-}
-
-
-=head2 no_param_checks
-
- Title   : no_param_checks
- Usage   : $obj->no_param_checks($newval)
- Function: Boolean flag as to whether or not we should
-           trust the sanity checks for parameter values
- Returns : value of no_param_checks
- Args    : newvalue (optional)
-
-
-=cut
-
-sub no_param_checks{
-   my ($self,$value) = @_;
-   if( defined $value || ! defined $self->{'no_param_checks'} ) {
-       $value = 0 unless defined $value;
-      $self->{'no_param_checks'} = $value;
-    }
-    return $self->{'no_param_checks'};
-}
-
-=head2 save_tempfiles
-
- Title   : save_tempfiles
- Usage   : $obj->save_tempfiles($newval)
- Function: Get/set the choice of if tempfiles in the temp dir (see tempdir())
-           are kept or cleaned up. Default is '0', ie. delete temp files.
-           NB: This must be set to the desired value PRIOR to first creating
-           a temp dir with tempdir(). Any attempt to set this after tempdir creation will get a warning.
- Returns : boolean
- Args    : none to get, boolean to set
-
-=cut
-
-sub save_tempfiles{
-    my $self = shift;
-    my @args = @_;
-    if (($args[0]) && (exists ($self->{'_tmpdir'}))) {
-        $self->warn ("Tempdir already created; setting save_tempfiles will not affect cleanup behavior.");
-    }
-    return $self->io->save_tempfiles(@_);
-}
-
-=head2 outfile_name
-
- Title   : outfile_name
- Usage   : my $outfile = $wrapper->outfile_name();
- Function: Get/Set the name of the output file for this run
-           (if you wanted to do something special)
- Returns : string
- Args    : [optional] string to set value to
-
-
-=cut
-
-sub outfile_name{
-   my ($self,$nm) = @_;
-   if( defined $nm || ! defined $self->{'_outfilename'} ) {
-       $nm = 'mlc' unless defined $nm;
-       $self->{'_outfilename'} = $nm;
-   }
-   return $self->{'_outfilename'};
-}
-
-
-=head2 tempdir
-
- Title   : tempdir
- Usage   : my $tmpdir = $self->tempdir();
- Function: Retrieve a temporary directory name (which is created)
- Returns : string which is the name of the temporary directory
- Args    : none
-
-
-=cut
-
-sub tempdir{
-   my ($self) = shift;
-
-   $self->{'_tmpdir'} = shift if @_;
-   unless( $self->{'_tmpdir'} ) {
-       $self->{'_tmpdir'} = $self->io->tempdir(CLEANUP => ! $self->save_tempfiles );
-   }
-   unless( -d $self->{'_tmpdir'} ) {
-       mkdir($self->{'_tmpdir'},0777);
-   }
-   return $self->{'_tmpdir'};
-}
-
-=head2 cleanup
-
- Title   : cleanup
- Usage   : $wrapper->cleanup();
- Function: Will cleanup the tempdir directory
- Returns : none
- Args    : none
-
-
-=cut
-
-sub cleanup{
-   my ($self) = @_;
-   $self->io->_io_cleanup();
-   if( defined $self->{'_tmpdir'} && -d $self->{'_tmpdir'} ) {
-      my $verbose = ($self->verbose >= 1) ? 1 : 0;
-      File::Path::rmtree( $self->{'_tmpdir'}, $verbose);
-   }
-}
-
-=head2 io
-
- Title   : io
- Usage   : $obj->io($newval)
- Function: Gets a Bio::Root::IO object
- Returns : Bio::Root::IO object
- Args    : none
-
-
-=cut
-
-sub io{
-   my ($self) = @_;
-   unless( defined $self->{'io'} ) {
-       $self->{'io'} = Bio::Root::IO->new(-verbose => $self->verbose);
-   }
-    return $self->{'io'};
-}
-
-=head2 version
-
- Title   : version
- Usage   : $version = $wrapper->version()
- Function: Returns the program version (if available)
- Returns : string representing version of the program
- Args    : [Optional] value to (re)set version string
-
-
-=cut
-
-sub version{
-   my ($self, at args) = @_;
-   return;
-}
-
-=head2 executable
-
- Title   : executable
- Usage   : my $exe = $factory->executable();
- Function: Finds the full path to the executable
- Returns : string representing the full path to the exe
- Args    : [optional] name of executable to set path to
-           [optional] boolean flag whether or not warn when exe is not found
-
-=cut
-
-sub executable {
-    my ($self, $exe, $warn) = @_;
-
-    if (defined $exe) {
-        $self->{'_pathtoexe'} = $exe;
-    }
-
-    unless( defined $self->{'_pathtoexe'} ) {
-        my $prog_path = $self->program_path;
-
-        if ($prog_path) {
-            if (-f $prog_path && -x $prog_path) {
-                $self->{'_pathtoexe'} = $prog_path;
-            }
-            elsif ($self->program_dir) {
-                $self->warn("executable not found in $prog_path, trying system path...") if $warn;
-            }
-        }
-        unless ($self->{'_pathtoexe'}) {
-            my $exe;
-            if ( $exe = $self->io->exists_exe($self->program_name) ) {
-                $self->{'_pathtoexe'} = $exe;
-            }
-            else {
-                $self->warn("Cannot find executable for ".$self->program_name) if $warn;
-                $self->{'_pathtoexe'} = undef;
-            }
-        }
-    }
-
-    # bail if we never found the executable
-    unless ( defined $self->{'_pathtoexe'}) {
-        $self->throw("Cannot find executable for ".$self->program_name .
-            ". path=\"".$self->program_path."\"");
-    }
-    return $self->{'_pathtoexe'};
-}
-
-=head2 program_path
-
- Title   : program_path
- Usage   : my $path = $factory->program_path();
- Function: Builds path for executable
- Returns : string representing the full path to the exe
- Args    : none
-
-=cut
-
-sub program_path {
-   my ($self) = @_;
-   my @path;
-   push @path, $self->program_dir if $self->program_dir;
-   push @path, $self->program_name.($^O =~ /mswin/i ? '.exe' : '') if $self->program_name;
-   return File::Spec->catfile(@path);
-}
-
-=head2 program_dir
-
- Title   : program_dir
- Usage   : my $dir = $factory->program_dir();
- Function: Abstract get method for dir of program. To be implemented
-           by wrapper.
- Returns : string representing program directory
- Args    : none
-
-=cut
-
-sub program_dir {
-    my ($self) = @_;
-    $self->throw_not_implemented();
-}
-
-=head2 program_name
-
- Title   : program_name
- Usage   : my $name = $factory->program_name();
- Function: Abstract get method for name of program. To be implemented
-           by wrapper.
- Returns : string representing program name
- Args    : none
-
-=cut
-
-sub program_name {
-    my ($self) = @_;
-    $self->throw_not_implemented();
-}
-
-=head2 quiet
-
- Title   : quiet
- Usage   : $factory->quiet(1);
-           if ($factory->quiet()) { ... }
- Function: Get/set the quiet state. Can be used by wrappers to control if
-           program output is printed to the console or not.
- Returns : boolean
- Args    : none to get, boolean to set
-
-=cut
-
-sub quiet {
-    my $self = shift;
-    if (@_) { $self->{quiet} = shift }
-    return $self->{quiet} || 0;
-}
-
-=head2  _setparams()
-
- Title   : _setparams
- Usage   : $params = $self->_setparams(-params => [qw(window evalue_cutoff)])
- Function: For internal use by wrapper modules to build parameter strings
-           suitable for sending to the program being wrapped. For each method
-           name supplied, calls the method and adds the method name (as modified
-           by optional things) along with its value (unless a switch) to the
-           parameter string
- Example : $params = $self->_setparams(-params => [qw(window evalue_cutoff)],
-                                       -switches => [qw(simple large all)],
-                                       -double_dash => 1,
-                                       -underscore_to_dash => 1);
-           If window() and simple() had not been previously called, but
-           evalue_cutoff(0.5), large(1) and all(0) had been called, $params
-           would be ' --evalue-cutoff 0.5 --large'
- Returns : parameter string
- Args    : -params => [] or {}  # array ref of method names to call,
-                                  or hash ref where keys are method names and
-                                  values are how those names should be output
-                                  in the params string
-           -switches => [] or {}# as for -params, but no value is printed for
-                                  these methods
-           -join => string      # define how parameters and their values are
-                                  joined, default ' '. (eg. could be '=' for
-                                  param=value)
-           -lc => boolean       # lc() method names prior to output in string
-           -dash => boolean     # prefix all method names with a single dash
-           -double_dash => bool # prefix all method names with a double dash
-           -mixed_dash => bool  # prefix single-character method names with a
-                                # single dash, and multi-character method names
-                                # with a double-dash
-           -underscore_to_dash => boolean # convert all underscores in method
-                                            names to dashes
-
-=cut
-
-sub _setparams {
-    my ($self, @args) = @_;
-
-    my ($params, $switches, $join, $lc, $d, $dd, $md, $utd) =
-        $self->_rearrange([qw(PARAMS
-                              SWITCHES
-                              JOIN
-                              LC
-                              DASH
-                              DOUBLE_DASH
-                              MIXED_DASH
-                              UNDERSCORE_TO_DASH)], @args);
-    $self->throw('at least one of -params or -switches is required') unless ($params || $switches);
-    $self->throw("-dash, -double_dash and -mixed_dash are mutually exclusive") if (defined($d) + defined($dd) + defined($md) > 1);
-    $join ||= ' ';
-
-    my %params = ref($params) eq 'HASH' ? %{$params} : map { $_ => $_ } @{$params};
-    my %switches = ref($switches) eq 'HASH' ? %{$switches} : map { $_ => $_ } @{$switches};
-
-    my $param_string = '';
-    for my $hash_ref (\%params, \%switches) {
-        while (my ($method, $method_out) = each %{$hash_ref}) {
-            my $value = $self->$method();
-            next unless (defined $value);
-            next if (exists $switches{$method} && ! $value);
-
-            $method_out = lc($method_out) if $lc;
-            my $method_length = length($method_out) if $md;
-            $method_out = '-'.$method_out if ($d || ($md && ($method_length == 1)));
-            $method_out = '--'.$method_out if ($dd || ($md && ($method_length > 1)));
-            $method_out =~ s/_/-/g if $utd;
-
-            if ( exists $params{$method} ) {
-              # if value are quoted with " or ', re-quote it
-              if ( $value =~ m{^[\'\"]+(.+)[\'\"]+$} ) {
-                $value = '"'. $1 . '"';
-              }
-              # quote values that contain spaces
-              elsif ( $value =~ m{\s+} ) {
-                $value = '"'. $value . '"';
-              }
-            }
-
-            $param_string .= ' '.$method_out.(exists $switches{$method} ? '' : $join.$value);
-        }
-    }
-
-    return $param_string;
-}
-
-sub DESTROY {
-    my $self= shift;
-    unless ( $self->save_tempfiles ) {
-	$self->cleanup();
-    }
-    $self->SUPER::DESTROY();
-}
-
-
-1;
diff --git a/Bio/Tools/Run/WrapperBase/CommandExts.pm b/Bio/Tools/Run/WrapperBase/CommandExts.pm
deleted file mode 100644
index a2df4bc..0000000
--- a/Bio/Tools/Run/WrapperBase/CommandExts.pm
+++ /dev/null
@@ -1,1385 +0,0 @@
-#
-# BioPerl module for Bio::Tools::Run::WrapperBase::CommandExts
-#
-# Please direct questions and support issues to <bioperl-l at bioperl.org>
-#
-# Cared for by Mark A. Jensen <maj -at- fortinbras -dot- us>
-#
-# Copyright Mark A. Jensen
-#
-# You may distribute this module under the same terms as perl itself
-
-# POD documentation - main docs before the code
-
-=head1 NAME
-
-Bio::Tools::Run::WrapperBase::CommandExts - Extensions to WrapperBase for handling programs with commands *ALPHA*
-
-=head1 SYNOPSIS
-
-Devs, see L</DEVELOPER INTERFACE>.
-Users, see L</USER INTERFACE>.
-
-=head1 DESCRIPTION
-
-This is a developer-focused experimental module. The main idea is to
-extend L<Bio::Tools::Run::WrapperBase> to make it relatively easy to
-create run wrappers around I<suites> of related programs, like
-C<samtools> or C<blast+>.
-
-Some definitions:
-
-=over
-
-=item * program
-
-The program is the command-line frontend application. C<samtools>, for example, is run from the command line as follows:
-
- $ samtools view -bS in.bam > out.sam
- $ samtools faidx
-
-=item * command
-
-The command is the specific component of a suite run by executing the
-program. In the example above, C<view> and C<faidx> are commands.
-
-=item * command prefix
-
-The command prefix is an abbreviation of the command name used
-internally by C<CommandExts> method, and sometimes by the user of the
-factory for specifying command line parameters to subcommands of
-composite commands.
-
-=item * composite command
-
-A composite command is a pipeline or script representing a series of
-separate executions of different commands. Composite commands can be
-specified by configuring C<CommandExts> appropriately; the composite
-command can be run by the user from a factory in the same way as
-ordinary commands.
-
-=item * options, parameters, switches and filespecs
-
-An option is any command-line option; i.e., a specification set off by
-a command-line by a specifier (like C<-v> or C<--outfile>). Parameters
-are command-line options that accept a value (C<-title mydb>);
-switches are boolean flags (C<--no-filter>). Filespecs are barewords
-at the end of the command line that usually indicate input or output
-files. In this module, this includes files that capture STDIN, STDOUT,
-or STDERR via redirection.
-
-=item * pseudo-program
-
-A "pseudo-program" is a way to refer to a collection of related
-applications that are run independently from the command line, rather
-than via a frontend program. The C<blast+> suite of programs is an
-example: C<blastn>, C<makeblastdb>, etc. C<CommandExts> can be
-configured to create a single factory for a suite of related,
-independent programs that treats each independent program as a
-"pseudo-program" command.
-
-=back
-
-This module essentially adds the non-assembler-specific wrapper
-machinery of fangly's L<Bio::Tools::Run::AssemblerBase> to the
-L<Bio::Tools::Run::WrapperBase> namespace, adding the general
-command-handling capability of L<Bio::Tools::Run::BWA>. It creates run
-factories that are automatically Bio::ParameterBaseI compliant,
-meaning that C<available_parameters()>, C<set_parameters()>,
-C<get_parameters>, C<reset_parameters()>, and C<parameters_changed()>
-are available.
-
-=head1 DEVELOPER INTERFACE
-
-C<CommandExts> is currently set up to read particular package globals
-which define the program, the commands available, command-line options
-for those commands, and human-readable aliases for those options.
-
-The easiest way to use C<CommandExts> is probably to create two modules:
-
- Bio::Tools::Run::YourRunPkg
- Bio::Tools::Run::YourRunPkg::Config
-
-The package globals should be defined in the C<Config> module, and the
-run package itself should begin with the following mantra:
-
- use YourRunPkg::Config;
- use Bio::Tools::Run::WrapperBase;
- use Bio::Tools::Run::WrapperBase::CommandExts;
- sub new {
-     my $class = shift;
-     my @args = @_;
-     my $self = $class->SUPER::new(@args);
-     ...
-     return $self;
- }
-
-The following globals can/should be defined in the C<Config> module:
-
-  $program_name
-  $program_dir
-  $use_dash
-  $join
-  @program_commands 
-  %command_prefixes
-  @program_params
-  @program_switches 
-  %param_translation
-  %composite_commands
-  %command_files
-
-See L</Config Globals> for detailed descriptions.
-
-The work of creating a run wrapper with C<CommandExts> lies mainly in
-setting up the globals. The key methods for the developer interface are:
-
-=over 
-
-=item * program_dir($path_to_programs)
-
-Set this to point the factory to the executables.
-
-=item * _run(@file_args)
-
-Runs an instantiated factory with the given file args. Use in the
- C<run()> method override.
-
-=item *  _create_factory_set()
-
-Returns a hash of instantiated factories for each true command from a
-composite command factory. The hash keys are the true command names, so
-you could do
-
- $cmds = $composite_fac->_create_factory_set;
- for (@true_commands) {
-    $cmds->{$_}->_run(@file_args);
- }
-
-=item * executables($cmd,[$fullpath])
-
-For pseudo-programs, this gets/sets the full path to the executable of
-the true program corresponding to the command C<$cmd>.
-
-=back
-
-=head2 Implementing Composite Commands
-
-=head2 Implementing Pseudo-programs
-
-To indicate that a package wraps disparate programs under a single pseudo program, use an asterisk before the program name:
-
- package Bio::Tools::Run::YourPkg::Config;
- ...
- our $program_name = '*blast+';
-
-and C<_run> will know what to do. Specify the rest of the globals as
-if the desired programs were commands. Use the basename of the
-programs for the command names.
-
-If all the programs can be found in a single directory, just specify
-that directory in C<program_dir()>. If not, use C<executables()> to set the paths to each program explicitly:
-
- foreach (keys %cmdpaths) {
-    $self->executables($_, $cmdpaths{$_});
- }
-
-=head2 Config Globals
-
-Here is an example config file. Further details in prose are below.
-
- package Dummy::Config;
- use strict;
- use warnings;
- no warnings qw(qw);
- use Exporter;
- our (@ISA, @EXPORT, @EXPORT_OK);
- push @ISA, 'Exporter';
- @EXPORT = qw(
-              $program_name
-              $program_dir
-              $use_dash
-              $join
-              @program_commands
-              %command_prefixes
-              @program_params
-              @program_switches
-              %param_translation
-              %command_files
-              %composite_commands
-             );
-
- our $program_name = '*flurb';
- our $program_dir = 'C:\cygwin\usr\local\bin';
- our $use_dash = 'mixed';
- our $join = ' ';
- 
- our @program_commands = qw(
-  rpsblast
-  find
-  goob
-  blorb
-  multiglob
-   );
-
- our %command_prefixes = (
-     blastp => 'blp',
-     tblastn => 'tbn',
-     goob => 'g',
-     blorb => 'b',
-     multiglob => 'm'
-     );
-
- our @program_params = qw(
-     command
-     g|narf
-     g|schlurb
-     b|scroob
-     b|frelb
-     m|trud
- );
- 
- our @program_switches = qw(
-     g|freen
-     b|klep
- );
- 
- our %param_translation = (
-     'g|narf'     => 'n',
-     'g|schlurb'  => 'schlurb',
-     'g|freen'    => 'f',
-     'b|scroob'   => 's',
-     'b|frelb'    => 'frelb'
-     );
- 
- our %command_files = (
-     'goob'       => [qw( fas faq )],
-     );
- 
- our %composite_commands = (
-     'multiglob' => [qw( blorb goob )]
-     );
- 1;
-
-C<$use_dash> can be one of C<single>, C<double>, or C<mixed>. See L<Bio::Tools::Run::WrapperBase>.
-
-There is a syntax for the C<%command_files> specification. The token
-matching C<[a-zA-Z0-9_]+> in each element of each arrayref becomes the
-named filespec parameter for the C<_run()> method in the wrapper
-class. Additional symbols surrounding this token indicate how this
-argument should be handled. Some examples:
-
- >out  : stdout is redirected into the file 
-         specified by (..., -out => $file,... )
- <in   : stdin is accepted from the file 
-         specified by (..., -in => $file,... )
- 2>log : stderr is redirected into the file
-         specified by (..., -log => $file,... )
- #opt  : this filespec argument is optional
-         (no throw if -opt => $option is missing)
- 2>#log: if -log is not specified in the arguments, the stderr() 
-         method will capture stderr
- *lst  : this filespec can take multiple arguments,
-         specify using an arrayref (..., -lst => [$file1, $file2], ...)
- *#lst : an optional list
-
-The tokens above are examples; they can be anything matching the above regexp.
-
-=head1 USER INTERFACE
-
-Using a wrapper created with C<Bio::Tools::Run::WrapperBase::CommandExts>:
-
-=over 
-
-=item * Getting a list of available commands, parameters, and filespecs:
-
-To get a list of commands, simply:
-
- @commands = Bio::Tools::Run::ThePkg->available_commands;
-
-The wrapper will generally have human-readable aliases for each of the
-command-line options for the wrapped program and commands. To obtain a
-list of the parameters and switches available for a particular
-command, do
-
- $factory = Bio::Tools::Run::ThePkg->new( -command => 'glurb' );
- @params = $factory->available_parameters('params');
- @switches = $factory->available_parameters('switches');
- @filespec = $factory->available_parameters('filespec');
- @filespec = $factory->filespec; # alias
-
-=item * Create factories
-
-The factory is a handle on the program and command you wish to
-run. Create a factory using C<new> to set command-line parameters:
-
- $factory = Bio::Tools::Run::ThePkg->new( -command => 'glurb', 
-                                          -freen => 1,
-                                          -furschlugginer => 'vreeble' );
-
-A shorthand for this is:
- 
- $factory = Bio::Tools::Run::ThePkg->new_glurb( 
-                                       -freen => 1, 
-                                       -furschlugginer => 'vreeble' );
-
-=item * Running programs
-
-To run the program, use the C<run> method, providing filespecs as arguments
-
- $factory = Bio::Tools::Run::ThePkg->new_assemble( -min_qual => 63 );
- $factory->run( -faq1 => 'read1.fq', -faq2 => 'read2.fq', 
-                -ref => 'refseq.fas', -out => 'new.sam' );
- # do another
- $factory->run( -faq1 => 'read-old1.fq', -faq2 => 'read-old2.fq', 
-                -ref => 'refseq.fas', -out => 'old.sam' ); 
-
-Messages on STDOUT and STDERR are dumped into their respective attributes:
-
- $stdout = $factory->stdout;
- $stderr = $factory->stderr;
-
-unless STDOUT and/or STDERR are part of the named files in the filespec.
-
-=item * Setting/getting/resetting/polling parameters.
-
-A C<CommandExts>-based factory is always L<Bio::ParameterBaseI>
-compliant. That means that you may set, get, and reset parameters
-using C<set_parameters()>, C<get_parameters()>, and
-C<reset_parameters>. You can ask whether parameters have changed since
-they were last accessed by using the predicate
-C<parameters_changed>. See L<Bio::ParameterBaseI> for more details.
-
-Once set, parameters become attributes of the factory. Thus, you can get their values as follows:
-
- if ($factory->freen) { 
-    $furs = $factory->furshlugginer;
-    #...
- }
-
-=back
-
-=head1 FEEDBACK
-
-=head2 Mailing Lists
-
-User feedback is an integral part of the evolution of this and other
-Bioperl modules. Send your comments and suggestions preferably to
-the Bioperl mailing list.  Your participation is much appreciated.
-
-  bioperl-l at bioperl.org                  - General discussion
-http://bioperl.org/wiki/Mailing_lists  - About the mailing lists
-
-=head2 Support
-
-Please direct usage questions or support issues to the mailing list:
-
-L<bioperl-l at bioperl.org>
-
-rather than to the module maintainer directly. Many experienced and
-reponsive experts will be able look at the problem and quickly
-address it. Please include a thorough description of the problem
-with code and data examples if at all possible.
-
-=head2 Reporting Bugs
-
-Report bugs to the Bioperl bug tracking system to help us keep track
-of the bugs and their resolution. Bug reports can be submitted via
-the web:
-
-  https://github.com/bioperl/bioperl-live/issues
-
-=head1 AUTHOR - Mark A. Jensen
-
-Email maj -at- fortinbras -dot- us
-
-Describe contact details here
-
-=head1 CONTRIBUTORS
-
-Dan Kortschak ( dan -dot- kortschak -at- adelaide -dot- edu -dot- au )
-
-=head1 APPENDIX
-
-The rest of the documentation details each of the object methods.
-Internal methods are usually preceded with a _
-
-=cut
-
-# Let the code begin...
-
-package Bio::Tools::Run::WrapperBase; # need these methods in WrapperBase/maj
-use strict;
-use warnings;
-no warnings qw(redefine);
-
-use Bio::Root::Root;
-use File::Spec;
-use IPC::Run;
-use base qw(Bio::Root::Root Bio::ParameterBaseI);
-
-our $AUTOLOAD;
-
-=head2 new()
-
- Title   : new
- Usage   : 
- Function: constructor for WrapperBase::CommandExts ; 
-           correctly binds configuration variables
-           to the WrapperBase object
- Returns : Bio::Tools::Run::WrapperBase object with command extensions
- Args    : 
- Note    : this method subsumes the old _register_program_commands and
-           _set_program_options, leaving out the assembler-specific
-           parms ($qual_param and out_type())
-
-=cut
-
-sub new {
-    my ($class, @args) = @_;
-    my $self = bless ({}, $class);
-    # pull in *copies* of the Config variables from the caller namespace:
-    my ($pkg, @goob) = caller();
-    my ($commands,
-	$prefixes,
-	$params,
-	$switches,
-	$translation,
-	$use_dash,
-	$join,
-	$name,
-	$dir,
-	$composite_commands,
-	$files);
-    for (qw( @program_commands 
-             %command_prefixes
-             @program_params
-             @program_switches 
-             %param_translation
-             $use_dash
-             $join
-             $program_name
-             $program_dir
-             %composite_commands
-             %command_files ) ) {
-	my ($sigil, $var) = m/(.)(.*)/;
-	my $qualvar = "${sigil}${pkg}::${var}";
-	for ($sigil) {
-	    /\@/ && do { $qualvar = "\[$qualvar\]" };
-	    /\%/ && do { $qualvar = "\{$qualvar\}" };
-	}
-	my $locvar = "\$${var}";
-	$locvar =~ s/program_|command_|param_//g;
-	eval "$locvar = $qualvar";
-    }
-    # set up the info registry hash
-    my %registry;
-    if ($composite_commands) {
-	$self->_register_composite_commands($composite_commands,
-					    $params,
-					    $switches,
-					    $prefixes);
-    }
-    @registry{qw( _commands _prefixes _files 
-                  _params _switches _translation
-                  _composite_commands )} =
-	($commands, $prefixes, $files,
-	 $params, $switches, $translation, 
-	 $composite_commands);
-    $self->{_options} = \%registry;
-    if (not defined $use_dash) {
-	$self->{'_options'}->{'_dash'}      = 1;
-    } else {
-	$self->{'_options'}->{'_dash'}      = $use_dash;
-    }
-    if (not defined $join) {
-	$self->{'_options'}->{'_join'}      = ' ';
-    } else {
-	$self->{'_options'}->{'_join'}      = $join;
-    }
-    if ($name =~ /^\*/) {
-	$self->is_pseudo(1);
-	$name =~ s/^\*//;
-    }
-    $self->program_name($name) if not defined $self->program_name();
-    $self->program_dir($dir) if not defined $self->program_dir();
-    $self->set_parameters(@args);
-    $self->parameters_changed(1); # set on instantiation, per Bio::ParameterBaseI
-    return $self;
-}
-
-=head2 program_name
-
- Title   : program_name
- Usage   : $factory->program_name($name)
- Function: get/set the executable name
- Returns:  string
- Args    : string
-
-=cut
-
-sub program_name {
-    my ($self, $val) = @_;
-    $self->{'_program_name'} = $val if $val;
-    return $self->{'_program_name'};
-}
-
-=head2 program_dir
-
- Title   : program_dir
- Usage   : $factory->program_dir($dir)
- Function: get/set the program dir
- Returns:  string
- Args    : string
-
-=cut
-
-sub program_dir {
-    my ($self, $val) = @_;
-    $self->{'_program_dir'} = $val if $val;
-    return $self->{'_program_dir'};
-}
-
-=head2 _register_program_commands()
-
- Title   : _register_program_commands
- Usage   : $factory->_register_program_commands( \@commands, \%prefixes )
- Function: Register the commands a program accepts (for programs that act
-           as frontends for a set of commands, each command having its own
-           set of params/switches)
- Returns : true on success
- Args    : arrayref to a list of commands (scalar strings),
-           hashref to a translation table of the form
-           { $prefix1 => $command1, ... } [optional]
- Note    : To implement a program with this kind of calling structure, 
-           include a parameter called 'command' in the 
-           @program_params global
- Note    : The translation table is used to associate parameters and 
-           switches specified in _set_program_options with the correct
-           program command. In the globals @program_params and
-           @program_switches, specify elements as 'prefix1|param' and 
-           'prefix1|switch', etc.
-
-=cut
-
-=head2 _set_program_options
-
- Title   : _set_program_options
- Usage   : $factory->_set_program_options( \@ args );
- Function: Register the parameters and flags that an assembler takes.
- Returns : 1 for success
- Args    : - arguments passed by the user
-           - parameters that the program accepts, optional (default: none)
-           - switches that the program accepts, optional (default: none)
-           - parameter translation, optional (default: no translation occurs)
-           - dash option for the program parameters, [1|single|double|mixed],
-             optional (default: yes, use single dashes only)
-           - join, optional (default: ' ')
-
-=cut
-
-=head2 _translate_params
-
- Title   : _translate_params
- Usage   : @options = $assembler->_translate_params( );
- Function: Translate the Bioperl arguments into the arguments to pass to the
-           program on the command line
- Returns : Arrayref of arguments
- Args    : none
-
-=cut
-
-sub _translate_params {
-  my ($self)   = @_;
-  # Get option string
-  my ($params, $switches, $join, $dash, $translat) =
-      @{$self->{_options}}{qw(_params _switches _join _dash _translation)};
-
-  # access the multiple dash choices of _setparams...
-  my @dash_args;
-  $dash ||= 1; # default as advertised
-  for ($dash) {
-      $_ eq '1' && do {
-	  @dash_args = ( -dash => 1 );
-	  last;
-      };
-      /^s/ && do { #single dash only
-	  @dash_args = ( -dash => 1);
-	  last;
-      };
-      /^d/ && do { # double dash only
-	  @dash_args = ( -double_dash => 1);
-	  last;
-      };
-      /^m/ && do { # mixed dash: one-letter opts get -,
-                  # long opts get --
-	  @dash_args = ( -mixed_dash => 1);
-	  last;
-      };
-      do { 
-	  $self->warn( "Dash spec '$dash' not recognized; using 'single'" );
-	  @dash_args = ( -dash => 1 );
-      };
-  }
-  my $options  = $self->_setparams(
-    -params    => $params,
-    -switches  => $switches,
-    -join      => $join,
-    @dash_args
-  );
-
-  # Translate options
-  my @options  = split(/(\s|$join)/, $options);
-  for (my $i = 0; $i < scalar @options; $i++) {
-    my ($prefix, $name) = ( $options[$i] =~ m/^(-{0,2})(.+)$/ );
-    if (defined $name) {
-	if ($name =~ /command/i) {
-	    $name = $options[$i+2]; # get the command
-	    splice @options, $i, 4;
-	    $i--;
-	    # don't add the command if this is a pseudo-program
-	    unshift @options, $name unless ($self->is_pseudo); # put command first
-	}
-	elsif (defined $$translat{$name}) {
-	    $options[$i] = $prefix.$$translat{$name};
-	}
-    } 
-    else {
-	splice @options, $i, 1;
-	$i--;
-    }
-  }
-  $options = join('', @options);
-
-  # this is a kludge for mixed options: the reason mixed doesn't 
-  # work right on the pass through _setparams is that the 
-  # *aliases* and not the actual params are passed to it. 
-  # here we just rejigger the dashes
-  if ($dash =~ /^m/) {
-      $options =~ s/--([a-z0-9](?:\s|$))/-$1/gi;
-  }
-
-  # Now arrayify the options
-  @options = split(' ', $options);
-
-  return \@options;
-}
-
-=head2 executable()
-
- Title   : executable
- Usage   : 
- Function: find the full path to the main executable,
-           or to the command executable for pseudo-programs
- Returns : full path, if found
- Args    : [optional] explicit path to the executable
-           (will set the appropriate command exec if
-            applicable)
-           [optional] boolean flag whether or not to warn when exe no found
- Note    : overrides WrapperBase.pm
-            
-=cut
-
-sub executable {
-    my $self = shift;
-    my ($exe, $warn) = @_;
-    if ($self->is_pseudo) {
-	return $self->{_pathtoexe} = $self->executables($self->command,$exe);
-    }
-
-    # otherwise
-    # setter
-    if (defined $exe) {
-	$self->throw("binary '$exe' does not exist") unless -e $exe;
-	$self->throw("'$exe' is not executable") unless -x $exe;
-	return $self->{_pathtoexe} = $exe;
-    }
-
-    # getter
-    return $self->{_pathtoexe} if defined $self->{_pathstoexe};
-
-    # finder
-    return $self->{_pathtoexe} = $self->_find_executable($exe, $warn);
-}
-
-=head2 executables()
-
- Title   : executables
- Usage   : 
- Function: find the full path to a command's executable
- Returns : full path (scalar string)
- Args    : command (scalar string), 
-           [optional] explicit path to this command exe
-           [optional] boolean flag whether or not to warn when exe no found
-
-=cut
-
-sub executables {
-    my $self = shift;
-    my ($cmd, $exe, $warn) = @_;
-    # for now, barf if this is not a pseudo program
-    $self->throw("This wrapper represents a single program with commands, not multiple programs; can't use executables()") unless $self->is_pseudo;
-    $self->throw("Command name required at arg 1") unless defined $cmd;
-    $self->throw("The desired executable '$cmd' is not registered as a command") unless grep /^$cmd$/, @{$self->{_options}->{_commands}};
-
-    # setter
-    if (defined $exe) {
-	$self->throw("binary '$exe' does not exist") unless -e $exe;
-	$self->throw("'$exe' is not executable") unless -x $exe;
-	$self->{_pathstoexe} = {} unless defined $self->{_pathstoexe};
-	return $self->{_pathstoexe}->{$cmd} = $exe;
-    }
-
-    # getter
-    return $self->{_pathstoexe}->{$cmd} if defined $self->{_pathstoexe}->{$cmd};
-    
-    $exe ||= $cmd;
-    # finder
-    return $self->{_pathstoexe}->{$cmd} = $self->_find_executable($exe, $warn);
-}
-
-=head2 _find_executable()
-
- Title   : _find_executable
- Usage   : my $exe_path = $fac->_find_executable($exe, $warn);
- Function: find the full path to a named executable,
- Returns : full path, if found
- Args    : name of executable to find
-           [optional] boolean flag whether or not to warn when exe no found
- Note    : differs from executable and executables in not
-           setting any object attributes
-
-=cut
-
-sub _find_executable {
-    my $self = shift;
-    my ($exe, $warn) = @_;
-
-    if ($self->is_pseudo && !$exe) {
-	if (!$self->command) {
-	    # this throw probably appropriate
-	    # the rest are now warns if $warn.../maj
-	    $self->throw( 
-		"The ".__PACKAGE__." wrapper represents several different programs;".
-		"arg1 to _find_executable must be specified explicitly,".
-		"or the command() attribute set");
-	}
-	else {
-	    $exe = $self->command;
-	}
-    }
-    $exe ||= $self->program_path;
-
-    my $path;
-    if ($self->program_dir) {
-	$path = File::Spec->catfile($self->program_dir, $exe);
-    } else {
-	$path = $exe;
-	$self->warn('Program directory not specified; use program_dir($path).') if $warn;
-    }
-
-    # use provided info - we are allowed to follow symlinks, but refuse directories
-    map { return $path.$_ if ( -x $path.$_ && !(-d $path.$_) ) } ('', '.exe') if defined $path;
-
-    # couldn't get path to executable from provided info, so use system path
-    $path = $path ? " in $path" : undef;
-    $self->warn("Executable $exe not found$path, trying system path...") if $warn;
-    if ($path = $self->io->exists_exe($exe)) {
-	return $path;
-    } else {
-	$self->warn("Cannot find executable for program '".($self->is_pseudo ? $self->command : $self->program_name)."'") if $warn;
-	return;
-    }
-}
-
-=head2 _register_composite_commands()
-
- Title   : _register_composite_commands
- Usage   : 
- Function: adds subcomand params and switches for composite commands
- Returns : true on success
- Args    : \%composite_commands,
-           \@program_params,
-           \@program_switches
-
-=cut
-
-sub _register_composite_commands {
-    my $self = shift;
-    my ($composite_commands, $program_params, 
-	$program_switches, $command_prefixes) = @_;
-    my @sub_params;
-    my @sub_switches;
-    foreach my $cmd (keys %$composite_commands) {
-	my $pfx = $command_prefixes->{$cmd} || $cmd;
-	foreach my $subcmd ( @{$$composite_commands{$cmd}} ) {
-	    my $spfx = $command_prefixes->{$subcmd} || $subcmd;
-	    my @sub_program_params = grep /^$spfx\|/, @$program_params;
-	    my @sub_program_switches = grep /^$spfx\|/, @$program_switches;
-	    for (@sub_program_params) {
-		m/^$spfx\|(.*)/;
-		push @sub_params, "$pfx\|${spfx}_".$1;
-	    }
-	    for (@sub_program_switches) {
-		m/^$spfx\|(.*)/;
-		push @sub_switches, "$pfx\|${spfx}_".$1;
-	    }
-	}
-    }
-    push @$program_params, @sub_params;
-    push @$program_switches, @sub_switches;
-    # translations for subcmd params/switches not necessary
-    return 1;
-}
-
-=head2 _create_factory_set()
-
- Title   : _create_factory_set
- Usage   : @facs = $self->_create_factory_set
- Function: instantiate a set of individual command factories for
-           a given composite command
-           Factories will have the correct parameter fields set for
-           their own subcommand
- Returns : hash of factories: ( $subcmd_prefix => $subcmd_factory, ... )
- Args    : none
-
-=cut
-
-sub _create_factory_set {
-    my $self = shift;
-    $self->throw('command not set') unless $self->command;
-    my $cmd = $self->command;
-    $self->throw('_create_factory_set only works on composite commands') 
-	unless grep /^$cmd$/, keys %{$self->{_options}->{_composite_commands}};
-    my %ret;
-    my $class = ref $self;
-    my $subargs_hash = $self->_collate_subcmd_args($cmd);
-    for (keys %$subargs_hash) {
-	$ret{$_} = $class->new( -command => $_,  @{$$subargs_hash{$_}} );
-    }
-    return %ret;
-}
-
-=head2 _collate_subcmd_args()
-
- Title   : _collate_subcmd_args
- Usage   : $args_hash = $self->_collate_subcmd_args
- Function: collate parameters and switches into command-specific
-           arg lists for passing to new()
- Returns : hash of named argument lists
- Args    : [optional] composite cmd prefix (scalar string) 
-           [default is 'run']
-
-=cut
-
-sub _collate_subcmd_args {
-    my $self = shift;
-    my $cmd = shift;
-    my %ret;
-    # default command is 'run'
-    $cmd ||= 'run';
-    return unless $self->{'_options'}->{'_composite_commands'};
-    return unless $self->{'_options'}->{'_composite_commands'}->{$cmd};
-    my @subcmds = @{$self->{'_options'}->{'_composite_commands'}->{$cmd}};
-
-    my $cur_options = $self->{'_options'};
-    # collate
-    foreach my $subcmd (@subcmds) {
-	# find the composite cmd form of the argument in 
-	# the current params and switches
-	# e.g., map_max_mismatches
-	my $pfx = $self->{_options}->{_prefixes}->{$subcmd} || $subcmd;
-	my @params = grep /^${pfx}_/, @{$$cur_options{'_params'}};
-	my @switches = grep /^${pfx}_/, @{$$cur_options{'_switches'}};
-	$ret{$subcmd} = [];
-	# create an argument list suitable for passing to new() of
-	# the subcommand factory...
-	foreach my $opt (@params, @switches) {
-	    my $subopt = $opt; 
-	    $subopt =~ s/^${pfx}_//; 
-	    push(@{$ret{$subcmd}}, '-'.$subopt => $self->$opt) if defined $self->$opt;
-	}
-    }
-    return \%ret;
-}
-
-=head2 _run
-
- Title   : _run
- Usage   : $fac->_run( @file_args )
- Function: Run a command as specified during object contruction
- Returns : true on success
- Args    : a specification of the files to operate on according
-           to the filespec
-
-=cut
-
-sub _run {
-    my ($self, @args) = @_;
-    # _translate_params will provide an array of command/parameters/switches
-    # -- these are set at object construction
-    # to set up the run, need to add the files to the call
-    # -- provide these as arguments to this function
-    my $cmd = $self->command if $self->can('command');
-    my $opts = $self->{_options};
-    my %args; 
-    $self->throw("No command specified for the object") unless $cmd;
-    # setup files necessary for this command
-    my $filespec = $opts->{'_files'}->{$cmd};
-    my @switches;
-    my ($in, $out, $err);
-    # some applications rely completely on switches
-    if (defined $filespec && @$filespec) {
-	# parse args based on filespec
-	# require named args
-	$self->throw("Named args are required") unless !(@args % 2);
-	s/^-// for @args;
-	%args = @args;
-	# validate
-	my @req = map { 
-	    my $s = $_;
-	    $s =~ s/^-.*\|//;
-	    $s =~ s/^[012]?[<>]//;
-	    $s =~ s/[^a-zA-Z0-9_]//g; 
-	    $s
-	} grep !/[#]/, @$filespec;
-	!defined($args{$_}) && $self->throw("Required filearg '$_' not specified") for @req;
-	# set up redirects and file switches
-	for (@$filespec) {
-	    m/^1?>#?(.*)/ && do {
-		defined($args{$1}) && ( open $out, '>', $args{$1} or $self->throw("Could not write file '$args{$1}': $!") );
-		next;
-	    };
-	    m/^2>#?(.*)/ && do {
-		defined($args{$1}) && ( open $err, '>', $args{$1} or $self->throw("Could not write file '$args{$1}': $!") );
-		next;
-	    };
-	    m/^<#?(.*)/ && do {
-		defined($args{$1}) && ( open $in, '<', $args{$1} or $self->throw("Could not read file '$args{$1}': $!") );
-		next;
-	    };
-	    if (m/^-(.*)\|/) {
-		push @switches, $self->_dash_switch($1);
-	    } else {
-		push @switches, undef;
-            }
-	}
-    }
-    my $dum;
-    $in || ($in = \$dum);
-    $out || ($out = \$self->{'stdout'});
-    $err || ($err = \$self->{'stderr'});
-    
-    # Get program executable
-    my $exe = $self->executable;
-    $self->throw("Can't find executable for '".($self->is_pseudo ? $self->command : $self->program_name)."'; can't continue") unless $exe;
-
-    # Get command-line options
-    my $options = $self->_translate_params();
-    # Get file specs sans redirects in correct order
-    my @specs = map { 
-	my $s = $_; 
-	$s =~ s/^-.*\|//;
-	$s =~ s/[^a-zA-Z0-9_]//g; 
-	$s
-    } grep !/[<>]/, @$filespec;
-    my @files = @args{@specs};
-    # expand arrayrefs
-    my $l = $#files;
-    
-    # Note: below code block may be brittle, see link on this:
-    # http://lists.open-bio.org/pipermail/bioperl-l/2010-June/033439.html
-    
-    for (0..$l) {
-	if (ref($files[$_]) eq 'ARRAY') {
-	    splice(@switches, $_, 1, ($switches[$_]) x @{$files[$_]});
-	    splice(@files, $_, 1, @{$files[$_]});
-	}
-    }
-    
-    
-    @files = map {
-        my $s = shift @switches;
-        defined $_ ? ($s, $_): ()
-    } @files;
-    @files = map { defined $_ ? $_ : () } @files; # squish undefs
-    my @ipc_args = ( $exe, @$options, @files );
-    $self->{_last_execution} = join( $self->{'_options'}->{'_join'}, @ipc_args );
-    eval {
-	IPC::Run::run(\@ipc_args, $in, $out, $err) or
-	    die ("There was a problem running $exe : ".$$err);
-    };
-
-    if ($@) {
-	$self->throw("$exe call crashed: $@") unless $self->no_throw_on_crash;
-	return 0;
-    }
-
-     return 1;
-}
-
-
-
-=head2 no_throw_on_crash()
-
- Title   : no_throw_on_crash
- Usage   : 
- Function: prevent throw on execution error
- Returns : 
- Args    : [optional] boolean
-
-=cut
-
-sub no_throw_on_crash {
-    my $self = shift;
-    return $self->{'_no_throw'} = shift if @_;
-    return $self->{'_no_throw'};
-}
-
-=head2 last_execution()
-
- Title   : last_execution
- Usage   : 
- Function: return the last executed command with options
- Returns : string of command line sent to IPC::Run
- Args    : 
-
-=cut
-
-sub last_execution {
-    my $self = shift;
-    return $self->{'_last_execution'};
-}
-
-=head2 _dash_switch()
-
- Title   : _dash_switch
- Usage   : $version = $fac->_dash_switch( $switch )
- Function: Returns an appropriately dashed switch for the executable
- Args    : A string containing a switch without dashes
- Returns : string containing an appropriately dashed switch for the current executable
-
-=cut
-
-sub _dash_switch {
-	my ($self, $switch) = @_;
-
-	my $dash = $self->{'_options'}->{'_dash'};
-	for ($dash) {
-		$_ eq '1' && do {
-			$switch = '-'.$switch;
-			last;
-		};
-		/^s/ && do { #single dash only
-			$switch = '-'.$switch;
-			last;
-		};
-		/^d/ && do { # double dash only
-			$switch = '--'.$switch;
-			last;
-		};
-		/^m/ && do { # mixed dash: one-letter opts get -,
-			$switch = '-'.$switch;
-			$switch =~ s/^(-[a-z0-9](?:\w+))$/-$1/i;
-			last;
-		};
-		do { 
-			$self->warn( "Dash spec '$dash' not recognized; using 'single'" );
-			$switch = '-'.$switch;
-		};
-	}
-
-	return $switch;
-}
-
-=head2 stdout()
-
- Title   : stdout
- Usage   : $fac->stdout()
- Function: store the output from STDOUT for the run, 
-           if no file specified in _run arguments
- Example : 
- Returns : scalar string
- Args    : on set, new value (a scalar or undef, optional)
-
-=cut
-
-sub stdout {
-    my $self = shift;
-    return $self->{'stdout'} = shift if @_;
-    return $self->{'stdout'};
-}
-
-=head2 stderr()
-
- Title   : stderr
- Usage   : $fac->stderr()
- Function: store the output from STDERR for the run, 
-           if no file is specified in _run arguments
- Example : 
- Returns : scalar string
- Args    : on set, new value (a scalar or undef, optional)
-
-=cut
-
-sub stderr {
-    my $self = shift;
-    return $self->{'stderr'} = shift if @_;
-    return $self->{'stderr'};
-}
-
-=head2 is_pseudo()
-
- Title   : is_pseudo
- Usage   : $obj->is_pseudo($newval)
- Function: returns true if this factory represents
-           a pseudo-program
- Example : 
- Returns : value of is_pseudo (boolean)
- Args    : on set, new value (a scalar or undef, optional)
-
-=cut
-
-sub is_pseudo {
-    my $self = shift;
-    
-    return $self->{'is_pseudo'} = shift if @_;
-    return $self->{'is_pseudo'};
-}
-
-=head2 AUTOLOAD
-
-AUTOLOAD permits 
-
- $class->new_yourcommand(@args);
-
-as an alias for
-
- $class->new( -command => 'yourcommand', @args );
-
-=cut
-
-sub AUTOLOAD {
-    my $class = shift;
-    my $tok = $AUTOLOAD;
-    my @args = @_;
-    $tok =~ s/.*:://;
-    unless ($tok =~ /^new_/) {
-	$class->throw("Can't locate object method '$tok' via package '".ref($class)?ref($class):$class); 
-    }
-    my ($cmd) = $tok =~ m/new_(.*)/;
-    return $class->new( -command => $cmd, @args );
-}
-
-=head1 Bio:ParameterBaseI compliance
-
-=head2 set_parameters()
-
- Title   : set_parameters
- Usage   : $pobj->set_parameters(%params);
- Function: sets the parameters listed in the hash or array
- Returns : true on success
- Args    : [optional] hash or array of parameter/values.  
-
-=cut
-
-sub set_parameters {
-    my ($self, @args) = @_;
-
-    # currently stored stuff
-    my $opts = $self->{'_options'};
-    my $params = $opts->{'_params'};
-    my $switches = $opts->{'_switches'};
-    my $translation = $opts->{'_translation'};
-    my $use_dash = $opts->{'_dash'};
-    my $join = $opts->{'_join'};
-    unless (($self->can('command') && $self->command) 
-	    || (grep /command/, @args)) {
-	push @args, '-command', 'run';
-    }
-    my %args = @args;
-    my $cmd = $args{'-command'} || $args{'command'} || ($self->can('command') && $self->command);
-    if ($cmd) {
-	my (@p, at s, %x);
-	$self->warn('Command present, but no commands registered') unless $self->{'_options'}->{'_commands'};
-	$self->throw("Command '$cmd' not registered") unless grep /^$cmd$/, @{$self->{'_options'}->{'_commands'}};
-	$cmd = $self->{_options}->{_prefixes}->{$cmd} || $cmd;
-	
-	@p = (grep(!/^.*?\|/, @$params), grep(/^${cmd}\|/, @$params));
-	@s = (grep(!/^.*?\|/, @$switches), grep(/^${cmd}\|/, @$switches));
-	s/.*?\|// for @p;
-	s/.*?\|// for @s;
-	@x{@p, @s} = @{$translation}{
-	    grep( !/^.*?\|/, @$params, @$switches),
-	    grep(/^${cmd}\|/, @$params, @$switches) };
-	$opts->{_translation} = $translation = \%x;
-	$opts->{_params} = $params = \@p;
-	$opts->{_switches} = $switches = \@s;
-    }
-    $self->_set_from_args(
-	\@args,
-	-methods => [ @$params, @$switches, 'program_name', 'program_dir', 'out_type' ],
-	-create =>  1,
-	# when our parms are accessed, signal parameters are unchanged for
-	# future reads (until set_parameters is called)
-	-code => 
-	' my $self = shift; 
-          $self->parameters_changed(0);
-          return $self->{\'_\'.$method} = shift if @_;
-          return $self->{\'_\'.$method};'
-	);
-    # the question is, are previously-set parameters left alone when
-    # not specified in @args?
-    $self->parameters_changed(1);
-    return 1;
-}
-
-=head2 reset_parameters()
-
- Title   : reset_parameters
- Usage   : resets values
- Function: resets parameters to either undef or value in passed hash
- Returns : none
- Args    : [optional] hash of parameter-value pairs
-
-=cut
-
-sub reset_parameters {
-    my ($self, @args) = @_;
-
-    my @reset_args;
-    # currently stored stuff
-    my $opts = $self->{'_options'};
-    my $params = $opts->{'_params'};
-    my $switches = $opts->{'_switches'};
-    my $translation = $opts->{'_translation'};
-    my $qual_param = $opts->{'_qual_param'};
-    my $use_dash = $opts->{'_dash'};
-    my $join = $opts->{'_join'};
-
-    # handle command name
-    my %args = @args;
-    my $cmd = $args{'-command'} || $args{'command'} || $self->command;
-    $args{'command'} = $cmd;
-    delete $args{'-command'};
-    @args = %args;
-    # don't like this, b/c _set_program_args will create a bunch of
-    # accessors with undef values, but oh well for now /maj
-
-    for my $p (@$params) {
-	push(@reset_args, $p => undef) unless grep /^[-]?$p$/, @args;
-    }
-    for my $s (@$switches) {
-	push(@reset_args, $s => undef) unless grep /^[-]?$s$/, @args;
-    }
-    push @args, @reset_args;
-    $self->set_parameters(@args);
-    $self->parameters_changed(1);
-}
-
-=head2 parameters_changed()
-
- Title   : parameters_changed
- Usage   : if ($pobj->parameters_changed) {...}
- Function: Returns boolean true (1) if parameters have changed
- Returns : Boolean (0 or 1)
- Args    : [optional] Boolean
-
-=cut
-
-sub parameters_changed {
-    my $self = shift;
-    return $self->{'_parameters_changed'} = shift if @_;
-    return $self->{'_parameters_changed'};
-}
-
-=head2 available_parameters()
-
- Title   : available_parameters
- Usage   : @params = $pobj->available_parameters()
- Function: Returns a list of the available parameters
- Returns : Array of parameters
- Args    : 'params' for settable program parameters
-           'switches' for boolean program switches
-           default: all 
-
-=cut
-
-sub available_parameters {
-    my $self = shift;
-    my $subset = shift;
-    my $opts = $self->{'_options'};
-    my @ret;
-    for ($subset) {
-	(!defined || /^a/) && do {
-	    @ret = (@{$opts->{'_params'}}, @{$opts->{'_switches'}});
-	    last;
-	};
-	m/^p/i && do {
-	    @ret = @{$opts->{'_params'}};
-	    last;
-	};
-	m/^s/i && do {
-	    @ret = @{$opts->{'_switches'}};
-	    last;
-	};
-	m/^c/i && do {
-	    @ret = @{$opts->{'_commands'}};
-	    last;
-	};
-	m/^f/i && do { # get file spec
-	    return @{$opts->{'_files'}->{$self->command}};
-	};
-	do { #fail
-	    $self->throw("available_parameters: unrecognized subset");
-	};
-    }
-    return @ret;
-}
-
-sub available_commands { shift->available_parameters('commands') }
-sub filespec { shift->available_parameters('filespec') }
-
-=head2 get_parameters()
-
- Title   : get_parameters
- Usage   : %params = $pobj->get_parameters;
- Function: Returns list of key-value pairs of parameter => value
- Returns : List of key-value pairs
- Args    : [optional] A string is allowed if subsets are wanted or (if a
-           parameter subset is default) 'all' to return all parameters
-
-=cut
-
-sub get_parameters {
-    my $self = shift;
-    my $subset = shift;
-    $subset ||= 'all';
-    my @ret;
-    my $opts = $self->{'_options'};
-    for ($subset) {
-	m/^p/i && do { #params only
-	    for (@{$opts->{'_params'}}) {
-		push(@ret, $_, $self->$_) if $self->can($_) && defined $self->$_;
-	    }
-	    last;
-	};
-	m/^s/i && do { #switches only
-	    for (@{$opts->{'_switches'}}) {
-		push(@ret, $_, $self->$_) if $self->can($_) && defined $self->$_;
-	    }
-	    last;
-	};
-	m/^a/i && do { # all
-	    for ((@{$opts->{'_params'}},@{$opts->{'_switches'}})) {
-		push(@ret, $_, $self->$_) if $self->can($_) && defined $self->$_;
-	    }
-	    last;
-	};
-	do {
-	    $self->throw("get_parameters: unrecognized subset");
-	};
-    }
-    return @ret;
-}
-
-1;
diff --git a/Bio/Tools/Run/hmmer3.pm b/Bio/Tools/Run/hmmer3.pm
deleted file mode 100644
index e69de29..0000000
diff --git a/Bio/Tools/SiRNA/Ruleset/tuschl.pm b/Bio/Tools/SiRNA/Ruleset/tuschl.pm
index 825d42e..a77f8e5 100644
--- a/Bio/Tools/SiRNA/Ruleset/tuschl.pm
+++ b/Bio/Tools/SiRNA/Ruleset/tuschl.pm
@@ -178,8 +178,9 @@ sub _get_oligos {
 	    my $target = $2;
 
 	    # check for too many Gs (or Cs on the other strand)
-	    next if ( $target =~ /G{ $self->gstring,}/io );
-	    next if ( $target =~ /C{ $self->gstring,}/io );
+	    my $max_g = $self->gstring;
+	    next if ( $target =~ /G{$max_g,}/io );
+	    next if ( $target =~ /C{$max_g,}/io );
 # 	skip Ns (for filtering)
 	    next if ( $target =~ /N/i);
 
diff --git a/Bio/Tree/Statistics.pm b/Bio/Tree/Statistics.pm
index eb77a69..784b782 100644
--- a/Bio/Tree/Statistics.pm
+++ b/Bio/Tree/Statistics.pm
@@ -93,10 +93,12 @@ use base qw(Bio::Root::Root);
 =head2 assess_bootstrap
 
  Title   : assess_bootstrap
- Usage   : my $tree_with_bs = $stats->assess_bootstrap(\@bs_trees);
- Function: Calculates the bootstrap for internal nodes based on
+ Usage   : my $tree_with_bs = $stats->assess_bootstrap(\@bs_trees,$guide_tree);
+ Function: Calculates the bootstrap for internal nodes based on the percentage
+           of times \@bs_trees agree with each internal node
  Returns : L<Bio::Tree::TreeI>
  Args    : Arrayref of L<Bio::Tree::TreeI>s
+           Guide tree, L<Bio::Tree::TreeI>s
 
 =cut
 
diff --git a/Bio/TreeIO/nexml.pm b/Bio/TreeIO/nexml.pm
index 0ff4982..67e7f0c 100644
--- a/Bio/TreeIO/nexml.pm
+++ b/Bio/TreeIO/nexml.pm
@@ -149,14 +149,30 @@ sub _parse {
     $self->{'_treeiter'} = 0;
     my $fac = Bio::Nexml::Factory->new();
     
-    
+    # Only pass filename if filehandle is not available,
+    # or "Bio::Phylo" will create a new filehandle that ends
+    # out of scope and can't be closed directly, leaving 2 open
+    # filehandles for the same file (so file can't be deleted)
+    my $file_arg;
+    my $file_value;
+    if (     exists $self->{'_filehandle'}
+        and defined $self->{'_filehandle'}
+        ) {
+        $file_arg   = '-handle';
+        $file_value = $self->{'_filehandle'};
+    }
+    else {
+        $file_arg   = '-file';
+        $file_value = $self->{'_file'};
+    }
+
     $self->doc(parse(
- 	'-file'       => $self->{'_file'},
- 	'-format'     => 'nexml',
- 	'-as_project' => '1'
- 	));
- 	
- 	$self->{'_trees'} = $fac->create_bperl_tree($self);
+                     $file_arg     => $file_value,
+                     '-format'     => 'nexml',
+                     '-as_project' => '1'
+                     )
+    );
+    $self->{'_trees'} = $fac->create_bperl_tree($self);
 }
 
 =head2 write_tree
diff --git a/BioPerl.pm b/BioPerl.pm
index 411ac45..5162132 100644
--- a/BioPerl.pm
+++ b/BioPerl.pm
@@ -20,54 +20,9 @@ BioPerl - Perl Modules for Biology
 
 =head1 SYNOPSIS
 
-If you're new to BioPerl, you should start reading the BioPerl tutorial, an
-overview of the BioPerl toolkit:
+If you're new to BioPerl, you should start reading the BioPerl HOWTO's:
 
-L<http://www.bioperl.org/wiki/BioPerl_Tutorial>
-
-=head2 Current Overview
-
-Core Bioperl documentation has been split up into the following sections:
-
-=over 3
-
-=item * bioperl
-
-BioPerl overview (this document)
-
-=back
-
-We may add more documents in the future, including:
-
-=over 3
-
-=item * biodatabases
-
-How to use databases with BioPerl
-
-=item * biodesign
-
-A guide for authoring a BioPerl module
-
-=item * bioscripts
-
-Description and overview of BioPerl scripts (in the I</scripts> directory)
-
-=back
-
-=head2 Tutorials
-
-=over 3
-
-=item * BioPerl tutorial for beginners
-
-L<http://www.bioperl.org/wiki/BioPerl_Tutorial>
-
-=item * Institut Pasteur BioPerl tutorial (note: for older versions of BioPerl)
-
-L<http://www.pasteur.fr/recherche/unites/sis/formation/bioperl>
-
-=back
+L<http://bioperl.org/howtos/index.html>
 
 =head2 References for Individual Modules
 
@@ -105,23 +60,6 @@ and archives of standalone bio-related Perl tools that are not affiliated or
 related to the core BioPerl effort. Check the site for useful code ideas and
 contribute your own if possible.
 
-=head1 DOCUMENTATION
-
-The Bio::Perl module (not this document) is designed to flatten the learning
-curve for newcomers to Perl/Bioperl. This is a good place to start if you want
-some simple functionality. We have a cookbook tutorial on-line:
-
-L<http://bioperl.org/wiki/BioPerl_Tutorial>
-
-which has embedded documentation. Start there if learning-by-example suits you
-most, or examine the BioPerl online course at:
-
-L<http://www.pasteur.fr/recherche/unites/sis/formation/bioperl>
-
-Make sure to check the documentation in the modules as well - there are over 900
-modules in BioPerl, and counting, and there's detail in the modules'
-documentation that will not appear in the general documentation.
-
 =head1 INSTALLATION
 
 The BioPerl modules are distributed as a tar file that expands into a standard
@@ -130,17 +68,8 @@ distribution INSTALL file. Installing on windows using ActiveState Perl is
 covered in the INSTALL.WIN file.  We highly suggest reading the installation
 instructions on the BioPerl website:
 
-L<http://www.bioperl.org/wiki/Installing_BioPerl>
+L<http://bioperl.org/INSTALL.html>
 
-=for TODO: Do we want to add biodesign and biodatabases back in?
-The BioPerl modules can interact with local flat file and relational databases.
-To learn how to set this up, look at the biodatabases.pod documentation
-('perldoc biodatabases.pod' should work once BioPerl has been installed).
-
-Some BioPerl-related distributions such as Bio::Graphics, BioPerl-db,
-BioPerl-run, BioPerl-gui, corba-server, BioPerl-ext, BioPerl-pipeline,
-BioPerl-microarray and corba-client packages are installed separately from
-BioPerl. Please refer to their respective documentation for more information.
 Note that only the following are supported at this time with the current API:
 
 =over 3
@@ -159,15 +88,10 @@ Note that only the following are supported at this time with the current API:
 
 =head1 GETTING STARTED
 
-A good place to start is by reading the tutorial : L<http://bioperl.org/wiki/BioPerl_Tutorial>
-
 The distribution I<scripts/> directory has working scripts for use with BioPerl,
 check the self-described I<examples/> directory as well. You are more than
 welcome to contribute your script!
 
-=for TODO Should we add bioscripts back to the distributions?
-A list and brief description of all these scripts is found in bioscripts.pod. 
-
 If you have installed BioPerl in the standard way, as detailed in the INSTALL in
 the distribution, these scripts should work by just running them. If you have
 not installed it in a standard way you will have to change the 'use lib' to
@@ -208,7 +132,7 @@ sure is a problem, post a bug report using our Bugzilla tracking system:
 
 L<https://github.com/bioperl/bioperl-live/issues>
 
-Please read the main bug tracking (L<http://www.bioperl.org/wiki/Bugs>) for an
+Please read the main bug tracking (L<http://www.bioperl.org/articles/Bugs.html>) for an
 overview of what we expect in a bug report. Specifically, having a code and
 data example where appropriate helps tremendously.  We gladly accept all patches
 after a quick code review.
@@ -226,11 +150,6 @@ If you can make a useful object we will happily include it into the core.
 Probably you will want to read a lot of the documentation in L<Bio::Root::Root>
 and talk to people on the BioPerl mailing list, B<bioperl-l at bioperl.org>.
 
-=for TODO Add biodesign.pod back?
-biodesign.pod provides documentation on the conventions and ideas
-used in BioPerl, it's definitely worth a read if you would like to be a BioPerl
-developer.
-
 =head2 Writing documentation
 
 We appreciate good documentation. It's what tells the world what's in BioPerl,
@@ -242,7 +161,7 @@ workings of the package. Feel free to contribute.
 For a more detailed history of the BioPerl project, we recommend the History of
 BioPerl:
 
-L<http://www.bioperl.org/wiki/History_of_BioPerl>
+L<http://bioperl.org/articles/History_of_BioPerl.html>
 
 =head1 COPYRIGHT
 
diff --git a/Build.PL b/Build.PL
index 06b859a..8b5007d 100644
--- a/Build.PL
+++ b/Build.PL
@@ -21,11 +21,13 @@ use Bio::Root::Build;
 # See: https://rt.cpan.org/Ticket/Display.html?id=5943
 #      https://redmine.open-bio.org/issues/2975
 
-{ eval { require XML::SAX; 1; };
+{
+    eval { require XML::SAX; 1; };
 
-unless ($@) {
-    if (grep {$_->{Name} =~ 'XML::SAX::RTF'} @{XML::SAX->parsers()}) {
-        warn <<WARN;
+    unless ($@) {
+        if ( grep { $_->{Name} =~ 'XML::SAX::RTF' } @{ XML::SAX->parsers() } )
+        {
+            warn <<WARN;
 
 ############################# WARNING #############################
 
@@ -38,23 +40,21 @@ docs to remove references to XML::SAX::RTF.
 ############################# WARNING #############################
 
 WARN
-    sleep 2;
+            sleep 2;
+        }
     }
 }
 
-}
-
 my %recommends = (
+
     # AcePerl support is deprecated, per LDS - cjfields - 5-5-2011
 
     #'Ace'                       => [0,
     #    'Access of ACeDB database/Bio::DB::Ace,Bio::DB::GFF::Adaptor::ace'],
 
-    'Algorithm::Munkres'        => [0,
-        'Phylogenetic Networks/Bio::PhyloNetwork'],
+    'Algorithm::Munkres' => [ 0, 'Phylogenetic Networks/Bio::PhyloNetwork' ],
 
-    'Array::Compare'            => [0,
-        'Phylogenetic Networks/Bio::PhyloNetwork'],
+    'Array::Compare' => [ 0, 'Phylogenetic Networks/Bio::PhyloNetwork' ],
 
     # this won't actually install due to circular dep, but we have no way of
     # doing a post-install the [circular dependency!] specifies it is only
@@ -64,123 +64,143 @@ my %recommends = (
     #'Bio::ASN1::EntrezGene'     => [0,
     #    'Parsing entrezgene/Bio::SeqIO::entrezgene [circular dependency!]'],
 
-    'Bio::Phylo'                => [0,
-        'NeXML related modules/Bio::AlignIO::nexml,Bio::Nexml::Factory,'.
-        'Bio::SeqIO::nexml,Bio::TreeIO::nexml'],
-
-    'Clone'                     => [0,
-        'Cloning objects/Bio::Root::Root,Bio::Tools::Primer3'],
+    'Bio::Phylo' => [
+        0,
+        'NeXML related modules/Bio::AlignIO::nexml,Bio::Nexml::Factory,'
+            . 'Bio::SeqIO::nexml,Bio::TreeIO::nexml'
+    ],
 
-    'Convert::Binary::C'        => [0,
-        'Strider functionality/Bio::SeqIO::strider'],
+    'CGI' => [ 0, 'CGI-y things/Bio::DB::Query::HIVQuery' ],
+    
+    'Clone' => [ 0, 'Cloning objects/Bio::Root::Root,Bio::Tools::Primer3' ],
 
-    'DB_File'                   => [0,
-        'Database functionality/Bio::Assemby,Bio::DB'],
+    'Convert::Binary::C' =>
+        [ 0, 'Strider functionality/Bio::SeqIO::strider' ],
 
-    'Error'                     => [0,
-        'OO-based exception handling (very optional)/Bio::Root::Exception'],
+    'DB_File' => [ 0, 'Database functionality/Bio::Assemby,Bio::DB' ],
 
-    'GD'                        => [0,
-        'Alignment graphic output/Bio::Align::Graphics'],
+    'Error' => [
+        0, 'OO-based exception handling (very optional)/Bio::Root::Exception'
+    ],
 
-    'Graph'                     => [0.50,
-        'Phylogenetic Networks, ontology engine implementation, contig analysis'.
-        '/Bio::PhyloNetwork,Bio::Ontology::SimpleGOEngine::GraphAdaptor,'.
-        'Bio::Assembly::Tools::ContigSpectrum'],
+    'GD' => [ 0, 'Alignment graphic output/Bio::Align::Graphics' ],
 
-    'GraphViz'                  => [0,
-        'Phylogenetic Network Visualization/Bio::PhyloNetwork::GraphViz'],
+    'Graph' => [
+        0.50,
+        'Phylogenetic Networks, ontology engine implementation, contig analysis'
+            . '/Bio::PhyloNetwork,Bio::Ontology::SimpleGOEngine::GraphAdaptor,'
+            . 'Bio::Assembly::Tools::ContigSpectrum'
+    ],
 
-    'HTML::Entities'            => [0,
-        'Remote analysis POST submissions/Bio::SearchIO::blastxml'],
+    'GraphViz' => [
+        0, 'Phylogenetic Network Visualization/Bio::PhyloNetwork::GraphViz'
+    ],
 
-    'HTML::HeadParser'          => [3,
-        'Parsing <HEAD> section of HTML docs/Bio::Tools::Analysis::DNA::ESEfinder'],
+    'HTML::Entities' =>
+        [ 0, 'Remote analysis POST submissions/Bio::SearchIO::blastxml' ],
 
-    'HTML::TableExtract'        => [0,
-        'Parsing HTML tables/Bio::DB::SeqVersion::gi'],
+    'HTML::HeadParser' => [
+        3,
+        'Parsing <HEAD> section of HTML docs/Bio::Tools::Analysis::DNA::ESEfinder'
+    ],
 
-    'HTTP::Request::Common'     => [0,
-        'GenBank+GenPept sequence retrieval, remote http Blast jobs'.
-        '/Bio::DB::*,Bio::Tools::Run::RemoteBlast,'.
-        'Bio::Tools::Analysis::Protein*,Bio::Tools::Analysis::DNA*'],
+    'HTML::TableExtract' =>
+        [ 0, 'Parsing HTML tables/Bio::DB::SeqVersion::gi' ],
 
-    'IO::Scalar'               => [0,
-        'Deal with non-seekable filehandles/Bio::Tools::GuessSeqFormat'],
+    'HTTP::Request::Common' => [
+        0,
+        'GenBank+GenPept sequence retrieval, remote http Blast jobs'
+            . '/Bio::DB::*,Bio::Tools::Run::RemoteBlast,'
+            . 'Bio::Tools::Analysis::Protein*,Bio::Tools::Analysis::DNA*'
+    ],
 
-    'List::MoreUtils'           => [0,
-        'Back- or reverse-translation of sequences/'.
-        'Bio::Tools::SeqPattern,Bio::Tools::SeqPattern::BackTranslate'],
+    'Inline::C' => [ 0.67, 'Speeding up code like Fasta Bio::DB::Fasta' ],
 
-    'LWP::UserAgent'            => [0,
-        'Remote access/Bio::DB::*,Bio::Tools::Run::RemoteBlast,Bio::WebAgent'],
+    'IO::Scalar' => [
+        0, 'Deal with non-seekable filehandles/Bio::Tools::GuessSeqFormat'
+    ],
 
-    'PostScript::TextBlock'     => [0,
-        'EPS output/Bio::Tree::Draw::Cladogram'],
+    'List::MoreUtils' => [
+        0,
+        'Back- or reverse-translation of sequences/'
+            . 'Bio::Tools::SeqPattern,Bio::Tools::SeqPattern::BackTranslate'
+    ],
 
-    'Set::Scalar'               => [0,
-        'Proper operation/Bio::Tree::Compatible'],
+    'LWP::UserAgent' => [
+        0,
+        'Remote access/Bio::DB::*,Bio::Tools::Run::RemoteBlast,Bio::WebAgent'
+    ],
 
-    'SOAP::Lite'                => [0,
-        'Bibliographic queries/Bio::DB::Biblio::soap'],
+    'PostScript::TextBlock' => [ 0, 'EPS output/Bio::Tree::Draw::Cladogram' ],
 
-    'Sort::Naturally'           => [0,
-        'Sort lexically, but sort numeral parts numerically/'.
-        'Bio::Assembly::IO::ace,Bio::Assembly::IO::tigr'],
+    'Set::Scalar' => [ 0, 'Proper operation/Bio::Tree::Compatible' ],
 
-    'Spreadsheet::ParseExcel'   => [0,
-        'Parsing Excel files/Bio::SeqIO::excel'],
+    'SOAP::Lite' => [ 0, 'Bibliographic queries/Bio::DB::Biblio::soap' ],
 
-    'Storable'                  => [2.05,
-        'Storing sequence objects in local file cache/'.
-        'Bio::DB::FileCache,Bio::SeqFeature::Collection,Bio::PopGen::HtSNP,'.
-        'Bio::PopGen::TagHaplotype,Bio::DB::GFF::Adaptor::berkeleydb,Bio::Root::Root'],
+    'Sort::Naturally' => [
+        0,
+        'Sort lexically, but sort numeral parts numerically/'
+            . 'Bio::Assembly::IO::ace,Bio::Assembly::IO::tigr'
+    ],
 
-    'SVG'                       => [2.26,
-        'Creating SVG images/Bio::Draw::Pictogram'],
+    'Spreadsheet::ParseExcel' =>
+        [ 0, 'Parsing Excel files/Bio::SeqIO::excel' ],
 
-    'SVG::Graph'                => [0.01,
-        'Creating SVG images/Bio::TreeIO::svggraph'],
+    'Storable' => [
+        2.05,
+        'Storing sequence objects in local file cache/'
+            . 'Bio::DB::FileCache,Bio::SeqFeature::Collection,Bio::PopGen::HtSNP,'
+            . 'Bio::PopGen::TagHaplotype,Bio::DB::GFF::Adaptor::berkeleydb,Bio::Root::Root'
+    ],
 
-    'Text::ParseWords'          => [0,
-        'Test scripts/Bio::DB::SeqFeature::Store::FeatureFileLoader'],
+    'SVG' => [ 2.26, 'Creating SVG images/Bio::Draw::Pictogram' ],
 
-    'XML::DOM'                  => [0,
-        'Parsing XML/Bio::SeqIO::bsml,Bio::SeqIO::interpro'],
-
-    'XML::DOM::XPath'           => [0,
-        'Parsing XML/Bio::SeqIO::interpro'],
-
-    'XML::LibXML'               => [0,
-        'Parsing XML/Bio::SeqIO::seqxml,Bio::TreeIO::phyloxml'],
-
-    'XML::Parser'               => [0,
-        'Parsing XML/Bio::Biblio::IO::medlinexml'],
-
-    'XML::Parser::PerlSAX'      => [0,
-        'Parsing XML/Bio::SeqIO::tinyseq,Bio::SeqIO::game::gameSubs,',
-        'Bio::OntologyIO::InterProParser,Bio::ClusterIO::dbsnp'],
+    'SVG::Graph' => [ 0.01, 'Creating SVG images/Bio::TreeIO::svggraph' ],
 
-    'XML::SAX'                  => [0.15,
-        'Parsing XML/Bio::SearchIO::blastxml,Bio::SeqIO::tigrxml,Bio::SeqIO::bsml_sax'],
+    'Text::ParseWords' =>
+        [ 0, 'Test scripts/Bio::DB::SeqFeature::Store::FeatureFileLoader' ],
 
-    'XML::SAX::Writer'          => [0,
-        'Writing XML/Bio::SeqIO::tigrxml'],
+    'XML::DOM' => [ 0, 'Parsing XML/Bio::SeqIO::bsml,Bio::SeqIO::interpro' ],
 
-    'XML::Simple'               => [0,
-        'Reading custom XML/Bio::Tools::EUtilities,Bio::DB::HIV,Bio::DB::Query::HIVQuery'],
+    'XML::DOM::XPath' => [ 0, 'Parsing XML/Bio::SeqIO::interpro' ],
 
-    'XML::Twig'                 => [0,
-        'Parsing XML/Bio::Variation::IO::xml,Bio::DB::Taxonomy::entrez,'.
-        'Bio::DB::Biblio::eutils'],
+    'XML::LibXML' =>
+        [ 0, 'Parsing XML/Bio::SeqIO::seqxml,Bio::TreeIO::phyloxml' ],
 
-    'XML::Writer'               => [0.4,
-        'Parsing and writing XML/Bio::SeqIO::agave,Bio::SeqIO::game::gameWriter,'.
-        'Bio::SeqIO::chadoxml,Bio::SeqIO::tinyseq,Bio::Variation::IO::xml,'.
-        'Bio::SearchIO::Writer::BSMLResultWriter'],
+    'XML::Parser' => [ 0, 'Parsing XML/Bio::Biblio::IO::medlinexml' ],
 
-    'YAML'                      => [0,
-        'GenBank->GFF3/bp_genbank2gff3.pl'],
+    'XML::Parser::PerlSAX' => [
+        0,
+        'Parsing XML/Bio::SeqIO::tinyseq,Bio::SeqIO::game::gameSubs,',
+        'Bio::OntologyIO::InterProParser,Bio::ClusterIO::dbsnp'
+    ],
+
+    'XML::SAX' => [
+        0.15,
+        'Parsing XML/Bio::SearchIO::blastxml,Bio::SeqIO::tigrxml,Bio::SeqIO::bsml_sax'
+    ],
+
+    'XML::SAX::Writer' => [ 0, 'Writing XML/Bio::SeqIO::tigrxml' ],
+
+    'XML::Simple' => [
+        0,
+        'Reading custom XML/Bio::Tools::EUtilities,Bio::DB::HIV,Bio::DB::Query::HIVQuery'
+    ],
+
+    'XML::Twig' => [
+        0,
+        'Parsing XML/Bio::Variation::IO::xml,Bio::DB::Taxonomy::entrez,'
+            . 'Bio::DB::Biblio::eutils'
+    ],
+
+    'XML::Writer' => [
+        0.4,
+        'Parsing and writing XML/Bio::SeqIO::agave,Bio::SeqIO::game::gameWriter,'
+            . 'Bio::SeqIO::chadoxml,Bio::SeqIO::tinyseq,Bio::Variation::IO::xml,'
+            . 'Bio::SearchIO::Writer::BSMLResultWriter'
+    ],
+
+    'YAML' => [ 0, 'GenBank->GFF3/bp_genbank2gff3.pl' ],
 );
 
 my $mysql_ok = 0;
@@ -189,137 +209,131 @@ my @drivers = available_drivers();
 
 # Set up the Bio::Root::Build object
 my $build = Bio::Root::Build->new(
-    module_name         => 'Bio',
-    dist_name           => 'BioPerl',
-    dist_version_from   => 'Bio/Root/Version.pm',
-    dist_author         => 'BioPerl Team <bioperl-l at bioperl.org>',
-    dist_abstract       => 'Bioinformatics Toolkit',
-    license             => 'perl',
-    no_index            => {'x_dir'       => [qw(examples/root/lib)]},
-    requires            => {
-                            'perl'                      => '5.6.1',
-                            'IO::String'                => 0,    # why is this required?
-                            'Data::Stag'                => 0.11, # Bio::SeqIO::swiss, we can change to 'recommend' if needed
-                            'Scalar::Util'              => 0,    # not in Perl 5.6.1, arrived in core in 5.7.3
-                            'ExtUtils::Manifest'        => '1.52', # allows spaces in file names
-                           },
-
-    build_requires      => {
-                            'CPAN'                      => 1.81,
-                            'Module::Build'             => 0.2805,
-                            'Test::Harness'             => 2.62,
-                            'Test::Most'                => 0,
-                            'URI::Escape'               => 0
-                           },
-
-    recommends          => {
+    module_name   => 'Bio',
+    dist_name     => 'BioPerl',
+    dist_version  => $Bio::Root::Version::VERSION,
+    dist_author   => 'BioPerl Team <bioperl-l at bioperl.org>',
+    dist_abstract => 'Bioinformatics Toolkit',
+    license       => 'perl',
+    requires      => {
+        'perl'       => '5.6.1',
+        'IO::String' => 0,               # why is this required?
+        'Data::Stag' => 0.11,            # Bio::SeqIO::swiss, we can change to 'recommend' if needed
+        'Scalar::Util' => 0,             # not in Perl 5.6.1, arrived in core in 5.7.3
+        'ExtUtils::Manifest' => '1.52',  # allows spaces in file names
+    },
+
+    configure_requires => {
+        'Module::Build' => 0.42,
+    },
+    
+    build_requires => {
+        'Module::Build' => 0.42,
+        'CPAN'          => 1.81,
+        'Test::Harness' => 2.62,
+        'Test::Most'    => 0,
+        'URI::Escape'   => 0
+    },
+
+    recommends => {
         # reverted to a simple Module::Build-compatible hash, but we keep
         # additional data in the %recommends hash above. May be converted to
         # something simpler if there aren't complaints down the line.
-        map {$_ => $recommends{$_}[0]} sort keys %recommends
+        map { $_ => $recommends{$_}[0] } sort keys %recommends
     },
 
-    get_options         => {
-        accept  => { },
-        network => { } # say 'perl Build.PL --network' to manually request network tests
-                           },
+    get_options => {
+        accept => {},
+        network => {} # say 'perl Build.PL --network' to manually request network tests
+    },
 
-    auto_features       => {
-        'EntrezGene'    => {
+    auto_features => {
+        'EntrezGene' => {
             description => "Presence of Bio::ASN1::EntrezGene",
-            requires    => { 'Bio::ASN1::EntrezGene' => 0 } # feature_requires is like requires, except that it doesn't trigger installation
+            requires => { 'Bio::ASN1::EntrezGene' => 0 } # feature_requires is like requires, except that it doesn't trigger installation
         },
 
         'DB_File Tests' => {
             description => "BDB tests for Bio::DB::SeqFeature::Store",
-            requires    => { 'DB_File' => 0 } # feature_requires is like requires, except that it doesn't trigger installation
-         },
+            requires => { 'DB_File' => 0 } # feature_requires is like requires, except that it doesn't trigger installation
+        },
 
         'Bio::DB::GFF Tests' => {
-            description => "Bio::DB::GFF database tests (will need to answer questions before really enabling)",
-            requires    => { 'DBI' => 0 },
-         },
+            description =>
+                "Bio::DB::GFF database tests (will need to answer questions before really enabling)",
+            requires => { 'DBI' => 0 },
+        },
 
-        'MySQL Tests'   => {
-            description => "MySQL-related tests for Bio::DB::SeqFeature::Store",
-            requires    => { 'DBI' => 0, 'DBD::mysql' => 0 },
-         },
+        'MySQL Tests' => {
+            description =>
+                "MySQL-related tests for Bio::DB::SeqFeature::Store",
+            requires => { 'DBI' => 0, 'DBD::mysql' => 0 },
+        },
 
-        'Pg Tests'      => {
-            description => "PostgreSQL-related tests for Bio::DB::SeqFeature::Store",
-            requires    => { 'DBI' => 0, 'DBD::Pg' => 0},
-         },
+        'Pg Tests' => {
+            description =>
+                "PostgreSQL-related tests for Bio::DB::SeqFeature::Store",
+            requires => { 'DBI' => 0, 'DBD::Pg' => 0 },
+        },
 
-        'SQLite Tests'  => {
-            description => "SQLite-related tests for Bio::DB::SeqFeature::Store",
-            requires    => { 'DBI' => 0, 'DBD::SQLite' => 0},
-         },
+        'SQLite Tests' => {
+            description =>
+                "SQLite-related tests for Bio::DB::SeqFeature::Store",
+            requires => { 'DBI' => 0, 'DBD::SQLite' => 0 },
+        },
 
         'Network Tests' => {
             description => "Enable tests that need an internet connection",
             requires    => { 'LWP::UserAgent' => 0 },
         }
-                           },
-    dynamic_config      => 1,
-    #create_makefile_pl  => 'passthrough',
+    },
+    dynamic_config       => 1,
     recursive_test_files => 1,
 
     # Extra files needed for BioPerl modules
-    xml_files => {'./Bio/DB/HIV/lanl-schema.xml' => 'lib/Bio/DB/HIV/lanl-schema.xml'},
+    xml_files => {
+        './Bio/DB/HIV/lanl-schema.xml' => 'lib/Bio/DB/HIV/lanl-schema.xml'
+    },
 
-    #pm_files           => {} # modules in Bio are treated as if they were in lib and auto-installed
-    #script_files       => [] # scripts in scripts directory are installed on-demand
+#pm_files           => {} # modules in Bio are treated as if they were in lib and auto-installed
+#script_files       => [] # scripts in scripts directory are installed on-demand
 );
 
 my $accept = $build->args('accept');
 
-# how much do I hate this?  Let me count the ways.....
-#if (!$build->feature('EntrezGene')) {
-#    warn <<WARN;
-############################## WARNING #############################
-#
-#Bio::ASN1::EntrezGene not found. This is an *optional* module;
-#however, because it has a circular dependency with BioPerl we do not
-#include it on our list of recommended modules.
-#
-#If you require EntrezGene functionality, you can install
-#Bio::ASN1::EntrezGene after BioPerl has finished installing.
-#
-############################## WARNING #############################
-#
-#WARN
-#    sleep 3;
-#}
-
 my $proceed = prompt_for_biodb($accept)
-    if $build->feature('Bio::DB::GFF') || $build->feature('MySQL Tests') ||
-      $build->feature('Pg Tests')      || $build->feature('SQLite Tests');
+    if $build->feature('Bio::DB::GFF')
+    || $build->feature('MySQL Tests')
+    || $build->feature('Pg Tests')
+    || $build->feature('SQLite Tests');
 
 # Handle auto features
-if ($proceed && $build->feature('DB_File Tests')) {
+if ( $proceed && $build->feature('DB_File Tests') ) {
+
     # will return without doing anything if user chose not to run tests during
     make_bdb_test();
 }
-if ($proceed && ($build->feature('MySQL Tests') ||
-                 $build->feature('Pg Tests') ||
-                 $build->feature('SQLite Tests'))) {
+if ($proceed
+    && (   $build->feature('MySQL Tests')
+        || $build->feature('Pg Tests')
+        || $build->feature('SQLite Tests') )
+    ) {
     make_dbi_test();
 }
 
 # Ask questions
 $build->choose_scripts($accept);
 
-if ($build->args('network')) {
-    if ($build->feature('Network Tests')) {
-        $build->notes(network => 1);
+if ( $build->args('network') ) {
+    if ( $build->feature('Network Tests') ) {
+        $build->notes( network => 1 );
         $build->log_info("  - will run internet-requiring tests\n");
+    } else {
+        $build->notes( network => 0 );
+        $build->log_info(
+            "  - Missing LWP::UserAgent, can't run network tests\n");
     }
-    else {
-        $build->notes(network => 0);
-        $build->log_info("  - Missing LWP::UserAgent, can't run network tests\n");
-    }
-}
-else {
+} else {
     $build->prompt_for_network($accept) if $build->feature('Network Tests');
 }
 
@@ -334,25 +348,27 @@ exit;
 ########################## Helper subs ##########################
 
 sub make_bdb_test {
-    my $path0 = File::Spec->catfile('t', 'LocalDB', 'SeqFeature.t');
-    my $path = File::Spec->catfile('t', 'LocalDB','SeqFeature_BDB.t');
-    unlink($path) if (-e $path);
+    my $path0 = File::Spec->catfile( 't', 'LocalDB', 'SeqFeature.t' );
+    my $path  = File::Spec->catfile( 't', 'LocalDB', 'SeqFeature_BDB.t' );
+    unlink($path) if ( -e $path );
     open my $F, '>', $path or die "Could not write test file '$path': $!\n";
     print $F <<END;
 system '$^X $path0 -adaptor berkeleydb -create 1 -temp 1';
 END
     close $F;
     $build->add_to_cleanup($path);
+
     #$build->add_to_manifest_skip($path);
 }
 
 sub available_drivers {
-    eval {require DBI; 1;};  # if not installed, this sub won't actually be called
+    eval { require DBI; 1; }; # if not installed, this sub won't actually be called
     return if $@;
     @drivers = DBI->available_drivers;
-    unless (grep {/mysql|Pg|SQLite/i} @drivers) {
+    unless ( grep {/mysql|Pg|SQLite/i} @drivers ) {
         $mysql_ok = 0;
-        return "Only MySQL, Postgres and SQLite DBI drivers supported for Bio::DB::SeqFeature RDMS tests";
+        return
+            "Only MySQL, Postgres and SQLite DBI drivers supported for Bio::DB::SeqFeature RDMS tests";
     }
     $mysql_ok = 1;
     return @drivers;
@@ -360,18 +376,19 @@ sub available_drivers {
 
 sub make_dbi_test {
     my $dsn = $build->notes('test_dsn') || return;
-    my $path0 = File::Spec->catfile('t', 'LocalDB', 'SeqFeature.t');
+    my $path0  = File::Spec->catfile( 't', 'LocalDB', 'SeqFeature.t' );
     my $driver = $build->notes('dbd_driver');
-    my $path = File::Spec->catfile('t', 'LocalDB',
-                ($driver eq 'mysql')   ? 'SeqFeature_mysql.t'  :
-                ($driver eq 'SQLite')  ? 'SeqFeature_SQLite.t'  :
-                'SeqFeature_Pg.t');
+    my $path   = File::Spec->catfile( 't', 'LocalDB',
+          ( $driver eq 'mysql' )  ? 'SeqFeature_mysql.t'
+        : ( $driver eq 'SQLite' ) ? 'SeqFeature_SQLite.t'
+        :                           'SeqFeature_Pg.t' );
     my $test_db = $build->notes('test_db');
-    my $user = $build->notes('test_user');
-    my $pass = $build->notes('test_pass');
-    open my $F, '>', $path or die "Could not write file '$path' for DBI test: $!\n";
+    my $user    = $build->notes('test_user');
+    my $pass    = $build->notes('test_pass');
+    open my $F, '>', $path
+        or die "Could not write file '$path' for DBI test: $!\n";
     my $str = "$path0 -adaptor DBI::$driver -create 1 -temp 1 -dsn \"$dsn\"";
-    $str .= " -user $user" if $user;
+    $str .= " -user $user"     if $user;
     $str .= " -password $pass" if $pass;
     print $F <<END;
 system '$^X $str';
@@ -379,14 +396,15 @@ END
     close $F;
     $build->add_to_cleanup($path);
     $build->add_to_cleanup($test_db) if $driver eq 'SQLite';
+
     #$build->add_to_manifest_skip($path);
 }
 
 sub test_biodbgff {
-    eval {require DBI;};  # if not installed, this sub won't actually be called
+    eval { require DBI; }; # if not installed, this sub won't actually be called
     return if $@;
     @drivers = DBI->available_drivers;
-    unless (grep {/mysql|Pg|Oracle/i} @drivers) {
+    unless ( grep {/mysql|Pg|Oracle/i} @drivers ) {
         return "MySQL, Pg nor Oracle DBI drivers are installed";
     }
     return;
@@ -394,59 +412,68 @@ sub test_biodbgff {
 
 sub prompt_for_biodb {
     my $accept = shift;
-    my $proceed = $accept ? 0 : $build->y_n("Do you want to run the Bio::DB::GFF or ".
-                              "Bio::DB::SeqFeature::Store live database tests? ".
-                              "y/n", 'n');
+    my $proceed = $accept ? 0 : $build->y_n(
+        "Do you want to run the Bio::DB::GFF or "
+            . "Bio::DB::SeqFeature::Store live database tests? " . "y/n",
+        'n'
+    );
 
     if ($proceed) {
         my @driver_choices;
-        foreach my $poss ('SQLite', 'mysql', 'Pg', 'Oracle') {
-            if (grep {/$poss/i} @drivers) {
+        foreach my $poss ( 'SQLite', 'mysql', 'Pg', 'Oracle' ) {
+            if ( grep {/$poss/i} @drivers ) {
                 my $choice = $poss;
                 $choice =~ s/^(.)/[$1]/;
-                push(@driver_choices, $choice);
+                push( @driver_choices, $choice );
             }
         }
 
         my $driver;
-        if (@driver_choices > 1) {
+        if ( @driver_choices > 1 ) {
             my ($default) = $driver_choices[0] =~ /\[(.)/;
-            $driver = $build->prompt("Which database driver should be used? ".join(" ", @driver_choices), $default);
-        }
-        else {
+            $driver = $build->prompt(
+                "Which database driver should be used? "
+                    . join( " ", @driver_choices ),
+                $default
+            );
+        } else {
             ($driver) = $driver_choices[0] =~ /\[(.)/;
         }
-        if ($driver =~ /^[mM]/) {
+        if ( $driver =~ /^[mM]/ ) {
             $driver = 'mysql';
-        }
-        elsif ($driver =~ /^[pP]/) {
+        } elsif ( $driver =~ /^[pP]/ ) {
             $driver = 'Pg';
-        }
-        elsif ($driver =~ /^[oO]/) {
+        } elsif ( $driver =~ /^[oO]/ ) {
             $driver = 'Oracle';
-        }
-        elsif ($driver =~ /^[sS]/) {
+        } elsif ( $driver =~ /^[sS]/ ) {
             $driver = 'SQLite';
         }
 
-        my $test_db = $build->prompt("Which database should I use for testing the $driver driver?\n".
-                                     "This database should already be present but doesn't have to ".
-                                     "be preloaded for any schema", 'test');
-        my $test_host = $build->prompt("On which host is database '$test_db' running (hostname, ip address or host:port)", 'localhost');
-        my $test_user = $build->prompt("User name for connecting to database '$test_db'?", 'undef');
-        my $test_pass = $build->prompt("Password for connecting to database '$test_db'?", 'undef');
+        my $test_db = $build->prompt(
+            "Which database should I use for testing the $driver driver?\n"
+                . "This database should already be present but doesn't have to "
+                . "be preloaded for any schema",
+            'test'
+        );
+        my $test_host = $build->prompt(
+            "On which host is database '$test_db' running (hostname, ip address or host:port)",
+            'localhost'
+        );
+        my $test_user = $build->prompt(
+            "User name for connecting to database '$test_db'?", 'undef' );
+        my $test_pass = $build->prompt(
+            "Password for connecting to database '$test_db'?", 'undef' );
 
         my $use_host = 1;
-        if ($test_host eq 'undef' || $test_host eq 'localhost') {
+        if ( $test_host eq 'undef' || $test_host eq 'localhost' ) {
             $use_host = 0;
         }
 
         my $test_dsn;
-        if ($driver eq 'Pg' || $driver eq 'SQLite') {
+        if ( $driver eq 'Pg' || $driver eq 'SQLite' ) {
             $test_dsn = "dbi:$driver:dbname=$test_db";
             $mysql_ok = 0;
-        }
-        else {
+        } else {
             $test_dsn = "dbi:$driver:database=$test_db";
             $mysql_ok = 0;
         }
@@ -454,24 +481,30 @@ sub prompt_for_biodb {
             $test_dsn .= ";host=$test_host";
         }
 
-        $build->notes(dbd_driver => $driver);
-        $build->notes(test_db => $test_db);
-        $build->notes(test_host => $test_host);
-        $build->notes(test_user => $test_user eq 'undef' ? undef : $test_user);
-        $build->notes(test_pass => $test_pass eq 'undef' ? undef : $test_pass);
-        $build->notes(test_dsn => $test_dsn);
-
-        $build->log_info("  - will run tests with database driver '$driver' and these settings:\n",
-                        "    Database $test_db\n",
-                        "    Host     $test_host\n",
-                        "    DSN      $test_dsn\n",
-                        "    User     $test_user\n",
-                        "    Password $test_pass\n");
-        $build->log_info("  - will not run the BioDBSeqFeature live ".
-                         "database tests (requires MySQL or Pg driver)\n") unless ($driver eq 'mysql' or $driver eq 'Pg');
-    }
-    else {
-        $build->log_info("  - will not run the BioDBGFF or BioDBSeqFeature live database tests\n");
+        $build->notes( dbd_driver => $driver );
+        $build->notes( test_db    => $test_db );
+        $build->notes( test_host  => $test_host );
+        $build->notes(
+            test_user => $test_user eq 'undef' ? undef : $test_user );
+        $build->notes(
+            test_pass => $test_pass eq 'undef' ? undef : $test_pass );
+        $build->notes( test_dsn => $test_dsn );
+
+        $build->log_info(
+            "  - will run tests with database driver '$driver' and these settings:\n",
+            "    Database $test_db\n",
+            "    Host     $test_host\n",
+            "    DSN      $test_dsn\n",
+            "    User     $test_user\n",
+            "    Password $test_pass\n"
+        );
+        $build->log_info( "  - will not run the BioDBSeqFeature live "
+                . "database tests (requires MySQL or Pg driver)\n" )
+            unless ( $driver eq 'mysql' or $driver eq 'Pg' );
+    } else {
+        $build->log_info(
+            "  - will not run the BioDBGFF or BioDBSeqFeature live database tests\n"
+        );
     }
 
     $build->log_info("\n");
diff --git a/Changes b/Changes
index 7cee667..4c4a3d7 100644
--- a/Changes
+++ b/Changes
@@ -17,6 +17,46 @@ Bugs and requested features list:
 CPAN releases are branched from 'master'.
 ---------------------------------------------------------
 
+1.6.925
+
+    * WrapperBase quoted option values [majensen]
+    * Various documentation fixes and updates [bosborne]
+
+    [New features]
+
+    * Bio::SearchIO::infernal
+      - Issue #131: added CMSEARCH parsing support for Infernal 1.1 [pcantalupo]
+    * Bio::Search::HSP::ModelHSP
+      - Added a 'noncanonical_string' method to retrieve the NC line from CMSEARCH
+        reports [pcantalupo]
+    * Bio::Search::Result::INFERNALResult
+      - Added new module to represent features of Infernal reports [pcantalupo]
+    
+   [Bug Fixes]
+   
+    * Fixes in Bio::Root::Build to deal with META.json/yml for CPAN indexing [cjfields]
+    * Bio::SeqFeature::Generic spliced_seq() bug fix [Eric Snyder, via bosborne]
+    * NeXML parser fixes [fjossandon]
+    * Bug fix for Bio::DB::SeqFeature memory adapter [lstein]
+    * Issue #70: CONTIG parsing in GenBank output fixed [fjossandon]
+    * Issue #76: Circular genome fixes with Bio::Location::Split [fjossandon]
+    * Issue #80: Fix lack of caching issue with Bio::DB::Taxonomy [fjossandon]
+    * Issue #81: Small updates to make sure possible memory leaks are detected [cjfields]
+    * Issue #84: EMBL format wrapping problem [nyamned]
+    * Issue #90: Missing entries for translation tables 24 and 25 [fjossandon]
+    * Issue #95: Speed up of Bio::DB::Fasta::subseq by using a compiled regex
+      or compiled C code (when Inline::C is installed) [rocky]
+    * Fix various Bio::Tools::Analysis remote server config problems [cjfields]
+    * Added several missing 'Data::Stag' and 'LWP::UserAgent' requirements [fjossandon]
+    * Added a workaround in Bio::DB::Registry to get Username in Windows [fjossandon]
+    * For HMMer report parsing, changed "$hsp->bits" to return 0 instead of undef
+      to be consistent with "$hit->bits" behaviour [fjossandon]
+    * Fixed a bug in HMMer3 parsing, where an homology line ending in CS or RF
+      aminoacids made "next_seq" confused and broke the parser [fjossandon]
+    * Adjusted FTLocationFactory.pm to comply with current GenBank Feature Table
+      Definition, so now "join(complement(C..D),complement(A..B))" is equivalent
+      to "complement(join(A..B,C..D))" [fjossandon]
+
 1.6.924
 
     [Significant changes]
diff --git a/INSTALL b/INSTALL
deleted file mode 100644
index 89c3d06..0000000
--- a/INSTALL
+++ /dev/null
@@ -1,446 +0,0 @@
-Installing BioPerl for Unix
-
-     * 1 BIOPERL INSTALLATION
-     * 2 SYSTEM REQUIREMENTS
-     * 3 OPTIONAL
-     * 4 ADDITIONAL INSTALLATION INFORMATION
-     * 5 PRELIMINARY PREPARATION
-     * 6 INSTALLING BIOPERL THE EASY WAY USING Build.PL
-     * 7 INSTALLING BIOPERL THE EASY WAY USING CPAN
-     * 8 WHERE ARE THE MAN PAGES?
-     * 9 EXTERNAL PROGRAMS
-          * 9.1 Environment Variables
-     * 10 INSTALLING BIOPERL SCRIPTS
-     * 11 INSTALLING BIOPERL IN A PERSONAL MODULE AREA
-     * 12 INSTALLING BIOPERL MODULES THE HARD WAY
-     * 13 USING MODULES NOT INSTALLED IN THE STANDARD LOCATION
-     * 14 THE TEST SYSTEM
-     * 15 BUILDING THE OPTIONAL bioperl-ext PACKAGE
-          * 16.1 CONFIGURING for BSD and Solaris boxes
-          * 16.2 INSTALLATION
-
-BIOPERL INSTALLATION
-
-For the most up-to-date installation instructions please see the
-BioPerl wiki:
-
-  http://www.bioperl.org/wiki/Installing_BioPerl
-
-BioPerl has been installed on many forms of Unix, Win9X/NT/2000/XP,
-and on Mac OS X. The following are instructions for installing BioPerl 
-for Unix/Linux/Mac OS X. Windows installation instructions can be found 
-in INSTALL.WIN. For installing BioPerl for Mac OS X using Fink, see:
-
-http://www.bioperl.org/wiki/Getting_BioPerl#Mac_OS_X_using_fink
-
-SYSTEM REQUIREMENTS
-
-    * Perl 5.6.1 or later; version 5.8 and greater are highly
-      recommended. Modules are generally tested against perl 5.8 and
-      above.
-
-    * External modules: BioPerl uses functionality provided in other
-      Perl modules. Some of these are included in the standard perl
-      package but some need to be obtained from the CPAN site. The
-      list of external modules is included in the DEPENDENCIES file.
-
-OPTIONAL
-
-   * ANSI C or GNU C compiler (gcc) for XS extensions (the bioperl-ext
-     package; see BUILDING THE OPTIONAL bioperl-ext PACKAGE, below).
-
-ADDITIONAL INSTALLATION INFORMATION
-
-   * Additional information on BioPerl and MAC OS:
-      * OS 9 - http://bioperl.org/Core/mac-bioperl.html
-            NOTE: These are severely out-of-date and require MacPerl
-            (the latest version of which is 5.6.1rc1). As such, we do
-            not currently support BioPerl on OS 9
-      * OS X - Installing using Fink (in Getting BioPerl)
-
-PRELIMINARY PREPARATION
-
-   This is optional, but regardless of your subsequent choice of
-   installation method, it will help to carry out the following steps.
-   They will increase the likelyhood of installation success
-   (especially of optional dependencies).
-
-     * Upgrade CPAN:
-
- >perl -MCPAN -e shell
- cpan>install Bundle::CPAN
- cpan>q
-
-     * Install/upgrade Module::Build, and make it your preferred
-       installer:
-
- >cpan
- cpan>install Module::Build
- cpan>o conf prefer_installer MB
- cpan>o conf commit
- cpan>q
-
-     * Install the expat library by whatever method is
-       appropriate for your system.
-
-     * If your expat library is installed in a non-standard location,
-       tell CPAN about it:
-
- >cpan
- cpan>o conf makepl_arg "EXPATLIBPATH=/non-standard/lib EXPATINCPATH=/non-standard/include"
- cpan>o conf commit
-
-
-INSTALLING BIOPERL THE EASY WAY USING Build.PL
-
-The advantage of this approach is it's stepwise, so it's easy to stop
-and analyze in case of any problem.
-
-Download, then unpack the tar file. For example:
-
- >tar xvfz BioPerl-1.6.923.tar.gz
- >cd BioPerl-1.6.923
-
-Now issue the build commands:
-
- >perl Build.PL
- >./Build test
-
-If you've installed everything perfectly and all the network
-connections are working then you may pass all the tests run in the
-'./Build test' phase. It's also possible that you may fail some tests.
-Possible explanations: problems with local Perl installation, network
-problems, previously undetected bug in BioPerl, flawed test script,
-problems with CGI script using for sequence retrieval at public
-database, and so on. Remember that there are over 900 modules in
-BioPerl and the test suite is running more than 12000 individual
-tests, a few failed tests may not affect your usage of BioPerl.
-
-If you decide that the failed tests will not affect how you intend to
-use BioPerl and you'd like to install anyway, or if all tests were
-fine, do:
-
- >./Build install
-
-If you're concerned about a failed test and need assistance or advice
-then contact bioperl-l at bioperl.org. (You could provide us the detailed
-results of the failed test(s): see the `THE TEST SYSTEM' below for
-information on how to generate such results.)
-
-To './Build install' you need write permission in the
-perl5/site_perl/source area (or similar, depending on your
-environment). Usually this will require you becoming root, so you will
-want to talk to your systems manager if you don't have the necessary
-privileges.
-
-It is also straightforward to install the package outside of the this
-standard Perl5 location. See INSTALLING BIOPERL IN A PERSONAL MODULE
-AREA, below.
-
-
-INSTALLING BIOPERL THE EASY WAY USING CPAN
-
-You can use the CPAN shell to install BioPerl. For example:
-
- >perl -MCPAN -e shell
-
-Or you might have the cpan alias installed:
-
- >cpan
-
-Then find the name of the BioPerl version you want:
-
- cpan>d /bioperl/
-
- ....
-
-Distribution    CJFIELDS/BioPerl-1.6.901.tar.gz
-Distribution    CJFIELDS/BioPerl-1.6.922.tar.gz
-Distribution    CJFIELDS/BioPerl-1.6.923.tar.gz
-
-Now install:
-
- cpan>install CJFIELDS/BioPerl-1.6.923.tar.gz
-
-If you've installed everything perfectly and all the network
-connections are working then you may pass all the tests run in the
-'./Build test' phase. It's also possible that you may fail some tests.
-Possible explanations: problems with local Perl installation, network
-problems, previously undetected bug in BioPerl, flawed test script,
-problems with CGI script used for sequence retrieval at public
-database, and so on. Remember that there are over 900 modules in
-BioPerl and the test suite is running more than 12000 individual
-tests, a few failed tests may not affect your usage of BioPerl.
-
-If you decide that the failed tests will not affect how you intend to
-use BioPerl and you'd like to install anyway do:
-
- cpan>force install C/CJ/CJFIELDS/BioPerl-1.6.923.tar.gz
-
-If you're concerned about a failed test and need assistance or advice
-then contact bioperl-l at bioperl.org. (You could provide us the detailed
-results of the failed test(s): see the `THE TEST SYSTEM' below for
-information on how to generate such results.)
-
-WHERE ARE THE MAN PAGES?
-
-Previously, when using Makefile.PL (no longer covered in this
-documentation), we had to disable the automatic creation of man pages
-because this step was triggering a "line too long" error on some OSs
-due to shell constraints. If you want man pages installed use the
-Build.PL installation process discussed above.
-
-EXTERNAL PROGRAMS
-
-BioPerl can interface with some external programs for executing
-analyses. These include clustalw and t_coffee for Multiple Sequence
-Alignment (Bio::Tools::Run::Alignment::Clustalw and
-Bio::Tools::Run::Alignment::TCoffee) and blastall, blastpgp, and
-bl2seq for BLAST analyses (Bio::Tools::Run::StandAloneBlast), and to
-all the programs in the EMBOSS suite (Bio::Factory::EMBOSS).  Most
-of the modules which 'wrap' these programs are located in the separate
-bioperl-run distribution; however, two commonly-used modules are still
-distributed with the BioPerl core (Bio::Tools::Run::StandAloneBlast,
-Bio::Tools::Run::RemoteBlast).
-
-    Environment Variables
-
-Some modules which run external programs need certain environment
-variables set. If you do not have a local copy of the specific
-executable you do not need to set these variables. Additionally the
-modules will attempt to locate the specific applications in your
-runtime PATH variable. You may also need to set an environment
-variable to tell BioPerl about your network configuration if your site
-uses a firewall.
-
-Setting environment variables on unix means adding lines like the
-following to your shell *rc file.
-
-   For bash or sh:
-
- export BLASTDIR=/data1/blast
-
-   For csh or tcsh:
-
- setenv BLASTDIR /data1/blast
-
-Some environment variables include:
-
-+------------------------------------------------------------------------+
-| Env. Variable |                      Description                       |
-|---------------+--------------------------------------------------------|
-|               |Specifies where the NCBI blastall, blastpgp, bl2seq,    |
-|BLASTDIR       |etc.. are located. A 'data' directory could also be     |
-|               |present in this directory as well, you could put your   |
-|               |blastable databases here.                               |
-|---------------+--------------------------------------------------------|
-|               |If one does not want to locate the data dir within the  |
-|BLASTDATADIR or|same dir as where the BLASTDIR variable points, a       |
-|BLASTDB        |BLASTDATADIR or BLASTDB variable can be set to point to |
-|               |a dir where BLAST database indexes are located.         |
-|---------------+--------------------------------------------------------|
-|BLASTMAT       |The directory containing the substitution matrices such |
-|               |as BLOSUM62.                                            |
-|---------------+--------------------------------------------------------|
-|CLUSTALDIR     |The directory where the clustalw executable is located. |
-|---------------+--------------------------------------------------------|
-|TCOFFEEDIR     |The directory where the t_coffee executable is located. |
-|---------------+--------------------------------------------------------|
-|               |If you access the internet via a proxy server then you  |
-|               |can tell the BioPerl modules which require network      |
-|               |access about this by using the http_proxy environment   |
-|http_proxy     |variable. The value set includes the proxy address and  |
-|               |the port, with optional username/password for           |
-|               |authentication purposes                                 |
-|               |(e.g. http://USERNAME:PASSWORD@proxy.example.com:8080). |
-+------------------------------------------------------------------------+
-
-INSTALLING BIOPERL SCRIPTS
-
-BioPerl comes with a set of production-quality scripts that are
-kept in the scripts/ directory. You can install these scripts if you'd
-like, simply answer the questions during 'perl Build.PL'.
-The installation directory can be specified by:
-
- perl Build.PL
- ./Build install --install_path script=/foo/scripts
-
-By default they install to /usr/bin or similar, depending on platform.
-
-INSTALLING BIOPERL IN A PERSONAL MODULE AREA
-
-If you lack permission to install perl modules into the standard
-site_perl/ system area you can configure BioPerl to install itself
-anywhere you choose. Ideally this would be a personal perl directory
-or standard place where you plan to put all your 'local' or personal
-perl modules.
-
-   Example:
-
- >perl Build.PL --install_base /home/users/dag
- >./Build test
- >./Build install
-
-This tells perl to install all the various parts of bioperl in the
-desired place, e.g. creating:
-
-   /home/users/dag/lib/perl5/Bio/Perl.pm
-
-Then in your BioPerl script you would write:
-
- use lib "/home/users/dag/lib/perl5/";
- use Bio::Perl;
-
-For more information on these sorts of custom installs see the
-documentation for Module::Build.
-
-If you are used to using something like:
-
- >perl Makefile.PL PREFIX=/home/users/dag
-
-You can get similar behaviour by using this instead:
-
- >perl Build.PL --prefix /home/users/dag
-
-For more information, see Module::Build::Cookbook documentation for
-Installing_in_the_same_location_as_ExtUtils::MakeMaker
-
-You can also use CPAN to install modules in your local directory.
-First enter the CPAN shell, then set the arguments for the commands
-"perl Makefile.PL" and "./Build install", like this:
-
- >perl -e shell -MCPAN
- cpan>o conf makepl_arg LIB=/home/users/dag/My_Local_Perl_Modules
- cpan>o conf mbuild_install_arg "--install_path lib=/home/users/dag/My_Local_Perl_Modules"
- cpan>o conf commit
-
-INSTALLING BIOPERL MODULES THE HARD WAY
-
-As a last resort, you can simply copy all files in Bio/ to any
-directory in which you have write privileges. This is generally NOT
-recommended since some modules may require special configuration
-(currently none do, but don't rely on this).
-
-You will need to set "use lib '/path/to/my/bioperl/modules';" in your
-perl scripts so that you can access these modules if they are not
-installed in the standard site_perl/ location. See above for an
-example.
-
-To get manpage documentation to work correctly you will have to
-configure man so that it looks in the proper directory. On most
-systems this will just involve adding an additional directory to your
-$MANPATH environment variable.
-
-The installation of the Compile directory can be similarly redirected,
-but execute the make commands from the Compile/SW directory.
-
-If all else fails and you are unable to access the perl distribution
-directories, ask your system administrator to place the files there
-for you. You can always execute perl scripts in the same directory as
-the location of the modules (Bio/ in the distribution) since perl
-always checks the current working directory when looking for modules.
-
-USING MODULES NOT INSTALLED IN THE STANDARD LOCATION
-
-You can explicitly tell perl where to look for modules by using the
-Lib module which comes standard with perl.
-
-   Example:
-
- #!/usr/bin/perl
- use lib "/home/users/dag/lib/perl5/";
- use Bio::Perl;
- #<...insert whizzy perl code here...>
-
-Or, you can set the environmental variable PERL5LIB:
-
-   csh or tcsh:
-
- setenv PERL5LIB /home/users/dag/lib/perl5/
-
-   bash or sh:
-
- export PERL5LIB=/home/users/dag/lib/perl5/
-
-THE TEST SYSTEM
-
-The BioPerl test system is located in the t/ directory and is
-automatically run whenever you execute the './Build test' command
-(having previously run 'Perl Build.PL'; if you have already installed
-BioPerl answer 'no' to script installation to get nicer test output
-later).
-
-For the 1.6 release and beyond, tests have been organized into groups
-based upon the specific task or class the module being tested belongs
-to. If you want to investigate the behavior of a specific test such as
-the Seq test you would type:
-
- >./Build test --test_files t/Seq/Seq.t --verbose
-
-The ./ ensures you are using the Build script in the current directory
-to make sure you are testing the modules in this directory not ones
-installed elsewhere. The --test_files arguement can be used multiple
-times to try a set of test scripts in one go. The --verbose arguement
-outputs the detailed test results, instead of just the summary you see
-during './Build test'.
-
-The '--test-files' argument can also work as a glob. For instance, to
-run tests on all SearchIO modules, use the following:
-
- >./Build test --test_files t/SearchIO* --verbose
-
-If you are trying to learn how to use a module, often the test suite
-is a good place to look. All good extreme programmers try and write a
-test BEFORE they write the module to insure that their module behaves
-the way they expect. You'll notice some 'ok' and 'skip' commands in a
-test, this is part of the Perl test suite that signifies a passed test
-with an 'ok N', where N is the test number. Alternatively you can tell
-Perl to skip tests. This is useful when, for example, your test
-detects that the network is not present and thus should skip, not
-fail, any tests that require a network connection.
-
-The core developers have indicated that future releases of BioPerl
-will require that new modules come with a test suite with some minimal
-tests.  Modules that lack adequate tests or could otherwise be
-considered 'unstable' will be moved into a separate developer
-distribution until adequate tests are added and the API stablizes.
-
-BUILDING THE OPTIONAL bioperl-ext PACKAGE
-
-The bioperl-ext package contains C code and XS extensions for various
-alignment and trace file modules (Bio::Tools::pSW for DNA
-Smith-Waterman, Bio::Tools::dpAlign for protein Smith-Waterman,
-Bio::SearchDist for EVD fitting of extreme value, Bio::SeqIO::staden).
-
-This Installation may work out-of-the box for most platforms except
-BSD and Solaris boxes. For other platforms skip this next paragraph.
-Of note, the code for bioperl-ext has not been updated along with the
-rest of bioperl, so one may expect to see some issues. If so, please
-report them to the BioPerl mailing list. Patches for these modules are
-always welcome.
-
-    CONFIGURING for BSD and Solaris boxes
-
-You should add the line -fPIC to the CFLAGS line in
-Compile/SW/libs/makefile. This makes the compile generate position
-independent code, which is required for these architectures. In
-addition, on some Solaris boxes, the generated Makefile does not make
-the correct -fPIC/-fpic flags for the C compiler that is used. This
-requires manual editing of the generated Makefile to switch case. Try
-it out once, and if you get errors, try editing the -fpic line
-
-    INSTALLATION
-
-Move to the directory bioperl-ext. This is available as a separate
-package released from ftp://bioperl.org/pub/bioperl/DIST. This is
-where the C code and XS extension for the bp_sw module is held and
-execute these commands: (possibly after making the change for BSD and
-Solaris, as detailed above)
-
- perl Makefile.PL   # makes the system specific makefile
- make          # builds all the libaries
- make test     # runs a short test
- make install  # installs the package correctly.
-
-This should install the compiled extension. The Bio::Tools::pSW module
-will work cleanly now.
diff --git a/INSTALL-WIN.md b/INSTALL-WIN.md
new file mode 100644
index 0000000..bfed373
--- /dev/null
+++ b/INSTALL-WIN.md
@@ -0,0 +1,163 @@
+ 
+                         Installing Bioperl on Windows
+
+   Contents
+
+     * 1 Introduction
+     * 2 Perl Options
+     * 3 Installing Perl on Windows
+     * 4 CPAN for Strawberry Perl and ActivePerl
+     * 5 Bioperl in Cygwin
+
+1 Introduction
+
+This installation guide was written by Barry Moore, Nathan Haigh
+and other Bioperl authors based on the original work of Paul Boutros. The
+guide has been updated by Paul Cantalupo and Francisco Ossandon.
+*Note* For Windows it is recommended to install BioPerl version 1.6.924 or
+newer, since many Windows-specific bugs from previous versions were fixed.
+
+Please report problems and/or fixes to the BioPerl mailing list.
+
+2 Perl Options
+
+There are a couple of ways of installing Perl on a Windows machine. One is
+to get the most recent build from [Strawberry Perl](http://strawberryperl.com/)
+and the other is to get it from [ActiveState](http://www.activestate.com/).
+Both are software companies that provide free builds of Perl for Windows
+users.
+
+Strawberry Perl is recommended since is more CPAN-friendly and
+because it includes a compiler (gcc), related tools and other external
+libraries. These installation steps were verified on December 2015 using
+ActivePerl 5.20.2.2002 (5.22 has been released but the MinGW package is not
+available for it yet) and Strawberry Perl 5.22.0.1 from a clean install.
+
+*Note* Only ActivePerl **5.18 or greater** is supported by the BioPerl team.
+This is because the necessary MinGW package needed for CPAN installations
+is only available for both 32-bit and 64-bit Windows since this version
+(32-bit was available on previous versions but only in the Business edition,
+see [ActivePerl MinGW PPM webpage](http://www.activestate.com/activeperl/downloads)).
+
+*Note* Support for installation through ActivePerl Perl Package Manager has been dropped in favor of CPAN.
+
+3 Installing Perl on Windows
+
+1. Download the [Strawberry Perl MSI](http://strawberryperl.com/releases.html) or [ActivePerl MSI](http://www.activestate.com/activeperl/downloads).
+2. Run the Installer (accepting all defaults is fine).
+
+You can also build Perl yourself (which requires a C compiler). The Perl
+source for building it yourself is available from [CPAN](http://www.cpan.org/).
+This approach is not recommended unless you have specific reasons for doing so
+and know what you're doing.
+
+[Cygwin](http://en.wikipedia.org/wiki/Cygwin) is a [UNIX](http://en.wikipedia.org/wiki/UNIX)
+emulation environment for Windows and comes with its own copy of Perl. Information on Cygwin and Bioperl is found below.
+
+### Installation using the ActiveState Perl Package Manager
+
+This installation is not supported nor recommended anymore, because the last
+BioPerl package produced for it was the old version 1.6.1 (2009) and many
+Windows-specific bugs were fixed in more recent versions 1.6.923 and 1.6.924.
+Please install using the CPAN instructions below.
+
+4 CPAN for Strawberry Perl and ActivePerl
+
+Both CPAN and manual methods ultimately need the accessory compiling program
+MinGW, which incorporates the necessary tools like dmake and gcc. MinGW comes
+by default with Strawberry Perl, but must it be installed through PPM for
+ActivePerl (CPAN will display a warning if not present). Also, CPAN need to be
+upgraded to >= v1.81, [Module::Build](https://metacpan.org/pod/Module::Build)
+to be upgraded (>= v0.2805) and [Test::Harness](https://metacpan.org/pod/Test::Harness) to be upgraded to >= v2.62.
+
+### Dmake for ActivePerl
+
+1) Install MinGW package through PPM: Using a cmd window type
+
+`ppm install MinGW`.
+
+It is `important` to check if ActiveState provides the
+[MinGW package](http://code.activestate.com/ppm/MinGW/) for your ActivePerl version,
+since each version have to wait its own release. For example,
+although MinGW has been available since ActivePerl version 5.18,
+the release for newest version 5.22 it's still not available (December 2015).
+
+### Start the install with CPAN
+
+1) Open a cmd window by going to `Start >> Run` and typing `cmd`
+into the box and pressing return.
+
+2) Type `cpan` to enter the CPAN shell.
+
+3) At the `cpan>` prompt, type `install CPAN` to upgrade to the
+latest version.
+
+4) Quit (by typing 'q') and reload CPAN. You may be asked some
+configuration questions; accepting defaults is fine.
+
+5) At the `cpan>` prompt, type `o conf prefer_installer MB` to tell
+CPAN to prefer to use `Build.PL` scripts for installation, and the type `o conf commit` to save that choice.
+
+6) At the `cpan>` prompt, type `install Module::Build`.
+
+7) At the `cpan>` prompt, type `install Test::Harness`.
+
+8) At the `cpan>` prompt, type `install Test::Most`.
+
+### Finish the install with CPAN
+
+You can now follow the instructions INSTALLING BIOPERL THE EASY WAY
+USING CPAN in the INSTALL file.
+
+### Finish the install with BioPerl from GitHub
+
+For the bleeding edge version install manually using a ZIP file from the
+GitHub repository:
+
+1) Go to [GitHub](https://github.com/bioperl/bioperl-live) and press the
+`Download ZIP` button.
+
+2) Extract the archive in the normal way.
+
+3) In a cmd window `cd` to the directory you extracted to. Eg. if
+you extracted to directory 'bioperl-live', `cd bioperl-live`
+
+4) Type `perl Build.PL` and answer the questions appropriately.
+
+5) Type `perl Build test`. All the tests should pass, but if they don't,
+[let us know](https://github.com/bioperl/bioperl-live/issues). Your usage of
+Bioperl may not be affected by the failure, so you can choose to continue
+anyway.
+
+6) Type `perl Build install` to install Bioperl.
+
+5 Bioperl in Cygwin
+
+Cygwin is a Unix emulator and shell environment available free at
+http://www.cygwin.com. Some users claim that installation of Bioperl is
+easier within Cygwin than within Windows, but these may be users with UNIX
+backgrounds. A note on Cygwin: it doesn't write to your Registry, it doesn't
+alter your system or your existing files in any way, it doesn't create
+partitions, it simply creates a *cygwin/* directory and writes all of its
+files to that directory. To uninstall Cygwin just delete that directory.
+
+To get Bioperl running first install the basic Cygwin package as well as
+the Cygwin `perl`, `make`, `binutils`, and `gcc` packages. Clicking the View
+button in the upper right of the installer window enables you to see
+details on the various packages. Then start up Cygwin and follow the
+Bioperl installation instructions for UNIX in Bioperl's INSTALL file.
+
+Cygwin paths
+
+If you're trying to use some application or resource outside of the Cygwin
+directory and you're having a problem remember that Cygwin's path syntax
+may not be the correct one. Cygwin understands */home/jacky* or
+*/cygdrive/e/cygwin/home/jacky* (when referring to the E: drive) but the
+external resource may want *E:/cygwin/home/jacky*. So your *rc files may end
+up with paths written in these different syntaxes, depending.
+
+For example, here's how to set the environmental variable TMPDIR, programs 
+like BLAST and clustalw need a place to create temporary files:
+
+     setenv TMPDIR e:/cygwin/tmp    # csh, tcsh
+     export TMPDIR=e:/cygwin/tmp    # sh, bash
diff --git a/INSTALL.WIN b/INSTALL.WIN
deleted file mode 100644
index 82e3efc..0000000
--- a/INSTALL.WIN
+++ /dev/null
@@ -1,672 +0,0 @@
-# $Id$
-
-                         Installing Bioperl on Windows
-
-   Contents
-
-     * 1 Introduction
-     * 2 Requirements
-     * 3 Installation using the ActiveState Perl Package Manager
-     
-          * 3.1 GUI Installation
-          * 3.2 Comand-line Installation
-          
-     * 4 Installation using CPAN or manual installation
-     * 5 Bioperl
-     * 6 Bioperl on Windows
-     * 7 Beyond the Core
-
-          * 7.1 Setting environment variables
-          * 7.2 Installing bioperl-db
-
-     * 8 Bioperl in Cygwin
-     * 9 bioperl-db in Cygwin
-     * 10 Cygwin tips
-     * 11 MySQL and DBD::mysql
-     * 12 Expat
-     * 13 Directory for temporary files
-     * 14 BLAST
-     * 15 Compiling C code
-
-Introduction
-
-   This installation guide was written by Barry Moore, Nathan Haigh
-   and other Bioperl authors based on the original work of Paul Boutros. The
-   guide was updated for the BioPerl wiki by Chris Fields and Nathan
-   Haigh.
-
-   Please report problems and/or fixes to the BioPerl mailing list.
-   
-   An up-to-date version of this document can be found on the BioPerl wiki:
-   
-   http://www.bioperl.org/wiki/Installing_Bioperl_on_Windows
-
-Requirements
-
-   There are a couple of ways of installing Perl on a Windows machine. One is
-   to get the most recent build from Strawberry Perl, and the other is to get
-   it from ActiveState; both are software companies that provides free builds
-   of Perl for Windows users, but Strawberry Perl is recommended since is more
-   CPAN friendly because it includes a compiler (gcc), related tools and other
-   external libraries. The current (March 2014) build is 5.18.2.
-
-   NOTE - Only Perl >= 5.8.8.819 is supported by the BioPerl team. Earlier
-   versions may work, but we do not support them. Perl 5.18 also works. One of
-   the reason for this requirement is that ActivePerl >= 5.8.8.819 now use Perl
-   Package Manager 4 (PPM4). PPM4 is now superior to earlier versions and also
-   includes a Graphical User Interface (GUI). In short, it's easier for us to
-   produce and maintain a package for installation via PPM and also easier for
-   you to do the install! Proceed with earlier versions at your own risk.
-
-   To install Perl on Windows:
-
-           1) Download the Strawberry Perl MSI from
-           http://strawberryperl.com/releases.html or ActivePerl MSI from
-           http://www.activestate.com/activeperl/downloads.
-
-           2) Run the Installer (accepting all defaults is fine).
-
-   You can also build Perl yourself (which requires a C compiler) or download
-   one of the other binary distributions. The Perl source for building it
-   yourself is available from CPAN, as are a few other binary distributions
-   that are alternatives to ActiveState. This approach is not recommended
-   unless you have specific reasons for doing so and know what you're doing.
-   If that's the case you probably don't need to be reading this guide.
-
-   Cygwin is a UNIX emulation environment for Windows and comes with its own
-   copy of Perl.
-
-   Information on Cygwin and Bioperl is found below. 
-
-Installation using the ActiveState Perl Package Manager
-
-  GUI Installation
-
-           1) Start the Perl Package Manager GUI from the Start menu.
-
-           2) Go to Edit >> Preferences and click the Repositories tab. Add a
-           new repository for each of the following (note the difference based
-           on the perl version). NOTE - The DB_File installed with ActivePerl
-           5.10 and above is a stub (i.e. it does not work). The Trouchelle
-           database below has a working DB_File.
-
-                              Repositories to add
-       +----------------------------------------------------------------+
-       |           Name           |              Location               |
-       |--------------------------+-------------------------------------|
-       |BioPerl-Release Candidates|http://bioperl.org/DIST/RC           |
-       |--------------------------+-------------------------------------|
-       |BioPerl-Regular Releases  |http://bioperl.org/DIST              |
-       |--------------------------+-------------------------------------|
-       |Kobes                     |http://theoryx5.uwinnipeg.ca/ppms    |
-       |--------------------------+-------------------------------------|
-       |Bribes                    |http://www.Bribes.org/perl/ppm       |
-       |--------------------------+-------------------------------------|
-       |Trouchelle                |http://trouchelle.com/ppm            |
-       +----------------------------------------------------------------+
-
-           3) Select View >> All Packages.
-
-           4) In the search box type bioperl.
-
-           5) Right click the latest version of Bioperl available and choose
-           install. (Note for users of previous Bioperl releases: you should
-           not have to use the Bundle-BioPerl package anymore.)
-
-           5a) From bioperl 1.5.2 onward, all 'optional' pre-requisites will
-           be marked for installation. If you see that some of them complain
-           about needing a command-line installation (eg. XML::SAX::ExpatXS),
-           and you want those particular pre-requisites, stop now (skip step
-           6) and see the 'Command-line Installation' section.
-
-           6) Click the green arrow (Run marked actions) to complete the
-           installation.
-
-  Comand-line Installation
-
-           Use the ActiveState ppm-shell:
-
-	   1) Open a cmd window by going to Start >> Run and typing
-	   'cmd' and pressing return.
-
-           2) Do 
-	      C:> ppm-shell
-	      ppm>
-           
-           3) Make sure you have the module PPM-Repositories. Try
-           installing it:
-              ppm> install PPM-Repositories
-
-           4) For BioPerl 1.6.1, we require at least the following
-           repositories. You may have some present already.
-
-              ppm> repo add http://bioperl.org/DIST
-              ppm> repo add uwinnipeg
-              ppm> repo add trouchelle
-
-           Because you have installed PPM-Repositories, PPM will know
-           your Perl version, and select the correct repo from the
-           table above.
-
-           5) Install BioPerl (not "bioperl"). 
-
-              ppm> install BioPerl
-
-           If you are running ActiveState Perl 5.10, you may have a
-           glitch involving SOAP::Lite. Use the following workaround:
-
-           1) Get the index numbers for your active repositories: 
-
-              ppm> repo
-
-              | id | pkgs  | name                           |
-              |  1 | 11431 | ActiveState Package Repository |
-              |  2 |    14 | bioperl.org                    |
-              |  3 |   291 | uwinnipeg                      |
-              |  4 | 11755 | trouchelle                     | 
-
-           2) Execute the following commands. (The session here is
-           based on the above table. Substitute the correct index
-           numbers for your situation.)
-
-              rem -turn off ActiveState, trouchelle repos
-              ppm> repo off 1
-              ppm> repo off 4
-              rem -to get SOAP-Lite-0.69 from uwinnipeg...
-              ppm> install SOAP-Lite
-              rem -turn ActiveState, trouchelle back on...
-              ppm> repo on 1
-              ppm> repo on 4
-              rem -now try...
-              ppm> install BioPerl
-
-Installation using CPAN or manual installation
-
-   When using ActivePerl, installation using PPM is preferred since it is
-   easier, but if you run into problems, or a PPM isn't available for the
-   latest version/package of BioPerl, or you want to choose which optional
-   dependencies to install, you can install manually by downloading the
-   appropriate package or by using CPAN (installation using CPAN will always
-   get you the latest version). Both manual methods ultimately need an
-   accessory compiling program like MinGW, which incorporates the necessary
-   tools like dmake and gcc. MinGW comes by default with Strawberry Perl, but
-   must be installed through PPM for ActivePerl. Also CPAN neeed to be upgraded
-   to >= v1.81, Module::Build to be installed (>= v0.2805) and Test::Harness to
-   be upgraded to >= v2.62:
-
-   Dmake for ActivePerl
-
-           1) Install MinGW package through PPM: Using a cmd window type
-           'ppm install MinGW' for 32bits Windows or 'ppm install MinGW64' for
-           64bits Windows. Is IMPORTANT to check previously if ActiveState
-           provides the MinGW package for your ActivePerl version. For example,
-           although ActivePerl 5.18.2.1802 is currently available (May 2014),
-           the download page point mainly at ActivePerl 5.16.3.1604, and the
-           MinGW package is available for version 5.16 but NOT for version 5.18.
-
-   CPAN for ActivePerl and Strawberry Perl
-
-           1) Open a cmd window by going to Start >> Run and typing 'cmd'
-           into the box and pressing return.
-
-           2) Type 'cpan' to enter the CPAN shell.
-
-           3) At the cpan> prompt, type 'install CPAN' to upgrade to the
-           latest version.
-
-           4) Quit (by typing 'q') and reload cpan. You may be asked some
-           configuration questions; accepting defaults is fine.
-
-           5) At the cpan> prompt, type 'o conf prefer_installer MB' to tell
-           CPAN to prefer to use Build.PL scripts for installation. Type 'o
-           conf commit' to save that choice.
-
-           6) At the cpan> prompt, type 'install Module::Build'.
-
-           7) At the cpan> prompt, type 'install Test::Harness'.
-
-           8) At the cpan> prompt, type 'install Test::Most'.
-
-   You can now follow the unix instructions for installing using CPAN
-   (preferred), or install manually:
-
-           9) Download the .zip version of the package you want.
-
-           10) Extract the archive in the normal way.
-
-           11) In a cmd window 'cd' to the directory you extracted to. Eg. if
-           you extracted to directory 'Temp', 'cd Temp\bioperl-1.5.2_100'
-
-           12) Type 'perl Build.PL' and answer the questions appropriately.
-
-           13) Type 'perl Build test'. All the tests should pass, but if they
-           don't, let us know. Your usage of Bioperl may not be affected
-           by the failure, so you can choose to continue anyway.
-
-           14) Type 'perl Build install' to install Bioperl.
-
-Bioperl
-
-   Bioperl is a large collection of Perl modules (extensions to the
-   Perl language) that aid in the task of writing Perl code to deal
-   with sequence data in a myriad of ways. Bioperl provides objects for
-   various types of sequence data and their associated features and
-   annotations. It provides interfaces for analysis of these sequences with a
-   wide variety of external programs (BLAST, FASTA, clustalw and
-   EMBOSS to name just a few). It provides interfaces to various types of
-   databases both remote (GenBank, EMBL etc) and local (MySQL,
-   Flat_databases flat files, GFF etc.) for storage and retrieval of
-   sequences. And finally with its associated documentation and
-   mailing lists, Bioperl represents a community of bioinformatics
-   professionals working in Perl who are committed to supporting both
-   development of Bioperl and the new users who are drawn to the project.
-
-   While most bioinformatics and computational biology applications are
-   developed in UNIX/Linux environments, more and more programs are
-   being ported to other operating systems like Windows, and many users
-   (often biologists with little background in programming) are looking for
-   ways to automate bioinformatics analyses in the Windows environment.
-
-   Perl and Bioperl can be installed natively on Windows NT/2000/XP.
-   Most of the functionality of Bioperl is available with this type of
-   install. Much of the heavy lifting in bioinformatics is done by programs
-   originally developed in lower level languages like C and Pascal
-   (e.g. BLAST, clustalw, Staden etc). Bioperl simply acts as
-   a wrapper for running and parsing output from these external programs.
-
-   Some of those programs (BLAST for example) are ported to Windows.
-   These can be installed and work quite happily with Bioperl in the native
-   Windows environment. Some external programs such as Staden and the
-   EMBOSS suite of programs can only be installed on Windows by using
-   Cygwin and its gcc C compiler (see Bioperl in Cygwin, below).
-   Recent attempts to port EMBOSS to Windows, however, have been mostly
-   successful.
-
-   If you have a fairly simple project in mind, want to start using Bioperl
-   quickly, only have access to a computer running Windows, and/or don't mind
-   bumping up against some limitations then Bioperl on Windows may be a
-   good place for you to start. For example, downloading a bunch of sequences
-   from GenBank and sorting out the ones that have a particular
-   annotation or feature works great. Running a bunch of your sequences
-   against remote or local BLAST, parsing the output and storing it
-   in a MySQL database would be fine also.
-
-   Be aware that most Bioperl developers are working in some type of a
-   UNIX environment (Linux, OS X, Cygwin). If you have
-   problems with Bioperl that are specific to the Windows environment, you
-   may be blazing new ground and your pleas for help on the Bioperl mailing
-   list may get few responses (you can but try!) - simply because no one
-   knows the answer to your Windows specific problem. If this is or becomes a
-   problem for you then you are better off working in some type of UNIX-like
-   environment. One solution to this problem that will keep you working on a
-   Windows machine it to install Cygwin, a UNIX emulation environment for
-   Windows. A number of Bioperl users are using this approach successfully
-   and it is discussed in more detail below.
-
-Bioperl on Windows
-
-   Perl is a programming language that has been extended a lot by the
-   addition of external modules.
-
-   These modules work with the core language to extend the functionality of
-   Perl.
-
-   Bioperl is one such extension to Perl. These modular extensions to
-   Perl sometimes depend on the functionality of other Perl modules and this
-   creates a dependency. You can't install module X unless you have already
-   installed module Y. Some Perl modules are so fundamentally useful that the
-   Perl developers have included them in the core distribution of Perl - if
-   you've installed Perl then these modules are already installed. Other
-   modules are freely available from CPAN, but you'll have to install them
-   yourself if you want to use them. Bioperl has such dependencies.
-
-   Bioperl is actually a large collection of Perl modules (over 1000
-   currently) and these modules are split into seven packages. These seven
-   packages are:
-
-   +------------------------------------------------------------------------+
-   |    Bioperl Group     |                    Functions                    |
-   |----------------------+-------------------------------------------------|
-   |bioperl (the core)    |Most of the main functionality of Bioperl        |
-   |----------------------+-------------------------------------------------|
-   |bioperl-run           |Wrappers to a lot of external programs           |
-   |----------------------+-------------------------------------------------|
-   |bioperl-ext           |Interaction with some alignment functions and the|
-   |                      |Staden package                                   |
-   |----------------------+-------------------------------------------------|
-   |bioperl-db            |Using Bioperl with BioSQL and local relational   |
-   |                      |databases                                        |
-   |----------------------+-------------------------------------------------|
-   |bioperl-microarray    |Microarray specific functions                    |
-   |----------------------+-------------------------------------------------|
-   |bioperl-pedigree      |manipulating genotype, marker, and individual    |
-   |                      |data for linkage studies                         |
-   |----------------------+-------------------------------------------------|
-   |bioperl-gui           |Some preliminary work on a graphical user        |
-   |                      |interface to some Bioperl functions              |
-   +------------------------------------------------------------------------+
-
-   The Bioperl core is what most new users will want to start with. Bioperl
-   (the core) and the Perl modules that it depends on can be easily installed
-   with the perl package Manager PPM. PPM is an ActivePerl utility for
-   installing Perl modules on systems using ActivePerl. PPM will look online
-   (you have to be connected to the internet of course) for files (these
-   files end with .ppd) that tell it how to install the modules you want and
-   what other modules your new modules depends on. It will then download and
-   install your modules and all dependent modules for you.
-
-   These .ppd files are stored online in PPM repositories. ActiveState
-   maintains the largest PPM repository and when you installed ActivePerl PPM
-   was installed with directions for using the ActiveState repositories.
-   Unfortunately the ActiveState repositories are far from complete and other
-   ActivePerl users maintain their own PPM repositories to fill in the gaps.
-   Installing will require you to direct PPM to look in three new
-   repositories as detailed in Installation Guide.
-
-   Once PPM knows where to look for Bioperl and it's dependencies you simply
-   tell PPM to search for packages with a particular name, select those of
-   interest and then tell PPM to install the selected packages.
-
-Beyond the Core
-
-   You may find that you want some of the features of other Bioperl groups
-   like bioperl-run or bioperl-db. Currently, plans include setting up PPM
-   packages for installing these parts of Bioperl; check this by doing a
-   Bioperl search in PPM.  If these are not available, though, you can use
-   the following instructions for installing the other distributions.
-
-   For bioperl-run, bioperl-db and bioperl-network v1.5.2 or higher you can use
-   the PPD or CPAN installation instructions above. For other packages you will
-   need nmake (see also the CPAN installation instructions), and a willingness
-   to experiment. You'll have to read the installation documents for each
-   component that you want to install, and use nmake where the instructions
-   call for make, like so:
-
- perl Makefile.PL
- nmake
- nmake test
- nmake install
-
-   'nmake test' will likely produce lots of warnings, many of these can be
-   safely ignored. You will have to determine from the installation documents
-   what dependencies are required, and you will have to get them, read their
-   documentation and install them first. It is recommended that you look
-   through the PPM repositories for any modules before resorting to using nmake
-   as there isn't any guarantee modules built using nmake will work. The
-   details of this are beyond the scope of this guide. Read the documentation.
-   Search Google. Try your best, and if you get stuck consult with others on
-   the BioPerl mailing list.
-
-    Setting environment variables
-
-   Some modules and tools such as Bio::Tools::Run::StandAloneBlast and
-   clustal_w, require that environment variables are set; a few examples
-   are listed in the INSTALL document. Different versions of Windows utilize
-   different methods for setting these variables. NOTE: The instructions that
-   comes with the BLAST executables for setting up BLAST on Windows are
-   out-of-date. Go to the following web address for instructions on setting
-   up standalone BLAST for Windows:
-   http://www.ncbi.nlm.nih.gov/staff/tao/URLAPI/pc_setup.html
-
-     * For Windows XP, go here. This does not require a reboot but all
-       active shells will not reflect any changes made to the environment.
-     * For older versions (Windows 95 to ME), generally editing the
-       C:\autoexec.bat file to add a variable works. This requires a reboot.
-       Here's an example:
-
- set BLASTDB=C:\blast\data
-
-   For either case, you can check the variable this way:
-
- C:\Documents and Settings\Administrator>echo %BLASTDB%
- C:\blast\data
-
-   Some versions of Windows may have problems differentiating forward and
-   back slashes used for directories. In general, always use backslashes (\).
-   If something isn't working properly try reversing the slashes to see if it
-   helps.
-
-   For setting up Cygwin environment variables quirks, see an example
-   below.
-
-    Installing bioperl-db
-
-   bioperl-db now works for Windows w/o installing CygWin. This has
-   primarily been tested on WinXP using MySQL5, but it is expected that other
-   bioperl-db supported databases (PostgreSQL, Oracle) should work.
-
-   You will need Bioperl rel. 1.5.2, a relational database (I use MySQL5 here
-   as an example), and the Perl modules DBI and DBD::mysql, which
-   can be installed from PPM as desribed above (make sure the additional
-   repositories for Kobes and Bribes are added, they will have the latest
-   releases). Do NOT try using nmake with these modules as they will not
-   build correctly under Windows! The PPM builds, by Randy Kobes, have been
-   modified and tested specifically for Windows and ActivePerl.
-
-   NOTE: we plan on having a PPM for bioperl-db available along with the
-   regular bioperl 1.5.2 release PPM. We will post instructions at that
-   time on using PPM to install bioperl-db.
-
-   To begin, follow instructions detailed in the Installation Guide for
-   adding the three new repositories (Bioperl, Kobes and Bribes). Then
-   install the following packages:
-
-           1) DBI
-           2) DBD-mysql
-
-   The next step involves creating a database. The following steps are for
-   MySQL5:
-
- >mysqladmin -u root -p create bioseqdb
- Enter password: **********
-
-   The database needs to be loaded with the BioSQL schema, which can be
-   downloaded as a tarball here.
-
- >mysql -u root -p bioseqdb < biosqldb-mysql.sql
- Enter password: **********
-
-   Download bioperl-db from the anonymous Git repository. Use the following
-   to install the modules:
-
- perl Makefile.PL
- nmake
-
-   Now, for testing out bioperl-db, make a copy of the file
-   DBHarness.conf.example in the bioperl-db test subdirectory (bioperl-db\t).
-   Rename it to DBHarness.biosql.conf, and modify it for your database setup
-   (particularly the user, password, database name, and driver). Save the
-   file, change back to the main bioperl-db directory, and run 'nmake test'.
-   You may see lots of the following lines,
-
- ....
- Subroutine Bio::Annotation::Reference::(eq redefined at C:/Perl/lib/overload.pm line 25,
-     <GEN0> line 1.
- Subroutine new redefined at C:\Perl\src\bioperl\bioperl-live/Bio\Annotation\Reference.pm line 80,
-     <GEN0> line 1.
- ....
-
-   which can be safely ignored (again, these come from ActivePerl's paranoid
-   '-w' flag). All tests should pass. NOTE : tests should be run with
-   a clean database with the BiOSQL schema loaded, but w/o taxonomy loaded
-   (see below).
-
-   To install, run:
-
- nmake install
-
-   It is recommended that you load the taxonomy database using the script
-   load_ncbi_taxonomy.pl included in biosql-schema\scripts. You will need to
-   download the latest taxonomy files. This can be accomplished using the
-   -download flag in load_ncbi_taxonomy.pl, but it will not 'untar' the file
-   correctly unless you have GNU tar present in your PATH (which most Windows
-   users will not have), thus causing the following error:
-
- >load_ncbi_taxonomy.pl -download -driver mysql -dbname bioseqdb -dbuser root -dbpass **********
- The system cannot find the path specified.
- Loading NCBI taxon database in taxdata:
-         ... retrieving all taxon nodes in the database
-         ... reading in taxon nodes from nodes.dmp
- Couldn't open data file taxdata/nodes.dmp: No such file or directory rollback ineffective with
- AutoCommit enabled at C:\Perl\src\bioperl\biosql-schema\scripts\load_ncbi_taxonomy.pl line 818.
- Rollback ineffective while AutoCommit is on at
- C:\Perl\src\bioperl\biosql-schema\scripts\load_ncbi_taxonomy.pl line 818.
- rollback failed: Rollback ineffective while AutoCommit is on
-
-   Use a file decompression utility like 7-Zip to 'untar' the files in
-   the folder (if using 7-Zip, this can be accomplished by right-clicking on
-   the file and using the option 'Extract here'). Rerun the script without
-   the -download flag to load the taxonomic information. Be patient, as this
-   can take quite a while:
-
- >load_ncbi_taxonomy.pl -driver mysql -dbname bioseqdb -dbuser root -dbpass **********
-
- Loading NCBI taxon database in taxdata:
-         ... retrieving all taxon nodes in the database
-         ... reading in taxon nodes from nodes.dmp
-         ... insert / update / delete taxon nodes
-         ... (committing nodes)
-         ... rebuilding nested set left/right values
-         ... reading in taxon names from names.dmp
-         ... deleting old taxon names
-         ... inserting new taxon names
-         ... cleaning up
- Done.
-
-   Now, load the database with your sequences using the script
-   load_seqdatabase.pl, in bioperl-db's bioperl-db\script directory:
-
- C:\Perl\src\bioperl\bioperl-db\scripts\biosql>load_seqdatabase.pl -drive mysql
-                               -dbname bioseqdb -dbuser root -dbpass **********
- Loading NP_249092.gpt ...
- Done.
-
-   You may see occasional errors depending on the sequence format, which is a
-   non-platform-related issue. Many of these are due to not having an updated
-   taxonomic database and may be rectified by updating the taxonomic
-   information as detailed in load_ncbi_taxonomy.pl's POD.
-
-   Thanks to Baohua Wang, who found the initial Windows-specific problem in
-   Bio::Root::Root that led to this fix, to Sendu Bala for fixing
-   Bug #1938, and to Hilmar Lapp for his input.
-
-Bioperl in Cygwin
-
-   Cygwin is a Unix emulator and shell environment available free at
-   http://www.cygwin.com. Bioperl v. 1.* supposedly runs well within Cygwin,
-   though the latest release has not been tested with Cygwin yet. Some
-   users claim that installation of Bioperl is easier within Cygwin than
-   within Windows, but these may be users with UNIX backgrounds. A note on
-   Cygwin: it doesn't write to your Registry, it doesn't alter your system or
-   your existing files in any way, it doesn't create partitions, it simply
-   creates a cygwin/ directory and writes all of its files to that directory.
-   To uninstall Cygwin just delete that directory.
-
-   One advantage of using Bioperl in Cygwin is that all the external modules
-   are available through CPAN - the same cannot be said of ActiveState's PPM
-   utility.
-
-   To get Bioperl running first install the basic Cygwin package as well as
-   the Cygwin perl, make, binutils, and gcc packages. Clicking the View
-   button in the upper right of the installer window enables you to see
-   details on the various packages. Then start up Cygwin and follow the
-   Bioperl installation instructions for UNIX in Bioperl's INSTALL file
-   (for example, THE BIOPERL BUNDLE and INSTALLING BIOPERL THE EASY WAY USING
-   CPAN).
-
-bioperl-db in Cygwin
-
-   This package is installed using the instructions contained in the package,
-   without modification. Since postgres is a package within Cygwin this is
-   probably the easiest of the 3 platforms supported in bioperl-db to
-   install (postgres, Mysql, Oracle).
-
-Cygwin tips
-
-   If you can, install Cygwin on a drive or partition that's
-   NTFS-formatted, not FAT32-formatted. When you install Cygwin on
-   a FAT32 partition you will not be able to set permissions and ownership
-   correctly. In most situations this probably won't make any difference but
-   there may be occasions where this is a problem.
-
-   If you're trying to use some application or resource outside of Cygwin
-   directory and you're having a problem remember that Cygwin's path syntax
-   may not be the correct one. Cygwin understands /home/jacky or
-   /cygdrive/e/cygwin/home/jacky (when referring to the E: drive) but the
-   external resource may want E:/cygwin/home/jacky. So your *rc files may end
-   up with paths written in these different syntaxes, depending.
-
-MySQL and DBD::mysql
-
-   You may want to install a relational database in order to use BioPerl
-   db, BioSQL or OBDA. The easiest way to install Mysql is to use
-   the Windows binaries available at http://www.mysql.com. Note that
-   Windows does not have sockets, so you need to force the Mysql connections
-   to use TCP/IP instead. Do this by using the -h, or host, option from the
-   command-line. Example:
-
- >mysql -h 127.0.0.1 -u <user> -p<password> <database>
-
-   Alternatively you could install postgres instead of MySQL, postgres is
-   already a package in Cygwin.
-
-   One known issue is that DBD::mysql can be tricky to install in Cygwin
-   and this module is required for the bioperl-db, Biosql, and
-   bioperl-pipeline external packages. Fortunately there's some good
-   instructions online:
-
-     * Instructions included with DBD::mysql:
-       http://search.cpan.org/src/JWIED/DBD-mysql-2.1025/INSTALL.html#windows/cygwin
-       
-     * Additional instructions if you run into any problems; this
-       information is more up-to-date, covers post-2.9 DBD::mysql quirks in
-       Cygwin.
-       http://rage.against.org/installingdbdmysqlInCygwin
-
-Expat
-
-   Note that expat comes with Cygwin (it's used by the modules
-   XML::Parser and XML::SAX::ExpatXS, which are used by certain
-   Bioperl modules).
-
-Directory for temporary files
-
-   Set the environmental variable TMPDIR, programs like BLAST and
-   clustalw need a place to create temporary files. e.g.:
-
- setenv TMPDIR e:/cygwin/tmp     # csh, tcsh
- export TMPDIR=e:/cygwin/tmp    # sh, bash
-
-   This is not the syntax that Cygwin understands, which would be something
-   like /cygdrive/e/cygwin/tmp or /tmp, this is the syntax that a Windows
-   application expects.
-
-   If this variable is not set correctly you'll see errors like this when you
-   run Bio::Tools::Run::StandAloneBlast:
-
-   ------------- EXCEPTION: Bio::Root::Exception -------------
-   MSG: Could not open /tmp/gXkwEbrL0a: No such file or directory
-   STACK: Error::throw
-   ..........
-
-   [edit]
-
-BLAST
-
-   If you want use BLAST we recommend that the Windows binary be obtained from
-   NCBI (ftp://ftp.ncbi.nih.gov/blast/executables/blast+/LATEST/ - the file
-   will be named something like ncbi-blast-2.2.29+-win64.exe). Then follow the
-   Windows instructions from BLAST Help
-   (http://www.ncbi.nlm.nih.gov/books/NBK1762). You will also need to set the
-   BLASTDIR environment variable to reflect the directory which holds the blast
-   executable and data folder. You may also want to set other variables to
-   reflect the location of your databases and substitution matrices if they
-   differ from the location of your blast executables; see Installing Bioperl
-   for Unix for more details.
-
-Compiling C code
-
-   Although we've recommended using the BLAST and MySQL binaries
-   you should be able to compile just about everything else from source code
-   using Cygwin's gcc. You'll notice when you're installing Cygwin that many
-   different libraries are also available (gd, jpeg, etc.).
diff --git a/INSTALL.md b/INSTALL.md
new file mode 100644
index 0000000..ae26a95
--- /dev/null
+++ b/INSTALL.md
@@ -0,0 +1,176 @@
+LATEST VERSION
+
+The current version of BioPerl is 1.6.924 (https://metacpan.org/pod/BioPerl).
+
+BIOPERL INSTALLATION
+
+The following are instructions for installing BioPerl on
+Unix, Linux, and Mac OS X. Windows installation instructions can be 
+found in INSTALL.WIN.
+
+
+SYSTEM REQUIREMENTS
+
+ * `Perl 5.6.1 or higher` Version 5.8 or higher is highly
+   recommended. Modules are tested against version 5.8 and
+   above.
+ * `make` For Mac OS X, this requires installing the Xcode Developer 
+   Tools.
+
+
+PRELIMINARY PREPARATION
+
+These are optional, but regardless of your subsequent choice of
+installation method, it will help to carry out the following steps.
+They will increase the likelihood of installation success
+(especially of the optional dependencies).
+
+* Upgrade CPAN:
+
+perl -MCPAN -e shell
+
+* Install or upgrade `Module::Build`, and make it your preferred installer:
+
+cpan>install Module::Build
+cpan>o conf prefer_installer MB
+cpan>o conf commit
+
+* Install the *expat* library by whatever method is appropriate for your system (e.g. `apt`, `yum`, `homebrew`).
+
+
+INSTALLING BIOPERL THE EASY WAY USING CPAN
+
+You can use the CPAN shell to install BioPerl. For example:
+
+perl -MCPAN -e shell
+
+Or you might have the `cpan` alias installed:
+
+cpan
+
+Then find the name of the latest BioPerl package:
+
+cpan>d /bioperl/
+
+ ....
+
+ Distribution    CJFIELDS/BioPerl-1.6.901.tar.gz
+ Distribution    CJFIELDS/BioPerl-1.6.922.tar.gz
+ Distribution    CJFIELDS/BioPerl-1.6.924.tar.gz
+
+And install the most recent:
+
+cpan>install CJFIELDS/BioPerl-1.6.924.tar.gz
+
+If you've installed everything perfectly and all the network
+connections are working then you will pass all the tests run in the
+`./Build test` phase. Sometimes you may see a failed test. Remember that 
+there are over 900 modules in BioPerl and the test suite is running more 
+than 12000 individual tests, a failed test may not affect your usage 
+of BioPerl.
+
+If there's a failed test and you think that the failed test will not 
+affect how you intend to use BioPerl then do:
+
+cpan>force install C/CJ/CJFIELDS/BioPerl-1.6.923.tar.gz
+
+If you're concerned about a failed test and need assistance or advice
+then contact bioperl-l at bioperl.org, and provide us the detailed
+results of the failed install.
+
+
+INSTALLING BIOPERL FROM GITHUB
+
+The very latest version of Bioperl is at github.com. If you want this 
+version then download it from https://github.com/bioperl/bioperl-live
+as a *zip file, or retrieve it using the command line:
+
+git clone https://github.com/bioperl/bioperl-live.git
+cd bioperl-live
+
+If you've downloaded the *zip file then unzip that and cd to the
+BioPerl directory.
+
+Issue the build commands:
+
+perl Build.PL
+
+You will be asked a few questions about installing BioPerl scripts
+and running various test suites, hit *return* to accept the defaults.
+
+Test:
+
+./Build test
+
+Install:
+
+./Build install
+
+You may need root permissions in order to run `./Build install`, so you 
+will want to talk to your systems manager if you don't have the necessary
+privileges. Or you can install the package in your own home
+directory, see INSTALLING BIOPERL USING local::lib.
+
+
+INSTALLING BIOPERL USING local::lib
+
+If you lack permission to install Perl modules into the standard
+system directories you can install them in your home directory
+using `local::lib`. The instructions for first installing
+`local::lib` are found here:
+
+https://metacpan.org/pod/local::lib
+
+Once `local::lib` is installed you can install BioPerl using a 
+command like this:
+
+perl -MCPAN -Mlocal::lib -e 'CPAN::install(C/CJ/CJFIELDS/BioPerl-1.6.924.tar.gz)'
+
+INSTALLING BIOPERL SCRIPTS
+
+BioPerl comes with a set of production-quality scripts that are
+kept in the scripts/ directory. You can install these scripts if you'd
+like, simply answer the questions during `perl Build.PL`.
+The installation directory can be specified by:
+
+perl Build.PL
+./Build install --install_path script=/foo/scripts
+
+By default they install to */usr/bin* or similar, depending on platform.
+
+
+THE TEST SYSTEM
+
+The BioPerl test system is located in the *t/* directory and is
+automatically run whenever you execute the `./Build test` command.
+
+The tests have been organized into groups
+based upon the specific task or class the module being tested belongs
+to. If you want to investigate the behavior of a specific test such as
+the Seq test you would type:
+
+./Build test --test_files t/Seq/Seq.t --verbose
+
+The `--test_files` argument can be used multiple times to try a set of test 
+scripts in one go. The `--verbose` arguement outputs the detailed test results, instead of just the summary you see during `./Build test`.
+
+The `--test-files` argument can also work as a glob. For instance, to
+run tests on all SearchIO modules, use the following:
+
+./Build test --test_files t/SearchIO* --verbose
+
+If you are trying to learn how to use a module, often the test suite
+is a good place to look. All good extreme programmers try and write a
+test BEFORE they write the module to insure that their module behaves
+the way they expect. You'll notice some `ok` and `skip` commands in a
+test, this is part of the Perl test suite that signifies a passed test
+with an 'ok N', where N is the test number. Alternatively you can tell
+Perl to skip tests. This is useful when, for example, your test
+detects that the network is not present and thus should skip, not
+fail, any tests that require a network connection.
+
+The core developers have indicated that future releases of BioPerl
+will require that new modules come with a test suite with some minimal
+tests.  Modules that lack adequate tests or could otherwise be
+considered 'unstable' will be moved into a separate developer
+distribution until adequate tests are added and the API stablizes.
diff --git a/MANIFEST b/MANIFEST
index 5b609f0..7b747bc 100644
--- a/MANIFEST
+++ b/MANIFEST
@@ -75,18 +75,6 @@ Bio/ClusterIO/dbsnp.pm
 Bio/ClusterIO/unigene.pm
 Bio/CodonUsage/IO.pm
 Bio/CodonUsage/Table.pm
-Bio/Coordinate/Chain.pm
-Bio/Coordinate/Collection.pm
-Bio/Coordinate/ExtrapolatingPair.pm
-Bio/Coordinate/GeneMapper.pm
-Bio/Coordinate/Graph.pm
-Bio/Coordinate/MapperI.pm
-Bio/Coordinate/Pair.pm
-Bio/Coordinate/Result.pm
-Bio/Coordinate/Result/Gap.pm
-Bio/Coordinate/Result/Match.pm
-Bio/Coordinate/ResultI.pm
-Bio/Coordinate/Utils.pm
 Bio/Das/FeatureTypeI.pm
 Bio/Das/SegmentI.pm
 Bio/DasI.pm
@@ -196,7 +184,6 @@ Bio/DB/SeqFeature/Store/GFF3Loader.pm
 Bio/DB/SeqFeature/Store/Loader.pm
 Bio/DB/SeqFeature/Store/LoadHelper.pm
 Bio/DB/SeqFeature/Store/memory.pm
-Bio/DB/SeqHound.pm
 Bio/DB/SeqI.pm
 Bio/DB/SeqVersion.pm
 Bio/DB/SeqVersion/gi.pm
@@ -207,6 +194,7 @@ Bio/DB/Taxonomy/flatfile.pm
 Bio/DB/Taxonomy/greengenes.pm
 Bio/DB/Taxonomy/list.pm
 Bio/DB/Taxonomy/silva.pm
+Bio/DB/Taxonomy/sqlite.pm
 Bio/DB/TFBS.pm
 Bio/DB/TFBS/transfac_pro.pm
 Bio/DB/Universal.pm
@@ -439,6 +427,7 @@ Bio/Root/Root.pm
 Bio/Root/RootI.pm
 Bio/Root/Storable.pm
 Bio/Root/Test.pm
+Bio/Root/TestObject.pm
 Bio/Root/Utilities.pm
 Bio/Root/Version.pm
 Bio/Search/BlastStatistics.pm
@@ -481,6 +470,7 @@ Bio/Search/Result/GenericResult.pm
 Bio/Search/Result/hmmer3Result.pm
 Bio/Search/Result/HMMERResult.pm
 Bio/Search/Result/HmmpfamResult.pm
+Bio/Search/Result/INFERNALResult.pm
 Bio/Search/Result/PullResultI.pm
 Bio/Search/Result/ResultFactory.pm
 Bio/Search/Result/ResultI.pm
@@ -496,7 +486,6 @@ Bio/SearchIO/axt.pm
 Bio/SearchIO/blast.pm
 Bio/SearchIO/blast_pull.pm
 Bio/SearchIO/blasttable.pm
-Bio/SearchIO/blastxml.pm
 Bio/SearchIO/cross_match.pm
 Bio/SearchIO/erpin.pm
 Bio/SearchIO/EventHandlerI.pm
@@ -518,15 +507,12 @@ Bio/SearchIO/SearchWriterI.pm
 Bio/SearchIO/sim4.pm
 Bio/SearchIO/waba.pm
 Bio/SearchIO/wise.pm
-Bio/SearchIO/Writer/BSMLResultWriter.pm
 Bio/SearchIO/Writer/GbrowseGFF.pm
 Bio/SearchIO/Writer/HitTableWriter.pm
 Bio/SearchIO/Writer/HSPTableWriter.pm
 Bio/SearchIO/Writer/HTMLResultWriter.pm
 Bio/SearchIO/Writer/ResultTableWriter.pm
 Bio/SearchIO/Writer/TextResultWriter.pm
-Bio/SearchIO/XML/BlastHandler.pm
-Bio/SearchIO/XML/PsiBlastHandler.pm
 Bio/Seq.pm
 Bio/Seq/BaseSeqProcessor.pm
 Bio/Seq/EncodedSeq.pm
@@ -752,15 +738,9 @@ Bio/Tools/RandomDistFunctions.pm
 Bio/Tools/RepeatMasker.pm
 Bio/Tools/RNAMotif.pm
 Bio/Tools/Run/GenericParameters.pm
-Bio/Tools/Run/hmmer3.pm
 Bio/Tools/Run/ParametersI.pm
 Bio/Tools/Run/README
 Bio/Tools/Run/RemoteBlast.pm
-Bio/Tools/Run/StandAloneBlast.pm
-Bio/Tools/Run/StandAloneNCBIBlast.pm
-Bio/Tools/Run/StandAloneWUBlast.pm
-Bio/Tools/Run/WrapperBase.pm
-Bio/Tools/Run/WrapperBase/CommandExts.pm
 Bio/Tools/Seg.pm
 Bio/Tools/SeqPattern.pm
 Bio/Tools/SeqPattern/Backtranslate.pm
@@ -824,27 +804,26 @@ BioPerl.pm
 BUGS
 Build.PL
 Changes
+deobfuscator/Deobfuscator/bin/deob_index.pl
+deobfuscator/Deobfuscator/bin/run-deobfuscator-update.pl
+deobfuscator/Deobfuscator/Build.PL
+deobfuscator/Deobfuscator/cgi-bin/deob_detail.cgi
+deobfuscator/Deobfuscator/cgi-bin/deob_flowchart.png
+deobfuscator/Deobfuscator/cgi-bin/deob_help.html
+deobfuscator/Deobfuscator/cgi-bin/deob_interface.cgi
+deobfuscator/Deobfuscator/Changes
+deobfuscator/Deobfuscator/excluded_modules.txt
+deobfuscator/Deobfuscator/lib/Deobfuscator.pm
+deobfuscator/Deobfuscator/LICENSE
+deobfuscator/Deobfuscator/Makefile.PL
+deobfuscator/Deobfuscator/MANIFEST
+deobfuscator/Deobfuscator/META.yml
+deobfuscator/Deobfuscator/README
+deobfuscator/Deobfuscator/t/00.load.t
+deobfuscator/Deobfuscator/t/pod.t
+deobfuscator/makedoc.PL
 DEPENDENCIES
 DEPRECATED
-doc/Deobfuscator/bin/deob_index.pl
-doc/Deobfuscator/bin/run-deobfuscator-update.pl
-doc/Deobfuscator/Build.PL
-doc/Deobfuscator/cgi-bin/deob_detail.cgi
-doc/Deobfuscator/cgi-bin/deob_flowchart.png
-doc/Deobfuscator/cgi-bin/deob_help.html
-doc/Deobfuscator/cgi-bin/deob_interface.cgi
-doc/Deobfuscator/Changes
-doc/Deobfuscator/excluded_modules.txt
-doc/Deobfuscator/lib/Deobfuscator.pm
-doc/Deobfuscator/LICENSE
-doc/Deobfuscator/Makefile.PL
-doc/Deobfuscator/MANIFEST
-doc/Deobfuscator/META.yml
-doc/Deobfuscator/README
-doc/Deobfuscator/t/00.load.t
-doc/Deobfuscator/t/pod.t
-doc/makedoc.PL
-doc/README
 examples/align/align_on_codons.pl
 examples/align/aligntutorial.pl
 examples/align/clustalw.pl
@@ -875,8 +854,6 @@ examples/root/exceptions1.pl
 examples/root/exceptions2.pl
 examples/root/exceptions3.pl
 examples/root/exceptions4.pl
-examples/root/lib/TestInterface.pm
-examples/root/lib/TestObject.pm
 examples/root/README
 examples/searchio/blast_example.pl
 examples/searchio/custom_writer.pl
@@ -921,9 +898,9 @@ ide/bioperl-mode/site-lisp/bioperl-mode.el
 ide/bioperl-mode/site-lisp/bioperl-skel.el
 ide/bioperl-mode/site-lisp/pod.el
 ide/bioperl.komodo
-INSTALL
+INSTALL-WIN.md
+INSTALL.md
 INSTALL.SKIP
-INSTALL.WIN
 LICENSE
 maintenance/authors.pl
 maintenance/big_split/file_classification.csv
@@ -943,8 +920,6 @@ maintenance/README
 maintenance/symlink_script.pl
 maintenance/version.pl
 MANIFEST			This list of files
-META.json
-META.yml
 models/biblio.dia
 models/bio_liveseq_variation.dia
 models/bio_map.dia
@@ -956,7 +931,6 @@ models/maps_and_markers.dia
 models/popgen.dia
 models/population_proposal.txt
 models/README
-README
 README.md
 scripts/Bio-DB-GFF/bp_bulk_load_gff.pl
 scripts/Bio-DB-GFF/bp_fast_load_gff.pl
@@ -1022,6 +996,7 @@ scripts/tree/bp_tree2pag.pl
 scripts/tree/TAG
 scripts/utilities/bp_dbsplit.pl
 scripts/utilities/bp_download_query_genbank.pl
+scripts/utilities/bp_find-blast-matches.pl
 scripts/utilities/bp_mask_by_search.pl
 scripts/utilities/bp_mrtrans.pl
 scripts/utilities/bp_mutate.pl
@@ -1031,7 +1006,6 @@ scripts/utilities/bp_pairwise_kaks.pl
 scripts/utilities/bp_remote_blast.pl
 scripts/utilities/bp_revtrans-motif.pl
 scripts/utilities/bp_search2alnblocks.pl
-scripts/utilities/bp_search2BSML.pl
 scripts/utilities/bp_search2gff.pl
 scripts/utilities/bp_search2tribe.pl
 scripts/utilities/bp_seq_length.pl
@@ -1078,10 +1052,6 @@ t/Cluster/UniGene.t
 t/ClusterIO/ClusterIO.t
 t/ClusterIO/SequenceFamily.t
 t/ClusterIO/unigene.t
-t/Coordinate/CoordinateBoundaryTest.t
-t/Coordinate/CoordinateGraph.t
-t/Coordinate/CoordinateMapper.t
-t/Coordinate/GeneCoordinateMapper.t
 t/data/01_basic.xml
 t/data/02_dogfish_dict_cdao_lsid_taxrefs.xml
 t/data/02_dogfish_no_taxrefs.xml
@@ -1118,6 +1088,7 @@ t/data/AE003528_ecoli.bls
 t/data/AE003644_Adh-genomic.gb
 t/data/AF032047.gbk
 t/data/AF165282.gb
+t/data/AF222649-rc.gbk
 t/data/AF305198.gb
 t/data/AHCYL1.kegg
 t/data/alleles.fas
@@ -1203,6 +1174,9 @@ t/data/char-interleave.nex
 t/data/char-matrix-spaces.nex
 t/data/characters+trees.nexml.xml
 t/data/characters.nexml.old.xml
+t/data/cmsearch.multi.out
+t/data/cmsearch.nohit.out
+t/data/cmsearch_output.txt
 t/data/codeml.mlc
 t/data/codeml315.mlc
 t/data/codeml4.mlc
@@ -1302,7 +1276,6 @@ t/data/dq519393.gb
 t/data/ECAPAH02.embl
 t/data/echofilter.wublastn
 t/data/ecoli-trna-qrna.out
-t/data/ecoli_domains.rps.xml
 t/data/ecoli_domains.rpsblast
 t/data/ecolitst.bls
 t/data/ecolitst.fa
@@ -1396,6 +1369,7 @@ t/data/GO.defs.test
 t/data/GO.defs.test2
 t/data/headerless.psl
 t/data/hg16_chroms.gff
+t/data/HM138502.gbk
 t/data/hmmpfam.out
 t/data/hmmpfam_cs.out
 t/data/hmmpfam_fake.out
@@ -1403,6 +1377,7 @@ t/data/hmmpfam_HSPdashline.txt
 t/data/hmmpfam_multiresult.out
 t/data/hmmscan.out
 t/data/hmmscan_multi_domain.out
+t/data/hmmscan_qry_stop.txt
 t/data/hmmscan_sec_struct.out
 t/data/hmmsearch.out
 t/data/hmmsearch3.out
@@ -1423,6 +1398,7 @@ t/data/HUMBETGLOA.tblastx
 t/data/humor.maf
 t/data/humts1.pal
 t/data/hybrid2.gff3
+t/data/ids-with-spaces.phy
 t/data/in.fasta
 t/data/insulin.water
 t/data/interpro.xml
@@ -1431,6 +1407,7 @@ t/data/interpro_relationship.xml
 t/data/interpro_sample.xml
 t/data/interpro_short.xml
 t/data/intrablock-comment.nex
+t/data/KF527485.gbk
 t/data/Kingdoms_DNA.nex
 t/data/L77119.hmmer
 t/data/little.largemultifasta
@@ -1557,7 +1534,6 @@ t/data/multiline-intrablock-comment.nex
 t/data/multiresult_blastn+.bls
 t/data/multiseq.bls
 t/data/multiseq_tags.phd
-t/data/mus.bls.xml
 t/data/mutations.dat
 t/data/mutations.old.dat
 t/data/mutations.old.xml
@@ -1572,7 +1548,6 @@ t/data/NC_008536.gb
 t/data/nei_gojobori_test.aln
 t/data/neighbor.dist
 t/data/new_blastn.txt
-t/data/newblast.xml
 t/data/nexml/characters.nexml.8.xml
 t/data/nexml/characters.nexml.xml
 t/data/nexml/trees.nexml.8.xml
@@ -1592,6 +1567,7 @@ t/data/O_sat.wgs
 t/data/omim_genemap_test
 t/data/omim_genemap_test_nolinebreak
 t/data/omim_text_test
+t/data/ORTHOMCL2345.cluster.aa.fa.aln.aa.phy.txt
 t/data/P33897
 t/data/P35527.gb
 t/data/P39765.gb
@@ -1601,11 +1577,11 @@ t/data/pfam_tests.stk
 t/data/pfamOutput-bug3376.out
 t/data/phi.out
 t/data/phipsi.out
+t/data/phmmer.out
 t/data/phylipdist-36.out
 t/data/phylipdist.out
 t/data/phyloxml_examples.xml
 t/data/pictogram.fa
-t/data/plague_yeast.bls.xml
 t/data/polymorphism.dat
 t/data/polymorphism.old.xml
 t/data/polymorphism.xml
@@ -1624,7 +1600,6 @@ t/data/protpars.phy
 t/data/protpars_longid.phy
 t/data/pseudowise.out
 t/data/psi_xml.dat
-t/data/psiblast.xml
 t/data/psiblastreport.out
 t/data/purine_v081.infernal
 t/data/puzzle.tre
@@ -1712,6 +1687,8 @@ t/data/taxonomy/greengenes_taxonomy_16S_candiv_gg_2011_1.txt
 t/data/taxonomy/silva_SSURef_108_tax_silva_trunc.fasta
 t/data/tblastn.out
 't/data/test 2.txt'
+t/data/test-1.tab
+t/data/test-1.tab.gb
 t/data/test-3.0-1.meme
 t/data/test-3.0-2.meme
 t/data/test-4.9.meme
@@ -1764,6 +1741,7 @@ t/data/test_clear_range.fastq
 t/data/test_data.axt
 t/data/test_singlets.cns.fastq
 t/data/test_singlets.maq
+t/data/test_space.embl
 t/data/testaln.arp
 t/data/testaln.clustalw
 t/data/testaln.fasta
@@ -1845,6 +1823,7 @@ t/LocalDB/Registry.t
 t/LocalDB/SeqFeature.t
 t/LocalDB/Taxonomy/greengenes.t
 t/LocalDB/Taxonomy/silva.t
+t/LocalDB/Taxonomy/sqlite.t
 t/LocalDB/transfac_pro.t
 t/Map/Cyto.t
 t/Map/Linkage.t
@@ -1900,7 +1879,6 @@ t/RemoteDB/HIV/HIVQueryHelper.t
 t/RemoteDB/MeSH.t
 t/RemoteDB/Query/GenBank.t
 t/RemoteDB/RefSeq.t
-t/RemoteDB/SeqHound.t
 t/RemoteDB/SeqRead_fail.t
 t/RemoteDB/SeqVersion.t
 t/RemoteDB/SwissProt.t
@@ -1913,6 +1891,7 @@ t/Root/Exception.t
 t/Root/HTTPget.t
 t/Root/IO.t
 t/Root/RootI.t
+t/Root/RootIO.t
 t/Root/Storable.t
 t/Root/Utilities.t
 t/SearchDist.t
@@ -1920,7 +1899,6 @@ t/SearchIO/axt.t
 t/SearchIO/blast.t
 t/SearchIO/blast_pull.t
 t/SearchIO/blasttable.t
-t/SearchIO/blastxml.t
 t/SearchIO/CigarString.t
 t/SearchIO/cross_match.t
 t/SearchIO/erpin.t
@@ -2075,13 +2053,8 @@ t/Tools/QRNA.t
 t/Tools/RandDistFunctions.t
 t/Tools/RepeatMasker.t
 t/Tools/rnamotif.t
-t/Tools/Run/Dummy.pm
-t/Tools/Run/Dummy/Config.pm
 t/Tools/Run/RemoteBlast.t
 t/Tools/Run/RemoteBlast_rpsblast.t
-t/Tools/Run/StandAloneBlast.t
-t/Tools/Run/WBCommandExts.t
-t/Tools/Run/WrapperBase.t
 t/Tools/Seg.t
 t/Tools/Sigcleave.t
 t/Tools/Signalp.t
@@ -2122,3 +2095,5 @@ t/Variation/SeqDiff.t
 t/Variation/SNP.t
 t/Variation/Variation_IO.t
 travis_scripts/dependency_installs
+META.yml
+META.json
diff --git a/META.json b/META.json
index 8d6771e..b9fa154 100644
--- a/META.json
+++ b/META.json
@@ -4,7 +4,7 @@
       "BioPerl Team <bioperl-l at bioperl.org>"
    ],
    "dynamic_config" : 1,
-   "generated_by" : "Module::Build version 0.4003, CPAN::Meta::Converter version 2.141520",
+   "generated_by" : "Module::Build version 0.4218",
    "license" : [
       "perl_5"
    ],
@@ -13,16 +13,11 @@
       "version" : "2"
    },
    "name" : "BioPerl",
-   "no_index" : {
-      "x_dir" : [
-         "examples/root/lib"
-      ]
-   },
    "prereqs" : {
       "build" : {
          "requires" : {
             "CPAN" : "1.81",
-            "Module::Build" : "0.2805",
+            "Module::Build" : "0.42",
             "Test::Harness" : "2.62",
             "Test::Most" : "0",
             "URI::Escape" : "0"
@@ -30,7 +25,7 @@
       },
       "configure" : {
          "requires" : {
-            "Module::Build" : "0.40"
+            "Module::Build" : "0.42"
          }
       },
       "runtime" : {
@@ -38,6 +33,7 @@
             "Algorithm::Munkres" : "0",
             "Array::Compare" : "0",
             "Bio::Phylo" : "0",
+            "CGI" : "0",
             "Clone" : "0",
             "Convert::Binary::C" : "0",
             "DB_File" : "0",
@@ -50,6 +46,7 @@
             "HTML::TableExtract" : "0",
             "HTTP::Request::Common" : "0",
             "IO::Scalar" : "0",
+            "Inline::C" : "0.67",
             "LWP::UserAgent" : "0",
             "List::MoreUtils" : "0",
             "PostScript::TextBlock" : "0",
@@ -84,3311 +81,2435 @@
    },
    "provides" : {
       "Bio::Align::AlignI" : {
-         "file" : "Bio/Align/AlignI.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Align/AlignI.pm"
       },
       "Bio::Align::DNAStatistics" : {
-         "file" : "Bio/Align/DNAStatistics.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Align/DNAStatistics.pm"
       },
       "Bio::Align::Graphics" : {
-         "file" : "Bio/Align/Graphics.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Align/Graphics.pm"
       },
       "Bio::Align::PairwiseStatistics" : {
-         "file" : "Bio/Align/PairwiseStatistics.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Align/PairwiseStatistics.pm"
       },
       "Bio::Align::ProteinStatistics" : {
-         "file" : "Bio/Align/ProteinStatistics.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Align/ProteinStatistics.pm"
       },
       "Bio::Align::StatisticsI" : {
-         "file" : "Bio/Align/StatisticsI.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Align/StatisticsI.pm"
       },
       "Bio::Align::Utilities" : {
-         "file" : "Bio/Align/Utilities.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Align/Utilities.pm"
       },
       "Bio::AlignIO" : {
-         "file" : "Bio/AlignIO.pm",
-         "version" : "1.006924"
+         "file" : "Bio/AlignIO.pm"
       },
       "Bio::AlignIO::Handler::GenericAlignHandler" : {
-         "file" : "Bio/AlignIO/Handler/GenericAlignHandler.pm",
-         "version" : "1.006924"
+         "file" : "Bio/AlignIO/Handler/GenericAlignHandler.pm"
       },
       "Bio::AlignIO::arp" : {
-         "file" : "Bio/AlignIO/arp.pm",
-         "version" : "1.006924"
+         "file" : "Bio/AlignIO/arp.pm"
       },
       "Bio::AlignIO::bl2seq" : {
-         "file" : "Bio/AlignIO/bl2seq.pm",
-         "version" : "1.006924"
+         "file" : "Bio/AlignIO/bl2seq.pm"
       },
       "Bio::AlignIO::clustalw" : {
-         "file" : "Bio/AlignIO/clustalw.pm",
-         "version" : "1.006924"
+         "file" : "Bio/AlignIO/clustalw.pm"
       },
       "Bio::AlignIO::emboss" : {
-         "file" : "Bio/AlignIO/emboss.pm",
-         "version" : "1.006924"
+         "file" : "Bio/AlignIO/emboss.pm"
       },
       "Bio::AlignIO::fasta" : {
-         "file" : "Bio/AlignIO/fasta.pm",
-         "version" : "1.006924"
+         "file" : "Bio/AlignIO/fasta.pm"
       },
       "Bio::AlignIO::largemultifasta" : {
-         "file" : "Bio/AlignIO/largemultifasta.pm",
-         "version" : "1.006924"
+         "file" : "Bio/AlignIO/largemultifasta.pm"
       },
       "Bio::AlignIO::maf" : {
-         "file" : "Bio/AlignIO/maf.pm",
-         "version" : "1.006924"
+         "file" : "Bio/AlignIO/maf.pm"
       },
       "Bio::AlignIO::mase" : {
-         "file" : "Bio/AlignIO/mase.pm",
-         "version" : "1.006924"
+         "file" : "Bio/AlignIO/mase.pm"
       },
       "Bio::AlignIO::mega" : {
-         "file" : "Bio/AlignIO/mega.pm",
-         "version" : "1.006924"
+         "file" : "Bio/AlignIO/mega.pm"
       },
       "Bio::AlignIO::meme" : {
-         "file" : "Bio/AlignIO/meme.pm",
-         "version" : "1.006924"
+         "file" : "Bio/AlignIO/meme.pm"
       },
       "Bio::AlignIO::metafasta" : {
-         "file" : "Bio/AlignIO/metafasta.pm",
-         "version" : "1.006924"
+         "file" : "Bio/AlignIO/metafasta.pm"
       },
       "Bio::AlignIO::msf" : {
-         "file" : "Bio/AlignIO/msf.pm",
-         "version" : "1.006924"
+         "file" : "Bio/AlignIO/msf.pm"
       },
       "Bio::AlignIO::nexml" : {
-         "file" : "Bio/AlignIO/nexml.pm",
-         "version" : "1.006924"
+         "file" : "Bio/AlignIO/nexml.pm"
       },
       "Bio::AlignIO::nexus" : {
-         "file" : "Bio/AlignIO/nexus.pm",
-         "version" : "1.006924"
+         "file" : "Bio/AlignIO/nexus.pm"
       },
       "Bio::AlignIO::pfam" : {
-         "file" : "Bio/AlignIO/pfam.pm",
-         "version" : "1.006924"
+         "file" : "Bio/AlignIO/pfam.pm"
       },
       "Bio::AlignIO::phylip" : {
-         "file" : "Bio/AlignIO/phylip.pm",
-         "version" : "1.006924"
+         "file" : "Bio/AlignIO/phylip.pm"
       },
       "Bio::AlignIO::po" : {
-         "file" : "Bio/AlignIO/po.pm",
-         "version" : "1.006924"
+         "file" : "Bio/AlignIO/po.pm"
       },
       "Bio::AlignIO::proda" : {
-         "file" : "Bio/AlignIO/proda.pm",
-         "version" : "1.006924"
+         "file" : "Bio/AlignIO/proda.pm"
       },
       "Bio::AlignIO::prodom" : {
-         "file" : "Bio/AlignIO/prodom.pm",
-         "version" : "1.006924"
+         "file" : "Bio/AlignIO/prodom.pm"
       },
       "Bio::AlignIO::psi" : {
-         "file" : "Bio/AlignIO/psi.pm",
-         "version" : "1.006924"
+         "file" : "Bio/AlignIO/psi.pm"
       },
       "Bio::AlignIO::selex" : {
-         "file" : "Bio/AlignIO/selex.pm",
-         "version" : "1.006924"
+         "file" : "Bio/AlignIO/selex.pm"
       },
       "Bio::AlignIO::stockholm" : {
-         "file" : "Bio/AlignIO/stockholm.pm",
-         "version" : "1.006924"
+         "file" : "Bio/AlignIO/stockholm.pm"
       },
       "Bio::AlignIO::xmfa" : {
-         "file" : "Bio/AlignIO/xmfa.pm",
-         "version" : "1.006924"
+         "file" : "Bio/AlignIO/xmfa.pm"
       },
       "Bio::AnalysisI" : {
-         "file" : "Bio/AnalysisI.pm",
-         "version" : "1.006924"
+         "file" : "Bio/AnalysisI.pm"
       },
       "Bio::AnalysisI::JobI" : {
-         "file" : "Bio/AnalysisI.pm",
-         "version" : "1.006924"
+         "file" : "Bio/AnalysisI.pm"
       },
       "Bio::AnalysisParserI" : {
-         "file" : "Bio/AnalysisParserI.pm",
-         "version" : "1.006924"
+         "file" : "Bio/AnalysisParserI.pm"
       },
       "Bio::AnalysisResultI" : {
-         "file" : "Bio/AnalysisResultI.pm",
-         "version" : "1.006924"
+         "file" : "Bio/AnalysisResultI.pm"
       },
       "Bio::AnnotatableI" : {
-         "file" : "Bio/AnnotatableI.pm",
-         "version" : "1.006924"
+         "file" : "Bio/AnnotatableI.pm"
       },
       "Bio::Annotation::AnnotationFactory" : {
-         "file" : "Bio/Annotation/AnnotationFactory.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Annotation/AnnotationFactory.pm"
       },
       "Bio::Annotation::Collection" : {
-         "file" : "Bio/Annotation/Collection.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Annotation/Collection.pm"
       },
       "Bio::Annotation::Comment" : {
-         "file" : "Bio/Annotation/Comment.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Annotation/Comment.pm"
       },
       "Bio::Annotation::DBLink" : {
-         "file" : "Bio/Annotation/DBLink.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Annotation/DBLink.pm"
       },
       "Bio::Annotation::OntologyTerm" : {
-         "file" : "Bio/Annotation/OntologyTerm.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Annotation/OntologyTerm.pm"
       },
       "Bio::Annotation::Reference" : {
-         "file" : "Bio/Annotation/Reference.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Annotation/Reference.pm"
       },
       "Bio::Annotation::Relation" : {
-         "file" : "Bio/Annotation/Relation.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Annotation/Relation.pm"
       },
       "Bio::Annotation::SimpleValue" : {
-         "file" : "Bio/Annotation/SimpleValue.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Annotation/SimpleValue.pm"
       },
       "Bio::Annotation::StructuredValue" : {
-         "file" : "Bio/Annotation/StructuredValue.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Annotation/StructuredValue.pm"
       },
       "Bio::Annotation::TagTree" : {
-         "file" : "Bio/Annotation/TagTree.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Annotation/TagTree.pm"
       },
       "Bio::Annotation::Target" : {
-         "file" : "Bio/Annotation/Target.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Annotation/Target.pm"
       },
       "Bio::Annotation::Tree" : {
-         "file" : "Bio/Annotation/Tree.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Annotation/Tree.pm"
       },
       "Bio::Annotation::TypeManager" : {
-         "file" : "Bio/Annotation/TypeManager.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Annotation/TypeManager.pm"
       },
       "Bio::AnnotationCollectionI" : {
-         "file" : "Bio/AnnotationCollectionI.pm",
-         "version" : "1.006924"
+         "file" : "Bio/DB/HIV/HIVQueryHelper.pm"
       },
       "Bio::AnnotationI" : {
-         "file" : "Bio/AnnotationI.pm",
-         "version" : "1.006924"
+         "file" : "Bio/AnnotationI.pm"
       },
       "Bio::Assembly::Contig" : {
-         "file" : "Bio/Assembly/Contig.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Assembly/Contig.pm"
       },
       "Bio::Assembly::ContigAnalysis" : {
-         "file" : "Bio/Assembly/ContigAnalysis.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Assembly/ContigAnalysis.pm"
       },
       "Bio::Assembly::IO" : {
-         "file" : "Bio/Assembly/IO.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Assembly/IO.pm"
       },
       "Bio::Assembly::IO::ace" : {
-         "file" : "Bio/Assembly/IO/ace.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Assembly/IO/ace.pm"
       },
       "Bio::Assembly::IO::bowtie" : {
-         "file" : "Bio/Assembly/IO/bowtie.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Assembly/IO/bowtie.pm"
       },
       "Bio::Assembly::IO::maq" : {
-         "file" : "Bio/Assembly/IO/maq.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Assembly/IO/maq.pm"
       },
       "Bio::Assembly::IO::phrap" : {
-         "file" : "Bio/Assembly/IO/phrap.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Assembly/IO/phrap.pm"
       },
       "Bio::Assembly::IO::sam" : {
-         "file" : "Bio/Assembly/IO/sam.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Assembly/IO/sam.pm"
       },
       "Bio::Assembly::IO::tigr" : {
-         "file" : "Bio/Assembly/IO/tigr.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Assembly/IO/tigr.pm"
       },
       "Bio::Assembly::Scaffold" : {
-         "file" : "Bio/Assembly/Scaffold.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Assembly/Scaffold.pm"
       },
       "Bio::Assembly::ScaffoldI" : {
-         "file" : "Bio/Assembly/ScaffoldI.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Assembly/ScaffoldI.pm"
       },
       "Bio::Assembly::Singlet" : {
-         "file" : "Bio/Assembly/Singlet.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Assembly/Singlet.pm"
       },
       "Bio::Assembly::Tools::ContigSpectrum" : {
-         "file" : "Bio/Assembly/Tools/ContigSpectrum.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Assembly/Tools/ContigSpectrum.pm"
       },
       "Bio::Cluster::ClusterFactory" : {
-         "file" : "Bio/Cluster/ClusterFactory.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Cluster/ClusterFactory.pm"
       },
       "Bio::Cluster::FamilyI" : {
-         "file" : "Bio/Cluster/FamilyI.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Cluster/FamilyI.pm"
       },
       "Bio::Cluster::SequenceFamily" : {
-         "file" : "Bio/Cluster/SequenceFamily.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Cluster/SequenceFamily.pm"
       },
       "Bio::Cluster::UniGene" : {
-         "file" : "Bio/Cluster/UniGene.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Cluster/UniGene.pm"
       },
       "Bio::Cluster::UniGeneI" : {
-         "file" : "Bio/Cluster/UniGeneI.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Cluster/UniGeneI.pm"
       },
       "Bio::ClusterI" : {
-         "file" : "Bio/ClusterI.pm",
-         "version" : "1.006924"
+         "file" : "Bio/ClusterI.pm"
       },
       "Bio::ClusterIO" : {
-         "file" : "Bio/ClusterIO.pm",
-         "version" : "1.006924"
+         "file" : "Bio/ClusterIO.pm"
       },
       "Bio::ClusterIO::dbsnp" : {
-         "file" : "Bio/ClusterIO/dbsnp.pm",
-         "version" : "1.006924"
+         "file" : "Bio/ClusterIO/dbsnp.pm"
       },
       "Bio::ClusterIO::unigene" : {
-         "file" : "Bio/ClusterIO/unigene.pm",
-         "version" : "1.006924"
+         "file" : "Bio/ClusterIO/unigene.pm"
       },
       "Bio::CodonUsage::IO" : {
-         "file" : "Bio/CodonUsage/IO.pm",
-         "version" : "1.006924"
+         "file" : "Bio/CodonUsage/IO.pm"
       },
       "Bio::CodonUsage::Table" : {
-         "file" : "Bio/CodonUsage/Table.pm",
-         "version" : "1.006924"
-      },
-      "Bio::Coordinate::Chain" : {
-         "file" : "Bio/Coordinate/Chain.pm",
-         "version" : "1.006924"
-      },
-      "Bio::Coordinate::Collection" : {
-         "file" : "Bio/Coordinate/Collection.pm",
-         "version" : "1.006924"
-      },
-      "Bio::Coordinate::ExtrapolatingPair" : {
-         "file" : "Bio/Coordinate/ExtrapolatingPair.pm",
-         "version" : "1.006924"
-      },
-      "Bio::Coordinate::GeneMapper" : {
-         "file" : "Bio/Coordinate/GeneMapper.pm",
-         "version" : "1.006924"
-      },
-      "Bio::Coordinate::Graph" : {
-         "file" : "Bio/Coordinate/Graph.pm",
-         "version" : "1.006924"
-      },
-      "Bio::Coordinate::MapperI" : {
-         "file" : "Bio/Coordinate/MapperI.pm",
-         "version" : "1.006924"
-      },
-      "Bio::Coordinate::Pair" : {
-         "file" : "Bio/Coordinate/Pair.pm",
-         "version" : "1.006924"
-      },
-      "Bio::Coordinate::Result" : {
-         "file" : "Bio/Coordinate/Result.pm",
-         "version" : "1.006924"
-      },
-      "Bio::Coordinate::Result::Gap" : {
-         "file" : "Bio/Coordinate/Result/Gap.pm",
-         "version" : "1.006924"
-      },
-      "Bio::Coordinate::Result::Match" : {
-         "file" : "Bio/Coordinate/Result/Match.pm",
-         "version" : "1.006924"
-      },
-      "Bio::Coordinate::ResultI" : {
-         "file" : "Bio/Coordinate/ResultI.pm",
-         "version" : "1.006924"
-      },
-      "Bio::Coordinate::Utils" : {
-         "file" : "Bio/Coordinate/Utils.pm",
-         "version" : "1.006924"
+         "file" : "Bio/CodonUsage/Table.pm"
       },
       "Bio::DB::Ace" : {
-         "file" : "Bio/DB/Ace.pm",
-         "version" : "1.006924"
+         "file" : "Bio/DB/Ace.pm"
       },
       "Bio::DB::BioFetch" : {
-         "file" : "Bio/DB/BioFetch.pm",
-         "version" : "1.006924"
+         "file" : "Bio/DB/BioFetch.pm"
       },
       "Bio::DB::CUTG" : {
-         "file" : "Bio/DB/CUTG.pm",
-         "version" : "1.006924"
+         "file" : "Bio/DB/CUTG.pm"
       },
       "Bio::DB::DBFetch" : {
-         "file" : "Bio/DB/DBFetch.pm",
-         "version" : "1.006924"
+         "file" : "Bio/DB/DBFetch.pm"
       },
       "Bio::DB::EMBL" : {
-         "file" : "Bio/DB/EMBL.pm",
-         "version" : "1.006924"
+         "file" : "Bio/DB/EMBL.pm"
       },
       "Bio::DB::EntrezGene" : {
-         "file" : "Bio/DB/EntrezGene.pm",
-         "version" : "1.006924"
+         "file" : "Bio/DB/EntrezGene.pm"
       },
       "Bio::DB::Expression" : {
-         "file" : "Bio/DB/Expression.pm",
-         "version" : "1.006924"
+         "file" : "Bio/DB/Expression.pm"
       },
       "Bio::DB::Expression::geo" : {
-         "file" : "Bio/DB/Expression/geo.pm",
-         "version" : "1.006924"
+         "file" : "Bio/DB/Expression/geo.pm"
       },
       "Bio::DB::Failover" : {
-         "file" : "Bio/DB/Failover.pm",
-         "version" : "1.006924"
+         "file" : "Bio/DB/Failover.pm"
       },
       "Bio::DB::Fasta" : {
-         "file" : "Bio/DB/Fasta.pm",
-         "version" : "1.006924"
+         "file" : "Bio/DB/Fasta.pm"
       },
       "Bio::DB::Fasta::Subdir" : {
-         "file" : "Bio/DB/SeqFeature/Store/berkeleydb.pm",
-         "version" : "1.006924"
+         "file" : "Bio/DB/SeqFeature/Store/berkeleydb.pm"
       },
       "Bio::DB::FileCache" : {
-         "file" : "Bio/DB/FileCache.pm",
-         "version" : "1.006924"
+         "file" : "Bio/DB/FileCache.pm"
       },
       "Bio::DB::Flat" : {
-         "file" : "Bio/DB/Flat.pm",
-         "version" : "1.006924"
+         "file" : "Bio/DB/Flat.pm"
       },
       "Bio::DB::Flat::BDB" : {
-         "file" : "Bio/DB/Flat/BDB.pm",
-         "version" : "1.006924"
+         "file" : "Bio/DB/Flat/BDB.pm"
       },
       "Bio::DB::Flat::BDB::embl" : {
-         "file" : "Bio/DB/Flat/BDB/embl.pm",
-         "version" : "1.006924"
+         "file" : "Bio/DB/Flat/BDB/embl.pm"
       },
       "Bio::DB::Flat::BDB::fasta" : {
-         "file" : "Bio/DB/Flat/BDB/fasta.pm",
-         "version" : "1.006924"
+         "file" : "Bio/DB/Flat/BDB/fasta.pm"
       },
       "Bio::DB::Flat::BDB::genbank" : {
-         "file" : "Bio/DB/Flat/BDB/genbank.pm",
-         "version" : "1.006924"
+         "file" : "Bio/DB/Flat/BDB/genbank.pm"
       },
       "Bio::DB::Flat::BDB::swiss" : {
-         "file" : "Bio/DB/Flat/BDB/swiss.pm",
-         "version" : "1.006924"
+         "file" : "Bio/DB/Flat/BDB/swiss.pm"
       },
       "Bio::DB::Flat::BinarySearch" : {
-         "file" : "Bio/DB/Flat/BinarySearch.pm",
-         "version" : "1.006924"
+         "file" : "Bio/DB/Flat/BinarySearch.pm"
       },
       "Bio::DB::GFF" : {
-         "file" : "Bio/DB/GFF.pm",
-         "version" : "1.006924"
+         "file" : "Bio/DB/GFF.pm"
       },
       "Bio::DB::GFF::Adaptor::ace" : {
-         "file" : "Bio/DB/GFF/Adaptor/ace.pm",
-         "version" : "1.006924"
+         "file" : "Bio/DB/GFF/Adaptor/ace.pm"
       },
       "Bio::DB::GFF::Adaptor::berkeleydb" : {
-         "file" : "Bio/DB/GFF/Adaptor/berkeleydb.pm",
-         "version" : "1.006924"
+         "file" : "Bio/DB/GFF/Adaptor/berkeleydb.pm"
       },
       "Bio::DB::GFF::Adaptor::berkeleydb::iterator" : {
-         "file" : "Bio/DB/GFF/Adaptor/berkeleydb/iterator.pm",
-         "version" : "1.006924"
+         "file" : "Bio/DB/GFF/Adaptor/berkeleydb/iterator.pm"
       },
       "Bio::DB::GFF::Adaptor::biofetch" : {
-         "file" : "Bio/DB/GFF/Adaptor/biofetch.pm",
-         "version" : "1.006924"
+         "file" : "Bio/DB/GFF/Adaptor/biofetch.pm"
       },
       "Bio::DB::GFF::Adaptor::biofetch_oracle" : {
-         "file" : "Bio/DB/GFF/Adaptor/biofetch_oracle.pm",
-         "version" : "1.006924"
+         "file" : "Bio/DB/GFF/Adaptor/biofetch_oracle.pm"
       },
       "Bio::DB::GFF::Adaptor::dbi" : {
-         "file" : "Bio/DB/GFF/Adaptor/dbi.pm",
-         "version" : "1.006924"
+         "file" : "Bio/DB/GFF/Adaptor/dbi.pm"
       },
       "Bio::DB::GFF::Adaptor::dbi::caching_handle" : {
-         "file" : "Bio/DB/GFF/Adaptor/dbi/caching_handle.pm",
-         "version" : "1.006924"
+         "file" : "Bio/DB/GFF/Adaptor/dbi/caching_handle.pm"
       },
       "Bio::DB::GFF::Adaptor::dbi::faux_dbh" : {
-         "file" : "Bio/DB/GFF/Adaptor/dbi/caching_handle.pm",
-         "version" : "1.006924"
+         "file" : "Bio/DB/GFF/Adaptor/dbi/caching_handle.pm"
       },
       "Bio::DB::GFF::Adaptor::dbi::iterator" : {
-         "file" : "Bio/DB/GFF/Adaptor/dbi/iterator.pm",
-         "version" : "1.006924"
+         "file" : "Bio/DB/GFF/Adaptor/dbi/iterator.pm"
       },
       "Bio::DB::GFF::Adaptor::dbi::mysql" : {
-         "file" : "Bio/DB/GFF/Adaptor/dbi/mysql.pm",
-         "version" : "1.006924"
+         "file" : "Bio/DB/GFF/Adaptor/dbi/mysql.pm"
       },
       "Bio::DB::GFF::Adaptor::dbi::mysqlace" : {
-         "file" : "Bio/DB/GFF/Adaptor/dbi/mysqlace.pm",
-         "version" : "1.006924"
+         "file" : "Bio/DB/GFF/Adaptor/dbi/mysqlace.pm"
       },
       "Bio::DB::GFF::Adaptor::dbi::mysqlcmap" : {
-         "file" : "Bio/DB/GFF/Adaptor/dbi/mysqlcmap.pm",
-         "version" : "1.006924"
+         "file" : "Bio/DB/GFF/Adaptor/dbi/mysqlcmap.pm"
       },
       "Bio::DB::GFF::Adaptor::dbi::mysqlopt" : {
-         "file" : "Bio/DB/GFF/Adaptor/dbi/mysqlopt.pm",
-         "version" : "1.006924"
+         "file" : "Bio/DB/GFF/Adaptor/dbi/mysqlopt.pm"
       },
       "Bio::DB::GFF::Adaptor::dbi::oracle" : {
-         "file" : "Bio/DB/GFF/Adaptor/dbi/oracle.pm",
-         "version" : "1.006924"
+         "file" : "Bio/DB/GFF/Adaptor/dbi/oracle.pm"
       },
       "Bio::DB::GFF::Adaptor::dbi::oracleace" : {
-         "file" : "Bio/DB/GFF/Adaptor/dbi/oracleace.pm",
-         "version" : "1.006924"
+         "file" : "Bio/DB/GFF/Adaptor/dbi/oracleace.pm"
       },
       "Bio::DB::GFF::Adaptor::dbi::pg" : {
-         "file" : "Bio/DB/GFF/Adaptor/dbi/pg.pm",
-         "version" : "1.006924"
+         "file" : "Bio/DB/GFF/Adaptor/dbi/pg.pm"
       },
       "Bio::DB::GFF::Adaptor::dbi::pg_fts" : {
-         "file" : "Bio/DB/GFF/Adaptor/dbi/pg_fts.pm",
-         "version" : "1.006924"
+         "file" : "Bio/DB/GFF/Adaptor/dbi/pg_fts.pm"
       },
       "Bio::DB::GFF::Adaptor::memory" : {
-         "file" : "Bio/DB/GFF/Adaptor/memory.pm",
-         "version" : "1.006924"
+         "file" : "Bio/DB/GFF/Adaptor/memory.pm"
       },
       "Bio::DB::GFF::Adaptor::memory::feature_serializer" : {
-         "file" : "Bio/DB/GFF/Adaptor/memory/feature_serializer.pm",
-         "version" : "1.006924"
+         "file" : "Bio/DB/GFF/Adaptor/memory/feature_serializer.pm"
       },
       "Bio::DB::GFF::Adaptor::memory::iterator" : {
-         "file" : "Bio/DB/GFF/Adaptor/memory/iterator.pm",
-         "version" : "1.006924"
+         "file" : "Bio/DB/GFF/Adaptor/memory/iterator.pm"
       },
       "Bio::DB::GFF::Aggregator" : {
-         "file" : "Bio/DB/GFF/Aggregator.pm",
-         "version" : "1.006924"
+         "file" : "Bio/DB/GFF/Aggregator.pm"
       },
       "Bio::DB::GFF::Aggregator::alignment" : {
-         "file" : "Bio/DB/GFF/Aggregator/alignment.pm",
-         "version" : "1.006924"
+         "file" : "Bio/DB/GFF/Aggregator/alignment.pm"
       },
       "Bio::DB::GFF::Aggregator::clone" : {
-         "file" : "Bio/DB/GFF/Aggregator/clone.pm",
-         "version" : "1.006924"
+         "file" : "Bio/DB/GFF/Aggregator/clone.pm"
       },
       "Bio::DB::GFF::Aggregator::coding" : {
-         "file" : "Bio/DB/GFF/Aggregator/coding.pm",
-         "version" : "1.006924"
+         "file" : "Bio/DB/GFF/Aggregator/coding.pm"
       },
       "Bio::DB::GFF::Aggregator::gene" : {
-         "file" : "Bio/DB/GFF/Aggregator/gene.pm",
-         "version" : "1.006924"
+         "file" : "Bio/DB/GFF/Aggregator/gene.pm"
       },
       "Bio::DB::GFF::Aggregator::match" : {
-         "file" : "Bio/DB/GFF/Aggregator/match.pm",
-         "version" : "1.006924"
+         "file" : "Bio/DB/GFF/Aggregator/match.pm"
       },
       "Bio::DB::GFF::Aggregator::none" : {
-         "file" : "Bio/DB/GFF/Aggregator/none.pm",
-         "version" : "1.006924"
+         "file" : "Bio/DB/GFF/Aggregator/none.pm"
       },
       "Bio::DB::GFF::Aggregator::orf" : {
-         "file" : "Bio/DB/GFF/Aggregator/orf.pm",
-         "version" : "1.006924"
+         "file" : "Bio/DB/GFF/Aggregator/orf.pm"
       },
       "Bio::DB::GFF::Aggregator::processed_transcript" : {
-         "file" : "Bio/DB/GFF/Aggregator/processed_transcript.pm",
-         "version" : "1.006924"
+         "file" : "Bio/DB/GFF/Aggregator/processed_transcript.pm"
       },
       "Bio::DB::GFF::Aggregator::so_transcript" : {
-         "file" : "Bio/DB/GFF/Aggregator/so_transcript.pm",
-         "version" : "1.006924"
+         "file" : "Bio/DB/GFF/Aggregator/so_transcript.pm"
       },
       "Bio::DB::GFF::Aggregator::transcript" : {
-         "file" : "Bio/DB/GFF/Aggregator/transcript.pm",
-         "version" : "1.006924"
+         "file" : "Bio/DB/GFF/Aggregator/transcript.pm"
       },
       "Bio::DB::GFF::Aggregator::ucsc_acembly" : {
-         "file" : "Bio/DB/GFF/Aggregator/ucsc_acembly.pm",
-         "version" : "1.006924"
+         "file" : "Bio/DB/GFF/Aggregator/ucsc_acembly.pm"
       },
       "Bio::DB::GFF::Aggregator::ucsc_ensgene" : {
-         "file" : "Bio/DB/GFF/Aggregator/ucsc_ensgene.pm",
-         "version" : "1.006924"
+         "file" : "Bio/DB/GFF/Aggregator/ucsc_ensgene.pm"
       },
       "Bio::DB::GFF::Aggregator::ucsc_genscan" : {
-         "file" : "Bio/DB/GFF/Aggregator/ucsc_genscan.pm",
-         "version" : "1.006924"
+         "file" : "Bio/DB/GFF/Aggregator/ucsc_genscan.pm"
       },
       "Bio::DB::GFF::Aggregator::ucsc_refgene" : {
-         "file" : "Bio/DB/GFF/Aggregator/ucsc_refgene.pm",
-         "version" : "1.006924"
+         "file" : "Bio/DB/GFF/Aggregator/ucsc_refgene.pm"
       },
       "Bio::DB::GFF::Aggregator::ucsc_sanger22" : {
-         "file" : "Bio/DB/GFF/Aggregator/ucsc_sanger22.pm",
-         "version" : "1.006924"
+         "file" : "Bio/DB/GFF/Aggregator/ucsc_sanger22.pm"
       },
       "Bio::DB::GFF::Aggregator::ucsc_sanger22pseudo" : {
-         "file" : "Bio/DB/GFF/Aggregator/ucsc_sanger22pseudo.pm",
-         "version" : "1.006924"
+         "file" : "Bio/DB/GFF/Aggregator/ucsc_sanger22pseudo.pm"
       },
       "Bio::DB::GFF::Aggregator::ucsc_softberry" : {
-         "file" : "Bio/DB/GFF/Aggregator/ucsc_softberry.pm",
-         "version" : "1.006924"
+         "file" : "Bio/DB/GFF/Aggregator/ucsc_softberry.pm"
       },
       "Bio::DB::GFF::Aggregator::ucsc_twinscan" : {
-         "file" : "Bio/DB/GFF/Aggregator/ucsc_twinscan.pm",
-         "version" : "1.006924"
+         "file" : "Bio/DB/GFF/Aggregator/ucsc_twinscan.pm"
       },
       "Bio::DB::GFF::Aggregator::ucsc_unigene" : {
-         "file" : "Bio/DB/GFF/Aggregator/ucsc_unigene.pm",
-         "version" : "1.006924"
+         "file" : "Bio/DB/GFF/Aggregator/ucsc_unigene.pm"
       },
       "Bio::DB::GFF::Featname" : {
-         "file" : "Bio/DB/GFF/Featname.pm",
-         "version" : "1.006924"
+         "file" : "Bio/DB/GFF/Featname.pm"
       },
       "Bio::DB::GFF::Feature" : {
-         "file" : "Bio/DB/GFF/Feature.pm",
-         "version" : "1.006924"
+         "file" : "Bio/DB/GFF/Feature.pm"
       },
       "Bio::DB::GFF::FeatureIterator" : {
-         "file" : "Bio/DB/GFF.pm",
-         "version" : "1.006924"
+         "file" : "Bio/DB/GFF.pm"
       },
       "Bio::DB::GFF::Homol" : {
-         "file" : "Bio/DB/GFF/Homol.pm",
-         "version" : "1.006924"
+         "file" : "Bio/DB/GFF/Homol.pm"
       },
       "Bio::DB::GFF::ID_Iterator" : {
-         "file" : "Bio/DB/GFF.pm",
-         "version" : "1.006924"
+         "file" : "Bio/DB/GFF.pm"
       },
       "Bio::DB::GFF::RelSegment" : {
-         "file" : "Bio/DB/GFF/RelSegment.pm",
-         "version" : "1.006924"
+         "file" : "Bio/DB/GFF/RelSegment.pm"
       },
       "Bio::DB::GFF::Segment" : {
-         "file" : "Bio/DB/GFF/Segment.pm",
-         "version" : "1.006924"
+         "file" : "Bio/DB/GFF/Segment.pm"
       },
       "Bio::DB::GFF::Typename" : {
-         "file" : "Bio/DB/GFF/Typename.pm",
-         "version" : "1.006924"
+         "file" : "Bio/DB/GFF/Typename.pm"
       },
       "Bio::DB::GFF::Util::Binning" : {
-         "file" : "Bio/DB/GFF/Util/Binning.pm",
-         "version" : "1.006924"
+         "file" : "Bio/DB/GFF/Util/Binning.pm"
       },
       "Bio::DB::GFF::Util::Rearrange" : {
-         "file" : "Bio/DB/GFF/Util/Rearrange.pm",
-         "version" : "1.006924"
+         "file" : "Bio/DB/GFF/Util/Rearrange.pm"
       },
       "Bio::DB::GenBank" : {
-         "file" : "Bio/DB/GenBank.pm",
-         "version" : "1.006924"
+         "file" : "Bio/DB/GenBank.pm"
       },
       "Bio::DB::GenPept" : {
-         "file" : "Bio/DB/GenPept.pm",
-         "version" : "1.006924"
+         "file" : "Bio/DB/GenPept.pm"
       },
       "Bio::DB::GenericWebAgent" : {
-         "file" : "Bio/DB/GenericWebAgent.pm",
-         "version" : "1.006924"
+         "file" : "Bio/DB/GenericWebAgent.pm"
       },
       "Bio::DB::HIV" : {
-         "file" : "Bio/DB/HIV.pm",
-         "version" : "1.006924"
+         "file" : "Bio/DB/HIV.pm"
       },
       "Bio::DB::HIV::HIVAnnotProcessor" : {
-         "file" : "Bio/DB/HIV/HIVAnnotProcessor.pm",
-         "version" : "1.006924"
+         "file" : "Bio/DB/HIV/HIVAnnotProcessor.pm"
       },
       "Bio::DB::HIV::HIVQueryHelper" : {
-         "file" : "Bio/DB/HIV/HIVQueryHelper.pm",
-         "version" : "1.006924"
+         "file" : "Bio/DB/HIV/HIVQueryHelper.pm"
       },
       "Bio::DB::InMemoryCache" : {
-         "file" : "Bio/DB/InMemoryCache.pm",
-         "version" : "1.006924"
+         "file" : "Bio/DB/InMemoryCache.pm"
       },
       "Bio::DB::Indexed::Stream" : {
-         "file" : "Bio/DB/IndexedBase.pm",
-         "version" : "1.006924"
+         "file" : "Bio/DB/IndexedBase.pm"
       },
       "Bio::DB::IndexedBase" : {
-         "file" : "Bio/DB/IndexedBase.pm",
-         "version" : "1.006924"
+         "file" : "Bio/DB/IndexedBase.pm"
       },
       "Bio::DB::LocationI" : {
-         "file" : "Bio/DB/LocationI.pm",
-         "version" : "1.006924"
+         "file" : "Bio/DB/LocationI.pm"
       },
       "Bio::DB::MeSH" : {
-         "file" : "Bio/DB/MeSH.pm",
-         "version" : "1.006924"
+         "file" : "Bio/DB/MeSH.pm"
       },
       "Bio::DB::NCBIHelper" : {
-         "file" : "Bio/DB/NCBIHelper.pm",
-         "version" : "1.006924"
+         "file" : "Bio/DB/NCBIHelper.pm"
       },
       "Bio::DB::Qual" : {
-         "file" : "Bio/DB/Qual.pm",
-         "version" : "1.006924"
+         "file" : "Bio/DB/Qual.pm"
       },
       "Bio::DB::Query::GenBank" : {
-         "file" : "Bio/DB/Query/GenBank.pm",
-         "version" : "1.006924"
+         "file" : "Bio/DB/Query/GenBank.pm"
       },
       "Bio::DB::Query::HIVQuery" : {
-         "file" : "Bio/DB/Query/HIVQuery.pm",
-         "version" : "1.006924"
+         "file" : "Bio/DB/Query/HIVQuery.pm"
       },
       "Bio::DB::Query::WebQuery" : {
-         "file" : "Bio/DB/Query/WebQuery.pm",
-         "version" : "1.006924"
+         "file" : "Bio/DB/Query/WebQuery.pm"
       },
       "Bio::DB::QueryI" : {
-         "file" : "Bio/DB/QueryI.pm",
-         "version" : "1.006924"
+         "file" : "Bio/DB/QueryI.pm"
       },
       "Bio::DB::RandomAccessI" : {
-         "file" : "Bio/DB/RandomAccessI.pm",
-         "version" : "1.006924"
+         "file" : "Bio/DB/RandomAccessI.pm"
       },
       "Bio::DB::RefSeq" : {
-         "file" : "Bio/DB/RefSeq.pm",
-         "version" : "1.006924"
+         "file" : "Bio/DB/RefSeq.pm"
       },
       "Bio::DB::ReferenceI" : {
-         "file" : "Bio/DB/ReferenceI.pm",
-         "version" : "1.006924"
+         "file" : "Bio/DB/ReferenceI.pm"
       },
       "Bio::DB::Registry" : {
-         "file" : "Bio/DB/Registry.pm",
-         "version" : "1.006924"
+         "file" : "Bio/DB/Registry.pm"
       },
       "Bio::DB::SeqFeature" : {
-         "file" : "Bio/DB/SeqFeature.pm",
-         "version" : "1.006924"
+         "file" : "Bio/DB/SeqFeature.pm"
       },
       "Bio::DB::SeqFeature::NormalizedFeature" : {
-         "file" : "Bio/DB/SeqFeature/NormalizedFeature.pm",
-         "version" : "1.006924"
+         "file" : "Bio/DB/SeqFeature/NormalizedFeature.pm"
       },
       "Bio::DB::SeqFeature::NormalizedFeatureI" : {
-         "file" : "Bio/DB/SeqFeature/NormalizedFeatureI.pm",
-         "version" : "1.006924"
+         "file" : "Bio/DB/SeqFeature/NormalizedFeatureI.pm"
       },
       "Bio::DB::SeqFeature::NormalizedTableFeatureI" : {
-         "file" : "Bio/DB/SeqFeature/NormalizedTableFeatureI.pm",
-         "version" : "1.006924"
+         "file" : "Bio/DB/SeqFeature/NormalizedTableFeatureI.pm"
       },
       "Bio::DB::SeqFeature::Segment" : {
-         "file" : "Bio/DB/SeqFeature/Segment.pm",
-         "version" : "1.006924"
+         "file" : "Bio/DB/SeqFeature/Segment.pm"
       },
       "Bio::DB::SeqFeature::Store" : {
-         "file" : "Bio/DB/SeqFeature/Store.pm",
-         "version" : "1.006924"
+         "file" : "Bio/DB/SeqFeature/Store.pm"
       },
       "Bio::DB::SeqFeature::Store::DBI::Iterator" : {
-         "file" : "Bio/DB/SeqFeature/Store/DBI/Iterator.pm",
-         "version" : "1.006924"
+         "file" : "Bio/DB/SeqFeature/Store/DBI/Iterator.pm"
       },
       "Bio::DB::SeqFeature::Store::DBI::Pg" : {
-         "file" : "Bio/DB/SeqFeature/Store/DBI/Pg.pm",
-         "version" : "1.006924"
+         "file" : "Bio/DB/SeqFeature/Store/DBI/Pg.pm"
       },
       "Bio::DB::SeqFeature::Store::DBI::SQLite" : {
-         "file" : "Bio/DB/SeqFeature/Store/DBI/SQLite.pm",
-         "version" : "1.006924"
+         "file" : "Bio/DB/SeqFeature/Store/DBI/SQLite.pm"
       },
       "Bio::DB::SeqFeature::Store::DBI::mysql" : {
-         "file" : "Bio/DB/SeqFeature/Store/DBI/mysql.pm",
-         "version" : "1.006924"
+         "file" : "Bio/DB/SeqFeature/Store/DBI/mysql.pm"
       },
       "Bio::DB::SeqFeature::Store::FeatureFileLoader" : {
-         "file" : "Bio/DB/SeqFeature/Store/FeatureFileLoader.pm",
-         "version" : "1.006924"
+         "file" : "Bio/DB/SeqFeature/Store/FeatureFileLoader.pm"
       },
       "Bio::DB::SeqFeature::Store::FeatureIterator" : {
-         "file" : "Bio/DB/SeqFeature/Store.pm",
-         "version" : "1.006924"
+         "file" : "Bio/DB/SeqFeature/Store.pm"
       },
       "Bio::DB::SeqFeature::Store::GFF2Loader" : {
-         "file" : "Bio/DB/SeqFeature/Store/GFF2Loader.pm",
-         "version" : "1.006924"
+         "file" : "Bio/DB/SeqFeature/Store/GFF2Loader.pm"
       },
       "Bio::DB::SeqFeature::Store::GFF3Loader" : {
-         "file" : "Bio/DB/SeqFeature/Store/GFF3Loader.pm",
-         "version" : "1.006924"
+         "file" : "Bio/DB/SeqFeature/Store/GFF3Loader.pm"
       },
       "Bio::DB::SeqFeature::Store::LoadHelper" : {
          "file" : "Bio/DB/SeqFeature/Store/LoadHelper.pm",
-         "version" : "1.006924"
+         "version" : "1.11"
       },
       "Bio::DB::SeqFeature::Store::Loader" : {
-         "file" : "Bio/DB/SeqFeature/Store/Loader.pm",
-         "version" : "1.006924"
+         "file" : "Bio/DB/SeqFeature/Store/Loader.pm"
       },
       "Bio::DB::SeqFeature::Store::bdb" : {
-         "file" : "Bio/DB/SeqFeature/Store/bdb.pm",
-         "version" : "1.006924"
+         "file" : "Bio/DB/SeqFeature/Store/bdb.pm"
       },
       "Bio::DB::SeqFeature::Store::berkeleydb" : {
-         "file" : "Bio/DB/SeqFeature/Store/berkeleydb.pm",
-         "version" : "1.006924"
+         "file" : "Bio/DB/SeqFeature/Store/berkeleydb.pm"
       },
       "Bio::DB::SeqFeature::Store::berkeleydb3" : {
-         "file" : "Bio/DB/SeqFeature/Store/berkeleydb3.pm",
-         "version" : "1.006924"
+         "file" : "Bio/DB/SeqFeature/Store/berkeleydb3.pm"
       },
       "Bio::DB::SeqFeature::Store::berkeleydb::Iterator" : {
-         "file" : "Bio/DB/SeqFeature/Store/berkeleydb.pm",
-         "version" : "1.006924"
+         "file" : "Bio/DB/SeqFeature/Store/berkeleydb.pm"
       },
       "Bio::DB::SeqFeature::Store::memory" : {
-         "file" : "Bio/DB/SeqFeature/Store/memory.pm",
-         "version" : "1.006924"
+         "file" : "Bio/DB/SeqFeature/Store/memory.pm"
       },
       "Bio::DB::SeqFeature::Store::memory::Iterator" : {
-         "file" : "Bio/DB/SeqFeature/Store/memory.pm",
-         "version" : "1.006924"
-      },
-      "Bio::DB::SeqHound" : {
-         "file" : "Bio/DB/SeqHound.pm",
-         "version" : "1.006924"
+         "file" : "Bio/DB/SeqFeature/Store/memory.pm"
       },
       "Bio::DB::SeqI" : {
-         "file" : "Bio/DB/SeqI.pm",
-         "version" : "1.006924"
+         "file" : "Bio/DB/SeqI.pm"
       },
       "Bio::DB::SeqVersion" : {
-         "file" : "Bio/DB/SeqVersion.pm",
-         "version" : "1.006924"
+         "file" : "Bio/DB/SeqVersion.pm"
       },
       "Bio::DB::SeqVersion::gi" : {
-         "file" : "Bio/DB/SeqVersion/gi.pm",
-         "version" : "1.006924"
+         "file" : "Bio/DB/SeqVersion/gi.pm"
       },
       "Bio::DB::SwissProt" : {
-         "file" : "Bio/DB/SwissProt.pm",
-         "version" : "1.006924"
+         "file" : "Bio/DB/SwissProt.pm"
       },
       "Bio::DB::TFBS" : {
-         "file" : "Bio/DB/TFBS.pm",
-         "version" : "1.006924"
+         "file" : "Bio/DB/TFBS.pm"
       },
       "Bio::DB::TFBS::transfac_pro" : {
-         "file" : "Bio/DB/TFBS/transfac_pro.pm",
-         "version" : "1.006924"
+         "file" : "Bio/DB/TFBS/transfac_pro.pm"
       },
       "Bio::DB::Taxonomy" : {
-         "file" : "Bio/DB/Taxonomy.pm",
-         "version" : "1.006924"
+         "file" : "Bio/DB/Taxonomy.pm"
       },
       "Bio::DB::Taxonomy::entrez" : {
-         "file" : "Bio/DB/Taxonomy/entrez.pm",
-         "version" : "1.006924"
+         "file" : "Bio/DB/Taxonomy/entrez.pm"
       },
       "Bio::DB::Taxonomy::flatfile" : {
-         "file" : "Bio/DB/Taxonomy/flatfile.pm",
-         "version" : "1.006924"
+         "file" : "Bio/DB/Taxonomy/flatfile.pm"
       },
       "Bio::DB::Taxonomy::greengenes" : {
-         "file" : "Bio/DB/Taxonomy/greengenes.pm",
-         "version" : "1.006924"
+         "file" : "Bio/DB/Taxonomy/greengenes.pm"
       },
       "Bio::DB::Taxonomy::list" : {
-         "file" : "Bio/DB/Taxonomy/list.pm",
-         "version" : "1.006924"
+         "file" : "Bio/DB/Taxonomy/list.pm"
       },
       "Bio::DB::Taxonomy::silva" : {
-         "file" : "Bio/DB/Taxonomy/silva.pm",
-         "version" : "1.006924"
+         "file" : "Bio/DB/Taxonomy/silva.pm"
+      },
+      "Bio::DB::Taxonomy::sqlite" : {
+         "file" : "Bio/DB/Taxonomy/sqlite.pm"
       },
       "Bio::DB::Universal" : {
-         "file" : "Bio/DB/Universal.pm",
-         "version" : "1.006924"
+         "file" : "Bio/DB/Universal.pm"
       },
       "Bio::DB::UpdateableSeqI" : {
-         "file" : "Bio/DB/UpdateableSeqI.pm",
-         "version" : "1.006924"
+         "file" : "Bio/DB/UpdateableSeqI.pm"
       },
       "Bio::DB::WebDBSeqI" : {
-         "file" : "Bio/DB/WebDBSeqI.pm",
-         "version" : "1.006924"
+         "file" : "Bio/DB/WebDBSeqI.pm"
       },
       "Bio::DBLinkContainerI" : {
-         "file" : "Bio/DBLinkContainerI.pm",
-         "version" : "1.006924"
+         "file" : "Bio/DBLinkContainerI.pm"
       },
       "Bio::Das::FeatureTypeI" : {
-         "file" : "Bio/Das/FeatureTypeI.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Das/FeatureTypeI.pm"
       },
       "Bio::Das::SegmentI" : {
-         "file" : "Bio/Das/SegmentI.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Das/SegmentI.pm"
       },
       "Bio::DasI" : {
-         "file" : "Bio/DasI.pm",
-         "version" : "1.006924"
+         "file" : "Bio/DasI.pm"
       },
       "Bio::DescribableI" : {
-         "file" : "Bio/DescribableI.pm",
-         "version" : "1.006924"
+         "file" : "Bio/DescribableI.pm"
       },
       "Bio::Draw::Pictogram" : {
-         "file" : "Bio/Draw/Pictogram.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Draw/Pictogram.pm"
       },
       "Bio::Event::EventGeneratorI" : {
-         "file" : "Bio/Event/EventGeneratorI.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Event/EventGeneratorI.pm"
       },
       "Bio::Event::EventHandlerI" : {
-         "file" : "Bio/Event/EventHandlerI.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Event/EventHandlerI.pm"
       },
       "Bio::Factory::AnalysisI" : {
-         "file" : "Bio/Factory/AnalysisI.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Factory/AnalysisI.pm"
       },
       "Bio::Factory::ApplicationFactoryI" : {
-         "file" : "Bio/Factory/ApplicationFactoryI.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Factory/ApplicationFactoryI.pm"
       },
       "Bio::Factory::DriverFactory" : {
-         "file" : "Bio/Factory/DriverFactory.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Factory/DriverFactory.pm"
       },
       "Bio::Factory::FTLocationFactory" : {
-         "file" : "Bio/Factory/FTLocationFactory.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Factory/FTLocationFactory.pm"
       },
       "Bio::Factory::LocationFactoryI" : {
-         "file" : "Bio/Factory/LocationFactoryI.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Factory/LocationFactoryI.pm"
       },
       "Bio::Factory::MapFactoryI" : {
-         "file" : "Bio/Factory/MapFactoryI.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Factory/MapFactoryI.pm"
       },
       "Bio::Factory::ObjectBuilderI" : {
-         "file" : "Bio/Factory/ObjectBuilderI.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Factory/ObjectBuilderI.pm"
       },
       "Bio::Factory::ObjectFactory" : {
-         "file" : "Bio/Factory/ObjectFactory.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Factory/ObjectFactory.pm"
       },
       "Bio::Factory::ObjectFactoryI" : {
-         "file" : "Bio/Factory/ObjectFactoryI.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Factory/ObjectFactoryI.pm"
       },
       "Bio::Factory::SeqAnalysisParserFactory" : {
-         "file" : "Bio/Factory/SeqAnalysisParserFactory.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Factory/SeqAnalysisParserFactory.pm"
       },
       "Bio::Factory::SeqAnalysisParserFactoryI" : {
-         "file" : "Bio/Factory/SeqAnalysisParserFactoryI.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Factory/SeqAnalysisParserFactoryI.pm"
       },
       "Bio::Factory::SequenceFactoryI" : {
-         "file" : "Bio/Factory/SequenceFactoryI.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Factory/SequenceFactoryI.pm"
       },
       "Bio::Factory::SequenceProcessorI" : {
-         "file" : "Bio/Factory/SequenceProcessorI.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Factory/SequenceProcessorI.pm"
       },
       "Bio::Factory::SequenceStreamI" : {
-         "file" : "Bio/Factory/SequenceStreamI.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Factory/SequenceStreamI.pm"
       },
       "Bio::Factory::TreeFactoryI" : {
-         "file" : "Bio/Factory/TreeFactoryI.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Factory/TreeFactoryI.pm"
       },
       "Bio::FeatureHolderI" : {
-         "file" : "Bio/FeatureHolderI.pm",
-         "version" : "1.006924"
+         "file" : "Bio/FeatureHolderI.pm"
       },
       "Bio::HandlerBaseI" : {
-         "file" : "Bio/HandlerBaseI.pm",
-         "version" : "1.006924"
+         "file" : "Bio/HandlerBaseI.pm"
       },
       "Bio::IdCollectionI" : {
-         "file" : "Bio/IdCollectionI.pm",
-         "version" : "1.006924"
+         "file" : "Bio/IdCollectionI.pm"
       },
       "Bio::IdentifiableI" : {
-         "file" : "Bio/IdentifiableI.pm",
-         "version" : "1.006924"
+         "file" : "Bio/IdentifiableI.pm"
       },
       "Bio::Index::Abstract" : {
-         "file" : "Bio/Index/Abstract.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Index/Abstract.pm"
       },
       "Bio::Index::AbstractSeq" : {
-         "file" : "Bio/Index/AbstractSeq.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Index/AbstractSeq.pm"
       },
       "Bio::Index::Blast" : {
-         "file" : "Bio/Index/Blast.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Index/Blast.pm"
       },
       "Bio::Index::BlastTable" : {
-         "file" : "Bio/Index/BlastTable.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Index/BlastTable.pm"
       },
       "Bio::Index::EMBL" : {
-         "file" : "Bio/Index/EMBL.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Index/EMBL.pm"
       },
       "Bio::Index::Fasta" : {
-         "file" : "Bio/Index/Fasta.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Index/Fasta.pm"
       },
       "Bio::Index::Fastq" : {
-         "file" : "Bio/Index/Fastq.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Index/Fastq.pm"
       },
       "Bio::Index::GenBank" : {
-         "file" : "Bio/Index/GenBank.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Index/GenBank.pm"
       },
       "Bio::Index::Hmmer" : {
-         "file" : "Bio/Index/Hmmer.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Index/Hmmer.pm"
       },
       "Bio::Index::Qual" : {
-         "file" : "Bio/Index/Qual.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Index/Qual.pm"
       },
       "Bio::Index::Stockholm" : {
-         "file" : "Bio/Index/Stockholm.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Index/Stockholm.pm"
       },
       "Bio::Index::SwissPfam" : {
-         "file" : "Bio/Index/SwissPfam.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Index/SwissPfam.pm"
       },
       "Bio::Index::Swissprot" : {
-         "file" : "Bio/Index/Swissprot.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Index/Swissprot.pm"
       },
       "Bio::LiveSeq::AARange" : {
-         "file" : "Bio/LiveSeq/AARange.pm",
-         "version" : "1.006924"
+         "file" : "Bio/LiveSeq/AARange.pm"
       },
       "Bio::LiveSeq::Chain" : {
-         "file" : "Bio/LiveSeq/Chain.pm",
-         "version" : "1.006924"
+         "file" : "Bio/LiveSeq/Chain.pm"
       },
       "Bio::LiveSeq::ChainI" : {
-         "file" : "Bio/LiveSeq/ChainI.pm",
-         "version" : "1.006924"
+         "file" : "Bio/LiveSeq/ChainI.pm"
       },
       "Bio::LiveSeq::DNA" : {
-         "file" : "Bio/LiveSeq/DNA.pm",
-         "version" : "1.006924"
+         "file" : "Bio/LiveSeq/DNA.pm"
       },
       "Bio::LiveSeq::Exon" : {
-         "file" : "Bio/LiveSeq/Exon.pm",
-         "version" : "1.006924"
+         "file" : "Bio/LiveSeq/Exon.pm"
       },
       "Bio::LiveSeq::Gene" : {
-         "file" : "Bio/LiveSeq/Gene.pm",
-         "version" : "1.006924"
+         "file" : "Bio/LiveSeq/Gene.pm"
       },
       "Bio::LiveSeq::IO::BioPerl" : {
-         "file" : "Bio/LiveSeq/IO/BioPerl.pm",
-         "version" : "1.006924"
+         "file" : "Bio/LiveSeq/IO/BioPerl.pm"
       },
       "Bio::LiveSeq::IO::Loader" : {
-         "file" : "Bio/LiveSeq/IO/Loader.pm",
-         "version" : "1.006924"
+         "file" : "Bio/LiveSeq/IO/Loader.pm"
       },
       "Bio::LiveSeq::Intron" : {
-         "file" : "Bio/LiveSeq/Intron.pm",
-         "version" : "1.006924"
+         "file" : "Bio/LiveSeq/Intron.pm"
       },
       "Bio::LiveSeq::Mutation" : {
-         "file" : "Bio/LiveSeq/Mutation.pm",
-         "version" : "1.006924"
+         "file" : "Bio/LiveSeq/Mutation.pm"
       },
       "Bio::LiveSeq::Mutator" : {
-         "file" : "Bio/LiveSeq/Mutator.pm",
-         "version" : "1.006924"
+         "file" : "Bio/LiveSeq/Mutator.pm"
       },
       "Bio::LiveSeq::Prim_Transcript" : {
-         "file" : "Bio/LiveSeq/Prim_Transcript.pm",
-         "version" : "1.006924"
+         "file" : "Bio/LiveSeq/Prim_Transcript.pm"
       },
       "Bio::LiveSeq::Range" : {
-         "file" : "Bio/LiveSeq/Range.pm",
-         "version" : "1.006924"
+         "file" : "Bio/LiveSeq/Range.pm"
       },
       "Bio::LiveSeq::Repeat_Region" : {
-         "file" : "Bio/LiveSeq/Repeat_Region.pm",
-         "version" : "1.006924"
+         "file" : "Bio/LiveSeq/Repeat_Region.pm"
       },
       "Bio::LiveSeq::Repeat_Unit" : {
-         "file" : "Bio/LiveSeq/Repeat_Unit.pm",
-         "version" : "1.006924"
+         "file" : "Bio/LiveSeq/Repeat_Unit.pm"
       },
       "Bio::LiveSeq::SeqI" : {
-         "file" : "Bio/LiveSeq/SeqI.pm",
-         "version" : "1.006924"
+         "file" : "Bio/LiveSeq/SeqI.pm"
       },
       "Bio::LiveSeq::Transcript" : {
-         "file" : "Bio/LiveSeq/Transcript.pm",
-         "version" : "1.006924"
+         "file" : "Bio/LiveSeq/Transcript.pm"
       },
       "Bio::LiveSeq::Translation" : {
-         "file" : "Bio/LiveSeq/Translation.pm",
-         "version" : "1.006924"
+         "file" : "Bio/LiveSeq/Translation.pm"
       },
       "Bio::LocatableSeq" : {
-         "file" : "Bio/Search/Tiling/MapTileUtils.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Search/Tiling/MapTileUtils.pm"
       },
       "Bio::Location::Atomic" : {
-         "file" : "Bio/Location/Atomic.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Location/Atomic.pm"
       },
       "Bio::Location::AvWithinCoordPolicy" : {
-         "file" : "Bio/Location/AvWithinCoordPolicy.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Location/AvWithinCoordPolicy.pm"
       },
       "Bio::Location::CoordinatePolicyI" : {
-         "file" : "Bio/Location/CoordinatePolicyI.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Location/CoordinatePolicyI.pm"
       },
       "Bio::Location::Fuzzy" : {
-         "file" : "Bio/Location/Fuzzy.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Location/Fuzzy.pm"
       },
       "Bio::Location::FuzzyLocationI" : {
-         "file" : "Bio/Location/FuzzyLocationI.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Location/FuzzyLocationI.pm"
       },
       "Bio::Location::NarrowestCoordPolicy" : {
-         "file" : "Bio/Location/NarrowestCoordPolicy.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Location/NarrowestCoordPolicy.pm"
       },
       "Bio::Location::Simple" : {
-         "file" : "Bio/Location/Simple.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Location/Simple.pm"
       },
       "Bio::Location::Split" : {
-         "file" : "Bio/Location/Split.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Location/Split.pm"
       },
       "Bio::Location::SplitLocationI" : {
-         "file" : "Bio/Location/SplitLocationI.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Location/SplitLocationI.pm"
       },
       "Bio::Location::WidestCoordPolicy" : {
-         "file" : "Bio/Location/WidestCoordPolicy.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Location/WidestCoordPolicy.pm"
       },
       "Bio::LocationI" : {
-         "file" : "Bio/LocationI.pm",
-         "version" : "1.006924"
+         "file" : "Bio/LocationI.pm"
       },
       "Bio::Map::Clone" : {
-         "file" : "Bio/Map/Clone.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Map/Clone.pm"
       },
       "Bio::Map::Contig" : {
-         "file" : "Bio/Map/Contig.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Map/Contig.pm"
       },
       "Bio::Map::CytoMap" : {
-         "file" : "Bio/Map/CytoMap.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Map/CytoMap.pm"
       },
       "Bio::Map::CytoMarker" : {
-         "file" : "Bio/Map/CytoMarker.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Map/CytoMarker.pm"
       },
       "Bio::Map::CytoPosition" : {
-         "file" : "Bio/Map/CytoPosition.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Map/CytoPosition.pm"
       },
       "Bio::Map::EntityI" : {
-         "file" : "Bio/Map/EntityI.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Map/EntityI.pm"
       },
       "Bio::Map::FPCMarker" : {
-         "file" : "Bio/Map/FPCMarker.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Map/FPCMarker.pm"
       },
       "Bio::Map::Gene" : {
-         "file" : "Bio/Map/Gene.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Map/Gene.pm"
       },
       "Bio::Map::GeneMap" : {
-         "file" : "Bio/Map/GeneMap.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Map/GeneMap.pm"
       },
       "Bio::Map::GenePosition" : {
-         "file" : "Bio/Map/GenePosition.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Map/GenePosition.pm"
       },
       "Bio::Map::GeneRelative" : {
-         "file" : "Bio/Map/GeneRelative.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Map/GeneRelative.pm"
       },
       "Bio::Map::LinkageMap" : {
-         "file" : "Bio/Map/LinkageMap.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Map/LinkageMap.pm"
       },
       "Bio::Map::LinkagePosition" : {
-         "file" : "Bio/Map/LinkagePosition.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Map/LinkagePosition.pm"
       },
       "Bio::Map::MapI" : {
-         "file" : "Bio/Map/MapI.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Map/MapI.pm"
       },
       "Bio::Map::Mappable" : {
-         "file" : "Bio/Map/Mappable.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Map/Mappable.pm"
       },
       "Bio::Map::MappableI" : {
-         "file" : "Bio/Map/MappableI.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Map/MappableI.pm"
       },
       "Bio::Map::Marker" : {
-         "file" : "Bio/Map/Marker.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Map/Marker.pm"
       },
       "Bio::Map::MarkerI" : {
-         "file" : "Bio/Map/MarkerI.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Map/MarkerI.pm"
       },
       "Bio::Map::Microsatellite" : {
-         "file" : "Bio/Map/Microsatellite.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Map/Microsatellite.pm"
       },
       "Bio::Map::OrderedPosition" : {
-         "file" : "Bio/Map/OrderedPosition.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Map/OrderedPosition.pm"
       },
       "Bio::Map::OrderedPositionWithDistance" : {
-         "file" : "Bio/Map/OrderedPositionWithDistance.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Map/OrderedPositionWithDistance.pm"
       },
       "Bio::Map::Physical" : {
-         "file" : "Bio/Map/Physical.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Map/Physical.pm"
       },
       "Bio::Map::Position" : {
-         "file" : "Bio/Map/Position.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Map/Position.pm"
       },
       "Bio::Map::PositionHandler" : {
-         "file" : "Bio/Map/PositionHandler.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Map/PositionHandler.pm"
       },
       "Bio::Map::PositionHandlerI" : {
-         "file" : "Bio/Map/PositionHandlerI.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Map/PositionHandlerI.pm"
       },
       "Bio::Map::PositionI" : {
-         "file" : "Bio/Map/PositionI.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Map/PositionI.pm"
       },
       "Bio::Map::PositionWithSequence" : {
-         "file" : "Bio/Map/PositionWithSequence.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Map/PositionWithSequence.pm"
       },
       "Bio::Map::Prediction" : {
-         "file" : "Bio/Map/Prediction.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Map/Prediction.pm"
       },
       "Bio::Map::Relative" : {
-         "file" : "Bio/Map/Relative.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Map/Relative.pm"
       },
       "Bio::Map::RelativeI" : {
-         "file" : "Bio/Map/RelativeI.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Map/RelativeI.pm"
       },
       "Bio::Map::SimpleMap" : {
-         "file" : "Bio/Map/SimpleMap.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Map/SimpleMap.pm"
       },
       "Bio::Map::TranscriptionFactor" : {
-         "file" : "Bio/Map/TranscriptionFactor.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Map/TranscriptionFactor.pm"
       },
       "Bio::MapIO" : {
-         "file" : "Bio/MapIO.pm",
-         "version" : "1.006924"
+         "file" : "Bio/MapIO.pm"
       },
       "Bio::MapIO::fpc" : {
-         "file" : "Bio/MapIO/fpc.pm",
-         "version" : "1.006924"
+         "file" : "Bio/MapIO/fpc.pm"
       },
       "Bio::MapIO::mapmaker" : {
-         "file" : "Bio/MapIO/mapmaker.pm",
-         "version" : "1.006924"
+         "file" : "Bio/MapIO/mapmaker.pm"
       },
       "Bio::Matrix::Generic" : {
-         "file" : "Bio/Matrix/Generic.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Matrix/Generic.pm"
       },
       "Bio::Matrix::IO" : {
-         "file" : "Bio/Matrix/IO.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Matrix/IO.pm"
       },
       "Bio::Matrix::IO::mlagan" : {
-         "file" : "Bio/Matrix/IO/mlagan.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Matrix/IO/mlagan.pm"
       },
       "Bio::Matrix::IO::phylip" : {
-         "file" : "Bio/Matrix/IO/phylip.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Matrix/IO/phylip.pm"
       },
       "Bio::Matrix::IO::scoring" : {
-         "file" : "Bio/Matrix/IO/scoring.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Matrix/IO/scoring.pm"
       },
       "Bio::Matrix::MatrixI" : {
-         "file" : "Bio/Matrix/MatrixI.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Matrix/MatrixI.pm"
       },
       "Bio::Matrix::Mlagan" : {
-         "file" : "Bio/Matrix/Mlagan.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Matrix/Mlagan.pm"
       },
       "Bio::Matrix::PSM::IO" : {
-         "file" : "Bio/Matrix/PSM/IO.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Matrix/PSM/IO.pm"
       },
       "Bio::Matrix::PSM::IO::mast" : {
-         "file" : "Bio/Matrix/PSM/IO/mast.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Matrix/PSM/IO/mast.pm"
       },
       "Bio::Matrix::PSM::IO::masta" : {
-         "file" : "Bio/Matrix/PSM/IO/masta.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Matrix/PSM/IO/masta.pm"
       },
       "Bio::Matrix::PSM::IO::meme" : {
-         "file" : "Bio/Matrix/PSM/IO/meme.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Matrix/PSM/IO/meme.pm"
       },
       "Bio::Matrix::PSM::IO::psiblast" : {
-         "file" : "Bio/Matrix/PSM/IO/psiblast.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Matrix/PSM/IO/psiblast.pm"
       },
       "Bio::Matrix::PSM::IO::transfac" : {
-         "file" : "Bio/Matrix/PSM/IO/transfac.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Matrix/PSM/IO/transfac.pm"
       },
       "Bio::Matrix::PSM::InstanceSite" : {
-         "file" : "Bio/Matrix/PSM/InstanceSite.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Matrix/PSM/InstanceSite.pm"
       },
       "Bio::Matrix::PSM::InstanceSiteI" : {
-         "file" : "Bio/Matrix/PSM/InstanceSiteI.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Matrix/PSM/InstanceSiteI.pm"
       },
       "Bio::Matrix::PSM::ProtMatrix" : {
-         "file" : "Bio/Matrix/PSM/ProtMatrix.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Matrix/PSM/ProtMatrix.pm"
       },
       "Bio::Matrix::PSM::ProtPsm" : {
-         "file" : "Bio/Matrix/PSM/ProtPsm.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Matrix/PSM/ProtPsm.pm"
       },
       "Bio::Matrix::PSM::Psm" : {
-         "file" : "Bio/Matrix/PSM/Psm.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Matrix/PSM/Psm.pm"
       },
       "Bio::Matrix::PSM::PsmHeader" : {
-         "file" : "Bio/Matrix/PSM/PsmHeader.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Matrix/PSM/PsmHeader.pm"
       },
       "Bio::Matrix::PSM::PsmHeaderI" : {
-         "file" : "Bio/Matrix/PSM/PsmHeaderI.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Matrix/PSM/PsmHeaderI.pm"
       },
       "Bio::Matrix::PSM::PsmI" : {
-         "file" : "Bio/Matrix/PSM/PsmI.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Matrix/PSM/PsmI.pm"
       },
       "Bio::Matrix::PSM::SiteMatrix" : {
-         "file" : "Bio/Matrix/PSM/SiteMatrix.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Matrix/PSM/SiteMatrix.pm"
       },
       "Bio::Matrix::PSM::SiteMatrixI" : {
-         "file" : "Bio/Matrix/PSM/SiteMatrixI.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Matrix/PSM/SiteMatrixI.pm"
       },
       "Bio::Matrix::PhylipDist" : {
-         "file" : "Bio/Matrix/PhylipDist.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Matrix/PhylipDist.pm"
       },
       "Bio::Matrix::Scoring" : {
-         "file" : "Bio/Matrix/Scoring.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Matrix/Scoring.pm"
       },
       "Bio::MolEvol::CodonModel" : {
-         "file" : "Bio/MolEvol/CodonModel.pm",
-         "version" : "1.006924"
+         "file" : "Bio/MolEvol/CodonModel.pm"
       },
       "Bio::Nexml::Factory" : {
-         "file" : "Bio/Nexml/Factory.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Nexml/Factory.pm"
       },
       "Bio::NexmlIO" : {
-         "file" : "Bio/NexmlIO.pm",
-         "version" : "1.006924"
+         "file" : "Bio/NexmlIO.pm"
       },
       "Bio::Ontology::DocumentRegistry" : {
-         "file" : "Bio/Ontology/DocumentRegistry.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Ontology/DocumentRegistry.pm"
       },
       "Bio::Ontology::GOterm" : {
-         "file" : "Bio/Ontology/GOterm.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Ontology/GOterm.pm"
       },
       "Bio::Ontology::InterProTerm" : {
-         "file" : "Bio/Ontology/InterProTerm.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Ontology/InterProTerm.pm"
       },
       "Bio::Ontology::OBOEngine" : {
-         "file" : "Bio/Ontology/OBOEngine.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Ontology/OBOEngine.pm"
       },
       "Bio::Ontology::OBOterm" : {
-         "file" : "Bio/Ontology/OBOterm.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Ontology/OBOterm.pm"
       },
       "Bio::Ontology::Ontology" : {
-         "file" : "Bio/Ontology/Ontology.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Ontology/Ontology.pm"
       },
       "Bio::Ontology::OntologyEngineI" : {
-         "file" : "Bio/Ontology/OntologyEngineI.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Ontology/OntologyEngineI.pm"
       },
       "Bio::Ontology::OntologyI" : {
-         "file" : "Bio/Ontology/OntologyI.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Ontology/OntologyI.pm"
       },
       "Bio::Ontology::OntologyStore" : {
-         "file" : "Bio/Ontology/OntologyStore.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Ontology/OntologyStore.pm"
       },
       "Bio::Ontology::Path" : {
-         "file" : "Bio/Ontology/Path.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Ontology/Path.pm"
       },
       "Bio::Ontology::PathI" : {
-         "file" : "Bio/Ontology/PathI.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Ontology/PathI.pm"
       },
       "Bio::Ontology::Relationship" : {
-         "file" : "Bio/Ontology/Relationship.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Ontology/Relationship.pm"
       },
       "Bio::Ontology::RelationshipFactory" : {
-         "file" : "Bio/Ontology/RelationshipFactory.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Ontology/RelationshipFactory.pm"
       },
       "Bio::Ontology::RelationshipI" : {
-         "file" : "Bio/Ontology/RelationshipI.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Ontology/RelationshipI.pm"
       },
       "Bio::Ontology::RelationshipType" : {
-         "file" : "Bio/Ontology/RelationshipType.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Ontology/RelationshipType.pm"
       },
       "Bio::Ontology::SimpleGOEngine::GraphAdaptor" : {
-         "file" : "Bio/Ontology/SimpleGOEngine/GraphAdaptor.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Ontology/SimpleGOEngine/GraphAdaptor.pm"
       },
       "Bio::Ontology::SimpleOntologyEngine" : {
-         "file" : "Bio/Ontology/SimpleOntologyEngine.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Ontology/SimpleOntologyEngine.pm"
       },
       "Bio::Ontology::Term" : {
-         "file" : "Bio/Ontology/Term.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Ontology/Term.pm"
       },
       "Bio::Ontology::TermFactory" : {
-         "file" : "Bio/Ontology/TermFactory.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Ontology/TermFactory.pm"
       },
       "Bio::Ontology::TermI" : {
-         "file" : "Bio/Ontology/TermI.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Ontology/TermI.pm"
       },
       "Bio::OntologyIO" : {
-         "file" : "Bio/OntologyIO.pm",
-         "version" : "1.006924"
+         "file" : "Bio/OntologyIO.pm"
       },
       "Bio::OntologyIO::Handlers::BaseSAXHandler" : {
-         "file" : "Bio/OntologyIO/Handlers/BaseSAXHandler.pm",
-         "version" : "1.006924"
+         "file" : "Bio/OntologyIO/Handlers/BaseSAXHandler.pm"
       },
       "Bio::OntologyIO::Handlers::InterProHandler" : {
-         "file" : "Bio/OntologyIO/Handlers/InterProHandler.pm",
-         "version" : "1.006924"
+         "file" : "Bio/OntologyIO/Handlers/InterProHandler.pm"
       },
       "Bio::OntologyIO::Handlers::InterPro_BioSQL_Handler" : {
-         "file" : "Bio/OntologyIO/Handlers/InterPro_BioSQL_Handler.pm",
-         "version" : "1.006924"
+         "file" : "Bio/OntologyIO/Handlers/InterPro_BioSQL_Handler.pm"
       },
       "Bio::OntologyIO::InterProParser" : {
-         "file" : "Bio/OntologyIO/InterProParser.pm",
-         "version" : "1.006924"
+         "file" : "Bio/OntologyIO/InterProParser.pm"
       },
       "Bio::OntologyIO::dagflat" : {
-         "file" : "Bio/OntologyIO/dagflat.pm",
-         "version" : "1.006924"
+         "file" : "Bio/OntologyIO/dagflat.pm"
       },
       "Bio::OntologyIO::goflat" : {
-         "file" : "Bio/OntologyIO/goflat.pm",
-         "version" : "1.006924"
+         "file" : "Bio/OntologyIO/goflat.pm"
       },
       "Bio::OntologyIO::obo" : {
-         "file" : "Bio/OntologyIO/obo.pm",
-         "version" : "1.006924"
+         "file" : "Bio/OntologyIO/obo.pm"
       },
       "Bio::OntologyIO::simplehierarchy" : {
-         "file" : "Bio/OntologyIO/simplehierarchy.pm",
-         "version" : "1.006924"
+         "file" : "Bio/OntologyIO/simplehierarchy.pm"
       },
       "Bio::OntologyIO::soflat" : {
-         "file" : "Bio/OntologyIO/soflat.pm",
-         "version" : "1.006924"
+         "file" : "Bio/OntologyIO/soflat.pm"
       },
       "Bio::ParameterBaseI" : {
-         "file" : "Bio/ParameterBaseI.pm",
-         "version" : "1.006924"
+         "file" : "Bio/ParameterBaseI.pm"
       },
       "Bio::Perl" : {
-         "file" : "Bio/Perl.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Perl.pm"
       },
       "Bio::Phenotype::Correlate" : {
-         "file" : "Bio/Phenotype/Correlate.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Phenotype/Correlate.pm"
       },
       "Bio::Phenotype::MeSH::Term" : {
-         "file" : "Bio/Phenotype/MeSH/Term.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Phenotype/MeSH/Term.pm"
       },
       "Bio::Phenotype::MeSH::Twig" : {
-         "file" : "Bio/Phenotype/MeSH/Twig.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Phenotype/MeSH/Twig.pm"
       },
       "Bio::Phenotype::Measure" : {
-         "file" : "Bio/Phenotype/Measure.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Phenotype/Measure.pm"
       },
       "Bio::Phenotype::OMIM::MiniMIMentry" : {
-         "file" : "Bio/Phenotype/OMIM/MiniMIMentry.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Phenotype/OMIM/MiniMIMentry.pm"
       },
       "Bio::Phenotype::OMIM::OMIMentry" : {
-         "file" : "Bio/Phenotype/OMIM/OMIMentry.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Phenotype/OMIM/OMIMentry.pm"
       },
       "Bio::Phenotype::OMIM::OMIMentryAllelicVariant" : {
-         "file" : "Bio/Phenotype/OMIM/OMIMentryAllelicVariant.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Phenotype/OMIM/OMIMentryAllelicVariant.pm"
       },
       "Bio::Phenotype::OMIM::OMIMparser" : {
-         "file" : "Bio/Phenotype/OMIM/OMIMparser.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Phenotype/OMIM/OMIMparser.pm"
       },
       "Bio::Phenotype::Phenotype" : {
-         "file" : "Bio/Phenotype/Phenotype.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Phenotype/Phenotype.pm"
       },
       "Bio::Phenotype::PhenotypeI" : {
-         "file" : "Bio/Phenotype/PhenotypeI.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Phenotype/PhenotypeI.pm"
       },
       "Bio::PhyloNetwork" : {
-         "file" : "Bio/PhyloNetwork.pm",
-         "version" : "1.006924"
+         "file" : "Bio/PhyloNetwork.pm"
       },
       "Bio::PhyloNetwork::Factory" : {
-         "file" : "Bio/PhyloNetwork/Factory.pm",
-         "version" : "1.006924"
+         "file" : "Bio/PhyloNetwork/Factory.pm"
       },
       "Bio::PhyloNetwork::FactoryX" : {
-         "file" : "Bio/PhyloNetwork/FactoryX.pm",
-         "version" : "1.006924"
+         "file" : "Bio/PhyloNetwork/FactoryX.pm"
       },
       "Bio::PhyloNetwork::GraphViz" : {
-         "file" : "Bio/PhyloNetwork/GraphViz.pm",
-         "version" : "1.006924"
+         "file" : "Bio/PhyloNetwork/GraphViz.pm"
       },
       "Bio::PhyloNetwork::RandomFactory" : {
-         "file" : "Bio/PhyloNetwork/RandomFactory.pm",
-         "version" : "1.006924"
+         "file" : "Bio/PhyloNetwork/RandomFactory.pm"
       },
       "Bio::PhyloNetwork::TreeFactory" : {
-         "file" : "Bio/PhyloNetwork/TreeFactory.pm",
-         "version" : "1.006924"
+         "file" : "Bio/PhyloNetwork/TreeFactory.pm"
       },
       "Bio::PhyloNetwork::TreeFactoryMulti" : {
-         "file" : "Bio/PhyloNetwork/TreeFactoryMulti.pm",
-         "version" : "1.006924"
+         "file" : "Bio/PhyloNetwork/TreeFactoryMulti.pm"
       },
       "Bio::PhyloNetwork::TreeFactoryX" : {
-         "file" : "Bio/PhyloNetwork/TreeFactoryX.pm",
-         "version" : "1.006924"
+         "file" : "Bio/PhyloNetwork/TreeFactoryX.pm"
       },
       "Bio::PhyloNetwork::muVector" : {
-         "file" : "Bio/PhyloNetwork/muVector.pm",
-         "version" : "1.006924"
+         "file" : "Bio/PhyloNetwork/muVector.pm"
       },
       "Bio::PopGen::Genotype" : {
-         "file" : "Bio/PopGen/Genotype.pm",
-         "version" : "1.006924"
+         "file" : "Bio/PopGen/Genotype.pm"
       },
       "Bio::PopGen::GenotypeI" : {
-         "file" : "Bio/PopGen/GenotypeI.pm",
-         "version" : "1.006924"
+         "file" : "Bio/PopGen/GenotypeI.pm"
       },
       "Bio::PopGen::HtSNP" : {
-         "file" : "Bio/PopGen/HtSNP.pm",
-         "version" : "1.006924"
+         "file" : "Bio/PopGen/HtSNP.pm"
       },
       "Bio::PopGen::IO" : {
-         "file" : "Bio/PopGen/IO.pm",
-         "version" : "1.006924"
+         "file" : "Bio/PopGen/IO.pm"
       },
       "Bio::PopGen::IO::csv" : {
-         "file" : "Bio/PopGen/IO/csv.pm",
-         "version" : "1.006924"
+         "file" : "Bio/PopGen/IO/csv.pm"
       },
       "Bio::PopGen::IO::hapmap" : {
-         "file" : "Bio/PopGen/IO/hapmap.pm",
-         "version" : "1.006924"
+         "file" : "Bio/PopGen/IO/hapmap.pm"
       },
       "Bio::PopGen::IO::phase" : {
-         "file" : "Bio/PopGen/IO/phase.pm",
-         "version" : "1.006924"
+         "file" : "Bio/PopGen/IO/phase.pm"
       },
       "Bio::PopGen::IO::prettybase" : {
-         "file" : "Bio/PopGen/IO/prettybase.pm",
-         "version" : "1.006924"
+         "file" : "Bio/PopGen/IO/prettybase.pm"
       },
       "Bio::PopGen::Individual" : {
-         "file" : "Bio/PopGen/Individual.pm",
-         "version" : "1.006924"
+         "file" : "Bio/PopGen/Individual.pm"
       },
       "Bio::PopGen::IndividualI" : {
-         "file" : "Bio/PopGen/IndividualI.pm",
-         "version" : "1.006924"
+         "file" : "Bio/PopGen/IndividualI.pm"
       },
       "Bio::PopGen::Marker" : {
-         "file" : "Bio/PopGen/Marker.pm",
-         "version" : "1.006924"
+         "file" : "Bio/PopGen/Marker.pm"
       },
       "Bio::PopGen::MarkerI" : {
-         "file" : "Bio/PopGen/MarkerI.pm",
-         "version" : "1.006924"
+         "file" : "Bio/PopGen/MarkerI.pm"
       },
       "Bio::PopGen::PopStats" : {
-         "file" : "Bio/PopGen/PopStats.pm",
-         "version" : "1.006924"
+         "file" : "Bio/PopGen/PopStats.pm"
       },
       "Bio::PopGen::Population" : {
-         "file" : "Bio/PopGen/Population.pm",
-         "version" : "1.006924"
+         "file" : "Bio/PopGen/Population.pm"
       },
       "Bio::PopGen::PopulationI" : {
-         "file" : "Bio/PopGen/PopulationI.pm",
-         "version" : "1.006924"
+         "file" : "Bio/PopGen/PopulationI.pm"
       },
       "Bio::PopGen::Simulation::Coalescent" : {
-         "file" : "Bio/PopGen/Simulation/Coalescent.pm",
-         "version" : "1.006924"
+         "file" : "Bio/PopGen/Simulation/Coalescent.pm"
       },
       "Bio::PopGen::Simulation::GeneticDrift" : {
-         "file" : "Bio/PopGen/Simulation/GeneticDrift.pm",
-         "version" : "1.006924"
+         "file" : "Bio/PopGen/Simulation/GeneticDrift.pm"
       },
       "Bio::PopGen::Statistics" : {
-         "file" : "Bio/PopGen/Statistics.pm",
-         "version" : "1.006924"
+         "file" : "Bio/PopGen/Statistics.pm"
       },
       "Bio::PopGen::TagHaplotype" : {
-         "file" : "Bio/PopGen/TagHaplotype.pm",
-         "version" : "1.006924"
+         "file" : "Bio/PopGen/TagHaplotype.pm"
       },
       "Bio::PopGen::Utilities" : {
-         "file" : "Bio/PopGen/Utilities.pm",
-         "version" : "1.006924"
+         "file" : "Bio/PopGen/Utilities.pm"
       },
       "Bio::PrimarySeq" : {
-         "file" : "Bio/PrimarySeq.pm",
-         "version" : "1.006924"
+         "file" : "Bio/PrimarySeq.pm"
       },
       "Bio::PrimarySeq::Fasta" : {
-         "file" : "Bio/DB/Fasta.pm",
-         "version" : "1.006924"
+         "file" : "Bio/DB/Fasta.pm"
       },
       "Bio::PrimarySeqI" : {
-         "file" : "Bio/PrimarySeqI.pm",
-         "version" : "1.006924"
+         "file" : "Bio/PrimarySeqI.pm"
       },
       "Bio::PullParserI" : {
-         "file" : "Bio/PullParserI.pm",
-         "version" : "1.006924"
+         "file" : "Bio/PullParserI.pm"
       },
       "Bio::Range" : {
-         "file" : "Bio/Range.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Range.pm"
       },
       "Bio::RangeI" : {
-         "file" : "Bio/RangeI.pm",
-         "version" : "1.006924"
+         "file" : "Bio/RangeI.pm"
       },
       "Bio::Restriction::Analysis" : {
-         "file" : "Bio/Restriction/Analysis.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Restriction/Analysis.pm"
       },
       "Bio::Restriction::Enzyme" : {
-         "file" : "Bio/Restriction/Enzyme.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Restriction/Enzyme.pm"
       },
       "Bio::Restriction::Enzyme::MultiCut" : {
-         "file" : "Bio/Restriction/Enzyme/MultiCut.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Restriction/Enzyme/MultiCut.pm"
       },
       "Bio::Restriction::Enzyme::MultiSite" : {
-         "file" : "Bio/Restriction/Enzyme/MultiSite.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Restriction/Enzyme/MultiSite.pm"
       },
       "Bio::Restriction::EnzymeCollection" : {
-         "file" : "Bio/Restriction/EnzymeCollection.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Restriction/EnzymeCollection.pm"
       },
       "Bio::Restriction::EnzymeI" : {
-         "file" : "Bio/Restriction/EnzymeI.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Restriction/EnzymeI.pm"
       },
       "Bio::Restriction::IO" : {
-         "file" : "Bio/Restriction/IO.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Restriction/IO.pm"
       },
       "Bio::Restriction::IO::bairoch" : {
-         "file" : "Bio/Restriction/IO/bairoch.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Restriction/IO/bairoch.pm"
       },
       "Bio::Restriction::IO::base" : {
-         "file" : "Bio/Restriction/IO/base.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Restriction/IO/base.pm"
       },
       "Bio::Restriction::IO::itype2" : {
-         "file" : "Bio/Restriction/IO/itype2.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Restriction/IO/itype2.pm"
       },
       "Bio::Restriction::IO::prototype" : {
-         "file" : "Bio/Restriction/IO/prototype.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Restriction/IO/prototype.pm"
       },
       "Bio::Restriction::IO::withrefm" : {
-         "file" : "Bio/Restriction/IO/withrefm.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Restriction/IO/withrefm.pm"
       },
       "Bio::Root::Build" : {
          "file" : "Bio/Root/Build.pm",
-         "version" : "1.006924"
+         "version" : "1.007000_003"
       },
       "Bio::Root::Exception" : {
-         "file" : "Bio/Root/Exception.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Root/Exception.pm"
       },
       "Bio::Root::HTTPget" : {
-         "file" : "Bio/Root/HTTPget.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Root/HTTPget.pm"
       },
       "Bio::Root::IO" : {
-         "file" : "Bio/Root/IO.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Root/IO.pm"
       },
       "Bio::Root::Root" : {
-         "file" : "Bio/Root/Root.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Root/Root.pm"
       },
       "Bio::Root::RootI" : {
-         "file" : "Bio/Root/RootI.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Root/RootI.pm"
       },
       "Bio::Root::Storable" : {
-         "file" : "Bio/Root/Storable.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Root/Storable.pm"
       },
       "Bio::Root::Test" : {
-         "file" : "Bio/Root/Test.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Root/Test.pm"
+      },
+      "Bio::Root::TestObject" : {
+         "file" : "Bio/Root/TestObject.pm"
       },
       "Bio::Root::Utilities" : {
-         "file" : "Bio/Root/Utilities.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Root/Utilities.pm"
       },
       "Bio::Root::Version" : {
          "file" : "Bio/Root/Version.pm",
-         "version" : "1.006924"
+         "version" : "1.007000_003"
       },
       "Bio::Search::BlastStatistics" : {
-         "file" : "Bio/Search/BlastStatistics.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Search/BlastStatistics.pm"
       },
       "Bio::Search::BlastUtils" : {
-         "file" : "Bio/Search/BlastUtils.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Search/BlastUtils.pm"
       },
       "Bio::Search::DatabaseI" : {
-         "file" : "Bio/Search/DatabaseI.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Search/DatabaseI.pm"
       },
       "Bio::Search::GenericDatabase" : {
-         "file" : "Bio/Search/GenericDatabase.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Search/GenericDatabase.pm"
       },
       "Bio::Search::GenericStatistics" : {
-         "file" : "Bio/Search/GenericStatistics.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Search/GenericStatistics.pm"
       },
       "Bio::Search::HSP::BlastHSP" : {
-         "file" : "Bio/Search/HSP/BlastHSP.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Search/HSP/BlastHSP.pm"
       },
       "Bio::Search::HSP::BlastPullHSP" : {
-         "file" : "Bio/Search/HSP/BlastPullHSP.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Search/HSP/BlastPullHSP.pm"
       },
       "Bio::Search::HSP::FastaHSP" : {
-         "file" : "Bio/Search/HSP/FastaHSP.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Search/HSP/FastaHSP.pm"
       },
       "Bio::Search::HSP::GenericHSP" : {
-         "file" : "Bio/Search/HSP/GenericHSP.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Search/HSP/GenericHSP.pm"
       },
       "Bio::Search::HSP::HMMERHSP" : {
-         "file" : "Bio/Search/HSP/HMMERHSP.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Search/HSP/HMMERHSP.pm"
       },
       "Bio::Search::HSP::HSPFactory" : {
-         "file" : "Bio/Search/HSP/HSPFactory.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Search/HSP/HSPFactory.pm"
       },
       "Bio::Search::HSP::HSPI" : {
-         "file" : "Bio/Search/Tiling/MapTileUtils.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Search/HSP/HSPI.pm"
       },
       "Bio::Search::HSP::HmmpfamHSP" : {
-         "file" : "Bio/Search/HSP/HmmpfamHSP.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Search/HSP/HmmpfamHSP.pm"
       },
       "Bio::Search::HSP::ModelHSP" : {
-         "file" : "Bio/Search/HSP/ModelHSP.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Search/HSP/ModelHSP.pm"
       },
       "Bio::Search::HSP::PSLHSP" : {
-         "file" : "Bio/Search/HSP/PSLHSP.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Search/HSP/PSLHSP.pm"
       },
       "Bio::Search::HSP::PsiBlastHSP" : {
-         "file" : "Bio/Search/HSP/PsiBlastHSP.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Search/HSP/PsiBlastHSP.pm"
       },
       "Bio::Search::HSP::PullHSPI" : {
-         "file" : "Bio/Search/HSP/PullHSPI.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Search/HSP/PullHSPI.pm"
       },
       "Bio::Search::HSP::WABAHSP" : {
-         "file" : "Bio/Search/HSP/WABAHSP.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Search/HSP/WABAHSP.pm"
       },
       "Bio::Search::Hit::BlastHit" : {
-         "file" : "Bio/Search/Hit/BlastHit.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Search/Hit/BlastHit.pm"
       },
       "Bio::Search::Hit::BlastPullHit" : {
-         "file" : "Bio/Search/Hit/BlastPullHit.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Search/Hit/BlastPullHit.pm"
       },
       "Bio::Search::Hit::Fasta" : {
-         "file" : "Bio/Search/Hit/Fasta.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Search/Hit/Fasta.pm"
       },
       "Bio::Search::Hit::GenericHit" : {
-         "file" : "Bio/Search/Hit/GenericHit.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Search/Hit/GenericHit.pm"
       },
       "Bio::Search::Hit::HMMERHit" : {
-         "file" : "Bio/Search/Hit/HMMERHit.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Search/Hit/HMMERHit.pm"
       },
       "Bio::Search::Hit::HitFactory" : {
-         "file" : "Bio/Search/Hit/HitFactory.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Search/Hit/HitFactory.pm"
       },
       "Bio::Search::Hit::HitI" : {
-         "file" : "Bio/Search/Hit/HitI.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Search/Hit/HitI.pm"
       },
       "Bio::Search::Hit::HmmpfamHit" : {
-         "file" : "Bio/Search/Hit/HmmpfamHit.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Search/Hit/HmmpfamHit.pm"
       },
       "Bio::Search::Hit::ModelHit" : {
-         "file" : "Bio/Search/Hit/ModelHit.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Search/Hit/ModelHit.pm"
       },
       "Bio::Search::Hit::PsiBlastHit" : {
-         "file" : "Bio/Search/Hit/PsiBlastHit.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Search/Hit/PsiBlastHit.pm"
       },
       "Bio::Search::Hit::PullHitI" : {
-         "file" : "Bio/Search/Hit/PullHitI.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Search/Hit/PullHitI.pm"
       },
       "Bio::Search::Hit::hmmer3Hit" : {
-         "file" : "Bio/Search/Hit/hmmer3Hit.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Search/Hit/hmmer3Hit.pm"
       },
       "Bio::Search::Iteration::GenericIteration" : {
-         "file" : "Bio/Search/Iteration/GenericIteration.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Search/Iteration/GenericIteration.pm"
       },
       "Bio::Search::Iteration::IterationI" : {
-         "file" : "Bio/Search/Iteration/IterationI.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Search/Iteration/IterationI.pm"
       },
       "Bio::Search::Processor" : {
-         "file" : "Bio/Search/Processor.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Search/Processor.pm"
       },
       "Bio::Search::Result::BlastPullResult" : {
-         "file" : "Bio/Search/Result/BlastPullResult.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Search/Result/BlastPullResult.pm"
       },
       "Bio::Search::Result::BlastResult" : {
-         "file" : "Bio/Search/Result/BlastResult.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Search/Result/BlastResult.pm"
       },
       "Bio::Search::Result::CrossMatchResult" : {
-         "file" : "Bio/Search/Result/CrossMatchResult.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Search/Result/CrossMatchResult.pm"
       },
       "Bio::Search::Result::GenericResult" : {
-         "file" : "Bio/Search/Result/GenericResult.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Search/Result/GenericResult.pm"
       },
       "Bio::Search::Result::HMMERResult" : {
-         "file" : "Bio/Search/Result/HMMERResult.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Search/Result/HMMERResult.pm"
       },
       "Bio::Search::Result::HmmpfamResult" : {
-         "file" : "Bio/Search/Result/HmmpfamResult.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Search/Result/HmmpfamResult.pm"
+      },
+      "Bio::Search::Result::INFERNALResult" : {
+         "file" : "Bio/Search/Result/INFERNALResult.pm"
       },
       "Bio::Search::Result::PullResultI" : {
-         "file" : "Bio/Search/Result/PullResultI.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Search/Result/PullResultI.pm"
       },
       "Bio::Search::Result::ResultFactory" : {
-         "file" : "Bio/Search/Result/ResultFactory.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Search/Result/ResultFactory.pm"
       },
       "Bio::Search::Result::ResultI" : {
-         "file" : "Bio/Search/Result/ResultI.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Search/Result/ResultI.pm"
       },
       "Bio::Search::Result::WABAResult" : {
-         "file" : "Bio/Search/Result/WABAResult.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Search/Result/WABAResult.pm"
       },
       "Bio::Search::Result::hmmer3Result" : {
-         "file" : "Bio/Search/Result/hmmer3Result.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Search/Result/hmmer3Result.pm"
       },
       "Bio::Search::SearchUtils" : {
-         "file" : "Bio/Search/SearchUtils.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Search/SearchUtils.pm"
       },
       "Bio::Search::StatisticsI" : {
-         "file" : "Bio/Search/StatisticsI.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Search/StatisticsI.pm"
       },
       "Bio::Search::Tiling::MapTileUtils" : {
-         "file" : "Bio/Search/Tiling/MapTileUtils.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Search/Tiling/MapTileUtils.pm"
       },
       "Bio::Search::Tiling::MapTiling" : {
-         "file" : "Bio/Search/Tiling/MapTiling.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Search/Tiling/MapTiling.pm"
       },
       "Bio::Search::Tiling::TilingI" : {
-         "file" : "Bio/Search/Tiling/TilingI.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Search/Tiling/TilingI.pm"
       },
       "Bio::SearchDist" : {
-         "file" : "Bio/SearchDist.pm",
-         "version" : "1.006924"
+         "file" : "Bio/SearchDist.pm"
       },
       "Bio::SearchIO" : {
-         "file" : "Bio/SearchIO.pm",
-         "version" : "1.006924"
+         "file" : "Bio/SearchIO.pm"
       },
       "Bio::SearchIO::EventHandlerI" : {
-         "file" : "Bio/SearchIO/EventHandlerI.pm",
-         "version" : "1.006924"
+         "file" : "Bio/SearchIO/EventHandlerI.pm"
       },
       "Bio::SearchIO::FastHitEventBuilder" : {
-         "file" : "Bio/SearchIO/FastHitEventBuilder.pm",
-         "version" : "1.006924"
+         "file" : "Bio/SearchIO/FastHitEventBuilder.pm"
       },
       "Bio::SearchIO::IteratedSearchResultEventBuilder" : {
-         "file" : "Bio/SearchIO/IteratedSearchResultEventBuilder.pm",
-         "version" : "1.006924"
+         "file" : "Bio/SearchIO/IteratedSearchResultEventBuilder.pm"
       },
       "Bio::SearchIO::SearchResultEventBuilder" : {
-         "file" : "Bio/SearchIO/SearchResultEventBuilder.pm",
-         "version" : "1.006924"
+         "file" : "Bio/SearchIO/SearchResultEventBuilder.pm"
       },
       "Bio::SearchIO::SearchWriterI" : {
-         "file" : "Bio/SearchIO/SearchWriterI.pm",
-         "version" : "1.006924"
-      },
-      "Bio::SearchIO::Writer::BSMLResultWriter" : {
-         "file" : "Bio/SearchIO/Writer/BSMLResultWriter.pm",
-         "version" : "1.006924"
+         "file" : "Bio/SearchIO/SearchWriterI.pm"
       },
       "Bio::SearchIO::Writer::GbrowseGFF" : {
-         "file" : "Bio/SearchIO/Writer/GbrowseGFF.pm",
-         "version" : "1.006924"
+         "file" : "Bio/SearchIO/Writer/GbrowseGFF.pm"
       },
       "Bio::SearchIO::Writer::HSPTableWriter" : {
-         "file" : "Bio/SearchIO/Writer/HSPTableWriter.pm",
-         "version" : "1.006924"
+         "file" : "Bio/SearchIO/Writer/HSPTableWriter.pm"
       },
       "Bio::SearchIO::Writer::HTMLResultWriter" : {
-         "file" : "Bio/SearchIO/Writer/HTMLResultWriter.pm",
-         "version" : "1.006924"
+         "file" : "Bio/SearchIO/Writer/HTMLResultWriter.pm"
       },
       "Bio::SearchIO::Writer::HitTableWriter" : {
-         "file" : "Bio/SearchIO/Writer/HitTableWriter.pm",
-         "version" : "1.006924"
+         "file" : "Bio/SearchIO/Writer/HitTableWriter.pm"
       },
       "Bio::SearchIO::Writer::ResultTableWriter" : {
-         "file" : "Bio/SearchIO/Writer/ResultTableWriter.pm",
-         "version" : "1.006924"
+         "file" : "Bio/SearchIO/Writer/ResultTableWriter.pm"
       },
       "Bio::SearchIO::Writer::TextResultWriter" : {
-         "file" : "Bio/SearchIO/Writer/TextResultWriter.pm",
-         "version" : "1.006924"
-      },
-      "Bio::SearchIO::XML::BlastHandler" : {
-         "file" : "Bio/SearchIO/XML/BlastHandler.pm",
-         "version" : "1.006924"
-      },
-      "Bio::SearchIO::XML::PsiBlastHandler" : {
-         "file" : "Bio/SearchIO/XML/PsiBlastHandler.pm",
-         "version" : "1.006924"
+         "file" : "Bio/SearchIO/Writer/TextResultWriter.pm"
       },
       "Bio::SearchIO::axt" : {
-         "file" : "Bio/SearchIO/axt.pm",
-         "version" : "1.006924"
+         "file" : "Bio/SearchIO/axt.pm"
       },
       "Bio::SearchIO::blast" : {
-         "file" : "Bio/SearchIO/blast.pm",
-         "version" : "1.006924"
+         "file" : "Bio/SearchIO/blast.pm"
       },
       "Bio::SearchIO::blast_pull" : {
-         "file" : "Bio/SearchIO/blast_pull.pm",
-         "version" : "1.006924"
+         "file" : "Bio/SearchIO/blast_pull.pm"
       },
       "Bio::SearchIO::blasttable" : {
-         "file" : "Bio/SearchIO/blasttable.pm",
-         "version" : "1.006924"
-      },
-      "Bio::SearchIO::blastxml" : {
-         "file" : "Bio/SearchIO/blastxml.pm",
-         "version" : "1.006924"
+         "file" : "Bio/SearchIO/blasttable.pm"
       },
       "Bio::SearchIO::cross_match" : {
-         "file" : "Bio/SearchIO/cross_match.pm",
-         "version" : "1.006924"
+         "file" : "Bio/SearchIO/cross_match.pm"
       },
       "Bio::SearchIO::erpin" : {
-         "file" : "Bio/SearchIO/erpin.pm",
-         "version" : "1.006924"
+         "file" : "Bio/SearchIO/erpin.pm"
       },
       "Bio::SearchIO::exonerate" : {
-         "file" : "Bio/SearchIO/exonerate.pm",
-         "version" : "1.006924"
+         "file" : "Bio/SearchIO/exonerate.pm"
       },
       "Bio::SearchIO::fasta" : {
-         "file" : "Bio/SearchIO/fasta.pm",
-         "version" : "1.006924"
+         "file" : "Bio/SearchIO/fasta.pm"
       },
       "Bio::SearchIO::gmap_f9" : {
-         "file" : "Bio/SearchIO/gmap_f9.pm",
-         "version" : "1.006924"
+         "file" : "Bio/SearchIO/gmap_f9.pm"
       },
       "Bio::SearchIO::hmmer" : {
-         "file" : "Bio/SearchIO/hmmer.pm",
-         "version" : "1.006924"
+         "file" : "Bio/SearchIO/hmmer.pm"
       },
       "Bio::SearchIO::hmmer2" : {
-         "file" : "Bio/SearchIO/hmmer2.pm",
-         "version" : "1.006924"
+         "file" : "Bio/SearchIO/hmmer2.pm"
       },
       "Bio::SearchIO::hmmer3" : {
-         "file" : "Bio/SearchIO/hmmer3.pm",
-         "version" : "1.006924"
+         "file" : "Bio/SearchIO/hmmer3.pm"
       },
       "Bio::SearchIO::hmmer_pull" : {
-         "file" : "Bio/SearchIO/hmmer_pull.pm",
-         "version" : "1.006924"
+         "file" : "Bio/SearchIO/hmmer_pull.pm"
       },
       "Bio::SearchIO::infernal" : {
-         "file" : "Bio/SearchIO/infernal.pm",
-         "version" : "1.006924"
+         "file" : "Bio/SearchIO/infernal.pm"
       },
       "Bio::SearchIO::megablast" : {
-         "file" : "Bio/SearchIO/megablast.pm",
-         "version" : "1.006924"
+         "file" : "Bio/SearchIO/megablast.pm"
       },
       "Bio::SearchIO::psl" : {
-         "file" : "Bio/SearchIO/psl.pm",
-         "version" : "1.006924"
+         "file" : "Bio/SearchIO/psl.pm"
       },
       "Bio::SearchIO::rnamotif" : {
-         "file" : "Bio/SearchIO/rnamotif.pm",
-         "version" : "1.006924"
+         "file" : "Bio/SearchIO/rnamotif.pm"
       },
       "Bio::SearchIO::sim4" : {
-         "file" : "Bio/SearchIO/sim4.pm",
-         "version" : "1.006924"
+         "file" : "Bio/SearchIO/sim4.pm"
       },
       "Bio::SearchIO::waba" : {
-         "file" : "Bio/SearchIO/waba.pm",
-         "version" : "1.006924"
+         "file" : "Bio/SearchIO/waba.pm"
       },
       "Bio::SearchIO::wise" : {
-         "file" : "Bio/SearchIO/wise.pm",
-         "version" : "1.006924"
+         "file" : "Bio/SearchIO/wise.pm"
       },
       "Bio::Seq" : {
-         "file" : "Bio/Seq.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Seq.pm"
       },
       "Bio::Seq::BaseSeqProcessor" : {
-         "file" : "Bio/Seq/BaseSeqProcessor.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Seq/BaseSeqProcessor.pm"
       },
       "Bio::Seq::EncodedSeq" : {
-         "file" : "Bio/Seq/EncodedSeq.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Seq/EncodedSeq.pm"
       },
       "Bio::Seq::LargeLocatableSeq" : {
-         "file" : "Bio/Seq/LargeLocatableSeq.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Seq/LargeLocatableSeq.pm"
       },
       "Bio::Seq::LargePrimarySeq" : {
-         "file" : "Bio/Seq/LargePrimarySeq.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Seq/LargePrimarySeq.pm"
       },
       "Bio::Seq::LargeSeq" : {
-         "file" : "Bio/Seq/LargeSeq.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Seq/LargeSeq.pm"
       },
       "Bio::Seq::LargeSeqI" : {
-         "file" : "Bio/Seq/LargeSeqI.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Seq/LargeSeqI.pm"
       },
       "Bio::Seq::Meta" : {
-         "file" : "Bio/Seq/Meta.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Seq/Meta.pm"
       },
       "Bio::Seq::Meta::Array" : {
-         "file" : "Bio/Seq/Meta/Array.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Seq/Meta/Array.pm"
       },
       "Bio::Seq::MetaI" : {
-         "file" : "Bio/Seq/MetaI.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Seq/MetaI.pm"
       },
       "Bio::Seq::PrimaryQual" : {
-         "file" : "Bio/Seq/PrimaryQual.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Seq/PrimaryQual.pm"
       },
       "Bio::Seq::PrimaryQual::Qual" : {
-         "file" : "Bio/DB/Qual.pm",
-         "version" : "1.006924"
+         "file" : "Bio/DB/Qual.pm"
       },
       "Bio::Seq::PrimedSeq" : {
-         "file" : "Bio/Seq/PrimedSeq.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Seq/PrimedSeq.pm"
       },
       "Bio::Seq::QualI" : {
-         "file" : "Bio/Seq/QualI.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Seq/QualI.pm"
       },
       "Bio::Seq::Quality" : {
-         "file" : "Bio/Seq/Quality.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Seq/Quality.pm"
       },
       "Bio::Seq::RichSeq" : {
-         "file" : "Bio/Seq/RichSeq.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Seq/RichSeq.pm"
       },
       "Bio::Seq::RichSeqI" : {
-         "file" : "Bio/Seq/RichSeqI.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Seq/RichSeqI.pm"
       },
       "Bio::Seq::SeqBuilder" : {
-         "file" : "Bio/Seq/SeqBuilder.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Seq/SeqBuilder.pm"
       },
       "Bio::Seq::SeqFactory" : {
-         "file" : "Bio/Seq/SeqFactory.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Seq/SeqFactory.pm"
       },
       "Bio::Seq::SeqFastaSpeedFactory" : {
-         "file" : "Bio/Seq/SeqFastaSpeedFactory.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Seq/SeqFastaSpeedFactory.pm"
       },
       "Bio::Seq::SeqWithQuality" : {
-         "file" : "Bio/Seq/SeqWithQuality.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Seq/SeqWithQuality.pm"
       },
       "Bio::Seq::SequenceTrace" : {
-         "file" : "Bio/Seq/SequenceTrace.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Seq/SequenceTrace.pm"
       },
       "Bio::Seq::SimulatedRead" : {
-         "file" : "Bio/Seq/SimulatedRead.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Seq/SimulatedRead.pm"
       },
       "Bio::Seq::TraceI" : {
-         "file" : "Bio/Seq/TraceI.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Seq/TraceI.pm"
       },
       "Bio::SeqAnalysisParserI" : {
-         "file" : "Bio/SeqAnalysisParserI.pm",
-         "version" : "1.006924"
+         "file" : "Bio/SeqAnalysisParserI.pm"
       },
       "Bio::SeqEvolution::DNAPoint" : {
-         "file" : "Bio/SeqEvolution/DNAPoint.pm",
-         "version" : "1.006924"
+         "file" : "Bio/SeqEvolution/DNAPoint.pm"
       },
       "Bio::SeqEvolution::EvolutionI" : {
-         "file" : "Bio/SeqEvolution/EvolutionI.pm",
-         "version" : "1.006924"
+         "file" : "Bio/SeqEvolution/EvolutionI.pm"
       },
       "Bio::SeqEvolution::Factory" : {
-         "file" : "Bio/SeqEvolution/Factory.pm",
-         "version" : "1.006924"
+         "file" : "Bio/SeqEvolution/Factory.pm"
       },
       "Bio::SeqFeature::Amplicon" : {
-         "file" : "Bio/SeqFeature/Amplicon.pm",
-         "version" : "1.006924"
+         "file" : "Bio/SeqFeature/Amplicon.pm"
       },
       "Bio::SeqFeature::AnnotationAdaptor" : {
-         "file" : "Bio/SeqFeature/AnnotationAdaptor.pm",
-         "version" : "1.006924"
+         "file" : "Bio/SeqFeature/AnnotationAdaptor.pm"
       },
       "Bio::SeqFeature::Collection" : {
-         "file" : "Bio/SeqFeature/Collection.pm",
-         "version" : "1.006924"
+         "file" : "Bio/SeqFeature/Collection.pm"
       },
       "Bio::SeqFeature::CollectionI" : {
-         "file" : "Bio/SeqFeature/CollectionI.pm",
-         "version" : "1.006924"
+         "file" : "Bio/SeqFeature/CollectionI.pm"
       },
       "Bio::SeqFeature::Computation" : {
-         "file" : "Bio/SeqFeature/Computation.pm",
-         "version" : "1.006924"
+         "file" : "Bio/SeqFeature/Computation.pm"
       },
       "Bio::SeqFeature::FeaturePair" : {
-         "file" : "Bio/SeqFeature/FeaturePair.pm",
-         "version" : "1.006924"
+         "file" : "Bio/SeqFeature/FeaturePair.pm"
       },
       "Bio::SeqFeature::Gene::Exon" : {
-         "file" : "Bio/SeqFeature/Gene/Exon.pm",
-         "version" : "1.006924"
+         "file" : "Bio/SeqFeature/Gene/Exon.pm"
       },
       "Bio::SeqFeature::Gene::ExonI" : {
-         "file" : "Bio/SeqFeature/Gene/ExonI.pm",
-         "version" : "1.006924"
+         "file" : "Bio/SeqFeature/Gene/ExonI.pm"
       },
       "Bio::SeqFeature::Gene::GeneStructure" : {
-         "file" : "Bio/SeqFeature/Gene/GeneStructure.pm",
-         "version" : "1.006924"
+         "file" : "Bio/SeqFeature/Gene/GeneStructure.pm"
       },
       "Bio::SeqFeature::Gene::GeneStructureI" : {
-         "file" : "Bio/SeqFeature/Gene/GeneStructureI.pm",
-         "version" : "1.006924"
+         "file" : "Bio/SeqFeature/Gene/GeneStructureI.pm"
       },
       "Bio::SeqFeature::Gene::Intron" : {
-         "file" : "Bio/SeqFeature/Gene/Intron.pm",
-         "version" : "1.006924"
+         "file" : "Bio/SeqFeature/Gene/Intron.pm"
       },
       "Bio::SeqFeature::Gene::NC_Feature" : {
-         "file" : "Bio/SeqFeature/Gene/NC_Feature.pm",
-         "version" : "1.006924"
+         "file" : "Bio/SeqFeature/Gene/NC_Feature.pm"
       },
       "Bio::SeqFeature::Gene::Poly_A_site" : {
-         "file" : "Bio/SeqFeature/Gene/Poly_A_site.pm",
-         "version" : "1.006924"
+         "file" : "Bio/SeqFeature/Gene/Poly_A_site.pm"
       },
       "Bio::SeqFeature::Gene::Promoter" : {
-         "file" : "Bio/SeqFeature/Gene/Promoter.pm",
-         "version" : "1.006924"
+         "file" : "Bio/SeqFeature/Gene/Promoter.pm"
       },
       "Bio::SeqFeature::Gene::Transcript" : {
-         "file" : "Bio/SeqFeature/Gene/Transcript.pm",
-         "version" : "1.006924"
+         "file" : "Bio/SeqFeature/Gene/Transcript.pm"
       },
       "Bio::SeqFeature::Gene::TranscriptI" : {
-         "file" : "Bio/SeqFeature/Gene/TranscriptI.pm",
-         "version" : "1.006924"
+         "file" : "Bio/SeqFeature/Gene/TranscriptI.pm"
       },
       "Bio::SeqFeature::Gene::UTR" : {
-         "file" : "Bio/SeqFeature/Gene/UTR.pm",
-         "version" : "1.006924"
+         "file" : "Bio/SeqFeature/Gene/UTR.pm"
       },
       "Bio::SeqFeature::Generic" : {
-         "file" : "Bio/SeqFeature/Generic.pm",
-         "version" : "1.006924"
+         "file" : "Bio/SeqFeature/Generic.pm"
       },
       "Bio::SeqFeature::Lite" : {
-         "file" : "Bio/SeqFeature/Lite.pm",
-         "version" : "1.006924"
+         "file" : "Bio/SeqFeature/Lite.pm"
       },
       "Bio::SeqFeature::PositionProxy" : {
-         "file" : "Bio/SeqFeature/PositionProxy.pm",
-         "version" : "1.006924"
+         "file" : "Bio/SeqFeature/PositionProxy.pm"
       },
       "Bio::SeqFeature::Primer" : {
-         "file" : "Bio/SeqFeature/Primer.pm",
-         "version" : "1.006924"
+         "file" : "Bio/SeqFeature/Primer.pm"
       },
       "Bio::SeqFeature::SiRNA::Oligo" : {
-         "file" : "Bio/SeqFeature/SiRNA/Oligo.pm",
-         "version" : "1.006924"
+         "file" : "Bio/SeqFeature/SiRNA/Oligo.pm"
       },
       "Bio::SeqFeature::SiRNA::Pair" : {
-         "file" : "Bio/SeqFeature/SiRNA/Pair.pm",
-         "version" : "1.006924"
+         "file" : "Bio/SeqFeature/SiRNA/Pair.pm"
       },
       "Bio::SeqFeature::Similarity" : {
-         "file" : "Bio/SeqFeature/Similarity.pm",
-         "version" : "1.006924"
+         "file" : "Bio/SeqFeature/Similarity.pm"
       },
       "Bio::SeqFeature::SimilarityPair" : {
-         "file" : "Bio/SeqFeature/SimilarityPair.pm",
-         "version" : "1.006924"
+         "file" : "Bio/SeqFeature/SimilarityPair.pm"
       },
       "Bio::SeqFeature::SubSeq" : {
-         "file" : "Bio/SeqFeature/SubSeq.pm",
-         "version" : "1.006924"
+         "file" : "Bio/SeqFeature/SubSeq.pm"
       },
       "Bio::SeqFeature::Tools::FeatureNamer" : {
-         "file" : "Bio/SeqFeature/Tools/FeatureNamer.pm",
-         "version" : "1.006924"
+         "file" : "Bio/SeqFeature/Tools/FeatureNamer.pm"
       },
       "Bio::SeqFeature::Tools::IDHandler" : {
-         "file" : "Bio/SeqFeature/Tools/IDHandler.pm",
-         "version" : "1.006924"
+         "file" : "Bio/SeqFeature/Tools/IDHandler.pm"
       },
       "Bio::SeqFeature::Tools::TypeMapper" : {
-         "file" : "Bio/SeqFeature/Tools/TypeMapper.pm",
-         "version" : "1.006924"
+         "file" : "Bio/SeqFeature/Tools/TypeMapper.pm"
       },
       "Bio::SeqFeature::Tools::Unflattener" : {
-         "file" : "Bio/SeqFeature/Tools/Unflattener.pm",
-         "version" : "1.006924"
+         "file" : "Bio/SeqFeature/Tools/Unflattener.pm"
       },
       "Bio::SeqFeature::TypedSeqFeatureI" : {
-         "file" : "Bio/SeqFeature/TypedSeqFeatureI.pm",
-         "version" : "1.006924"
+         "file" : "Bio/SeqFeature/TypedSeqFeatureI.pm"
       },
       "Bio::SeqFeatureI" : {
-         "file" : "Bio/SeqFeatureI.pm",
-         "version" : "1.006924"
+         "file" : "Bio/SeqFeatureI.pm"
       },
       "Bio::SeqI" : {
-         "file" : "Bio/SeqI.pm",
-         "version" : "1.006924"
+         "file" : "Bio/SeqI.pm"
       },
       "Bio::SeqIO" : {
-         "file" : "Bio/SeqIO.pm",
-         "version" : "1.006924"
+         "file" : "Bio/SeqIO.pm"
       },
       "Bio::SeqIO::FTHelper" : {
-         "file" : "Bio/SeqIO/FTHelper.pm",
-         "version" : "1.006924"
+         "file" : "Bio/SeqIO/FTHelper.pm"
       },
       "Bio::SeqIO::Handler::GenericRichSeqHandler" : {
-         "file" : "Bio/SeqIO/Handler/GenericRichSeqHandler.pm",
-         "version" : "1.006924"
+         "file" : "Bio/SeqIO/Handler/GenericRichSeqHandler.pm"
       },
       "Bio::SeqIO::MultiFile" : {
-         "file" : "Bio/SeqIO/MultiFile.pm",
-         "version" : "1.006924"
+         "file" : "Bio/SeqIO/MultiFile.pm"
       },
       "Bio::SeqIO::abi" : {
-         "file" : "Bio/SeqIO/abi.pm",
-         "version" : "1.006924"
+         "file" : "Bio/SeqIO/abi.pm"
       },
       "Bio::SeqIO::ace" : {
-         "file" : "Bio/SeqIO/ace.pm",
-         "version" : "1.006924"
+         "file" : "Bio/SeqIO/ace.pm"
       },
       "Bio::SeqIO::agave" : {
-         "file" : "Bio/SeqIO/agave.pm",
-         "version" : "1.006924"
+         "file" : "Bio/SeqIO/agave.pm"
       },
       "Bio::SeqIO::alf" : {
-         "file" : "Bio/SeqIO/alf.pm",
-         "version" : "1.006924"
+         "file" : "Bio/SeqIO/alf.pm"
       },
       "Bio::SeqIO::asciitree" : {
-         "file" : "Bio/SeqIO/asciitree.pm",
-         "version" : "1.006924"
+         "file" : "Bio/SeqIO/asciitree.pm"
       },
       "Bio::SeqIO::bsml" : {
-         "file" : "Bio/SeqIO/bsml.pm",
-         "version" : "1.006924"
+         "file" : "Bio/SeqIO/bsml.pm"
       },
       "Bio::SeqIO::bsml_sax" : {
-         "file" : "Bio/SeqIO/bsml_sax.pm",
-         "version" : "1.006924"
+         "file" : "Bio/SeqIO/bsml_sax.pm"
       },
       "Bio::SeqIO::chadoxml" : {
-         "file" : "Bio/SeqIO/chadoxml.pm",
-         "version" : "1.006924"
+         "file" : "Bio/SeqIO/chadoxml.pm"
       },
       "Bio::SeqIO::chaos" : {
-         "file" : "Bio/SeqIO/chaos.pm",
-         "version" : "1.006924"
+         "file" : "Bio/SeqIO/chaos.pm"
       },
       "Bio::SeqIO::chaosxml" : {
-         "file" : "Bio/SeqIO/chaosxml.pm",
-         "version" : "1.006924"
+         "file" : "Bio/SeqIO/chaosxml.pm"
       },
       "Bio::SeqIO::ctf" : {
-         "file" : "Bio/SeqIO/ctf.pm",
-         "version" : "1.006924"
+         "file" : "Bio/SeqIO/ctf.pm"
       },
       "Bio::SeqIO::embl" : {
-         "file" : "Bio/SeqIO/embl.pm",
-         "version" : "1.006924"
+         "file" : "Bio/SeqIO/embl.pm"
       },
       "Bio::SeqIO::embldriver" : {
-         "file" : "Bio/SeqIO/embldriver.pm",
-         "version" : "1.006924"
+         "file" : "Bio/SeqIO/embldriver.pm"
       },
       "Bio::SeqIO::entrezgene" : {
-         "file" : "Bio/SeqIO/entrezgene.pm",
-         "version" : "1.006924"
+         "file" : "Bio/SeqIO/entrezgene.pm"
       },
       "Bio::SeqIO::excel" : {
-         "file" : "Bio/SeqIO/excel.pm",
-         "version" : "1.006924"
+         "file" : "Bio/SeqIO/excel.pm"
       },
       "Bio::SeqIO::exp" : {
-         "file" : "Bio/SeqIO/exp.pm",
-         "version" : "1.006924"
+         "file" : "Bio/SeqIO/exp.pm"
       },
       "Bio::SeqIO::fasta" : {
-         "file" : "Bio/SeqIO/fasta.pm",
-         "version" : "1.006924"
+         "file" : "Bio/SeqIO/fasta.pm"
       },
       "Bio::SeqIO::fastq" : {
-         "file" : "Bio/SeqIO/fastq.pm",
-         "version" : "1.006924"
+         "file" : "Bio/SeqIO/fastq.pm"
       },
       "Bio::SeqIO::flybase_chadoxml" : {
-         "file" : "Bio/SeqIO/flybase_chadoxml.pm",
-         "version" : "1.006924"
+         "file" : "Bio/SeqIO/flybase_chadoxml.pm"
       },
       "Bio::SeqIO::game" : {
-         "file" : "Bio/SeqIO/game.pm",
-         "version" : "1.006924"
+         "file" : "Bio/SeqIO/game.pm"
       },
       "Bio::SeqIO::game::featHandler" : {
-         "file" : "Bio/SeqIO/game/featHandler.pm",
-         "version" : "1.006924"
+         "file" : "Bio/SeqIO/game/featHandler.pm"
       },
       "Bio::SeqIO::game::gameHandler" : {
-         "file" : "Bio/SeqIO/game/gameHandler.pm",
-         "version" : "1.006924"
+         "file" : "Bio/SeqIO/game/gameHandler.pm"
       },
       "Bio::SeqIO::game::gameSubs" : {
-         "file" : "Bio/SeqIO/game/gameSubs.pm",
-         "version" : "1.006924"
+         "file" : "Bio/SeqIO/game/gameSubs.pm"
       },
       "Bio::SeqIO::game::gameWriter" : {
-         "file" : "Bio/SeqIO/game/gameWriter.pm",
-         "version" : "1.006924"
+         "file" : "Bio/SeqIO/game/gameWriter.pm"
       },
       "Bio::SeqIO::game::seqHandler" : {
-         "file" : "Bio/SeqIO/game/seqHandler.pm",
-         "version" : "1.006924"
+         "file" : "Bio/SeqIO/game/seqHandler.pm"
       },
       "Bio::SeqIO::gbdriver" : {
-         "file" : "Bio/SeqIO/gbdriver.pm",
-         "version" : "1.006924"
+         "file" : "Bio/SeqIO/gbdriver.pm"
       },
       "Bio::SeqIO::gbxml" : {
-         "file" : "Bio/SeqIO/gbxml.pm",
-         "version" : "1.006924"
+         "file" : "Bio/SeqIO/gbxml.pm"
       },
       "Bio::SeqIO::gcg" : {
-         "file" : "Bio/SeqIO/gcg.pm",
-         "version" : "1.006924"
+         "file" : "Bio/SeqIO/gcg.pm"
       },
       "Bio::SeqIO::genbank" : {
-         "file" : "Bio/SeqIO/genbank.pm",
-         "version" : "1.006924"
+         "file" : "Bio/SeqIO/genbank.pm"
       },
       "Bio::SeqIO::interpro" : {
-         "file" : "Bio/SeqIO/interpro.pm",
-         "version" : "1.006924"
+         "file" : "Bio/SeqIO/interpro.pm"
       },
       "Bio::SeqIO::kegg" : {
-         "file" : "Bio/SeqIO/kegg.pm",
-         "version" : "1.006924"
+         "file" : "Bio/SeqIO/kegg.pm"
       },
       "Bio::SeqIO::largefasta" : {
-         "file" : "Bio/SeqIO/largefasta.pm",
-         "version" : "1.006924"
+         "file" : "Bio/SeqIO/largefasta.pm"
       },
       "Bio::SeqIO::lasergene" : {
-         "file" : "Bio/SeqIO/lasergene.pm",
-         "version" : "1.006924"
+         "file" : "Bio/SeqIO/lasergene.pm"
       },
       "Bio::SeqIO::locuslink" : {
-         "file" : "Bio/SeqIO/locuslink.pm",
-         "version" : "1.006924"
+         "file" : "Bio/SeqIO/locuslink.pm"
       },
       "Bio::SeqIO::mbsout" : {
-         "file" : "Bio/SeqIO/mbsout.pm",
-         "version" : "1.006924"
+         "file" : "Bio/SeqIO/mbsout.pm"
       },
       "Bio::SeqIO::metafasta" : {
-         "file" : "Bio/SeqIO/metafasta.pm",
-         "version" : "1.006924"
+         "file" : "Bio/SeqIO/metafasta.pm"
       },
       "Bio::SeqIO::msout" : {
-         "file" : "Bio/SeqIO/msout.pm",
-         "version" : "1.006924"
+         "file" : "Bio/SeqIO/msout.pm"
       },
       "Bio::SeqIO::nexml" : {
-         "file" : "Bio/SeqIO/nexml.pm",
-         "version" : "1.006924"
+         "file" : "Bio/SeqIO/nexml.pm"
       },
       "Bio::SeqIO::phd" : {
-         "file" : "Bio/SeqIO/phd.pm",
-         "version" : "1.006924"
+         "file" : "Bio/SeqIO/phd.pm"
       },
       "Bio::SeqIO::pir" : {
-         "file" : "Bio/SeqIO/pir.pm",
-         "version" : "1.006924"
+         "file" : "Bio/SeqIO/pir.pm"
       },
       "Bio::SeqIO::pln" : {
-         "file" : "Bio/SeqIO/pln.pm",
-         "version" : "1.006924"
+         "file" : "Bio/SeqIO/pln.pm"
       },
       "Bio::SeqIO::qual" : {
-         "file" : "Bio/SeqIO/qual.pm",
-         "version" : "1.006924"
+         "file" : "Bio/SeqIO/qual.pm"
       },
       "Bio::SeqIO::raw" : {
-         "file" : "Bio/SeqIO/raw.pm",
-         "version" : "1.006924"
+         "file" : "Bio/SeqIO/raw.pm"
       },
       "Bio::SeqIO::scf" : {
-         "file" : "Bio/SeqIO/scf.pm",
-         "version" : "1.006924"
+         "file" : "Bio/SeqIO/scf.pm"
       },
       "Bio::SeqIO::seqxml" : {
-         "file" : "Bio/SeqIO/seqxml.pm",
-         "version" : "1.006924"
+         "file" : "Bio/SeqIO/seqxml.pm"
       },
       "Bio::SeqIO::strider" : {
-         "file" : "Bio/SeqIO/strider.pm",
-         "version" : "1.006924"
+         "file" : "Bio/SeqIO/strider.pm"
       },
       "Bio::SeqIO::swiss" : {
-         "file" : "Bio/SeqIO/swiss.pm",
-         "version" : "1.006924"
+         "file" : "Bio/SeqIO/swiss.pm"
       },
       "Bio::SeqIO::swissdriver" : {
-         "file" : "Bio/SeqIO/swissdriver.pm",
-         "version" : "1.006924"
+         "file" : "Bio/SeqIO/swissdriver.pm"
       },
       "Bio::SeqIO::tab" : {
-         "file" : "Bio/SeqIO/tab.pm",
-         "version" : "1.006924"
+         "file" : "Bio/SeqIO/tab.pm"
       },
       "Bio::SeqIO::table" : {
-         "file" : "Bio/SeqIO/table.pm",
-         "version" : "1.006924"
+         "file" : "Bio/SeqIO/table.pm"
       },
       "Bio::SeqIO::tigr" : {
-         "file" : "Bio/SeqIO/tigr.pm",
-         "version" : "1.006924"
+         "file" : "Bio/SeqIO/tigr.pm"
       },
       "Bio::SeqIO::tigrxml" : {
-         "file" : "Bio/SeqIO/tigrxml.pm",
-         "version" : "1.006924"
+         "file" : "Bio/SeqIO/tigrxml.pm"
       },
       "Bio::SeqIO::tinyseq" : {
-         "file" : "Bio/SeqIO/tinyseq.pm",
-         "version" : "1.006924"
+         "file" : "Bio/SeqIO/tinyseq.pm"
       },
       "Bio::SeqIO::tinyseq::tinyseqHandler" : {
-         "file" : "Bio/SeqIO/tinyseq/tinyseqHandler.pm",
-         "version" : "1.006924"
+         "file" : "Bio/SeqIO/tinyseq/tinyseqHandler.pm"
       },
       "Bio::SeqIO::ztr" : {
-         "file" : "Bio/SeqIO/ztr.pm",
-         "version" : "1.006924"
+         "file" : "Bio/SeqIO/ztr.pm"
       },
       "Bio::SeqUtils" : {
-         "file" : "Bio/SeqUtils.pm",
-         "version" : "1.006924"
+         "file" : "Bio/SeqUtils.pm"
       },
       "Bio::SimpleAlign" : {
-         "file" : "Bio/SimpleAlign.pm",
-         "version" : "1.006924"
+         "file" : "Bio/SimpleAlign.pm"
       },
       "Bio::SimpleAnalysisI" : {
-         "file" : "Bio/SimpleAnalysisI.pm",
-         "version" : "1.006924"
+         "file" : "Bio/SimpleAnalysisI.pm"
       },
       "Bio::Species" : {
-         "file" : "Bio/Species.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Species.pm"
       },
       "Bio::Structure::Atom" : {
-         "file" : "Bio/Structure/Atom.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Structure/Atom.pm"
       },
       "Bio::Structure::Chain" : {
-         "file" : "Bio/Structure/Chain.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Structure/Chain.pm"
       },
       "Bio::Structure::Entry" : {
-         "file" : "Bio/Structure/Entry.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Structure/Entry.pm"
       },
       "Bio::Structure::IO" : {
-         "file" : "Bio/Structure/IO.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Structure/IO.pm"
       },
       "Bio::Structure::IO::pdb" : {
-         "file" : "Bio/Structure/IO/pdb.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Structure/IO/pdb.pm"
       },
       "Bio::Structure::Model" : {
-         "file" : "Bio/Structure/Model.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Structure/Model.pm"
       },
       "Bio::Structure::Residue" : {
-         "file" : "Bio/Structure/Residue.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Structure/Residue.pm"
       },
       "Bio::Structure::SecStr::DSSP::Res" : {
-         "file" : "Bio/Structure/SecStr/DSSP/Res.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Structure/SecStr/DSSP/Res.pm"
       },
       "Bio::Structure::SecStr::STRIDE::Res" : {
-         "file" : "Bio/Structure/SecStr/STRIDE/Res.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Structure/SecStr/STRIDE/Res.pm"
       },
       "Bio::Structure::StructureI" : {
-         "file" : "Bio/Structure/StructureI.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Structure/StructureI.pm"
       },
       "Bio::Symbol::Alphabet" : {
-         "file" : "Bio/Symbol/Alphabet.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Symbol/Alphabet.pm"
       },
       "Bio::Symbol::AlphabetI" : {
-         "file" : "Bio/Symbol/AlphabetI.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Symbol/AlphabetI.pm"
       },
       "Bio::Symbol::DNAAlphabet" : {
-         "file" : "Bio/Symbol/DNAAlphabet.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Symbol/DNAAlphabet.pm"
       },
       "Bio::Symbol::ProteinAlphabet" : {
-         "file" : "Bio/Symbol/ProteinAlphabet.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Symbol/ProteinAlphabet.pm"
       },
       "Bio::Symbol::Symbol" : {
-         "file" : "Bio/Symbol/Symbol.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Symbol/Symbol.pm"
       },
       "Bio::Symbol::SymbolI" : {
-         "file" : "Bio/Symbol/SymbolI.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Symbol/SymbolI.pm"
       },
       "Bio::Taxon" : {
-         "file" : "Bio/Taxon.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Taxon.pm"
       },
       "Bio::Taxonomy" : {
-         "file" : "Bio/Taxonomy.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Taxonomy.pm"
       },
       "Bio::Taxonomy::FactoryI" : {
-         "file" : "Bio/Taxonomy/FactoryI.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Taxonomy/FactoryI.pm"
       },
       "Bio::Taxonomy::Node" : {
-         "file" : "Bio/Taxonomy/Node.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Taxonomy/Node.pm"
       },
       "Bio::Taxonomy::Taxon" : {
-         "file" : "Bio/Taxonomy/Taxon.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Taxonomy/Taxon.pm"
       },
       "Bio::Taxonomy::Tree" : {
-         "file" : "Bio/Taxonomy/Tree.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Taxonomy/Tree.pm"
       },
       "Bio::Tools::AlignFactory" : {
-         "file" : "Bio/Tools/AlignFactory.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Tools/AlignFactory.pm"
       },
       "Bio::Tools::Alignment::Consed" : {
-         "file" : "Bio/Tools/Alignment/Consed.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Tools/Alignment/Consed.pm"
       },
       "Bio::Tools::Alignment::Trim" : {
-         "file" : "Bio/Tools/Alignment/Trim.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Tools/Alignment/Trim.pm"
       },
       "Bio::Tools::AmpliconSearch" : {
-         "file" : "Bio/Tools/AmpliconSearch.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Tools/AmpliconSearch.pm"
       },
       "Bio::Tools::Analysis::DNA::ESEfinder" : {
-         "file" : "Bio/Tools/Analysis/DNA/ESEfinder.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Tools/Analysis/DNA/ESEfinder.pm"
       },
       "Bio::Tools::Analysis::Protein::Domcut" : {
-         "file" : "Bio/Tools/Analysis/Protein/Domcut.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Tools/Analysis/Protein/Domcut.pm"
       },
       "Bio::Tools::Analysis::Protein::ELM" : {
-         "file" : "Bio/Tools/Analysis/Protein/ELM.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Tools/Analysis/Protein/ELM.pm"
       },
       "Bio::Tools::Analysis::Protein::GOR4" : {
-         "file" : "Bio/Tools/Analysis/Protein/GOR4.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Tools/Analysis/Protein/GOR4.pm"
       },
       "Bio::Tools::Analysis::Protein::HNN" : {
-         "file" : "Bio/Tools/Analysis/Protein/HNN.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Tools/Analysis/Protein/HNN.pm"
       },
       "Bio::Tools::Analysis::Protein::Mitoprot" : {
-         "file" : "Bio/Tools/Analysis/Protein/Mitoprot.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Tools/Analysis/Protein/Mitoprot.pm"
       },
       "Bio::Tools::Analysis::Protein::NetPhos" : {
-         "file" : "Bio/Tools/Analysis/Protein/NetPhos.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Tools/Analysis/Protein/NetPhos.pm"
       },
       "Bio::Tools::Analysis::Protein::Scansite" : {
-         "file" : "Bio/Tools/Analysis/Protein/Scansite.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Tools/Analysis/Protein/Scansite.pm"
       },
       "Bio::Tools::Analysis::Protein::Sopma" : {
-         "file" : "Bio/Tools/Analysis/Protein/Sopma.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Tools/Analysis/Protein/Sopma.pm"
       },
       "Bio::Tools::Analysis::SimpleAnalysisBase" : {
-         "file" : "Bio/Tools/Analysis/SimpleAnalysisBase.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Tools/Analysis/SimpleAnalysisBase.pm"
       },
       "Bio::Tools::AnalysisResult" : {
-         "file" : "Bio/Tools/AnalysisResult.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Tools/AnalysisResult.pm"
       },
       "Bio::Tools::Blat" : {
-         "file" : "Bio/Tools/Blat.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Tools/Blat.pm"
       },
       "Bio::Tools::CodonTable" : {
-         "file" : "Bio/Tools/CodonTable.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Tools/CodonTable.pm"
       },
       "Bio::Tools::Coil" : {
-         "file" : "Bio/Tools/Coil.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Tools/Coil.pm"
       },
       "Bio::Tools::ECnumber" : {
-         "file" : "Bio/Tools/ECnumber.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Tools/ECnumber.pm"
       },
       "Bio::Tools::EMBOSS::Palindrome" : {
-         "file" : "Bio/Tools/EMBOSS/Palindrome.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Tools/EMBOSS/Palindrome.pm"
       },
       "Bio::Tools::EPCR" : {
-         "file" : "Bio/Tools/EPCR.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Tools/EPCR.pm"
       },
       "Bio::Tools::ERPIN" : {
-         "file" : "Bio/Tools/ERPIN.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Tools/ERPIN.pm"
       },
       "Bio::Tools::ESTScan" : {
-         "file" : "Bio/Tools/ESTScan.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Tools/ESTScan.pm"
       },
       "Bio::Tools::Eponine" : {
-         "file" : "Bio/Tools/Eponine.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Tools/Eponine.pm"
       },
       "Bio::Tools::Est2Genome" : {
-         "file" : "Bio/Tools/Est2Genome.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Tools/Est2Genome.pm"
       },
       "Bio::Tools::Fgenesh" : {
-         "file" : "Bio/Tools/Fgenesh.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Tools/Fgenesh.pm"
       },
       "Bio::Tools::FootPrinter" : {
-         "file" : "Bio/Tools/FootPrinter.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Tools/FootPrinter.pm"
       },
       "Bio::Tools::GFF" : {
-         "file" : "Bio/Tools/GFF.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Tools/GFF.pm"
       },
       "Bio::Tools::Gel" : {
-         "file" : "Bio/Tools/Gel.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Tools/Gel.pm"
       },
       "Bio::Tools::Geneid" : {
-         "file" : "Bio/Tools/Geneid.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Tools/Geneid.pm"
       },
       "Bio::Tools::Genemark" : {
-         "file" : "Bio/Tools/Genemark.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Tools/Genemark.pm"
       },
       "Bio::Tools::Genewise" : {
-         "file" : "Bio/Tools/Genewise.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Tools/Genewise.pm"
       },
       "Bio::Tools::Genomewise" : {
-         "file" : "Bio/Tools/Genomewise.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Tools/Genomewise.pm"
       },
       "Bio::Tools::Genscan" : {
-         "file" : "Bio/Tools/Genscan.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Tools/Genscan.pm"
       },
       "Bio::Tools::Glimmer" : {
-         "file" : "Bio/Tools/Glimmer.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Tools/Glimmer.pm"
       },
       "Bio::Tools::Grail" : {
-         "file" : "Bio/Tools/Grail.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Tools/Grail.pm"
       },
       "Bio::Tools::GuessSeqFormat" : {
-         "file" : "Bio/Tools/GuessSeqFormat.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Tools/GuessSeqFormat.pm"
       },
       "Bio::Tools::HMMER::Domain" : {
-         "file" : "Bio/Tools/HMMER/Domain.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Tools/HMMER/Domain.pm"
       },
       "Bio::Tools::HMMER::Results" : {
-         "file" : "Bio/Tools/HMMER/Results.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Tools/HMMER/Results.pm"
       },
       "Bio::Tools::HMMER::Set" : {
-         "file" : "Bio/Tools/HMMER/Set.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Tools/HMMER/Set.pm"
       },
       "Bio::Tools::Hmmpfam" : {
-         "file" : "Bio/Tools/Hmmpfam.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Tools/Hmmpfam.pm"
       },
       "Bio::Tools::IUPAC" : {
-         "file" : "Bio/Tools/IUPAC.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Tools/IUPAC.pm"
       },
       "Bio::Tools::Infernal" : {
-         "file" : "Bio/Tools/Infernal.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Tools/Infernal.pm"
       },
       "Bio::Tools::Lucy" : {
-         "file" : "Bio/Tools/Lucy.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Tools/Lucy.pm"
       },
       "Bio::Tools::MZEF" : {
-         "file" : "Bio/Tools/MZEF.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Tools/MZEF.pm"
       },
       "Bio::Tools::Match" : {
-         "file" : "Bio/Tools/Match.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Tools/Match.pm"
       },
       "Bio::Tools::OddCodes" : {
-         "file" : "Bio/Tools/OddCodes.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Tools/OddCodes.pm"
       },
       "Bio::Tools::Phylo::Gerp" : {
-         "file" : "Bio/Tools/Phylo/Gerp.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Tools/Phylo/Gerp.pm"
       },
       "Bio::Tools::Phylo::Gumby" : {
-         "file" : "Bio/Tools/Phylo/Gumby.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Tools/Phylo/Gumby.pm"
       },
       "Bio::Tools::Phylo::Molphy" : {
-         "file" : "Bio/Tools/Phylo/Molphy.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Tools/Phylo/Molphy.pm"
       },
       "Bio::Tools::Phylo::Molphy::Result" : {
-         "file" : "Bio/Tools/Phylo/Molphy/Result.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Tools/Phylo/Molphy/Result.pm"
       },
       "Bio::Tools::Phylo::PAML" : {
-         "file" : "Bio/Tools/Phylo/PAML.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Tools/Phylo/PAML.pm"
       },
       "Bio::Tools::Phylo::PAML::Codeml" : {
-         "file" : "Bio/Tools/Phylo/PAML/Codeml.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Tools/Phylo/PAML/Codeml.pm"
       },
       "Bio::Tools::Phylo::PAML::ModelResult" : {
-         "file" : "Bio/Tools/Phylo/PAML/ModelResult.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Tools/Phylo/PAML/ModelResult.pm"
       },
       "Bio::Tools::Phylo::PAML::Result" : {
-         "file" : "Bio/Tools/Phylo/PAML/Result.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Tools/Phylo/PAML/Result.pm"
       },
       "Bio::Tools::Phylo::Phylip::ProtDist" : {
-         "file" : "Bio/Tools/Phylo/Phylip/ProtDist.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Tools/Phylo/Phylip/ProtDist.pm"
       },
       "Bio::Tools::Prediction::Exon" : {
-         "file" : "Bio/Tools/Prediction/Exon.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Tools/Prediction/Exon.pm"
       },
       "Bio::Tools::Prediction::Gene" : {
-         "file" : "Bio/Tools/Prediction/Gene.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Tools/Prediction/Gene.pm"
       },
       "Bio::Tools::Primer3" : {
-         "file" : "Bio/Tools/Primer3.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Tools/Primer3.pm"
       },
       "Bio::Tools::Primer::Assessor::Base" : {
-         "file" : "Bio/Tools/Primer/Assessor/Base.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Tools/Primer/Assessor/Base.pm"
       },
       "Bio::Tools::Primer::AssessorI" : {
-         "file" : "Bio/Tools/Primer/AssessorI.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Tools/Primer/AssessorI.pm"
       },
       "Bio::Tools::Primer::Feature" : {
-         "file" : "Bio/Tools/Primer/Feature.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Tools/Primer/Feature.pm"
       },
       "Bio::Tools::Primer::Pair" : {
-         "file" : "Bio/Tools/Primer/Pair.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Tools/Primer/Pair.pm"
       },
       "Bio::Tools::Prints" : {
-         "file" : "Bio/Tools/Prints.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Tools/Prints.pm"
       },
       "Bio::Tools::Profile" : {
-         "file" : "Bio/Tools/Profile.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Tools/Profile.pm"
       },
       "Bio::Tools::Promoterwise" : {
-         "file" : "Bio/Tools/Promoterwise.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Tools/Promoterwise.pm"
       },
       "Bio::Tools::PrositeScan" : {
-         "file" : "Bio/Tools/PrositeScan.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Tools/PrositeScan.pm"
       },
       "Bio::Tools::Protparam" : {
-         "file" : "Bio/Tools/Protparam.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Tools/Protparam.pm"
       },
       "Bio::Tools::Pseudowise" : {
-         "file" : "Bio/Tools/Pseudowise.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Tools/Pseudowise.pm"
       },
       "Bio::Tools::QRNA" : {
-         "file" : "Bio/Tools/QRNA.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Tools/QRNA.pm"
       },
       "Bio::Tools::RNAMotif" : {
-         "file" : "Bio/Tools/RNAMotif.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Tools/RNAMotif.pm"
       },
       "Bio::Tools::RandomDistFunctions" : {
-         "file" : "Bio/Tools/RandomDistFunctions.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Tools/RandomDistFunctions.pm"
       },
       "Bio::Tools::RepeatMasker" : {
-         "file" : "Bio/Tools/RepeatMasker.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Tools/RepeatMasker.pm"
       },
       "Bio::Tools::Run::GenericParameters" : {
-         "file" : "Bio/Tools/Run/GenericParameters.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Tools/Run/GenericParameters.pm"
       },
       "Bio::Tools::Run::ParametersI" : {
-         "file" : "Bio/Tools/Run/ParametersI.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Tools/Run/ParametersI.pm"
       },
       "Bio::Tools::Run::RemoteBlast" : {
-         "file" : "Bio/Tools/Run/RemoteBlast.pm",
-         "version" : "1.006924"
-      },
-      "Bio::Tools::Run::StandAloneBlast" : {
-         "file" : "Bio/Tools/Run/StandAloneBlast.pm",
-         "version" : "1.006924"
-      },
-      "Bio::Tools::Run::StandAloneNCBIBlast" : {
-         "file" : "Bio/Tools/Run/StandAloneNCBIBlast.pm",
-         "version" : "1.006924"
-      },
-      "Bio::Tools::Run::StandAloneWUBlast" : {
-         "file" : "Bio/Tools/Run/StandAloneWUBlast.pm",
-         "version" : "1.006924"
-      },
-      "Bio::Tools::Run::WrapperBase" : {
-         "file" : "Bio/Tools/Run/WrapperBase.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Tools/Run/RemoteBlast.pm"
       },
       "Bio::Tools::Seg" : {
-         "file" : "Bio/Tools/Seg.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Tools/Seg.pm"
       },
       "Bio::Tools::SeqPattern" : {
-         "file" : "Bio/Tools/SeqPattern.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Tools/SeqPattern.pm"
       },
       "Bio::Tools::SeqPattern::Backtranslate" : {
-         "file" : "Bio/Tools/SeqPattern/Backtranslate.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Tools/SeqPattern/Backtranslate.pm"
       },
       "Bio::Tools::SeqStats" : {
-         "file" : "Bio/Tools/SeqStats.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Tools/SeqStats.pm"
       },
       "Bio::Tools::SeqWords" : {
-         "file" : "Bio/Tools/SeqWords.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Tools/SeqWords.pm"
       },
       "Bio::Tools::SiRNA" : {
-         "file" : "Bio/Tools/SiRNA.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Tools/SiRNA.pm"
       },
       "Bio::Tools::SiRNA::Ruleset::saigo" : {
-         "file" : "Bio/Tools/SiRNA/Ruleset/saigo.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Tools/SiRNA/Ruleset/saigo.pm"
       },
       "Bio::Tools::SiRNA::Ruleset::tuschl" : {
-         "file" : "Bio/Tools/SiRNA/Ruleset/tuschl.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Tools/SiRNA/Ruleset/tuschl.pm"
       },
       "Bio::Tools::Sigcleave" : {
-         "file" : "Bio/Tools/Sigcleave.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Tools/Sigcleave.pm"
       },
       "Bio::Tools::Signalp" : {
-         "file" : "Bio/Tools/Signalp.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Tools/Signalp.pm"
       },
       "Bio::Tools::Signalp::ExtendedSignalp" : {
-         "file" : "Bio/Tools/Signalp/ExtendedSignalp.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Tools/Signalp/ExtendedSignalp.pm"
       },
       "Bio::Tools::Sim4::Exon" : {
-         "file" : "Bio/Tools/Sim4/Exon.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Tools/Sim4/Exon.pm"
       },
       "Bio::Tools::Sim4::Results" : {
-         "file" : "Bio/Tools/Sim4/Results.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Tools/Sim4/Results.pm"
       },
       "Bio::Tools::Spidey::Exon" : {
-         "file" : "Bio/Tools/Spidey/Exon.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Tools/Spidey/Exon.pm"
       },
       "Bio::Tools::Spidey::Results" : {
-         "file" : "Bio/Tools/Spidey/Results.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Tools/Spidey/Results.pm"
       },
       "Bio::Tools::TandemRepeatsFinder" : {
-         "file" : "Bio/Tools/TandemRepeatsFinder.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Tools/TandemRepeatsFinder.pm"
       },
       "Bio::Tools::TargetP" : {
-         "file" : "Bio/Tools/TargetP.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Tools/TargetP.pm"
       },
       "Bio::Tools::Tmhmm" : {
-         "file" : "Bio/Tools/Tmhmm.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Tools/Tmhmm.pm"
       },
       "Bio::Tools::dpAlign" : {
-         "file" : "Bio/Tools/dpAlign.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Tools/dpAlign.pm"
       },
       "Bio::Tools::ipcress" : {
-         "file" : "Bio/Tools/ipcress.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Tools/ipcress.pm"
       },
       "Bio::Tools::isPcr" : {
-         "file" : "Bio/Tools/isPcr.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Tools/isPcr.pm"
       },
       "Bio::Tools::pICalculator" : {
-         "file" : "Bio/Tools/pICalculator.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Tools/pICalculator.pm"
       },
       "Bio::Tools::pSW" : {
-         "file" : "Bio/Tools/pSW.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Tools/pSW.pm"
       },
       "Bio::Tools::tRNAscanSE" : {
-         "file" : "Bio/Tools/tRNAscanSE.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Tools/tRNAscanSE.pm"
       },
       "Bio::Tree::AlleleNode" : {
-         "file" : "Bio/Tree/AlleleNode.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Tree/AlleleNode.pm"
       },
       "Bio::Tree::AnnotatableNode" : {
-         "file" : "Bio/Tree/AnnotatableNode.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Tree/AnnotatableNode.pm"
       },
       "Bio::Tree::Compatible" : {
-         "file" : "Bio/Tree/Compatible.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Tree/Compatible.pm"
       },
       "Bio::Tree::DistanceFactory" : {
-         "file" : "Bio/Tree/DistanceFactory.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Tree/DistanceFactory.pm"
       },
       "Bio::Tree::Draw::Cladogram" : {
-         "file" : "Bio/Tree/Draw/Cladogram.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Tree/Draw/Cladogram.pm"
       },
       "Bio::Tree::Node" : {
-         "file" : "Bio/Tree/Node.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Tree/Node.pm"
       },
       "Bio::Tree::NodeI" : {
-         "file" : "Bio/Tree/NodeI.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Tree/NodeI.pm"
       },
       "Bio::Tree::NodeNHX" : {
-         "file" : "Bio/Tree/NodeNHX.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Tree/NodeNHX.pm"
       },
       "Bio::Tree::RandomFactory" : {
-         "file" : "Bio/Tree/RandomFactory.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Tree/RandomFactory.pm"
       },
       "Bio::Tree::Statistics" : {
-         "file" : "Bio/Tree/Statistics.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Tree/Statistics.pm"
       },
       "Bio::Tree::Tree" : {
-         "file" : "Bio/Tree/Tree.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Tree/Tree.pm"
       },
       "Bio::Tree::TreeFunctionsI" : {
-         "file" : "Bio/Tree/TreeFunctionsI.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Tree/TreeFunctionsI.pm"
       },
       "Bio::Tree::TreeI" : {
-         "file" : "Bio/Tree/TreeI.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Tree/TreeI.pm"
       },
       "Bio::TreeIO" : {
-         "file" : "Bio/TreeIO.pm",
-         "version" : "1.006924"
+         "file" : "Bio/TreeIO.pm"
       },
       "Bio::TreeIO::NewickParser" : {
-         "file" : "Bio/TreeIO/NewickParser.pm",
-         "version" : "1.006924"
+         "file" : "Bio/TreeIO/NewickParser.pm"
       },
       "Bio::TreeIO::TreeEventBuilder" : {
-         "file" : "Bio/TreeIO/TreeEventBuilder.pm",
-         "version" : "1.006924"
+         "file" : "Bio/TreeIO/TreeEventBuilder.pm"
       },
       "Bio::TreeIO::cluster" : {
-         "file" : "Bio/TreeIO/cluster.pm",
-         "version" : "1.006924"
+         "file" : "Bio/TreeIO/cluster.pm"
       },
       "Bio::TreeIO::lintree" : {
-         "file" : "Bio/TreeIO/lintree.pm",
-         "version" : "1.006924"
+         "file" : "Bio/TreeIO/lintree.pm"
       },
       "Bio::TreeIO::newick" : {
-         "file" : "Bio/TreeIO/newick.pm",
-         "version" : "1.006924"
+         "file" : "Bio/TreeIO/newick.pm"
       },
       "Bio::TreeIO::nexml" : {
-         "file" : "Bio/TreeIO/nexml.pm",
-         "version" : "1.006924"
+         "file" : "Bio/TreeIO/nexml.pm"
       },
       "Bio::TreeIO::nexus" : {
-         "file" : "Bio/TreeIO/nexus.pm",
-         "version" : "1.006924"
+         "file" : "Bio/TreeIO/nexus.pm"
       },
       "Bio::TreeIO::nhx" : {
-         "file" : "Bio/TreeIO/nhx.pm",
-         "version" : "1.006924"
+         "file" : "Bio/TreeIO/nhx.pm"
       },
       "Bio::TreeIO::pag" : {
-         "file" : "Bio/TreeIO/pag.pm",
-         "version" : "1.006924"
+         "file" : "Bio/TreeIO/pag.pm"
       },
       "Bio::TreeIO::phyloxml" : {
-         "file" : "Bio/TreeIO/phyloxml.pm",
-         "version" : "1.006924"
+         "file" : "Bio/TreeIO/phyloxml.pm"
       },
       "Bio::TreeIO::svggraph" : {
-         "file" : "Bio/TreeIO/svggraph.pm",
-         "version" : "1.006924"
+         "file" : "Bio/TreeIO/svggraph.pm"
       },
       "Bio::TreeIO::tabtree" : {
-         "file" : "Bio/TreeIO/tabtree.pm",
-         "version" : "1.006924"
+         "file" : "Bio/TreeIO/tabtree.pm"
       },
       "Bio::UpdateableSeqI" : {
-         "file" : "Bio/UpdateableSeqI.pm",
-         "version" : "1.006924"
+         "file" : "Bio/UpdateableSeqI.pm"
       },
       "Bio::Variation::AAChange" : {
-         "file" : "Bio/Variation/AAChange.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Variation/AAChange.pm"
       },
       "Bio::Variation::AAReverseMutate" : {
-         "file" : "Bio/Variation/AAReverseMutate.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Variation/AAReverseMutate.pm"
       },
       "Bio::Variation::Allele" : {
-         "file" : "Bio/Variation/Allele.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Variation/Allele.pm"
       },
       "Bio::Variation::DNAMutation" : {
-         "file" : "Bio/Variation/DNAMutation.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Variation/DNAMutation.pm"
       },
       "Bio::Variation::IO" : {
-         "file" : "Bio/Variation/IO.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Variation/IO.pm"
       },
       "Bio::Variation::IO::flat" : {
-         "file" : "Bio/Variation/IO/flat.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Variation/IO/flat.pm"
       },
       "Bio::Variation::IO::xml" : {
-         "file" : "Bio/Variation/IO/xml.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Variation/IO/xml.pm"
       },
       "Bio::Variation::RNAChange" : {
-         "file" : "Bio/Variation/RNAChange.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Variation/RNAChange.pm"
       },
       "Bio::Variation::SNP" : {
-         "file" : "Bio/Variation/SNP.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Variation/SNP.pm"
       },
       "Bio::Variation::SeqDiff" : {
-         "file" : "Bio/Variation/SeqDiff.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Variation/SeqDiff.pm"
       },
       "Bio::Variation::VariantI" : {
-         "file" : "Bio/Variation/VariantI.pm",
-         "version" : "1.006924"
+         "file" : "Bio/Variation/VariantI.pm"
       },
       "Bio::WebAgent" : {
-         "file" : "Bio/WebAgent.pm",
-         "version" : "1.006924"
+         "file" : "Bio/WebAgent.pm"
       },
       "FeatureStore" : {
-         "file" : "Bio/DB/GFF/Adaptor/berkeleydb.pm",
-         "version" : "1.006924"
+         "file" : "Bio/DB/GFF/Adaptor/berkeleydb.pm"
       }
    },
-   "release_status" : "stable",
+   "release_status" : "testing",
    "resources" : {
       "license" : [
          "http://dev.perl.org/licenses/"
       ]
    },
-   "version" : "1.006924"
+   "version" : "1.007000_003"
 }
diff --git a/META.yml b/META.yml
index 5bc15e6..958c43c 100644
--- a/META.yml
+++ b/META.yml
@@ -4,2502 +4,1642 @@ author:
   - 'BioPerl Team <bioperl-l at bioperl.org>'
 build_requires:
   CPAN: '1.81'
-  Module::Build: '0.2805'
+  Module::Build: '0.42'
   Test::Harness: '2.62'
   Test::Most: '0'
   URI::Escape: '0'
 configure_requires:
-  Module::Build: '0.40'
+  Module::Build: '0.42'
 dynamic_config: 1
-generated_by: 'Module::Build version 0.4003, CPAN::Meta::Converter version 2.141520'
+generated_by: 'Module::Build version 0.4218, CPAN::Meta::Converter version 2.150001'
 license: perl
 meta-spec:
   url: http://module-build.sourceforge.net/META-spec-v1.4.html
   version: '1.4'
 name: BioPerl
-no_index:
-  x_dir:
-    - examples/root/lib
 provides:
   Bio::Align::AlignI:
     file: Bio/Align/AlignI.pm
-    version: '1.006924'
   Bio::Align::DNAStatistics:
     file: Bio/Align/DNAStatistics.pm
-    version: '1.006924'
   Bio::Align::Graphics:
     file: Bio/Align/Graphics.pm
-    version: '1.006924'
   Bio::Align::PairwiseStatistics:
     file: Bio/Align/PairwiseStatistics.pm
-    version: '1.006924'
   Bio::Align::ProteinStatistics:
     file: Bio/Align/ProteinStatistics.pm
-    version: '1.006924'
   Bio::Align::StatisticsI:
     file: Bio/Align/StatisticsI.pm
-    version: '1.006924'
   Bio::Align::Utilities:
     file: Bio/Align/Utilities.pm
-    version: '1.006924'
   Bio::AlignIO:
     file: Bio/AlignIO.pm
-    version: '1.006924'
   Bio::AlignIO::Handler::GenericAlignHandler:
     file: Bio/AlignIO/Handler/GenericAlignHandler.pm
-    version: '1.006924'
   Bio::AlignIO::arp:
     file: Bio/AlignIO/arp.pm
-    version: '1.006924'
   Bio::AlignIO::bl2seq:
     file: Bio/AlignIO/bl2seq.pm
-    version: '1.006924'
   Bio::AlignIO::clustalw:
     file: Bio/AlignIO/clustalw.pm
-    version: '1.006924'
   Bio::AlignIO::emboss:
     file: Bio/AlignIO/emboss.pm
-    version: '1.006924'
   Bio::AlignIO::fasta:
     file: Bio/AlignIO/fasta.pm
-    version: '1.006924'
   Bio::AlignIO::largemultifasta:
     file: Bio/AlignIO/largemultifasta.pm
-    version: '1.006924'
   Bio::AlignIO::maf:
     file: Bio/AlignIO/maf.pm
-    version: '1.006924'
   Bio::AlignIO::mase:
     file: Bio/AlignIO/mase.pm
-    version: '1.006924'
   Bio::AlignIO::mega:
     file: Bio/AlignIO/mega.pm
-    version: '1.006924'
   Bio::AlignIO::meme:
     file: Bio/AlignIO/meme.pm
-    version: '1.006924'
   Bio::AlignIO::metafasta:
     file: Bio/AlignIO/metafasta.pm
-    version: '1.006924'
   Bio::AlignIO::msf:
     file: Bio/AlignIO/msf.pm
-    version: '1.006924'
   Bio::AlignIO::nexml:
     file: Bio/AlignIO/nexml.pm
-    version: '1.006924'
   Bio::AlignIO::nexus:
     file: Bio/AlignIO/nexus.pm
-    version: '1.006924'
   Bio::AlignIO::pfam:
     file: Bio/AlignIO/pfam.pm
-    version: '1.006924'
   Bio::AlignIO::phylip:
     file: Bio/AlignIO/phylip.pm
-    version: '1.006924'
   Bio::AlignIO::po:
     file: Bio/AlignIO/po.pm
-    version: '1.006924'
   Bio::AlignIO::proda:
     file: Bio/AlignIO/proda.pm
-    version: '1.006924'
   Bio::AlignIO::prodom:
     file: Bio/AlignIO/prodom.pm
-    version: '1.006924'
   Bio::AlignIO::psi:
     file: Bio/AlignIO/psi.pm
-    version: '1.006924'
   Bio::AlignIO::selex:
     file: Bio/AlignIO/selex.pm
-    version: '1.006924'
   Bio::AlignIO::stockholm:
     file: Bio/AlignIO/stockholm.pm
-    version: '1.006924'
   Bio::AlignIO::xmfa:
     file: Bio/AlignIO/xmfa.pm
-    version: '1.006924'
   Bio::AnalysisI:
     file: Bio/AnalysisI.pm
-    version: '1.006924'
   Bio::AnalysisI::JobI:
     file: Bio/AnalysisI.pm
-    version: '1.006924'
   Bio::AnalysisParserI:
     file: Bio/AnalysisParserI.pm
-    version: '1.006924'
   Bio::AnalysisResultI:
     file: Bio/AnalysisResultI.pm
-    version: '1.006924'
   Bio::AnnotatableI:
     file: Bio/AnnotatableI.pm
-    version: '1.006924'
   Bio::Annotation::AnnotationFactory:
     file: Bio/Annotation/AnnotationFactory.pm
-    version: '1.006924'
   Bio::Annotation::Collection:
     file: Bio/Annotation/Collection.pm
-    version: '1.006924'
   Bio::Annotation::Comment:
     file: Bio/Annotation/Comment.pm
-    version: '1.006924'
   Bio::Annotation::DBLink:
     file: Bio/Annotation/DBLink.pm
-    version: '1.006924'
   Bio::Annotation::OntologyTerm:
     file: Bio/Annotation/OntologyTerm.pm
-    version: '1.006924'
   Bio::Annotation::Reference:
     file: Bio/Annotation/Reference.pm
-    version: '1.006924'
   Bio::Annotation::Relation:
     file: Bio/Annotation/Relation.pm
-    version: '1.006924'
   Bio::Annotation::SimpleValue:
     file: Bio/Annotation/SimpleValue.pm
-    version: '1.006924'
   Bio::Annotation::StructuredValue:
     file: Bio/Annotation/StructuredValue.pm
-    version: '1.006924'
   Bio::Annotation::TagTree:
     file: Bio/Annotation/TagTree.pm
-    version: '1.006924'
   Bio::Annotation::Target:
     file: Bio/Annotation/Target.pm
-    version: '1.006924'
   Bio::Annotation::Tree:
     file: Bio/Annotation/Tree.pm
-    version: '1.006924'
   Bio::Annotation::TypeManager:
     file: Bio/Annotation/TypeManager.pm
-    version: '1.006924'
   Bio::AnnotationCollectionI:
-    file: Bio/AnnotationCollectionI.pm
-    version: '1.006924'
+    file: Bio/DB/HIV/HIVQueryHelper.pm
   Bio::AnnotationI:
     file: Bio/AnnotationI.pm
-    version: '1.006924'
   Bio::Assembly::Contig:
     file: Bio/Assembly/Contig.pm
-    version: '1.006924'
   Bio::Assembly::ContigAnalysis:
     file: Bio/Assembly/ContigAnalysis.pm
-    version: '1.006924'
   Bio::Assembly::IO:
     file: Bio/Assembly/IO.pm
-    version: '1.006924'
   Bio::Assembly::IO::ace:
     file: Bio/Assembly/IO/ace.pm
-    version: '1.006924'
   Bio::Assembly::IO::bowtie:
     file: Bio/Assembly/IO/bowtie.pm
-    version: '1.006924'
   Bio::Assembly::IO::maq:
     file: Bio/Assembly/IO/maq.pm
-    version: '1.006924'
   Bio::Assembly::IO::phrap:
     file: Bio/Assembly/IO/phrap.pm
-    version: '1.006924'
   Bio::Assembly::IO::sam:
     file: Bio/Assembly/IO/sam.pm
-    version: '1.006924'
   Bio::Assembly::IO::tigr:
     file: Bio/Assembly/IO/tigr.pm
-    version: '1.006924'
   Bio::Assembly::Scaffold:
     file: Bio/Assembly/Scaffold.pm
-    version: '1.006924'
   Bio::Assembly::ScaffoldI:
     file: Bio/Assembly/ScaffoldI.pm
-    version: '1.006924'
   Bio::Assembly::Singlet:
     file: Bio/Assembly/Singlet.pm
-    version: '1.006924'
   Bio::Assembly::Tools::ContigSpectrum:
     file: Bio/Assembly/Tools/ContigSpectrum.pm
-    version: '1.006924'
   Bio::Cluster::ClusterFactory:
     file: Bio/Cluster/ClusterFactory.pm
-    version: '1.006924'
   Bio::Cluster::FamilyI:
     file: Bio/Cluster/FamilyI.pm
-    version: '1.006924'
   Bio::Cluster::SequenceFamily:
     file: Bio/Cluster/SequenceFamily.pm
-    version: '1.006924'
   Bio::Cluster::UniGene:
     file: Bio/Cluster/UniGene.pm
-    version: '1.006924'
   Bio::Cluster::UniGeneI:
     file: Bio/Cluster/UniGeneI.pm
-    version: '1.006924'
   Bio::ClusterI:
     file: Bio/ClusterI.pm
-    version: '1.006924'
   Bio::ClusterIO:
     file: Bio/ClusterIO.pm
-    version: '1.006924'
   Bio::ClusterIO::dbsnp:
     file: Bio/ClusterIO/dbsnp.pm
-    version: '1.006924'
   Bio::ClusterIO::unigene:
     file: Bio/ClusterIO/unigene.pm
-    version: '1.006924'
   Bio::CodonUsage::IO:
     file: Bio/CodonUsage/IO.pm
-    version: '1.006924'
   Bio::CodonUsage::Table:
     file: Bio/CodonUsage/Table.pm
-    version: '1.006924'
-  Bio::Coordinate::Chain:
-    file: Bio/Coordinate/Chain.pm
-    version: '1.006924'
-  Bio::Coordinate::Collection:
-    file: Bio/Coordinate/Collection.pm
-    version: '1.006924'
-  Bio::Coordinate::ExtrapolatingPair:
-    file: Bio/Coordinate/ExtrapolatingPair.pm
-    version: '1.006924'
-  Bio::Coordinate::GeneMapper:
-    file: Bio/Coordinate/GeneMapper.pm
-    version: '1.006924'
-  Bio::Coordinate::Graph:
-    file: Bio/Coordinate/Graph.pm
-    version: '1.006924'
-  Bio::Coordinate::MapperI:
-    file: Bio/Coordinate/MapperI.pm
-    version: '1.006924'
-  Bio::Coordinate::Pair:
-    file: Bio/Coordinate/Pair.pm
-    version: '1.006924'
-  Bio::Coordinate::Result:
-    file: Bio/Coordinate/Result.pm
-    version: '1.006924'
-  Bio::Coordinate::Result::Gap:
-    file: Bio/Coordinate/Result/Gap.pm
-    version: '1.006924'
-  Bio::Coordinate::Result::Match:
-    file: Bio/Coordinate/Result/Match.pm
-    version: '1.006924'
-  Bio::Coordinate::ResultI:
-    file: Bio/Coordinate/ResultI.pm
-    version: '1.006924'
-  Bio::Coordinate::Utils:
-    file: Bio/Coordinate/Utils.pm
-    version: '1.006924'
   Bio::DB::Ace:
     file: Bio/DB/Ace.pm
-    version: '1.006924'
   Bio::DB::BioFetch:
     file: Bio/DB/BioFetch.pm
-    version: '1.006924'
   Bio::DB::CUTG:
     file: Bio/DB/CUTG.pm
-    version: '1.006924'
   Bio::DB::DBFetch:
     file: Bio/DB/DBFetch.pm
-    version: '1.006924'
   Bio::DB::EMBL:
     file: Bio/DB/EMBL.pm
-    version: '1.006924'
   Bio::DB::EntrezGene:
     file: Bio/DB/EntrezGene.pm
-    version: '1.006924'
   Bio::DB::Expression:
     file: Bio/DB/Expression.pm
-    version: '1.006924'
   Bio::DB::Expression::geo:
     file: Bio/DB/Expression/geo.pm
-    version: '1.006924'
   Bio::DB::Failover:
     file: Bio/DB/Failover.pm
-    version: '1.006924'
   Bio::DB::Fasta:
     file: Bio/DB/Fasta.pm
-    version: '1.006924'
   Bio::DB::Fasta::Subdir:
     file: Bio/DB/SeqFeature/Store/berkeleydb.pm
-    version: '1.006924'
   Bio::DB::FileCache:
     file: Bio/DB/FileCache.pm
-    version: '1.006924'
   Bio::DB::Flat:
     file: Bio/DB/Flat.pm
-    version: '1.006924'
   Bio::DB::Flat::BDB:
     file: Bio/DB/Flat/BDB.pm
-    version: '1.006924'
   Bio::DB::Flat::BDB::embl:
     file: Bio/DB/Flat/BDB/embl.pm
-    version: '1.006924'
   Bio::DB::Flat::BDB::fasta:
     file: Bio/DB/Flat/BDB/fasta.pm
-    version: '1.006924'
   Bio::DB::Flat::BDB::genbank:
     file: Bio/DB/Flat/BDB/genbank.pm
-    version: '1.006924'
   Bio::DB::Flat::BDB::swiss:
     file: Bio/DB/Flat/BDB/swiss.pm
-    version: '1.006924'
   Bio::DB::Flat::BinarySearch:
     file: Bio/DB/Flat/BinarySearch.pm
-    version: '1.006924'
   Bio::DB::GFF:
     file: Bio/DB/GFF.pm
-    version: '1.006924'
   Bio::DB::GFF::Adaptor::ace:
     file: Bio/DB/GFF/Adaptor/ace.pm
-    version: '1.006924'
   Bio::DB::GFF::Adaptor::berkeleydb:
     file: Bio/DB/GFF/Adaptor/berkeleydb.pm
-    version: '1.006924'
   Bio::DB::GFF::Adaptor::berkeleydb::iterator:
     file: Bio/DB/GFF/Adaptor/berkeleydb/iterator.pm
-    version: '1.006924'
   Bio::DB::GFF::Adaptor::biofetch:
     file: Bio/DB/GFF/Adaptor/biofetch.pm
-    version: '1.006924'
   Bio::DB::GFF::Adaptor::biofetch_oracle:
     file: Bio/DB/GFF/Adaptor/biofetch_oracle.pm
-    version: '1.006924'
   Bio::DB::GFF::Adaptor::dbi:
     file: Bio/DB/GFF/Adaptor/dbi.pm
-    version: '1.006924'
   Bio::DB::GFF::Adaptor::dbi::caching_handle:
     file: Bio/DB/GFF/Adaptor/dbi/caching_handle.pm
-    version: '1.006924'
   Bio::DB::GFF::Adaptor::dbi::faux_dbh:
     file: Bio/DB/GFF/Adaptor/dbi/caching_handle.pm
-    version: '1.006924'
   Bio::DB::GFF::Adaptor::dbi::iterator:
     file: Bio/DB/GFF/Adaptor/dbi/iterator.pm
-    version: '1.006924'
   Bio::DB::GFF::Adaptor::dbi::mysql:
     file: Bio/DB/GFF/Adaptor/dbi/mysql.pm
-    version: '1.006924'
   Bio::DB::GFF::Adaptor::dbi::mysqlace:
     file: Bio/DB/GFF/Adaptor/dbi/mysqlace.pm
-    version: '1.006924'
   Bio::DB::GFF::Adaptor::dbi::mysqlcmap:
     file: Bio/DB/GFF/Adaptor/dbi/mysqlcmap.pm
-    version: '1.006924'
   Bio::DB::GFF::Adaptor::dbi::mysqlopt:
     file: Bio/DB/GFF/Adaptor/dbi/mysqlopt.pm
-    version: '1.006924'
   Bio::DB::GFF::Adaptor::dbi::oracle:
     file: Bio/DB/GFF/Adaptor/dbi/oracle.pm
-    version: '1.006924'
   Bio::DB::GFF::Adaptor::dbi::oracleace:
     file: Bio/DB/GFF/Adaptor/dbi/oracleace.pm
-    version: '1.006924'
   Bio::DB::GFF::Adaptor::dbi::pg:
     file: Bio/DB/GFF/Adaptor/dbi/pg.pm
-    version: '1.006924'
   Bio::DB::GFF::Adaptor::dbi::pg_fts:
     file: Bio/DB/GFF/Adaptor/dbi/pg_fts.pm
-    version: '1.006924'
   Bio::DB::GFF::Adaptor::memory:
     file: Bio/DB/GFF/Adaptor/memory.pm
-    version: '1.006924'
   Bio::DB::GFF::Adaptor::memory::feature_serializer:
     file: Bio/DB/GFF/Adaptor/memory/feature_serializer.pm
-    version: '1.006924'
   Bio::DB::GFF::Adaptor::memory::iterator:
     file: Bio/DB/GFF/Adaptor/memory/iterator.pm
-    version: '1.006924'
   Bio::DB::GFF::Aggregator:
     file: Bio/DB/GFF/Aggregator.pm
-    version: '1.006924'
   Bio::DB::GFF::Aggregator::alignment:
     file: Bio/DB/GFF/Aggregator/alignment.pm
-    version: '1.006924'
   Bio::DB::GFF::Aggregator::clone:
     file: Bio/DB/GFF/Aggregator/clone.pm
-    version: '1.006924'
   Bio::DB::GFF::Aggregator::coding:
     file: Bio/DB/GFF/Aggregator/coding.pm
-    version: '1.006924'
   Bio::DB::GFF::Aggregator::gene:
     file: Bio/DB/GFF/Aggregator/gene.pm
-    version: '1.006924'
   Bio::DB::GFF::Aggregator::match:
     file: Bio/DB/GFF/Aggregator/match.pm
-    version: '1.006924'
   Bio::DB::GFF::Aggregator::none:
     file: Bio/DB/GFF/Aggregator/none.pm
-    version: '1.006924'
   Bio::DB::GFF::Aggregator::orf:
     file: Bio/DB/GFF/Aggregator/orf.pm
-    version: '1.006924'
   Bio::DB::GFF::Aggregator::processed_transcript:
     file: Bio/DB/GFF/Aggregator/processed_transcript.pm
-    version: '1.006924'
   Bio::DB::GFF::Aggregator::so_transcript:
     file: Bio/DB/GFF/Aggregator/so_transcript.pm
-    version: '1.006924'
   Bio::DB::GFF::Aggregator::transcript:
     file: Bio/DB/GFF/Aggregator/transcript.pm
-    version: '1.006924'
   Bio::DB::GFF::Aggregator::ucsc_acembly:
     file: Bio/DB/GFF/Aggregator/ucsc_acembly.pm
-    version: '1.006924'
   Bio::DB::GFF::Aggregator::ucsc_ensgene:
     file: Bio/DB/GFF/Aggregator/ucsc_ensgene.pm
-    version: '1.006924'
   Bio::DB::GFF::Aggregator::ucsc_genscan:
     file: Bio/DB/GFF/Aggregator/ucsc_genscan.pm
-    version: '1.006924'
   Bio::DB::GFF::Aggregator::ucsc_refgene:
     file: Bio/DB/GFF/Aggregator/ucsc_refgene.pm
-    version: '1.006924'
   Bio::DB::GFF::Aggregator::ucsc_sanger22:
     file: Bio/DB/GFF/Aggregator/ucsc_sanger22.pm
-    version: '1.006924'
   Bio::DB::GFF::Aggregator::ucsc_sanger22pseudo:
     file: Bio/DB/GFF/Aggregator/ucsc_sanger22pseudo.pm
-    version: '1.006924'
   Bio::DB::GFF::Aggregator::ucsc_softberry:
     file: Bio/DB/GFF/Aggregator/ucsc_softberry.pm
-    version: '1.006924'
   Bio::DB::GFF::Aggregator::ucsc_twinscan:
     file: Bio/DB/GFF/Aggregator/ucsc_twinscan.pm
-    version: '1.006924'
   Bio::DB::GFF::Aggregator::ucsc_unigene:
     file: Bio/DB/GFF/Aggregator/ucsc_unigene.pm
-    version: '1.006924'
   Bio::DB::GFF::Featname:
     file: Bio/DB/GFF/Featname.pm
-    version: '1.006924'
   Bio::DB::GFF::Feature:
     file: Bio/DB/GFF/Feature.pm
-    version: '1.006924'
   Bio::DB::GFF::FeatureIterator:
     file: Bio/DB/GFF.pm
-    version: '1.006924'
   Bio::DB::GFF::Homol:
     file: Bio/DB/GFF/Homol.pm
-    version: '1.006924'
   Bio::DB::GFF::ID_Iterator:
     file: Bio/DB/GFF.pm
-    version: '1.006924'
   Bio::DB::GFF::RelSegment:
     file: Bio/DB/GFF/RelSegment.pm
-    version: '1.006924'
   Bio::DB::GFF::Segment:
     file: Bio/DB/GFF/Segment.pm
-    version: '1.006924'
   Bio::DB::GFF::Typename:
     file: Bio/DB/GFF/Typename.pm
-    version: '1.006924'
   Bio::DB::GFF::Util::Binning:
     file: Bio/DB/GFF/Util/Binning.pm
-    version: '1.006924'
   Bio::DB::GFF::Util::Rearrange:
     file: Bio/DB/GFF/Util/Rearrange.pm
-    version: '1.006924'
   Bio::DB::GenBank:
     file: Bio/DB/GenBank.pm
-    version: '1.006924'
   Bio::DB::GenPept:
     file: Bio/DB/GenPept.pm
-    version: '1.006924'
   Bio::DB::GenericWebAgent:
     file: Bio/DB/GenericWebAgent.pm
-    version: '1.006924'
   Bio::DB::HIV:
     file: Bio/DB/HIV.pm
-    version: '1.006924'
   Bio::DB::HIV::HIVAnnotProcessor:
     file: Bio/DB/HIV/HIVAnnotProcessor.pm
-    version: '1.006924'
   Bio::DB::HIV::HIVQueryHelper:
     file: Bio/DB/HIV/HIVQueryHelper.pm
-    version: '1.006924'
   Bio::DB::InMemoryCache:
     file: Bio/DB/InMemoryCache.pm
-    version: '1.006924'
   Bio::DB::Indexed::Stream:
     file: Bio/DB/IndexedBase.pm
-    version: '1.006924'
   Bio::DB::IndexedBase:
     file: Bio/DB/IndexedBase.pm
-    version: '1.006924'
   Bio::DB::LocationI:
     file: Bio/DB/LocationI.pm
-    version: '1.006924'
   Bio::DB::MeSH:
     file: Bio/DB/MeSH.pm
-    version: '1.006924'
   Bio::DB::NCBIHelper:
     file: Bio/DB/NCBIHelper.pm
-    version: '1.006924'
   Bio::DB::Qual:
     file: Bio/DB/Qual.pm
-    version: '1.006924'
   Bio::DB::Query::GenBank:
     file: Bio/DB/Query/GenBank.pm
-    version: '1.006924'
   Bio::DB::Query::HIVQuery:
     file: Bio/DB/Query/HIVQuery.pm
-    version: '1.006924'
   Bio::DB::Query::WebQuery:
     file: Bio/DB/Query/WebQuery.pm
-    version: '1.006924'
   Bio::DB::QueryI:
     file: Bio/DB/QueryI.pm
-    version: '1.006924'
   Bio::DB::RandomAccessI:
     file: Bio/DB/RandomAccessI.pm
-    version: '1.006924'
   Bio::DB::RefSeq:
     file: Bio/DB/RefSeq.pm
-    version: '1.006924'
   Bio::DB::ReferenceI:
     file: Bio/DB/ReferenceI.pm
-    version: '1.006924'
   Bio::DB::Registry:
     file: Bio/DB/Registry.pm
-    version: '1.006924'
   Bio::DB::SeqFeature:
     file: Bio/DB/SeqFeature.pm
-    version: '1.006924'
   Bio::DB::SeqFeature::NormalizedFeature:
     file: Bio/DB/SeqFeature/NormalizedFeature.pm
-    version: '1.006924'
   Bio::DB::SeqFeature::NormalizedFeatureI:
     file: Bio/DB/SeqFeature/NormalizedFeatureI.pm
-    version: '1.006924'
   Bio::DB::SeqFeature::NormalizedTableFeatureI:
     file: Bio/DB/SeqFeature/NormalizedTableFeatureI.pm
-    version: '1.006924'
   Bio::DB::SeqFeature::Segment:
     file: Bio/DB/SeqFeature/Segment.pm
-    version: '1.006924'
   Bio::DB::SeqFeature::Store:
     file: Bio/DB/SeqFeature/Store.pm
-    version: '1.006924'
   Bio::DB::SeqFeature::Store::DBI::Iterator:
     file: Bio/DB/SeqFeature/Store/DBI/Iterator.pm
-    version: '1.006924'
   Bio::DB::SeqFeature::Store::DBI::Pg:
     file: Bio/DB/SeqFeature/Store/DBI/Pg.pm
-    version: '1.006924'
   Bio::DB::SeqFeature::Store::DBI::SQLite:
     file: Bio/DB/SeqFeature/Store/DBI/SQLite.pm
-    version: '1.006924'
   Bio::DB::SeqFeature::Store::DBI::mysql:
     file: Bio/DB/SeqFeature/Store/DBI/mysql.pm
-    version: '1.006924'
   Bio::DB::SeqFeature::Store::FeatureFileLoader:
     file: Bio/DB/SeqFeature/Store/FeatureFileLoader.pm
-    version: '1.006924'
   Bio::DB::SeqFeature::Store::FeatureIterator:
     file: Bio/DB/SeqFeature/Store.pm
-    version: '1.006924'
   Bio::DB::SeqFeature::Store::GFF2Loader:
     file: Bio/DB/SeqFeature/Store/GFF2Loader.pm
-    version: '1.006924'
   Bio::DB::SeqFeature::Store::GFF3Loader:
     file: Bio/DB/SeqFeature/Store/GFF3Loader.pm
-    version: '1.006924'
   Bio::DB::SeqFeature::Store::LoadHelper:
     file: Bio/DB/SeqFeature/Store/LoadHelper.pm
-    version: '1.006924'
+    version: '1.11'
   Bio::DB::SeqFeature::Store::Loader:
     file: Bio/DB/SeqFeature/Store/Loader.pm
-    version: '1.006924'
   Bio::DB::SeqFeature::Store::bdb:
     file: Bio/DB/SeqFeature/Store/bdb.pm
-    version: '1.006924'
   Bio::DB::SeqFeature::Store::berkeleydb:
     file: Bio/DB/SeqFeature/Store/berkeleydb.pm
-    version: '1.006924'
   Bio::DB::SeqFeature::Store::berkeleydb3:
     file: Bio/DB/SeqFeature/Store/berkeleydb3.pm
-    version: '1.006924'
   Bio::DB::SeqFeature::Store::berkeleydb::Iterator:
     file: Bio/DB/SeqFeature/Store/berkeleydb.pm
-    version: '1.006924'
   Bio::DB::SeqFeature::Store::memory:
     file: Bio/DB/SeqFeature/Store/memory.pm
-    version: '1.006924'
   Bio::DB::SeqFeature::Store::memory::Iterator:
     file: Bio/DB/SeqFeature/Store/memory.pm
-    version: '1.006924'
-  Bio::DB::SeqHound:
-    file: Bio/DB/SeqHound.pm
-    version: '1.006924'
   Bio::DB::SeqI:
     file: Bio/DB/SeqI.pm
-    version: '1.006924'
   Bio::DB::SeqVersion:
     file: Bio/DB/SeqVersion.pm
-    version: '1.006924'
   Bio::DB::SeqVersion::gi:
     file: Bio/DB/SeqVersion/gi.pm
-    version: '1.006924'
   Bio::DB::SwissProt:
     file: Bio/DB/SwissProt.pm
-    version: '1.006924'
   Bio::DB::TFBS:
     file: Bio/DB/TFBS.pm
-    version: '1.006924'
   Bio::DB::TFBS::transfac_pro:
     file: Bio/DB/TFBS/transfac_pro.pm
-    version: '1.006924'
   Bio::DB::Taxonomy:
     file: Bio/DB/Taxonomy.pm
-    version: '1.006924'
   Bio::DB::Taxonomy::entrez:
     file: Bio/DB/Taxonomy/entrez.pm
-    version: '1.006924'
   Bio::DB::Taxonomy::flatfile:
     file: Bio/DB/Taxonomy/flatfile.pm
-    version: '1.006924'
   Bio::DB::Taxonomy::greengenes:
     file: Bio/DB/Taxonomy/greengenes.pm
-    version: '1.006924'
   Bio::DB::Taxonomy::list:
     file: Bio/DB/Taxonomy/list.pm
-    version: '1.006924'
   Bio::DB::Taxonomy::silva:
     file: Bio/DB/Taxonomy/silva.pm
-    version: '1.006924'
+  Bio::DB::Taxonomy::sqlite:
+    file: Bio/DB/Taxonomy/sqlite.pm
   Bio::DB::Universal:
     file: Bio/DB/Universal.pm
-    version: '1.006924'
   Bio::DB::UpdateableSeqI:
     file: Bio/DB/UpdateableSeqI.pm
-    version: '1.006924'
   Bio::DB::WebDBSeqI:
     file: Bio/DB/WebDBSeqI.pm
-    version: '1.006924'
   Bio::DBLinkContainerI:
     file: Bio/DBLinkContainerI.pm
-    version: '1.006924'
   Bio::Das::FeatureTypeI:
     file: Bio/Das/FeatureTypeI.pm
-    version: '1.006924'
   Bio::Das::SegmentI:
     file: Bio/Das/SegmentI.pm
-    version: '1.006924'
   Bio::DasI:
     file: Bio/DasI.pm
-    version: '1.006924'
   Bio::DescribableI:
     file: Bio/DescribableI.pm
-    version: '1.006924'
   Bio::Draw::Pictogram:
     file: Bio/Draw/Pictogram.pm
-    version: '1.006924'
   Bio::Event::EventGeneratorI:
     file: Bio/Event/EventGeneratorI.pm
-    version: '1.006924'
   Bio::Event::EventHandlerI:
     file: Bio/Event/EventHandlerI.pm
-    version: '1.006924'
   Bio::Factory::AnalysisI:
     file: Bio/Factory/AnalysisI.pm
-    version: '1.006924'
   Bio::Factory::ApplicationFactoryI:
     file: Bio/Factory/ApplicationFactoryI.pm
-    version: '1.006924'
   Bio::Factory::DriverFactory:
     file: Bio/Factory/DriverFactory.pm
-    version: '1.006924'
   Bio::Factory::FTLocationFactory:
     file: Bio/Factory/FTLocationFactory.pm
-    version: '1.006924'
   Bio::Factory::LocationFactoryI:
     file: Bio/Factory/LocationFactoryI.pm
-    version: '1.006924'
   Bio::Factory::MapFactoryI:
     file: Bio/Factory/MapFactoryI.pm
-    version: '1.006924'
   Bio::Factory::ObjectBuilderI:
     file: Bio/Factory/ObjectBuilderI.pm
-    version: '1.006924'
   Bio::Factory::ObjectFactory:
     file: Bio/Factory/ObjectFactory.pm
-    version: '1.006924'
   Bio::Factory::ObjectFactoryI:
     file: Bio/Factory/ObjectFactoryI.pm
-    version: '1.006924'
   Bio::Factory::SeqAnalysisParserFactory:
     file: Bio/Factory/SeqAnalysisParserFactory.pm
-    version: '1.006924'
   Bio::Factory::SeqAnalysisParserFactoryI:
     file: Bio/Factory/SeqAnalysisParserFactoryI.pm
-    version: '1.006924'
   Bio::Factory::SequenceFactoryI:
     file: Bio/Factory/SequenceFactoryI.pm
-    version: '1.006924'
   Bio::Factory::SequenceProcessorI:
     file: Bio/Factory/SequenceProcessorI.pm
-    version: '1.006924'
   Bio::Factory::SequenceStreamI:
     file: Bio/Factory/SequenceStreamI.pm
-    version: '1.006924'
   Bio::Factory::TreeFactoryI:
     file: Bio/Factory/TreeFactoryI.pm
-    version: '1.006924'
   Bio::FeatureHolderI:
     file: Bio/FeatureHolderI.pm
-    version: '1.006924'
   Bio::HandlerBaseI:
     file: Bio/HandlerBaseI.pm
-    version: '1.006924'
   Bio::IdCollectionI:
     file: Bio/IdCollectionI.pm
-    version: '1.006924'
   Bio::IdentifiableI:
     file: Bio/IdentifiableI.pm
-    version: '1.006924'
   Bio::Index::Abstract:
     file: Bio/Index/Abstract.pm
-    version: '1.006924'
   Bio::Index::AbstractSeq:
     file: Bio/Index/AbstractSeq.pm
-    version: '1.006924'
   Bio::Index::Blast:
     file: Bio/Index/Blast.pm
-    version: '1.006924'
   Bio::Index::BlastTable:
     file: Bio/Index/BlastTable.pm
-    version: '1.006924'
   Bio::Index::EMBL:
     file: Bio/Index/EMBL.pm
-    version: '1.006924'
   Bio::Index::Fasta:
     file: Bio/Index/Fasta.pm
-    version: '1.006924'
   Bio::Index::Fastq:
     file: Bio/Index/Fastq.pm
-    version: '1.006924'
   Bio::Index::GenBank:
     file: Bio/Index/GenBank.pm
-    version: '1.006924'
   Bio::Index::Hmmer:
     file: Bio/Index/Hmmer.pm
-    version: '1.006924'
   Bio::Index::Qual:
     file: Bio/Index/Qual.pm
-    version: '1.006924'
   Bio::Index::Stockholm:
     file: Bio/Index/Stockholm.pm
-    version: '1.006924'
   Bio::Index::SwissPfam:
     file: Bio/Index/SwissPfam.pm
-    version: '1.006924'
   Bio::Index::Swissprot:
     file: Bio/Index/Swissprot.pm
-    version: '1.006924'
   Bio::LiveSeq::AARange:
     file: Bio/LiveSeq/AARange.pm
-    version: '1.006924'
   Bio::LiveSeq::Chain:
     file: Bio/LiveSeq/Chain.pm
-    version: '1.006924'
   Bio::LiveSeq::ChainI:
     file: Bio/LiveSeq/ChainI.pm
-    version: '1.006924'
   Bio::LiveSeq::DNA:
     file: Bio/LiveSeq/DNA.pm
-    version: '1.006924'
   Bio::LiveSeq::Exon:
     file: Bio/LiveSeq/Exon.pm
-    version: '1.006924'
   Bio::LiveSeq::Gene:
     file: Bio/LiveSeq/Gene.pm
-    version: '1.006924'
   Bio::LiveSeq::IO::BioPerl:
     file: Bio/LiveSeq/IO/BioPerl.pm
-    version: '1.006924'
   Bio::LiveSeq::IO::Loader:
     file: Bio/LiveSeq/IO/Loader.pm
-    version: '1.006924'
   Bio::LiveSeq::Intron:
     file: Bio/LiveSeq/Intron.pm
-    version: '1.006924'
   Bio::LiveSeq::Mutation:
     file: Bio/LiveSeq/Mutation.pm
-    version: '1.006924'
   Bio::LiveSeq::Mutator:
     file: Bio/LiveSeq/Mutator.pm
-    version: '1.006924'
   Bio::LiveSeq::Prim_Transcript:
     file: Bio/LiveSeq/Prim_Transcript.pm
-    version: '1.006924'
   Bio::LiveSeq::Range:
     file: Bio/LiveSeq/Range.pm
-    version: '1.006924'
   Bio::LiveSeq::Repeat_Region:
     file: Bio/LiveSeq/Repeat_Region.pm
-    version: '1.006924'
   Bio::LiveSeq::Repeat_Unit:
     file: Bio/LiveSeq/Repeat_Unit.pm
-    version: '1.006924'
   Bio::LiveSeq::SeqI:
     file: Bio/LiveSeq/SeqI.pm
-    version: '1.006924'
   Bio::LiveSeq::Transcript:
     file: Bio/LiveSeq/Transcript.pm
-    version: '1.006924'
   Bio::LiveSeq::Translation:
     file: Bio/LiveSeq/Translation.pm
-    version: '1.006924'
   Bio::LocatableSeq:
     file: Bio/Search/Tiling/MapTileUtils.pm
-    version: '1.006924'
   Bio::Location::Atomic:
     file: Bio/Location/Atomic.pm
-    version: '1.006924'
   Bio::Location::AvWithinCoordPolicy:
     file: Bio/Location/AvWithinCoordPolicy.pm
-    version: '1.006924'
   Bio::Location::CoordinatePolicyI:
     file: Bio/Location/CoordinatePolicyI.pm
-    version: '1.006924'
   Bio::Location::Fuzzy:
     file: Bio/Location/Fuzzy.pm
-    version: '1.006924'
   Bio::Location::FuzzyLocationI:
     file: Bio/Location/FuzzyLocationI.pm
-    version: '1.006924'
   Bio::Location::NarrowestCoordPolicy:
     file: Bio/Location/NarrowestCoordPolicy.pm
-    version: '1.006924'
   Bio::Location::Simple:
     file: Bio/Location/Simple.pm
-    version: '1.006924'
   Bio::Location::Split:
     file: Bio/Location/Split.pm
-    version: '1.006924'
   Bio::Location::SplitLocationI:
     file: Bio/Location/SplitLocationI.pm
-    version: '1.006924'
   Bio::Location::WidestCoordPolicy:
     file: Bio/Location/WidestCoordPolicy.pm
-    version: '1.006924'
   Bio::LocationI:
     file: Bio/LocationI.pm
-    version: '1.006924'
   Bio::Map::Clone:
     file: Bio/Map/Clone.pm
-    version: '1.006924'
   Bio::Map::Contig:
     file: Bio/Map/Contig.pm
-    version: '1.006924'
   Bio::Map::CytoMap:
     file: Bio/Map/CytoMap.pm
-    version: '1.006924'
   Bio::Map::CytoMarker:
     file: Bio/Map/CytoMarker.pm
-    version: '1.006924'
   Bio::Map::CytoPosition:
     file: Bio/Map/CytoPosition.pm
-    version: '1.006924'
   Bio::Map::EntityI:
     file: Bio/Map/EntityI.pm
-    version: '1.006924'
   Bio::Map::FPCMarker:
     file: Bio/Map/FPCMarker.pm
-    version: '1.006924'
   Bio::Map::Gene:
     file: Bio/Map/Gene.pm
-    version: '1.006924'
   Bio::Map::GeneMap:
     file: Bio/Map/GeneMap.pm
-    version: '1.006924'
   Bio::Map::GenePosition:
     file: Bio/Map/GenePosition.pm
-    version: '1.006924'
   Bio::Map::GeneRelative:
     file: Bio/Map/GeneRelative.pm
-    version: '1.006924'
   Bio::Map::LinkageMap:
     file: Bio/Map/LinkageMap.pm
-    version: '1.006924'
   Bio::Map::LinkagePosition:
     file: Bio/Map/LinkagePosition.pm
-    version: '1.006924'
   Bio::Map::MapI:
     file: Bio/Map/MapI.pm
-    version: '1.006924'
   Bio::Map::Mappable:
     file: Bio/Map/Mappable.pm
-    version: '1.006924'
   Bio::Map::MappableI:
     file: Bio/Map/MappableI.pm
-    version: '1.006924'
   Bio::Map::Marker:
     file: Bio/Map/Marker.pm
-    version: '1.006924'
   Bio::Map::MarkerI:
     file: Bio/Map/MarkerI.pm
-    version: '1.006924'
   Bio::Map::Microsatellite:
     file: Bio/Map/Microsatellite.pm
-    version: '1.006924'
   Bio::Map::OrderedPosition:
     file: Bio/Map/OrderedPosition.pm
-    version: '1.006924'
   Bio::Map::OrderedPositionWithDistance:
     file: Bio/Map/OrderedPositionWithDistance.pm
-    version: '1.006924'
   Bio::Map::Physical:
     file: Bio/Map/Physical.pm
-    version: '1.006924'
   Bio::Map::Position:
     file: Bio/Map/Position.pm
-    version: '1.006924'
   Bio::Map::PositionHandler:
     file: Bio/Map/PositionHandler.pm
-    version: '1.006924'
   Bio::Map::PositionHandlerI:
     file: Bio/Map/PositionHandlerI.pm
-    version: '1.006924'
   Bio::Map::PositionI:
     file: Bio/Map/PositionI.pm
-    version: '1.006924'
   Bio::Map::PositionWithSequence:
     file: Bio/Map/PositionWithSequence.pm
-    version: '1.006924'
   Bio::Map::Prediction:
     file: Bio/Map/Prediction.pm
-    version: '1.006924'
   Bio::Map::Relative:
     file: Bio/Map/Relative.pm
-    version: '1.006924'
   Bio::Map::RelativeI:
     file: Bio/Map/RelativeI.pm
-    version: '1.006924'
   Bio::Map::SimpleMap:
     file: Bio/Map/SimpleMap.pm
-    version: '1.006924'
   Bio::Map::TranscriptionFactor:
     file: Bio/Map/TranscriptionFactor.pm
-    version: '1.006924'
   Bio::MapIO:
     file: Bio/MapIO.pm
-    version: '1.006924'
   Bio::MapIO::fpc:
     file: Bio/MapIO/fpc.pm
-    version: '1.006924'
   Bio::MapIO::mapmaker:
     file: Bio/MapIO/mapmaker.pm
-    version: '1.006924'
   Bio::Matrix::Generic:
     file: Bio/Matrix/Generic.pm
-    version: '1.006924'
   Bio::Matrix::IO:
     file: Bio/Matrix/IO.pm
-    version: '1.006924'
   Bio::Matrix::IO::mlagan:
     file: Bio/Matrix/IO/mlagan.pm
-    version: '1.006924'
   Bio::Matrix::IO::phylip:
     file: Bio/Matrix/IO/phylip.pm
-    version: '1.006924'
   Bio::Matrix::IO::scoring:
     file: Bio/Matrix/IO/scoring.pm
-    version: '1.006924'
   Bio::Matrix::MatrixI:
     file: Bio/Matrix/MatrixI.pm
-    version: '1.006924'
   Bio::Matrix::Mlagan:
     file: Bio/Matrix/Mlagan.pm
-    version: '1.006924'
   Bio::Matrix::PSM::IO:
     file: Bio/Matrix/PSM/IO.pm
-    version: '1.006924'
   Bio::Matrix::PSM::IO::mast:
     file: Bio/Matrix/PSM/IO/mast.pm
-    version: '1.006924'
   Bio::Matrix::PSM::IO::masta:
     file: Bio/Matrix/PSM/IO/masta.pm
-    version: '1.006924'
   Bio::Matrix::PSM::IO::meme:
     file: Bio/Matrix/PSM/IO/meme.pm
-    version: '1.006924'
   Bio::Matrix::PSM::IO::psiblast:
     file: Bio/Matrix/PSM/IO/psiblast.pm
-    version: '1.006924'
   Bio::Matrix::PSM::IO::transfac:
     file: Bio/Matrix/PSM/IO/transfac.pm
-    version: '1.006924'
   Bio::Matrix::PSM::InstanceSite:
     file: Bio/Matrix/PSM/InstanceSite.pm
-    version: '1.006924'
   Bio::Matrix::PSM::InstanceSiteI:
     file: Bio/Matrix/PSM/InstanceSiteI.pm
-    version: '1.006924'
   Bio::Matrix::PSM::ProtMatrix:
     file: Bio/Matrix/PSM/ProtMatrix.pm
-    version: '1.006924'
   Bio::Matrix::PSM::ProtPsm:
     file: Bio/Matrix/PSM/ProtPsm.pm
-    version: '1.006924'
   Bio::Matrix::PSM::Psm:
     file: Bio/Matrix/PSM/Psm.pm
-    version: '1.006924'
   Bio::Matrix::PSM::PsmHeader:
     file: Bio/Matrix/PSM/PsmHeader.pm
-    version: '1.006924'
   Bio::Matrix::PSM::PsmHeaderI:
     file: Bio/Matrix/PSM/PsmHeaderI.pm
-    version: '1.006924'
   Bio::Matrix::PSM::PsmI:
     file: Bio/Matrix/PSM/PsmI.pm
-    version: '1.006924'
   Bio::Matrix::PSM::SiteMatrix:
     file: Bio/Matrix/PSM/SiteMatrix.pm
-    version: '1.006924'
   Bio::Matrix::PSM::SiteMatrixI:
     file: Bio/Matrix/PSM/SiteMatrixI.pm
-    version: '1.006924'
   Bio::Matrix::PhylipDist:
     file: Bio/Matrix/PhylipDist.pm
-    version: '1.006924'
   Bio::Matrix::Scoring:
     file: Bio/Matrix/Scoring.pm
-    version: '1.006924'
   Bio::MolEvol::CodonModel:
     file: Bio/MolEvol/CodonModel.pm
-    version: '1.006924'
   Bio::Nexml::Factory:
     file: Bio/Nexml/Factory.pm
-    version: '1.006924'
   Bio::NexmlIO:
     file: Bio/NexmlIO.pm
-    version: '1.006924'
   Bio::Ontology::DocumentRegistry:
     file: Bio/Ontology/DocumentRegistry.pm
-    version: '1.006924'
   Bio::Ontology::GOterm:
     file: Bio/Ontology/GOterm.pm
-    version: '1.006924'
   Bio::Ontology::InterProTerm:
     file: Bio/Ontology/InterProTerm.pm
-    version: '1.006924'
   Bio::Ontology::OBOEngine:
     file: Bio/Ontology/OBOEngine.pm
-    version: '1.006924'
   Bio::Ontology::OBOterm:
     file: Bio/Ontology/OBOterm.pm
-    version: '1.006924'
   Bio::Ontology::Ontology:
     file: Bio/Ontology/Ontology.pm
-    version: '1.006924'
   Bio::Ontology::OntologyEngineI:
     file: Bio/Ontology/OntologyEngineI.pm
-    version: '1.006924'
   Bio::Ontology::OntologyI:
     file: Bio/Ontology/OntologyI.pm
-    version: '1.006924'
   Bio::Ontology::OntologyStore:
     file: Bio/Ontology/OntologyStore.pm
-    version: '1.006924'
   Bio::Ontology::Path:
     file: Bio/Ontology/Path.pm
-    version: '1.006924'
   Bio::Ontology::PathI:
     file: Bio/Ontology/PathI.pm
-    version: '1.006924'
   Bio::Ontology::Relationship:
     file: Bio/Ontology/Relationship.pm
-    version: '1.006924'
   Bio::Ontology::RelationshipFactory:
     file: Bio/Ontology/RelationshipFactory.pm
-    version: '1.006924'
   Bio::Ontology::RelationshipI:
     file: Bio/Ontology/RelationshipI.pm
-    version: '1.006924'
   Bio::Ontology::RelationshipType:
     file: Bio/Ontology/RelationshipType.pm
-    version: '1.006924'
   Bio::Ontology::SimpleGOEngine::GraphAdaptor:
     file: Bio/Ontology/SimpleGOEngine/GraphAdaptor.pm
-    version: '1.006924'
   Bio::Ontology::SimpleOntologyEngine:
     file: Bio/Ontology/SimpleOntologyEngine.pm
-    version: '1.006924'
   Bio::Ontology::Term:
     file: Bio/Ontology/Term.pm
-    version: '1.006924'
   Bio::Ontology::TermFactory:
     file: Bio/Ontology/TermFactory.pm
-    version: '1.006924'
   Bio::Ontology::TermI:
     file: Bio/Ontology/TermI.pm
-    version: '1.006924'
   Bio::OntologyIO:
     file: Bio/OntologyIO.pm
-    version: '1.006924'
   Bio::OntologyIO::Handlers::BaseSAXHandler:
     file: Bio/OntologyIO/Handlers/BaseSAXHandler.pm
-    version: '1.006924'
   Bio::OntologyIO::Handlers::InterProHandler:
     file: Bio/OntologyIO/Handlers/InterProHandler.pm
-    version: '1.006924'
   Bio::OntologyIO::Handlers::InterPro_BioSQL_Handler:
     file: Bio/OntologyIO/Handlers/InterPro_BioSQL_Handler.pm
-    version: '1.006924'
   Bio::OntologyIO::InterProParser:
     file: Bio/OntologyIO/InterProParser.pm
-    version: '1.006924'
   Bio::OntologyIO::dagflat:
     file: Bio/OntologyIO/dagflat.pm
-    version: '1.006924'
   Bio::OntologyIO::goflat:
     file: Bio/OntologyIO/goflat.pm
-    version: '1.006924'
   Bio::OntologyIO::obo:
     file: Bio/OntologyIO/obo.pm
-    version: '1.006924'
   Bio::OntologyIO::simplehierarchy:
     file: Bio/OntologyIO/simplehierarchy.pm
-    version: '1.006924'
   Bio::OntologyIO::soflat:
     file: Bio/OntologyIO/soflat.pm
-    version: '1.006924'
   Bio::ParameterBaseI:
     file: Bio/ParameterBaseI.pm
-    version: '1.006924'
   Bio::Perl:
     file: Bio/Perl.pm
-    version: '1.006924'
   Bio::Phenotype::Correlate:
     file: Bio/Phenotype/Correlate.pm
-    version: '1.006924'
   Bio::Phenotype::MeSH::Term:
     file: Bio/Phenotype/MeSH/Term.pm
-    version: '1.006924'
   Bio::Phenotype::MeSH::Twig:
     file: Bio/Phenotype/MeSH/Twig.pm
-    version: '1.006924'
   Bio::Phenotype::Measure:
     file: Bio/Phenotype/Measure.pm
-    version: '1.006924'
   Bio::Phenotype::OMIM::MiniMIMentry:
     file: Bio/Phenotype/OMIM/MiniMIMentry.pm
-    version: '1.006924'
   Bio::Phenotype::OMIM::OMIMentry:
     file: Bio/Phenotype/OMIM/OMIMentry.pm
-    version: '1.006924'
   Bio::Phenotype::OMIM::OMIMentryAllelicVariant:
     file: Bio/Phenotype/OMIM/OMIMentryAllelicVariant.pm
-    version: '1.006924'
   Bio::Phenotype::OMIM::OMIMparser:
     file: Bio/Phenotype/OMIM/OMIMparser.pm
-    version: '1.006924'
   Bio::Phenotype::Phenotype:
     file: Bio/Phenotype/Phenotype.pm
-    version: '1.006924'
   Bio::Phenotype::PhenotypeI:
     file: Bio/Phenotype/PhenotypeI.pm
-    version: '1.006924'
   Bio::PhyloNetwork:
     file: Bio/PhyloNetwork.pm
-    version: '1.006924'
   Bio::PhyloNetwork::Factory:
     file: Bio/PhyloNetwork/Factory.pm
-    version: '1.006924'
   Bio::PhyloNetwork::FactoryX:
     file: Bio/PhyloNetwork/FactoryX.pm
-    version: '1.006924'
   Bio::PhyloNetwork::GraphViz:
     file: Bio/PhyloNetwork/GraphViz.pm
-    version: '1.006924'
   Bio::PhyloNetwork::RandomFactory:
     file: Bio/PhyloNetwork/RandomFactory.pm
-    version: '1.006924'
   Bio::PhyloNetwork::TreeFactory:
     file: Bio/PhyloNetwork/TreeFactory.pm
-    version: '1.006924'
   Bio::PhyloNetwork::TreeFactoryMulti:
     file: Bio/PhyloNetwork/TreeFactoryMulti.pm
-    version: '1.006924'
   Bio::PhyloNetwork::TreeFactoryX:
     file: Bio/PhyloNetwork/TreeFactoryX.pm
-    version: '1.006924'
   Bio::PhyloNetwork::muVector:
     file: Bio/PhyloNetwork/muVector.pm
-    version: '1.006924'
   Bio::PopGen::Genotype:
     file: Bio/PopGen/Genotype.pm
-    version: '1.006924'
   Bio::PopGen::GenotypeI:
     file: Bio/PopGen/GenotypeI.pm
-    version: '1.006924'
   Bio::PopGen::HtSNP:
     file: Bio/PopGen/HtSNP.pm
-    version: '1.006924'
   Bio::PopGen::IO:
     file: Bio/PopGen/IO.pm
-    version: '1.006924'
   Bio::PopGen::IO::csv:
     file: Bio/PopGen/IO/csv.pm
-    version: '1.006924'
   Bio::PopGen::IO::hapmap:
     file: Bio/PopGen/IO/hapmap.pm
-    version: '1.006924'
   Bio::PopGen::IO::phase:
     file: Bio/PopGen/IO/phase.pm
-    version: '1.006924'
   Bio::PopGen::IO::prettybase:
     file: Bio/PopGen/IO/prettybase.pm
-    version: '1.006924'
   Bio::PopGen::Individual:
     file: Bio/PopGen/Individual.pm
-    version: '1.006924'
   Bio::PopGen::IndividualI:
     file: Bio/PopGen/IndividualI.pm
-    version: '1.006924'
   Bio::PopGen::Marker:
     file: Bio/PopGen/Marker.pm
-    version: '1.006924'
   Bio::PopGen::MarkerI:
     file: Bio/PopGen/MarkerI.pm
-    version: '1.006924'
   Bio::PopGen::PopStats:
     file: Bio/PopGen/PopStats.pm
-    version: '1.006924'
   Bio::PopGen::Population:
     file: Bio/PopGen/Population.pm
-    version: '1.006924'
   Bio::PopGen::PopulationI:
     file: Bio/PopGen/PopulationI.pm
-    version: '1.006924'
   Bio::PopGen::Simulation::Coalescent:
     file: Bio/PopGen/Simulation/Coalescent.pm
-    version: '1.006924'
   Bio::PopGen::Simulation::GeneticDrift:
     file: Bio/PopGen/Simulation/GeneticDrift.pm
-    version: '1.006924'
   Bio::PopGen::Statistics:
     file: Bio/PopGen/Statistics.pm
-    version: '1.006924'
   Bio::PopGen::TagHaplotype:
     file: Bio/PopGen/TagHaplotype.pm
-    version: '1.006924'
   Bio::PopGen::Utilities:
     file: Bio/PopGen/Utilities.pm
-    version: '1.006924'
   Bio::PrimarySeq:
     file: Bio/PrimarySeq.pm
-    version: '1.006924'
   Bio::PrimarySeq::Fasta:
     file: Bio/DB/Fasta.pm
-    version: '1.006924'
   Bio::PrimarySeqI:
     file: Bio/PrimarySeqI.pm
-    version: '1.006924'
   Bio::PullParserI:
     file: Bio/PullParserI.pm
-    version: '1.006924'
   Bio::Range:
     file: Bio/Range.pm
-    version: '1.006924'
   Bio::RangeI:
     file: Bio/RangeI.pm
-    version: '1.006924'
   Bio::Restriction::Analysis:
     file: Bio/Restriction/Analysis.pm
-    version: '1.006924'
   Bio::Restriction::Enzyme:
     file: Bio/Restriction/Enzyme.pm
-    version: '1.006924'
   Bio::Restriction::Enzyme::MultiCut:
     file: Bio/Restriction/Enzyme/MultiCut.pm
-    version: '1.006924'
   Bio::Restriction::Enzyme::MultiSite:
     file: Bio/Restriction/Enzyme/MultiSite.pm
-    version: '1.006924'
   Bio::Restriction::EnzymeCollection:
     file: Bio/Restriction/EnzymeCollection.pm
-    version: '1.006924'
   Bio::Restriction::EnzymeI:
     file: Bio/Restriction/EnzymeI.pm
-    version: '1.006924'
   Bio::Restriction::IO:
     file: Bio/Restriction/IO.pm
-    version: '1.006924'
   Bio::Restriction::IO::bairoch:
     file: Bio/Restriction/IO/bairoch.pm
-    version: '1.006924'
   Bio::Restriction::IO::base:
     file: Bio/Restriction/IO/base.pm
-    version: '1.006924'
   Bio::Restriction::IO::itype2:
     file: Bio/Restriction/IO/itype2.pm
-    version: '1.006924'
   Bio::Restriction::IO::prototype:
     file: Bio/Restriction/IO/prototype.pm
-    version: '1.006924'
   Bio::Restriction::IO::withrefm:
     file: Bio/Restriction/IO/withrefm.pm
-    version: '1.006924'
   Bio::Root::Build:
     file: Bio/Root/Build.pm
-    version: '1.006924'
+    version: 1.007000_003
   Bio::Root::Exception:
     file: Bio/Root/Exception.pm
-    version: '1.006924'
   Bio::Root::HTTPget:
     file: Bio/Root/HTTPget.pm
-    version: '1.006924'
   Bio::Root::IO:
     file: Bio/Root/IO.pm
-    version: '1.006924'
   Bio::Root::Root:
     file: Bio/Root/Root.pm
-    version: '1.006924'
   Bio::Root::RootI:
     file: Bio/Root/RootI.pm
-    version: '1.006924'
   Bio::Root::Storable:
     file: Bio/Root/Storable.pm
-    version: '1.006924'
   Bio::Root::Test:
     file: Bio/Root/Test.pm
-    version: '1.006924'
+  Bio::Root::TestObject:
+    file: Bio/Root/TestObject.pm
   Bio::Root::Utilities:
     file: Bio/Root/Utilities.pm
-    version: '1.006924'
   Bio::Root::Version:
     file: Bio/Root/Version.pm
-    version: '1.006924'
+    version: 1.007000_003
   Bio::Search::BlastStatistics:
     file: Bio/Search/BlastStatistics.pm
-    version: '1.006924'
   Bio::Search::BlastUtils:
     file: Bio/Search/BlastUtils.pm
-    version: '1.006924'
   Bio::Search::DatabaseI:
     file: Bio/Search/DatabaseI.pm
-    version: '1.006924'
   Bio::Search::GenericDatabase:
     file: Bio/Search/GenericDatabase.pm
-    version: '1.006924'
   Bio::Search::GenericStatistics:
     file: Bio/Search/GenericStatistics.pm
-    version: '1.006924'
   Bio::Search::HSP::BlastHSP:
     file: Bio/Search/HSP/BlastHSP.pm
-    version: '1.006924'
   Bio::Search::HSP::BlastPullHSP:
     file: Bio/Search/HSP/BlastPullHSP.pm
-    version: '1.006924'
   Bio::Search::HSP::FastaHSP:
     file: Bio/Search/HSP/FastaHSP.pm
-    version: '1.006924'
   Bio::Search::HSP::GenericHSP:
     file: Bio/Search/HSP/GenericHSP.pm
-    version: '1.006924'
   Bio::Search::HSP::HMMERHSP:
     file: Bio/Search/HSP/HMMERHSP.pm
-    version: '1.006924'
   Bio::Search::HSP::HSPFactory:
     file: Bio/Search/HSP/HSPFactory.pm
-    version: '1.006924'
   Bio::Search::HSP::HSPI:
-    file: Bio/Search/Tiling/MapTileUtils.pm
-    version: '1.006924'
+    file: Bio/Search/HSP/HSPI.pm
   Bio::Search::HSP::HmmpfamHSP:
     file: Bio/Search/HSP/HmmpfamHSP.pm
-    version: '1.006924'
   Bio::Search::HSP::ModelHSP:
     file: Bio/Search/HSP/ModelHSP.pm
-    version: '1.006924'
   Bio::Search::HSP::PSLHSP:
     file: Bio/Search/HSP/PSLHSP.pm
-    version: '1.006924'
   Bio::Search::HSP::PsiBlastHSP:
     file: Bio/Search/HSP/PsiBlastHSP.pm
-    version: '1.006924'
   Bio::Search::HSP::PullHSPI:
     file: Bio/Search/HSP/PullHSPI.pm
-    version: '1.006924'
   Bio::Search::HSP::WABAHSP:
     file: Bio/Search/HSP/WABAHSP.pm
-    version: '1.006924'
   Bio::Search::Hit::BlastHit:
     file: Bio/Search/Hit/BlastHit.pm
-    version: '1.006924'
   Bio::Search::Hit::BlastPullHit:
     file: Bio/Search/Hit/BlastPullHit.pm
-    version: '1.006924'
   Bio::Search::Hit::Fasta:
     file: Bio/Search/Hit/Fasta.pm
-    version: '1.006924'
   Bio::Search::Hit::GenericHit:
     file: Bio/Search/Hit/GenericHit.pm
-    version: '1.006924'
   Bio::Search::Hit::HMMERHit:
     file: Bio/Search/Hit/HMMERHit.pm
-    version: '1.006924'
   Bio::Search::Hit::HitFactory:
     file: Bio/Search/Hit/HitFactory.pm
-    version: '1.006924'
   Bio::Search::Hit::HitI:
     file: Bio/Search/Hit/HitI.pm
-    version: '1.006924'
   Bio::Search::Hit::HmmpfamHit:
     file: Bio/Search/Hit/HmmpfamHit.pm
-    version: '1.006924'
   Bio::Search::Hit::ModelHit:
     file: Bio/Search/Hit/ModelHit.pm
-    version: '1.006924'
   Bio::Search::Hit::PsiBlastHit:
     file: Bio/Search/Hit/PsiBlastHit.pm
-    version: '1.006924'
   Bio::Search::Hit::PullHitI:
     file: Bio/Search/Hit/PullHitI.pm
-    version: '1.006924'
   Bio::Search::Hit::hmmer3Hit:
     file: Bio/Search/Hit/hmmer3Hit.pm
-    version: '1.006924'
   Bio::Search::Iteration::GenericIteration:
     file: Bio/Search/Iteration/GenericIteration.pm
-    version: '1.006924'
   Bio::Search::Iteration::IterationI:
     file: Bio/Search/Iteration/IterationI.pm
-    version: '1.006924'
   Bio::Search::Processor:
     file: Bio/Search/Processor.pm
-    version: '1.006924'
   Bio::Search::Result::BlastPullResult:
     file: Bio/Search/Result/BlastPullResult.pm
-    version: '1.006924'
   Bio::Search::Result::BlastResult:
     file: Bio/Search/Result/BlastResult.pm
-    version: '1.006924'
   Bio::Search::Result::CrossMatchResult:
     file: Bio/Search/Result/CrossMatchResult.pm
-    version: '1.006924'
   Bio::Search::Result::GenericResult:
     file: Bio/Search/Result/GenericResult.pm
-    version: '1.006924'
   Bio::Search::Result::HMMERResult:
     file: Bio/Search/Result/HMMERResult.pm
-    version: '1.006924'
   Bio::Search::Result::HmmpfamResult:
     file: Bio/Search/Result/HmmpfamResult.pm
-    version: '1.006924'
+  Bio::Search::Result::INFERNALResult:
+    file: Bio/Search/Result/INFERNALResult.pm
   Bio::Search::Result::PullResultI:
     file: Bio/Search/Result/PullResultI.pm
-    version: '1.006924'
   Bio::Search::Result::ResultFactory:
     file: Bio/Search/Result/ResultFactory.pm
-    version: '1.006924'
   Bio::Search::Result::ResultI:
     file: Bio/Search/Result/ResultI.pm
-    version: '1.006924'
   Bio::Search::Result::WABAResult:
     file: Bio/Search/Result/WABAResult.pm
-    version: '1.006924'
   Bio::Search::Result::hmmer3Result:
     file: Bio/Search/Result/hmmer3Result.pm
-    version: '1.006924'
   Bio::Search::SearchUtils:
     file: Bio/Search/SearchUtils.pm
-    version: '1.006924'
   Bio::Search::StatisticsI:
     file: Bio/Search/StatisticsI.pm
-    version: '1.006924'
   Bio::Search::Tiling::MapTileUtils:
     file: Bio/Search/Tiling/MapTileUtils.pm
-    version: '1.006924'
   Bio::Search::Tiling::MapTiling:
     file: Bio/Search/Tiling/MapTiling.pm
-    version: '1.006924'
   Bio::Search::Tiling::TilingI:
     file: Bio/Search/Tiling/TilingI.pm
-    version: '1.006924'
   Bio::SearchDist:
     file: Bio/SearchDist.pm
-    version: '1.006924'
   Bio::SearchIO:
     file: Bio/SearchIO.pm
-    version: '1.006924'
   Bio::SearchIO::EventHandlerI:
     file: Bio/SearchIO/EventHandlerI.pm
-    version: '1.006924'
   Bio::SearchIO::FastHitEventBuilder:
     file: Bio/SearchIO/FastHitEventBuilder.pm
-    version: '1.006924'
   Bio::SearchIO::IteratedSearchResultEventBuilder:
     file: Bio/SearchIO/IteratedSearchResultEventBuilder.pm
-    version: '1.006924'
   Bio::SearchIO::SearchResultEventBuilder:
     file: Bio/SearchIO/SearchResultEventBuilder.pm
-    version: '1.006924'
   Bio::SearchIO::SearchWriterI:
     file: Bio/SearchIO/SearchWriterI.pm
-    version: '1.006924'
-  Bio::SearchIO::Writer::BSMLResultWriter:
-    file: Bio/SearchIO/Writer/BSMLResultWriter.pm
-    version: '1.006924'
   Bio::SearchIO::Writer::GbrowseGFF:
     file: Bio/SearchIO/Writer/GbrowseGFF.pm
-    version: '1.006924'
   Bio::SearchIO::Writer::HSPTableWriter:
     file: Bio/SearchIO/Writer/HSPTableWriter.pm
-    version: '1.006924'
   Bio::SearchIO::Writer::HTMLResultWriter:
     file: Bio/SearchIO/Writer/HTMLResultWriter.pm
-    version: '1.006924'
   Bio::SearchIO::Writer::HitTableWriter:
     file: Bio/SearchIO/Writer/HitTableWriter.pm
-    version: '1.006924'
   Bio::SearchIO::Writer::ResultTableWriter:
     file: Bio/SearchIO/Writer/ResultTableWriter.pm
-    version: '1.006924'
   Bio::SearchIO::Writer::TextResultWriter:
     file: Bio/SearchIO/Writer/TextResultWriter.pm
-    version: '1.006924'
-  Bio::SearchIO::XML::BlastHandler:
-    file: Bio/SearchIO/XML/BlastHandler.pm
-    version: '1.006924'
-  Bio::SearchIO::XML::PsiBlastHandler:
-    file: Bio/SearchIO/XML/PsiBlastHandler.pm
-    version: '1.006924'
   Bio::SearchIO::axt:
     file: Bio/SearchIO/axt.pm
-    version: '1.006924'
   Bio::SearchIO::blast:
     file: Bio/SearchIO/blast.pm
-    version: '1.006924'
   Bio::SearchIO::blast_pull:
     file: Bio/SearchIO/blast_pull.pm
-    version: '1.006924'
   Bio::SearchIO::blasttable:
     file: Bio/SearchIO/blasttable.pm
-    version: '1.006924'
-  Bio::SearchIO::blastxml:
-    file: Bio/SearchIO/blastxml.pm
-    version: '1.006924'
   Bio::SearchIO::cross_match:
     file: Bio/SearchIO/cross_match.pm
-    version: '1.006924'
   Bio::SearchIO::erpin:
     file: Bio/SearchIO/erpin.pm
-    version: '1.006924'
   Bio::SearchIO::exonerate:
     file: Bio/SearchIO/exonerate.pm
-    version: '1.006924'
   Bio::SearchIO::fasta:
     file: Bio/SearchIO/fasta.pm
-    version: '1.006924'
   Bio::SearchIO::gmap_f9:
     file: Bio/SearchIO/gmap_f9.pm
-    version: '1.006924'
   Bio::SearchIO::hmmer:
     file: Bio/SearchIO/hmmer.pm
-    version: '1.006924'
   Bio::SearchIO::hmmer2:
     file: Bio/SearchIO/hmmer2.pm
-    version: '1.006924'
   Bio::SearchIO::hmmer3:
     file: Bio/SearchIO/hmmer3.pm
-    version: '1.006924'
   Bio::SearchIO::hmmer_pull:
     file: Bio/SearchIO/hmmer_pull.pm
-    version: '1.006924'
   Bio::SearchIO::infernal:
     file: Bio/SearchIO/infernal.pm
-    version: '1.006924'
   Bio::SearchIO::megablast:
     file: Bio/SearchIO/megablast.pm
-    version: '1.006924'
   Bio::SearchIO::psl:
     file: Bio/SearchIO/psl.pm
-    version: '1.006924'
   Bio::SearchIO::rnamotif:
     file: Bio/SearchIO/rnamotif.pm
-    version: '1.006924'
   Bio::SearchIO::sim4:
     file: Bio/SearchIO/sim4.pm
-    version: '1.006924'
   Bio::SearchIO::waba:
     file: Bio/SearchIO/waba.pm
-    version: '1.006924'
   Bio::SearchIO::wise:
     file: Bio/SearchIO/wise.pm
-    version: '1.006924'
   Bio::Seq:
     file: Bio/Seq.pm
-    version: '1.006924'
   Bio::Seq::BaseSeqProcessor:
     file: Bio/Seq/BaseSeqProcessor.pm
-    version: '1.006924'
   Bio::Seq::EncodedSeq:
     file: Bio/Seq/EncodedSeq.pm
-    version: '1.006924'
   Bio::Seq::LargeLocatableSeq:
     file: Bio/Seq/LargeLocatableSeq.pm
-    version: '1.006924'
   Bio::Seq::LargePrimarySeq:
     file: Bio/Seq/LargePrimarySeq.pm
-    version: '1.006924'
   Bio::Seq::LargeSeq:
     file: Bio/Seq/LargeSeq.pm
-    version: '1.006924'
   Bio::Seq::LargeSeqI:
     file: Bio/Seq/LargeSeqI.pm
-    version: '1.006924'
   Bio::Seq::Meta:
     file: Bio/Seq/Meta.pm
-    version: '1.006924'
   Bio::Seq::Meta::Array:
     file: Bio/Seq/Meta/Array.pm
-    version: '1.006924'
   Bio::Seq::MetaI:
     file: Bio/Seq/MetaI.pm
-    version: '1.006924'
   Bio::Seq::PrimaryQual:
     file: Bio/Seq/PrimaryQual.pm
-    version: '1.006924'
   Bio::Seq::PrimaryQual::Qual:
     file: Bio/DB/Qual.pm
-    version: '1.006924'
   Bio::Seq::PrimedSeq:
     file: Bio/Seq/PrimedSeq.pm
-    version: '1.006924'
   Bio::Seq::QualI:
     file: Bio/Seq/QualI.pm
-    version: '1.006924'
   Bio::Seq::Quality:
     file: Bio/Seq/Quality.pm
-    version: '1.006924'
   Bio::Seq::RichSeq:
     file: Bio/Seq/RichSeq.pm
-    version: '1.006924'
   Bio::Seq::RichSeqI:
     file: Bio/Seq/RichSeqI.pm
-    version: '1.006924'
   Bio::Seq::SeqBuilder:
     file: Bio/Seq/SeqBuilder.pm
-    version: '1.006924'
   Bio::Seq::SeqFactory:
     file: Bio/Seq/SeqFactory.pm
-    version: '1.006924'
   Bio::Seq::SeqFastaSpeedFactory:
     file: Bio/Seq/SeqFastaSpeedFactory.pm
-    version: '1.006924'
   Bio::Seq::SeqWithQuality:
     file: Bio/Seq/SeqWithQuality.pm
-    version: '1.006924'
   Bio::Seq::SequenceTrace:
     file: Bio/Seq/SequenceTrace.pm
-    version: '1.006924'
   Bio::Seq::SimulatedRead:
     file: Bio/Seq/SimulatedRead.pm
-    version: '1.006924'
   Bio::Seq::TraceI:
     file: Bio/Seq/TraceI.pm
-    version: '1.006924'
   Bio::SeqAnalysisParserI:
     file: Bio/SeqAnalysisParserI.pm
-    version: '1.006924'
   Bio::SeqEvolution::DNAPoint:
     file: Bio/SeqEvolution/DNAPoint.pm
-    version: '1.006924'
   Bio::SeqEvolution::EvolutionI:
     file: Bio/SeqEvolution/EvolutionI.pm
-    version: '1.006924'
   Bio::SeqEvolution::Factory:
     file: Bio/SeqEvolution/Factory.pm
-    version: '1.006924'
   Bio::SeqFeature::Amplicon:
     file: Bio/SeqFeature/Amplicon.pm
-    version: '1.006924'
   Bio::SeqFeature::AnnotationAdaptor:
     file: Bio/SeqFeature/AnnotationAdaptor.pm
-    version: '1.006924'
   Bio::SeqFeature::Collection:
     file: Bio/SeqFeature/Collection.pm
-    version: '1.006924'
   Bio::SeqFeature::CollectionI:
     file: Bio/SeqFeature/CollectionI.pm
-    version: '1.006924'
   Bio::SeqFeature::Computation:
     file: Bio/SeqFeature/Computation.pm
-    version: '1.006924'
   Bio::SeqFeature::FeaturePair:
     file: Bio/SeqFeature/FeaturePair.pm
-    version: '1.006924'
   Bio::SeqFeature::Gene::Exon:
     file: Bio/SeqFeature/Gene/Exon.pm
-    version: '1.006924'
   Bio::SeqFeature::Gene::ExonI:
     file: Bio/SeqFeature/Gene/ExonI.pm
-    version: '1.006924'
   Bio::SeqFeature::Gene::GeneStructure:
     file: Bio/SeqFeature/Gene/GeneStructure.pm
-    version: '1.006924'
   Bio::SeqFeature::Gene::GeneStructureI:
     file: Bio/SeqFeature/Gene/GeneStructureI.pm
-    version: '1.006924'
   Bio::SeqFeature::Gene::Intron:
     file: Bio/SeqFeature/Gene/Intron.pm
-    version: '1.006924'
   Bio::SeqFeature::Gene::NC_Feature:
     file: Bio/SeqFeature/Gene/NC_Feature.pm
-    version: '1.006924'
   Bio::SeqFeature::Gene::Poly_A_site:
     file: Bio/SeqFeature/Gene/Poly_A_site.pm
-    version: '1.006924'
   Bio::SeqFeature::Gene::Promoter:
     file: Bio/SeqFeature/Gene/Promoter.pm
-    version: '1.006924'
   Bio::SeqFeature::Gene::Transcript:
     file: Bio/SeqFeature/Gene/Transcript.pm
-    version: '1.006924'
   Bio::SeqFeature::Gene::TranscriptI:
     file: Bio/SeqFeature/Gene/TranscriptI.pm
-    version: '1.006924'
   Bio::SeqFeature::Gene::UTR:
     file: Bio/SeqFeature/Gene/UTR.pm
-    version: '1.006924'
   Bio::SeqFeature::Generic:
     file: Bio/SeqFeature/Generic.pm
-    version: '1.006924'
   Bio::SeqFeature::Lite:
     file: Bio/SeqFeature/Lite.pm
-    version: '1.006924'
   Bio::SeqFeature::PositionProxy:
     file: Bio/SeqFeature/PositionProxy.pm
-    version: '1.006924'
   Bio::SeqFeature::Primer:
     file: Bio/SeqFeature/Primer.pm
-    version: '1.006924'
   Bio::SeqFeature::SiRNA::Oligo:
     file: Bio/SeqFeature/SiRNA/Oligo.pm
-    version: '1.006924'
   Bio::SeqFeature::SiRNA::Pair:
     file: Bio/SeqFeature/SiRNA/Pair.pm
-    version: '1.006924'
   Bio::SeqFeature::Similarity:
     file: Bio/SeqFeature/Similarity.pm
-    version: '1.006924'
   Bio::SeqFeature::SimilarityPair:
     file: Bio/SeqFeature/SimilarityPair.pm
-    version: '1.006924'
   Bio::SeqFeature::SubSeq:
     file: Bio/SeqFeature/SubSeq.pm
-    version: '1.006924'
   Bio::SeqFeature::Tools::FeatureNamer:
     file: Bio/SeqFeature/Tools/FeatureNamer.pm
-    version: '1.006924'
   Bio::SeqFeature::Tools::IDHandler:
     file: Bio/SeqFeature/Tools/IDHandler.pm
-    version: '1.006924'
   Bio::SeqFeature::Tools::TypeMapper:
     file: Bio/SeqFeature/Tools/TypeMapper.pm
-    version: '1.006924'
   Bio::SeqFeature::Tools::Unflattener:
     file: Bio/SeqFeature/Tools/Unflattener.pm
-    version: '1.006924'
   Bio::SeqFeature::TypedSeqFeatureI:
     file: Bio/SeqFeature/TypedSeqFeatureI.pm
-    version: '1.006924'
   Bio::SeqFeatureI:
     file: Bio/SeqFeatureI.pm
-    version: '1.006924'
   Bio::SeqI:
     file: Bio/SeqI.pm
-    version: '1.006924'
   Bio::SeqIO:
     file: Bio/SeqIO.pm
-    version: '1.006924'
   Bio::SeqIO::FTHelper:
     file: Bio/SeqIO/FTHelper.pm
-    version: '1.006924'
   Bio::SeqIO::Handler::GenericRichSeqHandler:
     file: Bio/SeqIO/Handler/GenericRichSeqHandler.pm
-    version: '1.006924'
   Bio::SeqIO::MultiFile:
     file: Bio/SeqIO/MultiFile.pm
-    version: '1.006924'
   Bio::SeqIO::abi:
     file: Bio/SeqIO/abi.pm
-    version: '1.006924'
   Bio::SeqIO::ace:
     file: Bio/SeqIO/ace.pm
-    version: '1.006924'
   Bio::SeqIO::agave:
     file: Bio/SeqIO/agave.pm
-    version: '1.006924'
   Bio::SeqIO::alf:
     file: Bio/SeqIO/alf.pm
-    version: '1.006924'
   Bio::SeqIO::asciitree:
     file: Bio/SeqIO/asciitree.pm
-    version: '1.006924'
   Bio::SeqIO::bsml:
     file: Bio/SeqIO/bsml.pm
-    version: '1.006924'
   Bio::SeqIO::bsml_sax:
     file: Bio/SeqIO/bsml_sax.pm
-    version: '1.006924'
   Bio::SeqIO::chadoxml:
     file: Bio/SeqIO/chadoxml.pm
-    version: '1.006924'
   Bio::SeqIO::chaos:
     file: Bio/SeqIO/chaos.pm
-    version: '1.006924'
   Bio::SeqIO::chaosxml:
     file: Bio/SeqIO/chaosxml.pm
-    version: '1.006924'
   Bio::SeqIO::ctf:
     file: Bio/SeqIO/ctf.pm
-    version: '1.006924'
   Bio::SeqIO::embl:
     file: Bio/SeqIO/embl.pm
-    version: '1.006924'
   Bio::SeqIO::embldriver:
     file: Bio/SeqIO/embldriver.pm
-    version: '1.006924'
   Bio::SeqIO::entrezgene:
     file: Bio/SeqIO/entrezgene.pm
-    version: '1.006924'
   Bio::SeqIO::excel:
     file: Bio/SeqIO/excel.pm
-    version: '1.006924'
   Bio::SeqIO::exp:
     file: Bio/SeqIO/exp.pm
-    version: '1.006924'
   Bio::SeqIO::fasta:
     file: Bio/SeqIO/fasta.pm
-    version: '1.006924'
   Bio::SeqIO::fastq:
     file: Bio/SeqIO/fastq.pm
-    version: '1.006924'
   Bio::SeqIO::flybase_chadoxml:
     file: Bio/SeqIO/flybase_chadoxml.pm
-    version: '1.006924'
   Bio::SeqIO::game:
     file: Bio/SeqIO/game.pm
-    version: '1.006924'
   Bio::SeqIO::game::featHandler:
     file: Bio/SeqIO/game/featHandler.pm
-    version: '1.006924'
   Bio::SeqIO::game::gameHandler:
     file: Bio/SeqIO/game/gameHandler.pm
-    version: '1.006924'
   Bio::SeqIO::game::gameSubs:
     file: Bio/SeqIO/game/gameSubs.pm
-    version: '1.006924'
   Bio::SeqIO::game::gameWriter:
     file: Bio/SeqIO/game/gameWriter.pm
-    version: '1.006924'
   Bio::SeqIO::game::seqHandler:
     file: Bio/SeqIO/game/seqHandler.pm
-    version: '1.006924'
   Bio::SeqIO::gbdriver:
     file: Bio/SeqIO/gbdriver.pm
-    version: '1.006924'
   Bio::SeqIO::gbxml:
     file: Bio/SeqIO/gbxml.pm
-    version: '1.006924'
   Bio::SeqIO::gcg:
     file: Bio/SeqIO/gcg.pm
-    version: '1.006924'
   Bio::SeqIO::genbank:
     file: Bio/SeqIO/genbank.pm
-    version: '1.006924'
   Bio::SeqIO::interpro:
     file: Bio/SeqIO/interpro.pm
-    version: '1.006924'
   Bio::SeqIO::kegg:
     file: Bio/SeqIO/kegg.pm
-    version: '1.006924'
   Bio::SeqIO::largefasta:
     file: Bio/SeqIO/largefasta.pm
-    version: '1.006924'
   Bio::SeqIO::lasergene:
     file: Bio/SeqIO/lasergene.pm
-    version: '1.006924'
   Bio::SeqIO::locuslink:
     file: Bio/SeqIO/locuslink.pm
-    version: '1.006924'
   Bio::SeqIO::mbsout:
     file: Bio/SeqIO/mbsout.pm
-    version: '1.006924'
   Bio::SeqIO::metafasta:
     file: Bio/SeqIO/metafasta.pm
-    version: '1.006924'
   Bio::SeqIO::msout:
     file: Bio/SeqIO/msout.pm
-    version: '1.006924'
   Bio::SeqIO::nexml:
     file: Bio/SeqIO/nexml.pm
-    version: '1.006924'
   Bio::SeqIO::phd:
     file: Bio/SeqIO/phd.pm
-    version: '1.006924'
   Bio::SeqIO::pir:
     file: Bio/SeqIO/pir.pm
-    version: '1.006924'
   Bio::SeqIO::pln:
     file: Bio/SeqIO/pln.pm
-    version: '1.006924'
   Bio::SeqIO::qual:
     file: Bio/SeqIO/qual.pm
-    version: '1.006924'
   Bio::SeqIO::raw:
     file: Bio/SeqIO/raw.pm
-    version: '1.006924'
   Bio::SeqIO::scf:
     file: Bio/SeqIO/scf.pm
-    version: '1.006924'
   Bio::SeqIO::seqxml:
     file: Bio/SeqIO/seqxml.pm
-    version: '1.006924'
   Bio::SeqIO::strider:
     file: Bio/SeqIO/strider.pm
-    version: '1.006924'
   Bio::SeqIO::swiss:
     file: Bio/SeqIO/swiss.pm
-    version: '1.006924'
   Bio::SeqIO::swissdriver:
     file: Bio/SeqIO/swissdriver.pm
-    version: '1.006924'
   Bio::SeqIO::tab:
     file: Bio/SeqIO/tab.pm
-    version: '1.006924'
   Bio::SeqIO::table:
     file: Bio/SeqIO/table.pm
-    version: '1.006924'
   Bio::SeqIO::tigr:
     file: Bio/SeqIO/tigr.pm
-    version: '1.006924'
   Bio::SeqIO::tigrxml:
     file: Bio/SeqIO/tigrxml.pm
-    version: '1.006924'
   Bio::SeqIO::tinyseq:
     file: Bio/SeqIO/tinyseq.pm
-    version: '1.006924'
   Bio::SeqIO::tinyseq::tinyseqHandler:
     file: Bio/SeqIO/tinyseq/tinyseqHandler.pm
-    version: '1.006924'
   Bio::SeqIO::ztr:
     file: Bio/SeqIO/ztr.pm
-    version: '1.006924'
   Bio::SeqUtils:
     file: Bio/SeqUtils.pm
-    version: '1.006924'
   Bio::SimpleAlign:
     file: Bio/SimpleAlign.pm
-    version: '1.006924'
   Bio::SimpleAnalysisI:
     file: Bio/SimpleAnalysisI.pm
-    version: '1.006924'
   Bio::Species:
     file: Bio/Species.pm
-    version: '1.006924'
   Bio::Structure::Atom:
     file: Bio/Structure/Atom.pm
-    version: '1.006924'
   Bio::Structure::Chain:
     file: Bio/Structure/Chain.pm
-    version: '1.006924'
   Bio::Structure::Entry:
     file: Bio/Structure/Entry.pm
-    version: '1.006924'
   Bio::Structure::IO:
     file: Bio/Structure/IO.pm
-    version: '1.006924'
   Bio::Structure::IO::pdb:
     file: Bio/Structure/IO/pdb.pm
-    version: '1.006924'
   Bio::Structure::Model:
     file: Bio/Structure/Model.pm
-    version: '1.006924'
   Bio::Structure::Residue:
     file: Bio/Structure/Residue.pm
-    version: '1.006924'
   Bio::Structure::SecStr::DSSP::Res:
     file: Bio/Structure/SecStr/DSSP/Res.pm
-    version: '1.006924'
   Bio::Structure::SecStr::STRIDE::Res:
     file: Bio/Structure/SecStr/STRIDE/Res.pm
-    version: '1.006924'
   Bio::Structure::StructureI:
     file: Bio/Structure/StructureI.pm
-    version: '1.006924'
   Bio::Symbol::Alphabet:
     file: Bio/Symbol/Alphabet.pm
-    version: '1.006924'
   Bio::Symbol::AlphabetI:
     file: Bio/Symbol/AlphabetI.pm
-    version: '1.006924'
   Bio::Symbol::DNAAlphabet:
     file: Bio/Symbol/DNAAlphabet.pm
-    version: '1.006924'
   Bio::Symbol::ProteinAlphabet:
     file: Bio/Symbol/ProteinAlphabet.pm
-    version: '1.006924'
   Bio::Symbol::Symbol:
     file: Bio/Symbol/Symbol.pm
-    version: '1.006924'
   Bio::Symbol::SymbolI:
     file: Bio/Symbol/SymbolI.pm
-    version: '1.006924'
   Bio::Taxon:
     file: Bio/Taxon.pm
-    version: '1.006924'
   Bio::Taxonomy:
     file: Bio/Taxonomy.pm
-    version: '1.006924'
   Bio::Taxonomy::FactoryI:
     file: Bio/Taxonomy/FactoryI.pm
-    version: '1.006924'
   Bio::Taxonomy::Node:
     file: Bio/Taxonomy/Node.pm
-    version: '1.006924'
   Bio::Taxonomy::Taxon:
     file: Bio/Taxonomy/Taxon.pm
-    version: '1.006924'
   Bio::Taxonomy::Tree:
     file: Bio/Taxonomy/Tree.pm
-    version: '1.006924'
   Bio::Tools::AlignFactory:
     file: Bio/Tools/AlignFactory.pm
-    version: '1.006924'
   Bio::Tools::Alignment::Consed:
     file: Bio/Tools/Alignment/Consed.pm
-    version: '1.006924'
   Bio::Tools::Alignment::Trim:
     file: Bio/Tools/Alignment/Trim.pm
-    version: '1.006924'
   Bio::Tools::AmpliconSearch:
     file: Bio/Tools/AmpliconSearch.pm
-    version: '1.006924'
   Bio::Tools::Analysis::DNA::ESEfinder:
     file: Bio/Tools/Analysis/DNA/ESEfinder.pm
-    version: '1.006924'
   Bio::Tools::Analysis::Protein::Domcut:
     file: Bio/Tools/Analysis/Protein/Domcut.pm
-    version: '1.006924'
   Bio::Tools::Analysis::Protein::ELM:
     file: Bio/Tools/Analysis/Protein/ELM.pm
-    version: '1.006924'
   Bio::Tools::Analysis::Protein::GOR4:
     file: Bio/Tools/Analysis/Protein/GOR4.pm
-    version: '1.006924'
   Bio::Tools::Analysis::Protein::HNN:
     file: Bio/Tools/Analysis/Protein/HNN.pm
-    version: '1.006924'
   Bio::Tools::Analysis::Protein::Mitoprot:
     file: Bio/Tools/Analysis/Protein/Mitoprot.pm
-    version: '1.006924'
   Bio::Tools::Analysis::Protein::NetPhos:
     file: Bio/Tools/Analysis/Protein/NetPhos.pm
-    version: '1.006924'
   Bio::Tools::Analysis::Protein::Scansite:
     file: Bio/Tools/Analysis/Protein/Scansite.pm
-    version: '1.006924'
   Bio::Tools::Analysis::Protein::Sopma:
     file: Bio/Tools/Analysis/Protein/Sopma.pm
-    version: '1.006924'
   Bio::Tools::Analysis::SimpleAnalysisBase:
     file: Bio/Tools/Analysis/SimpleAnalysisBase.pm
-    version: '1.006924'
   Bio::Tools::AnalysisResult:
     file: Bio/Tools/AnalysisResult.pm
-    version: '1.006924'
   Bio::Tools::Blat:
     file: Bio/Tools/Blat.pm
-    version: '1.006924'
   Bio::Tools::CodonTable:
     file: Bio/Tools/CodonTable.pm
-    version: '1.006924'
   Bio::Tools::Coil:
     file: Bio/Tools/Coil.pm
-    version: '1.006924'
   Bio::Tools::ECnumber:
     file: Bio/Tools/ECnumber.pm
-    version: '1.006924'
   Bio::Tools::EMBOSS::Palindrome:
     file: Bio/Tools/EMBOSS/Palindrome.pm
-    version: '1.006924'
   Bio::Tools::EPCR:
     file: Bio/Tools/EPCR.pm
-    version: '1.006924'
   Bio::Tools::ERPIN:
     file: Bio/Tools/ERPIN.pm
-    version: '1.006924'
   Bio::Tools::ESTScan:
     file: Bio/Tools/ESTScan.pm
-    version: '1.006924'
   Bio::Tools::Eponine:
     file: Bio/Tools/Eponine.pm
-    version: '1.006924'
   Bio::Tools::Est2Genome:
     file: Bio/Tools/Est2Genome.pm
-    version: '1.006924'
   Bio::Tools::Fgenesh:
     file: Bio/Tools/Fgenesh.pm
-    version: '1.006924'
   Bio::Tools::FootPrinter:
     file: Bio/Tools/FootPrinter.pm
-    version: '1.006924'
   Bio::Tools::GFF:
     file: Bio/Tools/GFF.pm
-    version: '1.006924'
   Bio::Tools::Gel:
     file: Bio/Tools/Gel.pm
-    version: '1.006924'
   Bio::Tools::Geneid:
     file: Bio/Tools/Geneid.pm
-    version: '1.006924'
   Bio::Tools::Genemark:
     file: Bio/Tools/Genemark.pm
-    version: '1.006924'
   Bio::Tools::Genewise:
     file: Bio/Tools/Genewise.pm
-    version: '1.006924'
   Bio::Tools::Genomewise:
     file: Bio/Tools/Genomewise.pm
-    version: '1.006924'
   Bio::Tools::Genscan:
     file: Bio/Tools/Genscan.pm
-    version: '1.006924'
   Bio::Tools::Glimmer:
     file: Bio/Tools/Glimmer.pm
-    version: '1.006924'
   Bio::Tools::Grail:
     file: Bio/Tools/Grail.pm
-    version: '1.006924'
   Bio::Tools::GuessSeqFormat:
     file: Bio/Tools/GuessSeqFormat.pm
-    version: '1.006924'
   Bio::Tools::HMMER::Domain:
     file: Bio/Tools/HMMER/Domain.pm
-    version: '1.006924'
   Bio::Tools::HMMER::Results:
     file: Bio/Tools/HMMER/Results.pm
-    version: '1.006924'
   Bio::Tools::HMMER::Set:
     file: Bio/Tools/HMMER/Set.pm
-    version: '1.006924'
   Bio::Tools::Hmmpfam:
     file: Bio/Tools/Hmmpfam.pm
-    version: '1.006924'
   Bio::Tools::IUPAC:
     file: Bio/Tools/IUPAC.pm
-    version: '1.006924'
   Bio::Tools::Infernal:
     file: Bio/Tools/Infernal.pm
-    version: '1.006924'
   Bio::Tools::Lucy:
     file: Bio/Tools/Lucy.pm
-    version: '1.006924'
   Bio::Tools::MZEF:
     file: Bio/Tools/MZEF.pm
-    version: '1.006924'
   Bio::Tools::Match:
     file: Bio/Tools/Match.pm
-    version: '1.006924'
   Bio::Tools::OddCodes:
     file: Bio/Tools/OddCodes.pm
-    version: '1.006924'
   Bio::Tools::Phylo::Gerp:
     file: Bio/Tools/Phylo/Gerp.pm
-    version: '1.006924'
   Bio::Tools::Phylo::Gumby:
     file: Bio/Tools/Phylo/Gumby.pm
-    version: '1.006924'
   Bio::Tools::Phylo::Molphy:
     file: Bio/Tools/Phylo/Molphy.pm
-    version: '1.006924'
   Bio::Tools::Phylo::Molphy::Result:
     file: Bio/Tools/Phylo/Molphy/Result.pm
-    version: '1.006924'
   Bio::Tools::Phylo::PAML:
     file: Bio/Tools/Phylo/PAML.pm
-    version: '1.006924'
   Bio::Tools::Phylo::PAML::Codeml:
     file: Bio/Tools/Phylo/PAML/Codeml.pm
-    version: '1.006924'
   Bio::Tools::Phylo::PAML::ModelResult:
     file: Bio/Tools/Phylo/PAML/ModelResult.pm
-    version: '1.006924'
   Bio::Tools::Phylo::PAML::Result:
     file: Bio/Tools/Phylo/PAML/Result.pm
-    version: '1.006924'
   Bio::Tools::Phylo::Phylip::ProtDist:
     file: Bio/Tools/Phylo/Phylip/ProtDist.pm
-    version: '1.006924'
   Bio::Tools::Prediction::Exon:
     file: Bio/Tools/Prediction/Exon.pm
-    version: '1.006924'
   Bio::Tools::Prediction::Gene:
     file: Bio/Tools/Prediction/Gene.pm
-    version: '1.006924'
   Bio::Tools::Primer3:
     file: Bio/Tools/Primer3.pm
-    version: '1.006924'
   Bio::Tools::Primer::Assessor::Base:
     file: Bio/Tools/Primer/Assessor/Base.pm
-    version: '1.006924'
   Bio::Tools::Primer::AssessorI:
     file: Bio/Tools/Primer/AssessorI.pm
-    version: '1.006924'
   Bio::Tools::Primer::Feature:
     file: Bio/Tools/Primer/Feature.pm
-    version: '1.006924'
   Bio::Tools::Primer::Pair:
     file: Bio/Tools/Primer/Pair.pm
-    version: '1.006924'
   Bio::Tools::Prints:
     file: Bio/Tools/Prints.pm
-    version: '1.006924'
   Bio::Tools::Profile:
     file: Bio/Tools/Profile.pm
-    version: '1.006924'
   Bio::Tools::Promoterwise:
     file: Bio/Tools/Promoterwise.pm
-    version: '1.006924'
   Bio::Tools::PrositeScan:
     file: Bio/Tools/PrositeScan.pm
-    version: '1.006924'
   Bio::Tools::Protparam:
     file: Bio/Tools/Protparam.pm
-    version: '1.006924'
   Bio::Tools::Pseudowise:
     file: Bio/Tools/Pseudowise.pm
-    version: '1.006924'
   Bio::Tools::QRNA:
     file: Bio/Tools/QRNA.pm
-    version: '1.006924'
   Bio::Tools::RNAMotif:
     file: Bio/Tools/RNAMotif.pm
-    version: '1.006924'
   Bio::Tools::RandomDistFunctions:
     file: Bio/Tools/RandomDistFunctions.pm
-    version: '1.006924'
   Bio::Tools::RepeatMasker:
     file: Bio/Tools/RepeatMasker.pm
-    version: '1.006924'
   Bio::Tools::Run::GenericParameters:
     file: Bio/Tools/Run/GenericParameters.pm
-    version: '1.006924'
   Bio::Tools::Run::ParametersI:
     file: Bio/Tools/Run/ParametersI.pm
-    version: '1.006924'
   Bio::Tools::Run::RemoteBlast:
     file: Bio/Tools/Run/RemoteBlast.pm
-    version: '1.006924'
-  Bio::Tools::Run::StandAloneBlast:
-    file: Bio/Tools/Run/StandAloneBlast.pm
-    version: '1.006924'
-  Bio::Tools::Run::StandAloneNCBIBlast:
-    file: Bio/Tools/Run/StandAloneNCBIBlast.pm
-    version: '1.006924'
-  Bio::Tools::Run::StandAloneWUBlast:
-    file: Bio/Tools/Run/StandAloneWUBlast.pm
-    version: '1.006924'
-  Bio::Tools::Run::WrapperBase:
-    file: Bio/Tools/Run/WrapperBase.pm
-    version: '1.006924'
   Bio::Tools::Seg:
     file: Bio/Tools/Seg.pm
-    version: '1.006924'
   Bio::Tools::SeqPattern:
     file: Bio/Tools/SeqPattern.pm
-    version: '1.006924'
   Bio::Tools::SeqPattern::Backtranslate:
     file: Bio/Tools/SeqPattern/Backtranslate.pm
-    version: '1.006924'
   Bio::Tools::SeqStats:
     file: Bio/Tools/SeqStats.pm
-    version: '1.006924'
   Bio::Tools::SeqWords:
     file: Bio/Tools/SeqWords.pm
-    version: '1.006924'
   Bio::Tools::SiRNA:
     file: Bio/Tools/SiRNA.pm
-    version: '1.006924'
   Bio::Tools::SiRNA::Ruleset::saigo:
     file: Bio/Tools/SiRNA/Ruleset/saigo.pm
-    version: '1.006924'
   Bio::Tools::SiRNA::Ruleset::tuschl:
     file: Bio/Tools/SiRNA/Ruleset/tuschl.pm
-    version: '1.006924'
   Bio::Tools::Sigcleave:
     file: Bio/Tools/Sigcleave.pm
-    version: '1.006924'
   Bio::Tools::Signalp:
     file: Bio/Tools/Signalp.pm
-    version: '1.006924'
   Bio::Tools::Signalp::ExtendedSignalp:
     file: Bio/Tools/Signalp/ExtendedSignalp.pm
-    version: '1.006924'
   Bio::Tools::Sim4::Exon:
     file: Bio/Tools/Sim4/Exon.pm
-    version: '1.006924'
   Bio::Tools::Sim4::Results:
     file: Bio/Tools/Sim4/Results.pm
-    version: '1.006924'
   Bio::Tools::Spidey::Exon:
     file: Bio/Tools/Spidey/Exon.pm
-    version: '1.006924'
   Bio::Tools::Spidey::Results:
     file: Bio/Tools/Spidey/Results.pm
-    version: '1.006924'
   Bio::Tools::TandemRepeatsFinder:
     file: Bio/Tools/TandemRepeatsFinder.pm
-    version: '1.006924'
   Bio::Tools::TargetP:
     file: Bio/Tools/TargetP.pm
-    version: '1.006924'
   Bio::Tools::Tmhmm:
     file: Bio/Tools/Tmhmm.pm
-    version: '1.006924'
   Bio::Tools::dpAlign:
     file: Bio/Tools/dpAlign.pm
-    version: '1.006924'
   Bio::Tools::ipcress:
     file: Bio/Tools/ipcress.pm
-    version: '1.006924'
   Bio::Tools::isPcr:
     file: Bio/Tools/isPcr.pm
-    version: '1.006924'
   Bio::Tools::pICalculator:
     file: Bio/Tools/pICalculator.pm
-    version: '1.006924'
   Bio::Tools::pSW:
     file: Bio/Tools/pSW.pm
-    version: '1.006924'
   Bio::Tools::tRNAscanSE:
     file: Bio/Tools/tRNAscanSE.pm
-    version: '1.006924'
   Bio::Tree::AlleleNode:
     file: Bio/Tree/AlleleNode.pm
-    version: '1.006924'
   Bio::Tree::AnnotatableNode:
     file: Bio/Tree/AnnotatableNode.pm
-    version: '1.006924'
   Bio::Tree::Compatible:
     file: Bio/Tree/Compatible.pm
-    version: '1.006924'
   Bio::Tree::DistanceFactory:
     file: Bio/Tree/DistanceFactory.pm
-    version: '1.006924'
   Bio::Tree::Draw::Cladogram:
     file: Bio/Tree/Draw/Cladogram.pm
-    version: '1.006924'
   Bio::Tree::Node:
     file: Bio/Tree/Node.pm
-    version: '1.006924'
   Bio::Tree::NodeI:
     file: Bio/Tree/NodeI.pm
-    version: '1.006924'
   Bio::Tree::NodeNHX:
     file: Bio/Tree/NodeNHX.pm
-    version: '1.006924'
   Bio::Tree::RandomFactory:
     file: Bio/Tree/RandomFactory.pm
-    version: '1.006924'
   Bio::Tree::Statistics:
     file: Bio/Tree/Statistics.pm
-    version: '1.006924'
   Bio::Tree::Tree:
     file: Bio/Tree/Tree.pm
-    version: '1.006924'
   Bio::Tree::TreeFunctionsI:
     file: Bio/Tree/TreeFunctionsI.pm
-    version: '1.006924'
   Bio::Tree::TreeI:
     file: Bio/Tree/TreeI.pm
-    version: '1.006924'
   Bio::TreeIO:
     file: Bio/TreeIO.pm
-    version: '1.006924'
   Bio::TreeIO::NewickParser:
     file: Bio/TreeIO/NewickParser.pm
-    version: '1.006924'
   Bio::TreeIO::TreeEventBuilder:
     file: Bio/TreeIO/TreeEventBuilder.pm
-    version: '1.006924'
   Bio::TreeIO::cluster:
     file: Bio/TreeIO/cluster.pm
-    version: '1.006924'
   Bio::TreeIO::lintree:
     file: Bio/TreeIO/lintree.pm
-    version: '1.006924'
   Bio::TreeIO::newick:
     file: Bio/TreeIO/newick.pm
-    version: '1.006924'
   Bio::TreeIO::nexml:
     file: Bio/TreeIO/nexml.pm
-    version: '1.006924'
   Bio::TreeIO::nexus:
     file: Bio/TreeIO/nexus.pm
-    version: '1.006924'
   Bio::TreeIO::nhx:
     file: Bio/TreeIO/nhx.pm
-    version: '1.006924'
   Bio::TreeIO::pag:
     file: Bio/TreeIO/pag.pm
-    version: '1.006924'
   Bio::TreeIO::phyloxml:
     file: Bio/TreeIO/phyloxml.pm
-    version: '1.006924'
   Bio::TreeIO::svggraph:
     file: Bio/TreeIO/svggraph.pm
-    version: '1.006924'
   Bio::TreeIO::tabtree:
     file: Bio/TreeIO/tabtree.pm
-    version: '1.006924'
   Bio::UpdateableSeqI:
     file: Bio/UpdateableSeqI.pm
-    version: '1.006924'
   Bio::Variation::AAChange:
     file: Bio/Variation/AAChange.pm
-    version: '1.006924'
   Bio::Variation::AAReverseMutate:
     file: Bio/Variation/AAReverseMutate.pm
-    version: '1.006924'
   Bio::Variation::Allele:
     file: Bio/Variation/Allele.pm
-    version: '1.006924'
   Bio::Variation::DNAMutation:
     file: Bio/Variation/DNAMutation.pm
-    version: '1.006924'
   Bio::Variation::IO:
     file: Bio/Variation/IO.pm
-    version: '1.006924'
   Bio::Variation::IO::flat:
     file: Bio/Variation/IO/flat.pm
-    version: '1.006924'
   Bio::Variation::IO::xml:
     file: Bio/Variation/IO/xml.pm
-    version: '1.006924'
   Bio::Variation::RNAChange:
     file: Bio/Variation/RNAChange.pm
-    version: '1.006924'
   Bio::Variation::SNP:
     file: Bio/Variation/SNP.pm
-    version: '1.006924'
   Bio::Variation::SeqDiff:
     file: Bio/Variation/SeqDiff.pm
-    version: '1.006924'
   Bio::Variation::VariantI:
     file: Bio/Variation/VariantI.pm
-    version: '1.006924'
   Bio::WebAgent:
     file: Bio/WebAgent.pm
-    version: '1.006924'
   FeatureStore:
     file: Bio/DB/GFF/Adaptor/berkeleydb.pm
-    version: '1.006924'
 recommends:
   Algorithm::Munkres: '0'
   Array::Compare: '0'
   Bio::Phylo: '0'
+  CGI: '0'
   Clone: '0'
   Convert::Binary::C: '0'
   DB_File: '0'
@@ -2512,6 +1652,7 @@ recommends:
   HTML::TableExtract: '0'
   HTTP::Request::Common: '0'
   IO::Scalar: '0'
+  Inline::C: '0.67'
   LWP::UserAgent: '0'
   List::MoreUtils: '0'
   PostScript::TextBlock: '0'
@@ -2542,4 +1683,4 @@ requires:
   perl: v5.6.1
 resources:
   license: http://dev.perl.org/licenses/
-version: '1.006924'
+version: 1.007000_003
diff --git a/README b/README
deleted file mode 100644
index 9d06d31..0000000
--- a/README
+++ /dev/null
@@ -1,258 +0,0 @@
-This is the README file for the BioPerl central distribution.
-
-o Getting Started
-
- Please see the the INSTALL or INSTALL.WIN documents for installation
- instructions.
-
-o About BioPerl
-
- BioPerl is a package of public domain Perl tools for computational
- molecular biology.
-
- Our website, http://bioperl.org/, provides an online resource of
- modules, scripts, and web links for developers of Perl-based software
- for life science research.
-
-o Contact info
-
- BioPerl mailing list: bioperl-l at bioperl.org
-
- There's quite a variety of tools available in BioPerl, and more are
- added all the time. If the tool you're looking for isn't described in
- the documentation please write us, it could be undocumented or in
- process.
-
- Project website : http://bioperl.org/
-
- Bug reports : https://github.com/bioperl/bioperl-live/issues
-
-     Please send us bugs, in particular about documentation which you
-     think is unclear or problems in installation. We are also very
-     interested in functions which don't work the way you think they
-     do!
-
-o The directory structure
-
- The BioPerl directory structure is organized as follows:
-
-   - Bio/ - BioPerl modules
-
-   - doc/ - Documentation utilities
-
-   - examples/ - Scripts demonstrating the many uses of BioPerl
-
-   - ide/ - files for developing BioPerl using an IDE
-
-   - maintenance/ - BioPerl housekeeping scripts
-
-   - models/ - DIA drawing program generated OO UML for BioPerl classes
-               (these are quite out-of-date)
-
-   - scripts/ - Useful production-quality scripts with POD documentation
-
-   - t/ - Perl built-in tests, tests are divided into subdirectories 
-          based on the specific classes being tested
-
-   - t/data/ - Data files used for the tests, provides good example data
-
-o Documentation
-
- For documentation on BioPerl see the HOWTO documents and tutorials 
- online at http://bioperl.org.
-
- Useful documentation in the form of example code can also be found in
- the examples/ and scripts/ directories. The current collection
- includes scripts that run BLAST, index flat files, parse PDB
- structure files, make primers, retrieve ESTs based on tissue, align
- protein to nucleotide sequence, run GENSCAN on multiple sequences,
- and much more! See bioscripts.pod for a complete listing.
-
- Individual *.pm modules have their own embedded POD documentation as
- well. A complete set of hyperlinked POD, or module, documentation is
- available at http://www.bioperl.org/.
-
- Remember that 'perldoc' is your friend. You can use it to read any
- file containing POD formatted documentation without needing any type
- of translator (e.g. 'perldoc Bio::SeqIO').
- 
- If you used the Build.PL installation, and depending on your
- platform, you may have documentation installed as man pages, which
- can be accessed in the usual way.
-
-o Releases
-  
- BioPerl releases are always available from the website at
- http://www.bioperl.org/DIST or in CPAN. The latest code can be found
- at https://github.com/bioperl.
-
- BioPerl formerly used a numbering scheme to indicate stable release
- series vs. development release series. A release number is a three
- digit number like 1.2.0. The first digit indicates the major release
- - the idea being that all the API calls in a major release are
- reasonably consistent. The second number is the release series. This
- is probably the most important number.
- 
- From the 1.0 release until the 1.6 release, even numbers (1.0, 1.2
- etc) indicated stable releases. Stable releases were well tested and
- recommended for most uses. Odd numbers (1.1, 1.3 etc) were development
- releases which one would only use if one were interested in the
- latest and greatest features. The final number (e.g. 1.2.0, 1.2.1) is
- the bug fix release. The higher the number the more bug fixes has
- been incorporated. In theory you can upgrade from one bug fix release
- to the next with no changes to your own code (for production cases,
- obviously check things out carefully before you switch over).
- 
- The 1.6 release will be the last release series to utilize the
- alternating 'stable'/'developer' convention. Starting immediately
- after the 1.6 branch, we will start splitting BioPerl into several
- smaller easier-to-manage distributions, including a developer
- distribution for cutting-edge (in development) code, untested
- modules, and alternative implementations.
-
-o Caveats and warnings
-
- When you run the tests ("./Build test") some tests may issue warnings
- messages or even fail. Sometimes this is because we didn't have
- anyone to test the test system on the combination of your operating
- system, version of perl, and associated libraries and other modules.
- Because BioPerl depends on several outside libraries we may not be
- able to test every single combination so if there are warnings you
- may find that the package is still perfectly useful.
- 
- If you install the bioperl-run system and run tests when you don't
- have the program installed you'll get messages like 'program XXX not
- found, skipping tests'. That's okay, BioPerl is doing what it is
- supposed to do. If you wanted to run the program you'd need to
- install it first.
- 
- Not all scripts in the examples/ directory are correct and up-to-date.
- We need volunteers to help maintain these so if you find they do not
- submit a bug report to https://github.com/bioperl/bioperl-live/issues
- and consider helping out in their maintenance.
-
- If you are confused about what modules are appropriate when you try
- and solve a particular issue in bioinformatics we urge you to look at
- HOWTO documents first.
-
-o A simple module summary
-
- Here is a quick summary of many of the useful modules and how the
- toolkit is laid out:
-
- All modules are in the Bio/ namespace,
-
- - Perl is for newbies and gives a functional interface to the main
-   parts of the package
-
- - Seq is for Sequences (protein and DNA).
-   o Bio::PrimarySeq is a plain sequence (sequence data + identifiers)
-   o Bio::Seq is a PrimarySeq plus it has a Bio::Annotation::Collection
-     and Bio::SeqFeatureI objects attached
-     (via Bio::FeatureHolderI).
-   o Bio::Seq::RichSeq is all of the above plus it has slots for
-     extra information specific to GenBank/EMBL/SwissProt files.
-   o Bio::Seq::LargeSeq is for sequences which are too big for
-     fitting into memory.
-
- - SeqIO is for reading and writing Sequences, it is a front end
-   module for separate driver modules supporting the different
-   sequence formats
-
- - SeqFeature - start/stop/strand annotations of sequences
-   o Bio::SeqFeature::Generic is basic catchall
-   o Bio::SeqFeature::Similarity a similarity sequence feature
-   o Bio::SeqFeature::FeaturePair a sequence feature which is pairwise
-     such as query/hit pairs
-
- - SearchIO is for reading and writing pairwise alignment reports like
-   BLAST or FASTA
-
- - Search is where the alignment objects are defined
-   o Bio::Search::Result::GenericResult is the result object (a blast
-     query is a Result object)
-   o Bio::Search::Hit::GenericHit is the Hit object (a query will have
-     0 -> many hits in a database)
-   o Bio::Search::HSP::GenericHSP is the High-scoring Segment Pair
-     object defining the alignment(s) of the query and hit.
-
- - SimpleAlign is for multiple sequence alignments
-
- - AlignIO is for reading and writing multiple sequence alignment
-   formats
-
- - Assembly provides the start of an infrastructure for assemblies and
-   Assembly::IO IO converters for them
-
- - DB is the namespace for all the database query objects
-   o Bio::DB::GenBank/GenPept are two modules which query NCBI entrez
-     for sequences
-   o Bio::DB::SwissProt/EMBL query various EMBL and SwissProt
-     repositories for a sequences
-   o Bio::DB::GFF is Lincoln Stein's fast, lightweight feature and
-     sequence database which is the backend to his GBrowse system (see
-     www.gmod.org)
-   o Bio::DB::Flat is a fast implementation of the OBDA flat-file
-     indexing system (cross-language and cross-platform supported by
-     O|B|F projects see http://obda.open-bio.org).
-   o Bio::DB::BioFetch/DBFetch for OBDA, Web (HTTP) access to remote
-     databases.
-   o Bio::DB::InMemoryCache/FileCache (fast local caching of sequences
-     from remote dbs to speed up your access).
-   o Bio::DB::Registry interface to the OBDA specification for remote
-     data sources
-   o Bio::DB::Biblio for access to remote bibliographic databases.
-   o Bio::DB::EUtilities is the initial set of modules used for
-     generic queried using NCBI's eUtils.
-
- - Annotation collection of annotation objects (comments, DBlinks,
-   References, and misc key/value pairs)
-
- - Coordinate is a system for mapping between different coordinate
-   systems such as DNA to protein or between assemblies
-
- - Index is for locally indexed flatfiles with BerkeleyDB
-
- - Tools contains many miscellaneous parsers and function for
-   different bioinformatics needs
-   o Gene prediction parser (Genscan, MZEF, Grail, Genemark)
-   o Annotation format (GFF)
-   o Enumerate codon tables and valid sequences symbols (CodonTable,
-     IUPAC)
-   o Phylogenetic program parsing (PAML, Molphy, Phylip)
-
- - Map genetic and physical map representations
-
- - Structure - parse and represent protein structure data
-
- - TreeIO is for reading and writing Tree formats
-
- - Tree is the namespace for all the associated Tree objects
-   o Bio::Tree::Tree is the basic tree object
-   o Bio::Tree::Node are the nodes which make up the tree
-   o Bio::Tree::Statistics is for computing statistics for a tree
-   o Bio::Tree::TreeFunctionsI is where specific tree functions are
-     implemented (like is_monophyletic and lca)
-
- - Bio::Biblio is where bibliographic data and database access objects
-   are kept
-
- - Variation represent sequences with mutations and variations applied
-   so one can compare and represent wild-type and mutation versions of
-   a sequence.
-
- - Root, basic objects for the internals of BioPerl
-
-o Upgrading from an older version
- 
- If you have a previously installed version of BioPerl on your system
- some of these notes may help you.
-
- Some modules have been removed because they have been superceded by
- new development efforts. They are documented in the DEPRECATED file
- that is included in the release. In addition some methods, or the
- Application Programming Interface (API), have changed or been
- removed. You may find that scripts which worked with BioPerl 1.4 may
- give you warnings or may not work at all (although we have tried very
- hard to minimize this!). Send an email to the list and we'll be happy
- to give you pointers.
diff --git a/README.md b/README.md
index a423cac..89ff0b7 100644
--- a/README.md
+++ b/README.md
@@ -1,6 +1,11 @@
+[![Build Status](https://travis-ci.org/bioperl/bioperl-live.svg?branch=master)](https://travis-ci.org/bioperl/bioperl-live)
+[![Coverage Status](https://coveralls.io/repos/bioperl/bioperl-live/badge.png?branch=master)](https://coveralls.io/r/bioperl/bioperl-live?branch=master)
+[![DOI](https://zenodo.org/badge/doi/10.5281/zenodo.16344.svg)](http://dx.doi.org/10.5281/zenodo.16344)
+[![Documentation Status](https://readthedocs.org/projects/bioperl/badge/?version=latest)](https://readthedocs.org/projects/bioperl/?badge=latest)
+
 # Getting Started
 
-Please see the the `INSTALL` or `INSTALL.WIN` documents for installation
+Please see the the [INSTALL](http://bioperl.org/INSTALL.html) or [INSTALL.WIN](http://bioperl.org/INSTALL.WIN.html) documents for installation
 instructions.
 
 # About BioPerl
@@ -12,33 +17,28 @@ Our website (http://bioperl.org/) provides an online resource of modules,
 scripts, and web links for developers of Perl-based software for life science
 research.
 
-# Contact info
-
-BioPerl mailing list: bioperl-l at bioperl.org
+# Contact Information
 
-There's quite a variety of tools available in BioPerl, and more are added all
-the time. If the tool you're looking for isn't described in the documentation
-please write us, it could be undocumented or in process.
+* BioPerl mailing list: bioperl-l at bioperl.org
 
 * Project website : http://bioperl.org/
 
 * Bug reports : https://github.com/bioperl/bioperl-live/issues
 
-Please send us bugs, in particular about documentation which you think is
-unclear or problems in installation. We are also very interested in functions
-which don't work the way you think they do!
+Please submit bugs, in particular about documentation which you think is
+unclear, or about problems in installation. We are also very interested in functions which don't work the way you think they do!
 
-# The directory structure
+# The Directory Structure
 
 The BioPerl directory structure is organized as follows:
 
 * **`Bio/`** - BioPerl modules
 
-* **`doc/`** - Documentation utilities
+* **`deobfuscator/`** - Code for tracing OOP relationships
 
 * **`examples/`** - Scripts demonstrating the many uses of BioPerl
 
-* **`ide/`** - files for developing BioPerl using an IDE
+* **`ide/`** - Files for developing BioPerl using an IDE
 
 * **`maintenance/`** - BioPerl housekeeping scripts
 
@@ -52,10 +52,11 @@ The BioPerl directory structure is organized as follows:
 
 * **`t/data/`** - Data files used for the tests, provides good example data
 
+* **`travis_scripts/`** - script to customize Travis
+
 # Documentation
 
-For documentation on BioPerl see the **HOWTO** documents and tutorials online at
-http://bioperl.org.
+For documentation on BioPerl see the **HOWTO** documents online at http://bioperl.org/howtos.
 
 Useful documentation in the form of example code can also be found in the
 **`examples/`** and **`scripts/`** directories. The current collection includes
@@ -78,9 +79,7 @@ way.
 
 # Releases
 
-BioPerl releases are always available from the website at
-http://www.bioperl.org/DIST or in CPAN. The latest code can be found at
-https://github.com/bioperl.
+BioPerl releases are always available from the website at http://www.bioperl.org/DIST or in CPAN. The latest code can be found at https://github.com/bioperl.
 
 * BioPerl currently uses a sematic numbering scheme to indicate stable release
   series vs. development release series. A release number is a three digit
@@ -94,42 +93,22 @@ https://github.com/bioperl.
     fixes or additional code that doesn't add significant functionality to the
     code base.
 
-* From the **1.0 release until the 1.6 release**, even numbers (`1.0`, `1.2`, etc)
-  indicated stable releases. Stable releases were well tested and recommended
-  for most uses. Odd numbers (`1.1`, `1.3`, etc) were development releases which one
-  would only use if one were interested in the latest and greatest features. The
-  final number (e.g. `1.2.0`, `1.2.1`) is the bug fix release. The higher the number
-  the more bug fixes has been incorporated. In theory you can upgrade from one
-  bug fix release to the next with no changes to your own code (for production
-  cases, obviously check things out carefully before you switch over).
-
-* The upcoming **1.7 release** will be the last release series to utilize the
-  alternating 'stable'/'developer' convention. Starting immediately after the
-  final 1.6 branch, we will start splitting BioPerl into several smaller
-  easier-to-manage distributions. These will have independent versions, all
-  likely starting with v1.7.0. **We do not anticipate major API changes in the
-  1.7.x release series*, merely that the code will be restructured in a way to
-  make maintenance more feasible. We anticipate retaining semantic versioning
-  until the **v2.x** release.
-
-# Caveats and warnings
-
-When you run the tests ("`./Build test`") some tests may issue warnings messages
-or even fail. Sometimes this is because we didn't have anyone to test the test
-system on the combination of your operating system, version of perl, and
-associated libraries and other modules. Because BioPerl depends on several
+From the **1.0 release until the 1.6 release** even numbers (e.g. `1.4`) indicated stable releases. Stable releases were well tested and recommended for most uses. Odd numbers (e.g. `1.3`) were development releases which one would only use if one were interested in the latest features. The final number (e.g. in `1.2.1`) is the point or patch release. The higher the number the more bug fixes has been incorporated. In theory you can upgrade from one point or patch release to the next with  [...]
+
+The upcoming **1.7 release** will be the last release series to utilize the alternating 'stable'/'developer' convention. Starting immediately after the final 1.6 branch, we will start splitting BioPerl into several smaller easier-to-manage distributions. These will have independent versions, all likely starting with v1.7.0. **We do not anticipate major API changes in the 1.7.x release series, merely that the code will be restructured in a way to make maintenance more feasible.** We antic [...]
+
+# Caveats and Warnings
+
+When you run the tests with `./Build test` some tests may issue warnings messages or even fail. Sometimes this is because we didn't have anyone to test the test system on the combination of your operating system, version of perl, and associated libraries and other modules. Because BioPerl depends on several
 outside libraries we may not be able to test every single combination so if
 there are warnings you may find that the package is still perfectly useful.
 
 If you install the bioperl-run system and run tests when you don't have the
-program installed you'll get messages like '`program XXX not found, skipping
-tests`'. That's okay, BioPerl is doing what it is supposed to do. If you wanted
+program installed you'll get messages like `program XXX not found, skipping
+tests`. That's okay, BioPerl is doing what it is supposed to do. If you wanted
 to run the program you'd need to install it first.
 
-Not all scripts in the `examples/` directory are correct and up-to-date. We need
-volunteers to help maintain these so if you find they do not submit a bug report
-to https://github.com/bioperl/bioperl-live/issues and consider helping out in
-their maintenance.
+Not all scripts in the `examples/` directory are correct and up-to-date. If you find an issue with a script please submit a bug report to https://github.com/bioperl/bioperl-live/issues and consider helping out in their maintenance.
 
 If you are confused about what modules are appropriate when you try and solve a
 particular issue in bioinformatics we urge you to look at HOWTO documents first.
@@ -234,8 +213,7 @@ All modules are in the **`Bio/`** namespace,
 * **`Bio::Biblio`** is where *bibliographic data and database access objects*
   are kept
 
-* **`Variation`** represent *sequences with mutations and variations* applied so
-  one can compare and represent wild-type and mutation versions of a sequence.
+* **`Variation`** represent *sequences with mutations and variations* applied so one can compare and represent wild-type and mutation versions of a sequence.
 
 * **`Root`**, basic objects for the *internals of BioPerl*
 
@@ -249,7 +227,6 @@ these notes may help you.
   included in the release.
 
 * Some methods, or the Application Programming Interface (API), have changed or
-  been removed. You may find that scripts which worked with BioPerl 1.4 may give
-  you warnings or may not work at all (although we have tried very hard to
+  been removed. You may find that scripts which worked with BioPerl 1.4 may give you warnings or may not work at all (although we have tried very hard to
   minimize this!). Send an email to the list and we'll be happy to give you
   pointers.
diff --git a/doc/Deobfuscator/Build.PL b/deobfuscator/Deobfuscator/Build.PL
similarity index 100%
rename from doc/Deobfuscator/Build.PL
rename to deobfuscator/Deobfuscator/Build.PL
diff --git a/doc/Deobfuscator/Changes b/deobfuscator/Deobfuscator/Changes
similarity index 100%
rename from doc/Deobfuscator/Changes
rename to deobfuscator/Deobfuscator/Changes
diff --git a/doc/Deobfuscator/LICENSE b/deobfuscator/Deobfuscator/LICENSE
similarity index 100%
rename from doc/Deobfuscator/LICENSE
rename to deobfuscator/Deobfuscator/LICENSE
diff --git a/doc/Deobfuscator/MANIFEST b/deobfuscator/Deobfuscator/MANIFEST
similarity index 100%
rename from doc/Deobfuscator/MANIFEST
rename to deobfuscator/Deobfuscator/MANIFEST
diff --git a/doc/Deobfuscator/META.yml b/deobfuscator/Deobfuscator/META.yml
similarity index 100%
rename from doc/Deobfuscator/META.yml
rename to deobfuscator/Deobfuscator/META.yml
diff --git a/doc/Deobfuscator/Makefile.PL b/deobfuscator/Deobfuscator/Makefile.PL
similarity index 100%
rename from doc/Deobfuscator/Makefile.PL
rename to deobfuscator/Deobfuscator/Makefile.PL
diff --git a/doc/Deobfuscator/README b/deobfuscator/Deobfuscator/README
similarity index 100%
rename from doc/Deobfuscator/README
rename to deobfuscator/Deobfuscator/README
diff --git a/doc/Deobfuscator/bin/deob_index.pl b/deobfuscator/Deobfuscator/bin/deob_index.pl
similarity index 100%
rename from doc/Deobfuscator/bin/deob_index.pl
rename to deobfuscator/Deobfuscator/bin/deob_index.pl
diff --git a/doc/Deobfuscator/bin/run-deobfuscator-update.pl b/deobfuscator/Deobfuscator/bin/run-deobfuscator-update.pl
similarity index 100%
rename from doc/Deobfuscator/bin/run-deobfuscator-update.pl
rename to deobfuscator/Deobfuscator/bin/run-deobfuscator-update.pl
diff --git a/doc/Deobfuscator/cgi-bin/deob_detail.cgi b/deobfuscator/Deobfuscator/cgi-bin/deob_detail.cgi
similarity index 100%
rename from doc/Deobfuscator/cgi-bin/deob_detail.cgi
rename to deobfuscator/Deobfuscator/cgi-bin/deob_detail.cgi
diff --git a/doc/Deobfuscator/cgi-bin/deob_flowchart.png b/deobfuscator/Deobfuscator/cgi-bin/deob_flowchart.png
similarity index 100%
rename from doc/Deobfuscator/cgi-bin/deob_flowchart.png
rename to deobfuscator/Deobfuscator/cgi-bin/deob_flowchart.png
diff --git a/doc/Deobfuscator/cgi-bin/deob_help.html b/deobfuscator/Deobfuscator/cgi-bin/deob_help.html
similarity index 100%
rename from doc/Deobfuscator/cgi-bin/deob_help.html
rename to deobfuscator/Deobfuscator/cgi-bin/deob_help.html
diff --git a/doc/Deobfuscator/cgi-bin/deob_interface.cgi b/deobfuscator/Deobfuscator/cgi-bin/deob_interface.cgi
similarity index 100%
rename from doc/Deobfuscator/cgi-bin/deob_interface.cgi
rename to deobfuscator/Deobfuscator/cgi-bin/deob_interface.cgi
diff --git a/doc/Deobfuscator/excluded_modules.txt b/deobfuscator/Deobfuscator/excluded_modules.txt
similarity index 100%
rename from doc/Deobfuscator/excluded_modules.txt
rename to deobfuscator/Deobfuscator/excluded_modules.txt
diff --git a/doc/Deobfuscator/lib/Deobfuscator.pm b/deobfuscator/Deobfuscator/lib/Deobfuscator.pm
similarity index 100%
rename from doc/Deobfuscator/lib/Deobfuscator.pm
rename to deobfuscator/Deobfuscator/lib/Deobfuscator.pm
diff --git a/doc/Deobfuscator/t/00.load.t b/deobfuscator/Deobfuscator/t/00.load.t
similarity index 100%
rename from doc/Deobfuscator/t/00.load.t
rename to deobfuscator/Deobfuscator/t/00.load.t
diff --git a/doc/Deobfuscator/t/pod.t b/deobfuscator/Deobfuscator/t/pod.t
similarity index 100%
rename from doc/Deobfuscator/t/pod.t
rename to deobfuscator/Deobfuscator/t/pod.t
diff --git a/doc/makedoc.PL b/deobfuscator/makedoc.PL
similarity index 100%
rename from doc/makedoc.PL
rename to deobfuscator/makedoc.PL
diff --git a/doc/README b/doc/README
deleted file mode 100644
index c5103d8..0000000
--- a/doc/README
+++ /dev/null
@@ -1,2 +0,0 @@
-For HOWTOs, tutorials, and module documentation please see the 
-BioPerl Wiki at http://bioperl.org.
diff --git a/examples/db/dbfetch b/examples/db/dbfetch
index cb6d69e..b0dc745 100755
--- a/examples/db/dbfetch
+++ b/examples/db/dbfetch
@@ -39,7 +39,7 @@ searches returning more than one entry per query term are not in these
 specs.
 
 In its default setup, type one or more EMBL accession numbers
-(e.g. J00231), entry name (e.g. BUM) or sequence version into the
+(e.g. J00231), entry name (e.g. HSFOS) or sequence version into the
 seach dialog to retieve hypertext linked enties.
 
 Note that for practical reasons only the first 50 identifiers
@@ -276,7 +276,7 @@ sub print_prompt {
 	  $q->p("This page allows you to retrieve up to ". MAXIDS .
 		 " entries at the time from various up-to-date biological databases."),
 	  $q->p("For EMBL, enter an  accession number (e.g. J00231) or entry name (e.g.
-		 BUM) or a sequence version (e.g. J00231.1), or any combination of them
+		 HSFOS) or a sequence version (e.g. J00231.1), or any combination of them
 		 separated by a non-word character into your browser's search dialog.
 		 SWALL examples are: fos_human, p53_human.
 		 For short Ensembl entries, try : AL122059, AL031002, AL031030 .
diff --git a/examples/root/lib/TestInterface.pm b/examples/root/lib/TestInterface.pm
deleted file mode 100644
index a355087..0000000
--- a/examples/root/lib/TestInterface.pm
+++ /dev/null
@@ -1,37 +0,0 @@
-=head1 NAME
-
-TestInterface - A simple subclass of Interface
-
-=head1 DESCRIPTION
-
-This module demonstrates how to use the generic Bio::Root::RootI
-superclass.
-
-=head1 AUTHOR
-
-Steve Chervitz E<lt>sac at bioperl.orgE<gt>
-
-=cut
-
-package TestInterface;
-
-
-use base qw(Bio::Root::RootI);
-
-sub data {
-    my $self = shift;
-    $self->throw_not_implemented;
-}
-
-sub foo {
-    my $self = shift;
-    $self->throw_not_implemented;
-}
-
-sub bar {
-    my $self = shift;
-    $self->throw_not_implemented;
-}
-
-
-1;
diff --git a/maintenance/big_split/file_classification.csv b/maintenance/big_split/file_classification.csv
index 3c36ca6..03bd4bb 100644
--- a/maintenance/big_split/file_classification.csv
+++ b/maintenance/big_split/file_classification.csv
@@ -914,8 +914,6 @@
 ,"examples/root/README"
 ,"examples/root/exceptions1.pl"
 ,"examples/root/exceptions2.pl"
-,"examples/root/lib/TestInterface.pm"
-,"examples/root/lib/TestObject.pm"
 ,"examples/root/exceptions4.pl"
 ,"examples/sirna/rnai_finder.cgi"
 ,"examples/sirna/TAG"
diff --git a/scripts/Bio-DB-SeqFeature-Store/bp_seqfeature_load.pl b/scripts/Bio-DB-SeqFeature-Store/bp_seqfeature_load.pl
old mode 100644
new mode 100755
index f3a32e2..b789842
--- a/scripts/Bio-DB-SeqFeature-Store/bp_seqfeature_load.pl
+++ b/scripts/Bio-DB-SeqFeature-Store/bp_seqfeature_load.pl
@@ -38,6 +38,7 @@ my $INDEX_SUB		= 1;
 my $NOALIAS_TARGET	= 0;
 my $SUMMARY_STATS	= 0;
 my $NOSUMMARY_STATS  = 0;
+my $FTS = 0;
 
 ## Two flags based on http://stackoverflow.com/questions/1232116
 ## how-to-create-pod-and-use-pod2usage-in-perl
@@ -62,6 +63,7 @@ GetOptions( 'd|dsn=s'			=> \$DSN,
 	    'noalias-target'		=> \$NOALIAS_TARGET,
 	    'summary'			=> \$SUMMARY_STATS,
         'N|nosummary'    => \$NOSUMMARY_STATS,
+	    'fts'			=> \$FTS,
 
 	    ## I miss '--help' when it isn't there!
 	    'h|help!'			=> \$opt_help,
@@ -85,6 +87,10 @@ pod2usage( -verbose => 2 ) if $opt_man;
 		-exitval => 2,
 	      );
 
+pod2usage( -message => "\n--fts requires --create\n",
+           -verbose => 0,
+           -exitval => 2,
+) if ($FTS and not $CREATE);
 
 
 ## POD
@@ -169,6 +175,13 @@ Compress database tables to save space (default false)
 Turn on indexing of subfeatures (default true) Use --nosubfeatures to
 switch this off.
 
+=item --fts
+
+Index the attribute table for full-text search (default false). Applicable
+only when --create is specified. Currently applicable to the DBI::SQLite
+storage adaptor only (using the most recent supported FTS indexing method,
+which may not be portable to older DBI::SQLite versions). 
+
 =item --summary
 
 Generate summary statistics for coverage graphs (default false) This
@@ -232,6 +245,7 @@ my $store = Bio::DB::SeqFeature::Store->new
     -write      => 1,
     -create     => $CREATE,
     -compress   => $COMPRESS,
+    -fts        => $FTS,
 )
 or die "Couldn't create connection to the database";
 
diff --git a/scripts/DB/bp_biofetch_genbank_proxy.pl b/scripts/DB/bp_biofetch_genbank_proxy.pl
index 05deac5..1275c91 100644
--- a/scripts/DB/bp_biofetch_genbank_proxy.pl
+++ b/scripts/DB/bp_biofetch_genbank_proxy.pl
@@ -184,7 +184,7 @@ option: id
   Option  : id
   Descr   : unique database identifier(s)
   Type    : required
-  Usage   : db=J00231 | id=J00231+BUM
+  Usage   : db=J00231 | id=J00231+HSFOS
   Arg     : string 
 
 The ID option should be able to process all UIDS in a database. It
diff --git a/scripts/seq/bp_seqcut.pl b/scripts/seq/bp_seqcut.pl
index 6b4bc15..3a8d266 100644
--- a/scripts/seq/bp_seqcut.pl
+++ b/scripts/seq/bp_seqcut.pl
@@ -1,117 +1,117 @@
-#!/usr/bin/env perl
-use strict;
-use warnings;
-
-=head1 NAME
-
-I<bp_seqcut.pl>
-
-=head1 USAGE
-
- bp_seqcut.pl [options -h,-s,-e,-f,-w] <FILES>...
- bp_seqcut.pl [options -h,-f,-w] s-e <FILES>...
-
-   -h this help message
-   -s which residue to start cutting on
-   -e which residue to finish cutting on
-   -f format of the files, defaults to FASTA but you can specify anything supported by SeqIO from BioPerl
-   -w hard wrap width, this might not be supported depending on which format you are using
-
-=head1 Description
-
-A script to cut FASTA sequences with a given range `fastacut -s 1 -e 10 *.fasta` or `fastacut 1-10 *.fasta`.
-This is just a convenience wrapper around the Bio::SeqIO module. Useful if you wish to trim out a section of an
-alignment to build a profile of a specific region of sequence.
-
-=head1 AUTHOR
-
-B<Matt Oates> - I<Matt.Oates at bristol.ac.uk>
-
-=head1 FEEDBACK
-
-=head2 Mailing Lists
-
-User feedback is an integral part of the evolution of this and other
-Bioperl modules. Send your comments and suggestions preferably to
-the Bioperl mailing list.  Your participation is much appreciated.
-
-  bioperl-l at bioperl.org                  - General discussion
-  http://bioperl.org/wiki/Mailing_lists  - About the mailing lists
-
-=head2 Reporting Bugs
-
-Report bugs to the Bioperl bug tracking system to help us keep track
-of the bugs and their resolution. Bug reports can be submitted via
-email or the web:
-
-  https://github.com/bioperl/bioperl-live/issues
-
-=head1 EDIT HISTORY
-
-2010-11-22 - Matt Oates
-	First features added.
-=cut
-
-
-
-# Includes
-=head1 DEPENDANCY
-B<Getopt::Long> Used to parse command line options.
-B<Pod::Usage> Used for usage and help output.
-B<Bio::SeqIO> Used to cut up sequences and parse FASTA.
-=cut
-use Getopt::Long;                     #Deal with command line options
-use Pod::Usage;                       #Print a usage man page from the POD comments after __END__
-use Bio::SeqIO;
-
-# Command Line Options
-my $help;    #Same again but this time should we output the POD man page defined after __END__
-my $format = "Fasta";
-my $start;
-my $end;
-my $width = 72; #Default for Jalview output
-my $outfile = '/dev/stdout';
-
-#Set command line flags and parameters.
-GetOptions("help|h!" => \$help,
-           "start|s=s" => \$start,
-           "format|f=s" => \$format,
-           "end|e=s" => \$end,
-           "width|w=s" => \$width,
-           "outfile|o=s" => \$outfile,
-        ) or die "Fatal Error: Problem parsing command-line ".$!;
-
-#Get other command line arguments that weren't optional flags.
-($start,$end) = split (/-/, shift) unless ($start and $end);
-my @files = @ARGV;
-
-#Print out some help if it was asked for or if no arguments were given.
-pod2usage(-exitstatus => 0, -verbose => 2) if $help;
-
-pod2usage(-exitstatus => 0, -verbose => 1, -msg => 'Please specify the sequence files you wish to cut.') 
-    unless scalar @files;
-
-pod2usage(-exitstatus => 0, -verbose => 1, -msg => 'Please specify the region you wish to cut -s 1 -e 10 or 1-10.') 
-    unless defined $end;
-
-my $out = Bio::SeqIO->newFh(-file => ">$outfile", -format => $format) or die "Couldn't open selected output sequence file.";
-
-#Open and iterate over all sequence in all files
-foreach my $file (@files) {
-	my $in  = Bio::SeqIO->new(-file => $file, -format => $format);
-	while ( my $seq = $in->next_seq() ) {
-            #Alter the ID to be postfixed with '/s-e'
-            $seq->display_id($seq->display_id."/$start-$end");
-            #Edit the sequence we have cut out
-	        my $sequence = $seq->subseq($start,$end);
-	        $sequence =~ s/([^\n]{0,$width})/$1\n/gi;
-	        chomp $sequence;
-            $seq->seq($sequence);
-            #Print the sequence back out
-        	print $out $seq;
-	}
-}
-
-1;
-__END__
-
+#!/usr/bin/env perl
+use strict;
+use warnings;
+
+=head1 NAME
+
+I<bp_seqcut.pl>
+
+=head1 USAGE
+
+ bp_seqcut.pl [options -h,-s,-e,-f,-w] <FILES>...
+ bp_seqcut.pl [options -h,-f,-w] s-e <FILES>...
+
+   -h this help message
+   -s which residue to start cutting on
+   -e which residue to finish cutting on
+   -f format of the files, defaults to FASTA but you can specify anything supported by SeqIO from BioPerl
+   -w hard wrap width, this might not be supported depending on which format you are using
+
+=head1 Description
+
+A script to cut FASTA sequences with a given range `fastacut -s 1 -e 10 *.fasta` or `fastacut 1-10 *.fasta`.
+This is just a convenience wrapper around the Bio::SeqIO module. Useful if you wish to trim out a section of an
+alignment to build a profile of a specific region of sequence.
+
+=head1 AUTHOR
+
+B<Matt Oates> - I<Matt.Oates at bristol.ac.uk>
+
+=head1 FEEDBACK
+
+=head2 Mailing Lists
+
+User feedback is an integral part of the evolution of this and other
+Bioperl modules. Send your comments and suggestions preferably to
+the Bioperl mailing list.  Your participation is much appreciated.
+
+  bioperl-l at bioperl.org                  - General discussion
+  http://bioperl.org/wiki/Mailing_lists  - About the mailing lists
+
+=head2 Reporting Bugs
+
+Report bugs to the Bioperl bug tracking system to help us keep track
+of the bugs and their resolution. Bug reports can be submitted via
+email or the web:
+
+  https://github.com/bioperl/bioperl-live/issues
+
+=head1 EDIT HISTORY
+
+2010-11-22 - Matt Oates
+	First features added.
+=cut
+
+
+
+# Includes
+=head1 DEPENDANCY
+B<Getopt::Long> Used to parse command line options.
+B<Pod::Usage> Used for usage and help output.
+B<Bio::SeqIO> Used to cut up sequences and parse FASTA.
+=cut
+use Getopt::Long;                     #Deal with command line options
+use Pod::Usage;                       #Print a usage man page from the POD comments after __END__
+use Bio::SeqIO;
+
+# Command Line Options
+my $help;    #Same again but this time should we output the POD man page defined after __END__
+my $format = "Fasta";
+my $start;
+my $end;
+my $width = 72; #Default for Jalview output
+my $outfile = '/dev/stdout';
+
+#Set command line flags and parameters.
+GetOptions("help|h!" => \$help,
+           "start|s=s" => \$start,
+           "format|f=s" => \$format,
+           "end|e=s" => \$end,
+           "width|w=s" => \$width,
+           "outfile|o=s" => \$outfile,
+        ) or die "Fatal Error: Problem parsing command-line ".$!;
+
+#Get other command line arguments that weren't optional flags.
+($start,$end) = split (/-/, shift) unless ($start and $end);
+my @files = @ARGV;
+
+#Print out some help if it was asked for or if no arguments were given.
+pod2usage(-exitstatus => 0, -verbose => 2) if $help;
+
+pod2usage(-exitstatus => 0, -verbose => 1, -msg => 'Please specify the sequence files you wish to cut.') 
+    unless scalar @files;
+
+pod2usage(-exitstatus => 0, -verbose => 1, -msg => 'Please specify the region you wish to cut -s 1 -e 10 or 1-10.') 
+    unless defined $end;
+
+my $out = Bio::SeqIO->newFh(-file => ">$outfile", -format => $format) or die "Couldn't open selected output sequence file.";
+
+#Open and iterate over all sequence in all files
+foreach my $file (@files) {
+	my $in  = Bio::SeqIO->new(-file => $file, -format => $format);
+	while ( my $seq = $in->next_seq() ) {
+            #Alter the ID to be postfixed with '/s-e'
+            $seq->display_id($seq->display_id."/$start-$end");
+            #Edit the sequence we have cut out
+	        my $sequence = $seq->subseq($start,$end);
+	        $sequence =~ s/([^\n]{0,$width})/$1\n/gi;
+	        chomp $sequence;
+            $seq->seq($sequence);
+            #Print the sequence back out
+        	print $out $seq;
+	}
+}
+
+1;
+__END__
+
diff --git a/scripts/seq/bp_translate_seq.pl b/scripts/seq/bp_translate_seq.pl
index 6b71944..98d91c3 100644
--- a/scripts/seq/bp_translate_seq.pl
+++ b/scripts/seq/bp_translate_seq.pl
@@ -42,19 +42,24 @@ email or the web:
 use Bio::SeqIO;
 use Getopt::Long;
 
-my ($format) = 'fasta';
+my ($format,$outfile) = 'fasta';
 
 GetOptions(
-	   'format:s'  => \$format,
-	   );
+    'f|format:s'  => \$format,
+    'o|out|outfile:s' => \$outfile,
+    );
 
 my $oformat = 'fasta';
 
 # this implicity uses the <> file stream
-my $seqin = Bio::SeqIO->new( -format => $format, -file => shift); 
-my $seqout = Bio::SeqIO->new( -format => $oformat, -file => ">-" );
-
-
+my $seqin = Bio::SeqIO->new( -format => $format, -fh => \*ARGV); 
+my $seqout;
+if( $outfile ) {
+    $seqout = Bio::SeqIO->new( -format => $oformat, -file => ">$outfile" );
+} else {
+# defaults to writing to STDOUT
+    $seqout = Bio::SeqIO->new( -format => $oformat );
+}
 while( (my $seq = $seqin->next_seq()) ) {
 	my $pseq = $seq->translate();
 	$seqout->write_seq($pseq);
diff --git a/scripts/taxa/bp_taxid4species.pl b/scripts/taxa/bp_taxid4species.pl
index 2fcce40..eed3607 100644
--- a/scripts/taxa/bp_taxid4species.pl
+++ b/scripts/taxa/bp_taxid4species.pl
@@ -10,6 +10,7 @@ use XML::Twig;
 use strict;
 use warnings;
 use Getopt::Long;
+use Data::Dumper;
 my $verbose = 0;
 my $plain   = 0;
 my $help    = 0;
@@ -22,33 +23,59 @@ die("$USAGE\n") if $help;
 
 my $ua = new LWP::UserAgent();
 
-my $urlbase = 'http://www.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi?db=taxonomy&term=';
+my $urlbase = 'http://www.ncbi.nlm.nih.gov/entrez/eutils/';
+my $esearch = 'esearch.fcgi?db=taxonomy&usehistory=y&term=';
+my $esummary = 'esummary.fcgi?db=taxonomy&query_key=QUERYKEY&WebEnv=WEBENV';
 
 my (@organisms) = @ARGV;
 die("must provide valid organism") unless @organisms;
 my $organismstr = join(" OR ", @organisms);
 $organismstr =~ s/\s/\+/g;
 
-my $response = $ua->get($urlbase.$organismstr);
+# Esearch
+my $response = $ua->get($urlbase . $esearch . $organismstr);
 my $t = XML::Twig->new();
 print $response->content,"\n"if($verbose);
 $t->parse($response->content);
 my $root = $t->root;
-my $list = $root->first_child('IdList');
-my @data;
-foreach my $child ($list->children('Id') ) {
-    push @data, $child->text;
-    if( $plain ) { print $child->text, "\n" }
+my $querykey = $root->first_child('QueryKey')->text;
+my $webenv = $root->first_child('WebEnv')->text;
+
+# Esummary
+$esummary =~ s/QUERYKEY/$querykey/;
+$esummary =~ s/WEBENV/$webenv/;
+$response = $ua->get($urlbase . $esummary);
+$t = XML::Twig->new();
+print $response->content,"\n"if($verbose);
+$t->parse($response->content);
+$root = $t->root;
+
+# Parse XML
+my %taxinfo;
+foreach my $docsum ($root->children) {
+    foreach my $item ($docsum->children('Item')) {
+        if ($item->{att}{Name} eq 'ScientificName') {
+            my $sciname = $item->text;
+            $taxinfo{lc $sciname}{sciname} = $sciname;
+            $taxinfo{lc $sciname}{tid} = $docsum->first_child_text('Id');
+            last;
+        }
+    }
 }
-unless( $plain  ) {
-    $list = $root->first_child('TranslationStack');
-    foreach my $set ($list->children('TermSet') ) {
-	foreach my $term ( $set->children('Term') ) {
-	    print "\"",$term->text(), "\", ", shift @data, "\n";
-	}
+
+# Output in same order as given on command line
+foreach my $orgn (@organisms) {
+    if (exists $taxinfo{lc $orgn}) {
+        my $tid = $taxinfo{lc $orgn}{tid};
+        
+        if ($plain) { print $tid, "\n"; }
+        else { print join(", ", "'$orgn'", $tid), "\n"; }
     }
+    else { print "'$orgn' not found\n"; }
 }
 
+
+
 =head1 NAME
 
 bp_taxid4species - simple script which returns the NCBI Taxonomic id for a requested species
diff --git a/scripts/utilities/bp_find-blast-matches.pl b/scripts/utilities/bp_find-blast-matches.pl
new file mode 100644
index 0000000..6430075
--- /dev/null
+++ b/scripts/utilities/bp_find-blast-matches.pl
@@ -0,0 +1,487 @@
+#!/usr/bin/env perl
+use strict;
+use warnings;
+
+=head1 NAME
+
+bp_find-blast-matches.pl - extract DNA sequences based on BLAST hits
+
+=head1 SYNOPSIS
+
+bp_find-blast-matches.pl [-h -e -p -5 -n -o -3 -header] -blast <BLAST_FILE> -fasta <FASTA_FILE>
+
+=head1 OPTIONS
+
+=head2 Mandatory:
+
+=over
+
+=item B<-blast>
+
+BLAST output file to read from. The alignment should use the file specified by
+'-fasta' option ideally
+
+=item B<-fasta>
+
+FASTA file to read from. This is where the sequence will be extracted from
+
+=back
+
+=head2 Optional:
+
+=over
+
+=item B<-h>
+
+Displays this help message
+
+=item B<-e>
+
+Maximum e-value for matches (0.01 by default)
+
+=item B<-p>
+
+Number of base pairs of 5' region to be included with the sequence
+
+=item B<-5>
+
+Number of base pairs of 5' region only, excluding the regular sequence
+
+=item B<-3>
+
+Number of base pairs of 3' region only, excluding the regular sequence
+
+=item B<-n>
+
+Number of top hits to display, starting with the best hit
+
+=item B<-o>
+
+Exact match to display (this option can't be used in conjunction with '-n'
+
+=item B<-header>
+
+The FASTA header to display instead of the default
+
+=back
+
+=head1 DESCRIPTION
+
+This script takes a BLAST output file and a FASTA file as arguments, 
+given after the '-blast' and '-fasta' options respectively. The BLAST output 
+file should have been generated with your sequence of interest and the 
+FASTA file supplied as an argument.
+Example: find-blast-matches.pl -blast BLAST_FILE -fasta FASTA_FILE
+
+It parses through the BLAST file to check for high quality matches, 
+which are then searched for in the FASTA file.  The sequence may vary 
+from you candidate sequence, hence the BLAST search prior. 
+
+The sequence from the FASTA file is then displayed to STDOUT.
+Optional arguments can be used, such as to extract the 5' or 3' region.
+
+=head1 AUTHOR
+
+Gabriel Abud - E<lt>gabriel.jabud-at-gmail.comE<gt>
+
+=head1 FEEDBACK
+
+=head2 Mailing Lists
+
+User feedback is an integral part of the evolution of this and other
+Bioperl modules.  Send your comments and suggestions preferably to
+the Bioperl mailing list.  Your participation is much appreciated
+
+  bioperl-l at bioperl.org                  - General discussion
+  http://bioperl.org/wiki/Mailing_lists  - About the mailing lists
+
+=head2 Reporting Bugs
+
+Report bugs to the Bioperl bug tracking system to help us keep track
+of the bugs and their resolution. Bug reports can be submitted via 
+email or the web:
+
+  https://github.com/bioperl/bioperl-live/issues
+
+=head1 EDIT HISTORY
+
+2014-08-04 - Gabriel Abud
+    First features added
+
+=head1 DEPENDANCIES
+
+Getopt::long, Pod::Usage, Bio::SearchIO, Bio::Seq, Bio::SeqIO, Bio::Perl,
+File::Basename
+
+=cut
+
+
+# Modules
+use Bio::SearchIO qw(new);
+use Bio::Seq qw(new);
+use Bio::SeqIO qw(new);
+use Bio::Perl qw(revcom_as_string);
+use File::Basename qw(basename);
+use Getopt::Long qw(GetOptions);
+use Pod::Usage;
+
+# Variables
+my $baseProg = basename($0);    # Program name
+my $line;
+my @scaffolds;
+my $inputFile;
+my $blastFile;
+my $scaffoldFind;
+my $baseList;
+my @start;
+my @end;
+my @strand;
+my @arrayBases;
+my $query_name;
+my @query_names;
+my @accessions;
+my $accession;
+my $baseFile;
+my $total_size;
+my $title;
+my $default_header;
+my $in;
+my $out;
+
+# Command line options
+my $exact_match;    # Undef by default
+my $e_value = 0.01; # Default e-value
+my $matches = 1;    # Default number of matches
+my $promoter;       # Undef by default
+my $three_prime;    # Undef by default
+my $promoter_only;  # Undef by default
+my $opt_help;       # Undef by default
+my $header;         # Undef by default
+
+# Functions for proper command line usage
+sub syntax {
+    print STDERR
+      "Usage: $baseProg -blast 'BLAST_file' -fasta 'FASTA_file' [OPTIONS]\n";
+    print STDERR "Try '$baseProg --help' for more information.\n";
+    exit;
+}
+
+sub help {
+    print STDERR
+      "\nNAME:\n",
+      "\t$baseProg - extract a DNA sequence based on BLAST hits\n\n",
+      "SYNTAX:\n",
+      "\t$baseProg -blast 'BLAST_file' -fasta 'FASTA__file'  [OPTIONS]\n\n",
+      "OPTIONS:\n",
+      "\t(All options require an additional number argument [ie: -e 0.01])\n\n",
+      "\t-e, maximum e-value for matches (0.01 by default)\n\n",
+      "\t-p, number of base pairs of 5' region to be included with the\n",
+      "\t sequence of interest\n\n",
+      "\t-5, number of base pairs of 5' region, excluding the sequence\n",
+      "\t of interest (unlike '-p')\n\n",
+      "\t-n, number of top hits to display, starting with the highest hit\n",
+      "\t(1 by default)\n\n",
+      "\t-o, exact match to display (this option can't be used in conjuction\n",
+      "\t with '-n')\n\n",
+      "\t-3, number of base pairs of 3' region to display\n\n",
+      "\t-header, the fasta header to display instead of the default\n\n";
+    exit;
+}
+
+# Get command line options
+GetOptions(
+    'e=f'      => \$e_value,
+    'p=i'      => \$promoter,
+    'n=i'      => \$matches,
+    'o=i'      => \$exact_match,
+    '5=i'      => \$promoter_only,
+    '3=i'      => \$three_prime,
+    'help|h'     => \$opt_help,
+    'header|head=s' => \$header,
+    'blast|b=s'  => \$blastFile,
+    'fasta|f=s'  => \$inputFile
+) or pod2usage(-exitstatus => 0, -verbose => 1);
+
+# Help screen
+pod2usage(-exitstatus => 0, -verbose => 2) if $opt_help;
+#help() if defined $opt_help;
+
+# Checks for required arguments
+pod2usage(-exitstatus => 0, -verbose => 1, 
+          -msg => "You must specify the FASTA and BLAST files to read from!\n")
+    if (!defined $blastFile || !defined $inputFile);
+#syntax() if ( !defined $blastFile || !defined $inputFile );
+
+# Checks for any negative numbers
+#syntax()
+pod2usage(-exitstatus => 0, -verbose => 1,
+          -msg => "You must use positive numbers as values to options!")
+  if ( (defined $e_value && $e_value < 0)
+    || (defined $promoter && $promoter < 0)
+    || (defined $matches && $matches < 0)
+    || (defined $exact_match && $exact_match < 0)
+    || (defined $promoter_only && $promoter_only < 0)
+    || (defined $three_prime && $three_prime < 0 ) );
+
+if ( $matches > 1 && defined $exact_match ) {
+    print STDERR "Cannot use both options '-n' and '-o' at the same time\n";
+    print STDERR "(Type '$baseProg --help' for more information\n)";
+    exit;
+}
+
+if ( defined $promoter && defined $promoter_only ) {
+    print STDERR "Cannot use both options '-p' and '-5' at the same time\n";
+    print STDERR "(Type '$baseProg --help' for more information)\n";
+    exit;
+}
+
+if ( defined $three_prime && ( defined $promoter || defined $promoter_only ) ) {
+    print STDERR "Cannot use both '-3' with '-p' or '-5' at the same time\n";
+    print STDERR "(Type $baseProg --help' for more information)\n";
+    exit;
+}
+
+# Class used to search through the blast file
+eval { $in = Bio::SearchIO->new( -file => $blastFile, -format => "blast" ); };
+if ($@) {
+    die "'$blastFile' does not appear to be a BLAST output file! Exiting...\n";
+}
+$out = Bio::SeqIO->new( -fh => \*STDOUT, -format => "fasta" );
+
+# Creates arrays of all the scaffold names and the coordinates of where those scaffolds are found
+my $n = 0;
+OUTERLOOP: while ( my $result = $in->next_result ) {
+  LOOP: while ( my $hit = $result->next_hit ) {
+        while ( my $hsp = $hit->next_hsp ) {
+
+            # Finds all matches with an evalue <= $e_value (or 0.01 by default)
+            if ( $hsp->evalue <= $e_value ) {
+                ( $start[$n], $end[$n] ) = $hsp->range('hit');
+                $scaffolds[$n] = $hit->name, $strand[$n] = $hsp->strand('hit');
+                $n += 1;
+            }
+
+            # If an exact_match option is given
+            if ( defined($exact_match) && $exact_match == $n ) {
+                ( $start[0], $end[0] ) = $hsp->range('hit');
+                $scaffolds[0] = $hit->name, $strand[0] = $hsp->strand('hit');
+                last OUTERLOOP;
+            }
+            elsif ( !defined($exact_match) && $n >= $matches )
+            { # Exits after the correct amount of matches have been found (1 by default)
+                last LOOP;
+            }
+        }
+    }
+}
+
+$baseFile = basename $inputFile;
+
+open INFILE, "<$inputFile"
+  or die "Couldn't open the input file '$inputFile'! Exiting...\n";
+
+$scaffoldFind = 0;
+my %scaffoldList;
+my %baseList;
+
+# Extracts only the scaffolds of interest, avoiding duplicates
+if ( defined $exact_match ) {
+    $scaffoldList{ $scaffolds[0] } = 1;
+}
+else {
+    foreach my $num ( 0 .. $#scaffolds ) {
+        if ( !defined $scaffoldList{ $scaffolds[$num] } ) {
+            $scaffoldList{ $scaffolds[$num] } = 1;
+        }
+    }
+}
+my $remaining_scaffolds = my $unique_scaffolds = keys(%scaffoldList);
+
+local $/ = "\n>";
+
+# Reads the FASTA file here, storing FASTA headers where the sequence is found
+while ( $line = <INFILE> ) {
+    chomp($line);
+    next if ( $line =~ m/^\s*?$/ );
+
+    foreach my $scaffold ( sort keys %scaffoldList ) {
+        if ( $line =~ /^[ \t]{0,5}$scaffold/ )
+        {    # True if FASTA segment contains the scaffold
+            $line =~ s/^.*?\n//;
+            $line =~ s/\s//g;
+            $baseList{$scaffold} = $line;
+            $scaffoldFind++;
+            $remaining_scaffolds--;
+        }
+    }
+    last unless ($remaining_scaffolds);
+}
+
+if ( $scaffoldFind != $unique_scaffolds ) {
+    print STDERR "The scaffold specified in the BLAST file was not found.\n";
+    print STDERR "Make sure you are using the correct FASTA file.\n";
+    exit;
+}
+
+for my $m ( 0 .. $#scaffolds )
+{    # Runs a loop as many times as there are scaffolds
+    $baseList = $baseList{ $scaffolds[$m] };
+
+    # Print title line for each scaffold
+    $accession      = $baseFile;
+    $default_header = "(BLAST hit:$scaffolds[$m]|";
+
+    my $real_start = $start[$m];
+    my $real_end   = $end[$m];
+
+    # For "normal", positive strands (+/+)
+    if ( $strand[$m] == 1 ) {
+
+        # If the -p flag was used
+        if ( defined $promoter ) {    # 5' region specified with -p flag
+             # If 5' region is too large for sequence, don't include the 5' region
+            if ( $promoter >= $start[$m] ) {
+                print STDERR "ERROR: 5' region is too big!! (max promoter = ",
+                  $start[$m] - 1, " )\n",
+                  "Showing sequence without 5' region...\n";
+                $baseList = substr $baseList, $start[$m], $end[$m] - $start[$m];
+            }
+            else {
+                my $real_start = $start[$m] - $promoter;
+                $baseList = substr $baseList, $start[$m] - $promoter - 1,
+                  $promoter + $end[$m] - $start[$m] + 1;
+            }
+        }
+
+        # If the -3 flag was used
+        elsif ( defined $three_prime ) {
+            $total_size = length($baseList);
+
+            if ( ( $three_prime + $end[$m] ) > $total_size ) {
+                die "ERROR: 3' region is too big!! ",
+                  "(max 3' region = ", $total_size - $end[$m], ")\n",
+                  ;
+            }
+            else {
+                $real_start = $end[$m] + 1;
+                $real_end   = $end[$m] + $three_prime;
+                $baseList   = substr $baseList, $end[$m], $three_prime;
+            }
+        }
+
+        # If the -5 flag was used
+        elsif ( defined $promoter_only )
+        {    # 5' region was specified with -5 flag
+             # If 5' region is too large for sequence, don't include the 5' region
+            if ( $promoter_only >= $start[$m] ) {
+                die "ERROR: 5' region is too big!! (max promoter = ",
+                  $start[$m] - 1, " )\n",
+                  ;
+            }
+            else {
+                $real_start = $start[$m] - $promoter_only;
+                $real_end   = $start[$m] - 1;
+                $baseList   = substr $baseList, $start[$m] - $promoter_only - 1,
+                  $promoter_only;
+            }
+        }
+        else {    # Default: just the BLAST hit (no 5' or 3')
+            $baseList = substr $baseList, $start[$m] - 1,
+              $end[$m] - $start[$m] + 1;
+        }
+    }
+
+    # Checks to see if the hit sequence is the reverse compliment
+    elsif ( $strand[$m] == -1 ) {
+
+        # If -p flag was used:
+        if ( defined $promoter ) {
+            $total_size = length($baseList);
+
+            if ( ( $promoter + $end[$m] ) > $total_size ) {
+                print STDERR "ERROR: 5' region is too big!! ",
+                  "(max 5' region = ", $total_size - $end[$m], ")\n",
+                  "Showing sequence without 5' region...\n";
+                $baseList = substr $baseList, $start[$m], $end[$m] - $start[$m];
+            }
+            else {
+                $real_start = $start[$m] + 1;
+                $real_end   = $end[$m] + $promoter;
+                $baseList   = substr $baseList, $start[$m] - 1,
+                  $end[$m] - $start[$m] + $promoter + 1;
+            }
+
+        }
+
+        # If -3 flag was used
+        elsif ( defined $three_prime ) {
+            if ( $three_prime >= $start[$m] ) {
+                die "ERROR: 3' region is too big!! (max = ", $start[$m] - 1,
+                  " )\n";
+            }
+            else {
+                $real_start = $start[$m] - $three_prime;
+                $real_end   = $start[$m] - 1;
+                $baseList   = substr $baseList, $start[$m] - $three_prime - 1,
+                  $three_prime;
+            }
+        }
+
+        # If -5 flag was used
+        elsif ( defined $promoter_only ) {
+            $total_size = length($baseList);
+
+            if ( ( $promoter_only + $end[$m] ) > $total_size ) {
+                die "ERROR: 5' region is too big!! ",
+                  "(max promoter = ", $total_size - $end[$m], ")\n",
+                  ;
+            }
+            else {
+                $real_start = $end[$m] + 1;
+                $real_end   = $end[$m] + $promoter_only;
+                $baseList   = substr $baseList, $end[$m], $promoter_only;
+            }
+
+        }
+        else {    # If 5' region wasn't specified at all
+            $baseList = substr $baseList, $start[$m] - 1,
+              $end[$m] - $start[$m] + 1;
+        }
+        $baseList = revcom_as_string($baseList);
+    }
+    $default_header .= "$real_start-$real_end)";
+    $default_header .= " showing 5' region ($promoter_only bp) only"
+      if defined($promoter_only);
+    $default_header .= " showing 3' region ($three_prime bp)"
+      if defined($three_prime);
+    $default_header .= " with 5' region ($promoter bp)" if defined($promoter);
+    my $seq_obj = Bio::Seq->new( -seq => "$baseList", -alphabet => 'dna' );
+
+    if ( defined $header ) {
+        $header =~ s/^\s*//;
+        $header =~ s/\s*$//;
+        $header =~ s/^>//;
+        $header =~ s/^([^\s]+)//;
+        my $default_name = $1;
+        $seq_obj->display_id($default_name);
+        $seq_obj->desc($header);
+    }
+    else {
+        $seq_obj->desc($default_header);
+        $seq_obj->display_id($accession);
+    }
+
+    # Prints the sequence to STDOUT
+    $out->write_seq($seq_obj);
+    print "\n";
+
+   # If 'exact_match' option is specified, exit after first (and only) iteration
+    if ( defined($exact_match) ) {
+        close INFILE;
+        exit;
+    }
+
+    close INFILE;
+}    # End of major for loop
+
+__END__
diff --git a/scripts/utilities/bp_pairwise_kaks.pl b/scripts/utilities/bp_pairwise_kaks.pl
index 48cd063..0a05a87 100644
--- a/scripts/utilities/bp_pairwise_kaks.pl
+++ b/scripts/utilities/bp_pairwise_kaks.pl
@@ -11,7 +11,7 @@ bp_pairwise_kaks - script to calculate pairwise Ka,Ks for a set of sequences
 
 bp_pairwise_kaks.PLS -i t/data/worm_fam_2785.cdna [-f fasta/genbank/embl...] [-msa tcoffee/clustal] [-kaks yn00/codeml]
 
-=head1 DESCRIPTION 
+=head1 DESCRIPTION
 
   This script will take as input a dataset of cDNA sequences verify
  that they contain no stop codons, align them in protein space,
@@ -57,7 +57,7 @@ eval {
     # Ka/Ks estimators
     require Bio::Tools::Run::Phylo::PAML::Codeml;
     require Bio::Tools::Run::Phylo::PAML::Yn00;
-    
+
     # Multiple Sequence Alignment programs
     require Bio::Tools::Run::Alignment::Clustalw;
     require Bio::Tools::Run::Alignment::TCoffee;
@@ -79,14 +79,14 @@ my ($aln_prog, $kaks_prog,$format, $output,
     $cdna,$verbose,$help) = qw(clustalw codeml fasta);
 
 GetOptions(
-	   'i|input:s'      => \$cdna,
-	   'o|output:s'     => \$output,
-	   'f|format:s'     => \$format,
-	   'msa:s'          => \$aln_prog,
-	   'kaks:s'         => \$kaks_prog,
-	   'v|verbose'      => \$verbose,
-	   'h|help'         => \$help,
-	   );
+           'i|input:s'      => \$cdna,
+           'o|output:s'     => \$output,
+           'f|format:s'     => \$format,
+           'msa:s'          => \$aln_prog,
+           'kaks:s'         => \$kaks_prog,
+           'v|verbose'      => \$verbose,
+           'h|help'         => \$help,
+           );
 
 if( $help ) {
     exec('perldoc',$0);
@@ -98,7 +98,7 @@ if( $aln_prog =~ /clus/i ) {
     $aln_factory = Bio::Tools::Run::Alignment::Clustalw->new(-verbose => $verbose);
 } elsif( $aln_prog =~ /t\_?cof/i ) {
     $aln_factory = Bio::Tools::Run::Alignment::TCoffee->new(-verbose => $verbose);
-} else { 
+} else {
     warn("Did not provide either 'clustalw' or 'tcoffee' as alignment program names");
     exit(0);
 }
@@ -113,11 +113,11 @@ if( $kaks_prog =~ /yn00/i ) {
 } elsif( $kaks_prog =~ /codeml/i ) {
     # change the parameters here if you want to tweak your Codeml running!
     $kaks_factory = Bio::Tools::Run::Phylo::PAML::Codeml->new
-	(-verbose => $verbose,
-	 -params => { 'runmode' => -2,
-		      'seqtype' => 1,
-		  }
-	 );
+        (-verbose => $verbose,
+         -params => { 'runmode' => -2,
+                      'seqtype' => 1,
+                  }
+         );
 }
 unless ( $kaks_factory->executable ) {
     warn("Could not find the executable for $kaks_prog, make sure you have installed it and you have defined PAMLDIR or it is in your PATH");
@@ -125,12 +125,12 @@ unless ( $kaks_factory->executable ) {
 }
 
 unless ( $cdna && -f $cdna && -r $cdna &&  ! -z $cdna ) {
-    warn("Did not specify a valid cDNA sequence file as input"); 
+    warn("Did not specify a valid cDNA sequence file as input");
     exit(0);
 }
 
-my $seqin = new Bio::SeqIO(-file   => $cdna, 
-			   -format => $format);
+my $seqin = new Bio::SeqIO(-file   => $cdna,
+                           -format => $format);
 
 my %seqs;
 my @prots;
@@ -138,11 +138,11 @@ while( my $seq = $seqin->next_seq ) {
     $seqs{$seq->display_id} = $seq;
     my $protein = $seq->translate();
     my $pseq = $protein->seq();
-    
+
     $pseq =~ s/\*$//;
     if( $pseq =~ /\*/ ) {
-	warn("provided a cDNA (".$seq->display_id.") sequence with a stop codon, PAML will choke!");
-	exit(0);
+        warn("provided a cDNA (".$seq->display_id.") sequence with a stop codon, PAML will choke!");
+        exit(0);
     }
     # Tcoffee can't handle '*'
     $pseq =~ s/\*//g;
@@ -157,7 +157,7 @@ if( @prots < 2 ) {
 local * OUT;
 if( $output ) {
     open(OUT, ">$output") || die("cannot open output $output for writing");
-} else { 
+} else {
     *OUT = *STDOUT;
 }
 
@@ -170,42 +170,42 @@ my @each = $dna_aln->each_seq();
 $kaks_factory->alignment($dna_aln);
 
 my ($rc,$parser) = $kaks_factory->run();
-if( $rc <= 0 ) { 
+if( $rc <= 0 ) {
     warn($kaks_factory->error_string,"\n");
     exit;
 }
 my $result = $parser->next_result;
 
 if ($result->version =~ m/3\.15/) {
-	warn("This script does not work with v3.15 of PAML!  Please use 3.14 instead.");
-	exit(0);
+        warn("This script does not work with v3.15 of PAML!  Please use 3.14 instead.");
+        exit(0);
 }
 
 my $MLmatrix = $result->get_MLmatrix();
 
 my @otus = $result->get_seqs();
 
-my @pos = map { 
+my @pos = map {
     my $c= 1;
     foreach my $s ( @each ) {
-	last if( $s->display_id eq $_->display_id );
-	$c++;
+        last if( $s->display_id eq $_->display_id );
+        $c++;
     }
-    $c; 
-} @otus; 
+    $c;
+} @otus;
 
 print OUT join("\t", qw(SEQ1 SEQ2 Ka Ks Ka/Ks PROT_PERCENTID CDNA_PERCENTID)), "\n";
 for( my $i = 0; $i < (scalar @otus -1) ; $i++) {
     for( my $j = $i+1; $j < (scalar @otus); $j++ ) {
-	my $sub_aa_aln = $aa_aln->select_noncont($pos[$i],$pos[$j]);
-	my $sub_dna_aln = $dna_aln->select_noncont($pos[$i],$pos[$j]);
-	print OUT join("\t",  
-		       $otus[$i]->display_id,
-		       $otus[$j]->display_id,$MLmatrix->[$i]->[$j]->{'dN'},
-		       $MLmatrix->[$i]->[$j]->{'dS'},
-		       $MLmatrix->[$i]->[$j]->{'omega'},
-		       sprintf("%.2f",$sub_aa_aln->percentage_identity),
-		       sprintf("%.2f",$sub_dna_aln->percentage_identity),
-		       ), "\n";
+        my $sub_aa_aln = $aa_aln->select_noncont($pos[$i],$pos[$j]);
+        my $sub_dna_aln = $dna_aln->select_noncont($pos[$i],$pos[$j]);
+        print OUT join("\t",
+                       $otus[$i]->display_id,
+                       $otus[$j]->display_id,$MLmatrix->[$i]->[$j]->{'dN'},
+                       $MLmatrix->[$i]->[$j]->{'dS'},
+                       $MLmatrix->[$i]->[$j]->{'omega'},
+                       sprintf("%.2f",$sub_aa_aln->percentage_identity),
+                       sprintf("%.2f",$sub_dna_aln->percentage_identity),
+                       ), "\n";
     }
 }
diff --git a/scripts/utilities/bp_search2BSML.pl b/scripts/utilities/bp_search2BSML.pl
deleted file mode 100644
index 1fdc2c2..0000000
--- a/scripts/utilities/bp_search2BSML.pl
+++ /dev/null
@@ -1,70 +0,0 @@
-#!perl
-
-# Author:      Jason Stajich <jason-at-bioperl-dot-org>
-# Description: Turn SearchIO parseable report(s) into a GFF report
-#
-=head1 NAME
-
-search2bsml - Turn SearchIO parseable reports(s) into a BSML report
-
-=head1 SYNOPSIS
-
-Usage:
-  search2bsml [-o outputfile] [-f reportformat] [-i inputfilename]  OR file1 file2 ..
-
-=head1 DESCRIPTION
-
-This script will turn a protein Search report (BLASTP, FASTP, SSEARCH, 
-AXT, WABA, SIM4) into a BSML File.
-
-The options are:
-
-   -i infilename        - (optional) inputfilename, will read
-                          either ARGV files or from STDIN
-   -o filename          - the output filename [default STDOUT]
-   -f format            - search result format (blast, fasta,waba,axt)
-                          (ssearch is fasta format). default is blast.
-   -h                   - this help menu
-
-Additionally specify the filenames you want to process on the
-command-line.  If no files are specified then STDIN input is assumed.
-You specify this by doing: search2gff E<lt> file1 file2 file3
-
-=head1 AUTHOR
-
-Jason Stajich, jason-at-bioperl-dot-org
-
-=cut
-
-use strict;
-use warnings;
-use Getopt::Long;
-use Bio::SearchIO;
-
-my ($output,$input,$format,$type,$help,$cutoff);
-$format = 'blast'; # by default
-GetOptions(
-	   'i|input:s'  => \$input,
-	   'o|output:s' => \$output,
-	   'f|format:s' => \$format,
-	   'c|cutoff:s' => \$cutoff,
-	   'h|help'     => sub{ exec('perldoc',$0);
-				exit(0)
-				},
-	   );
-# if no input is provided STDIN will be used
-my $parser = new Bio::SearchIO(-format => $format, 
-			       -file   => $input);
-
-my $out;
-if( defined $output ) {
-    $out = new Bio::SearchIO(-file => ">$output",
-			     -output_format => 'BSMLResultWriter');
-} else { 
-    $out = new Bio::SearchIO(-output_format => 'BSMLResultWriter'); # STDOUT
-}
-
-while( my $result = $parser->next_result ) {
-    $out->write_result($result);
-}
-
diff --git a/t/Align/Utilities.t b/t/Align/Utilities.t
index 76b8f0d..b67cb09 100644
--- a/t/Align/Utilities.t
+++ b/t/Align/Utilities.t
@@ -7,7 +7,7 @@ BEGIN {
 	use lib '.';
     use Bio::Root::Test;
     
-    test_begin(-tests => 13);
+    test_begin(-tests => 14);
 	
 	use_ok('Bio::Align::Utilities', qw(:all));
 	use_ok('Bio::SimpleAlign');
@@ -24,9 +24,9 @@ $aa_align->add_seq(Bio::LocatableSeq->new(-id => "n2", -seq => "MLIDVRTPLALR"));
 $aa_align->add_seq(Bio::LocatableSeq->new(-id => "n3", -seq => "MLI-VR-SLALR"));
 
 my %dnaseqs = ();
-$dnaseqs{'n1'} = Bio::PrimarySeq->new(-id => "n1", -seq => 'atgctgatagacgtaggcatgctagtactgaga');
-$dnaseqs{'n2'} = Bio::PrimarySeq->new(-id => "n2", -seq => 'atgctgatcgacgtacgcaccccgctagcactcaga');
-$dnaseqs{'n3'} = Bio::PrimarySeq->new(-id => "n3", -seq => 'atgttgattgtacgctcgcttgcacttaga');
+$dnaseqs{'n1'} = Bio::PrimarySeq->new(-id => "n1dna", -seq => 'atgctgatagacgtaggcatgctagtactgaga');
+$dnaseqs{'n2'} = Bio::PrimarySeq->new(-id => "n2dna", -seq => 'atgctgatcgacgtacgcaccccgctagcactcaga');
+$dnaseqs{'n3'} = Bio::PrimarySeq->new(-id => "n3dna", -seq => 'atgttgattgtacgctcgcttgcacttaga');
 my $dna_aln;
 
 ok( $dna_aln = &aa_to_dna_aln($aa_align, \%dnaseqs));
@@ -39,6 +39,8 @@ is $dna_aln->num_residues, 99;
 is $dna_aln->num_sequences, 3;
 is $dna_aln->consensus_string(50), "atgctgat?gacgtacgc????cgctagcact?aga";
 
+my @dnaseqs = $dna_aln->each_seq;
+is $dnaseqs[0]->display_id, 'n1dna';
 $dna_aln->verbose(-1);
 my $replicates;
 ok $replicates = &bootstrap_replicates($dna_aln,3);
diff --git a/t/AlignIO/nexml.t b/t/AlignIO/nexml.t
index a810767..926c3cc 100644
--- a/t/AlignIO/nexml.t
+++ b/t/AlignIO/nexml.t
@@ -73,5 +73,4 @@ SKIP: {
             is ( ($feat->get_tag_values('taxon'))[0], $expected_taxa{$seq_num}, "$seq_num taxon ok" )
         }
     }
-
-}
\ No newline at end of file
+}
diff --git a/t/AlignIO/phylip.t b/t/AlignIO/phylip.t
index 1b6e68f..0d20ee8 100644
--- a/t/AlignIO/phylip.t
+++ b/t/AlignIO/phylip.t
@@ -1,5 +1,4 @@
 # -*-Perl-*- Test Harness script for Bioperl
-# $Id: phylip.t 14971 2008-10-28 16:08:52Z cjfields $
 
 use strict;
 
@@ -7,7 +6,7 @@ BEGIN {
 	use lib '.';
     use Bio::Root::Test;
 
-    test_begin(-tests => 17);
+    test_begin(-tests => 20);
 
 	use_ok('Bio::AlignIO::phylip');
 }
@@ -28,7 +27,6 @@ is($aln->get_seq_by_pos(2)->seq(), 'CCTCAGATCACTCTTTGGCAACGACCCCTCGTCACAATAA'.
    'GAAGAAATCTGTTGACTCAGATTGGTTGCACTTTAAATTTT' );
 
 # PHYLIP interleaved with long Ids
-
 $str = Bio::AlignIO->new(
     '-file' => test_input_file("protpars_longid.phy"),
     '-format' => 'phylip',
@@ -51,9 +49,7 @@ isa_ok($aln,'Bio::Align::AlignI');
 is $aln->get_seq_by_pos(1)->get_nse, 'SINFRUP001/1-4940';
 # is $aln->get_seq_by_pos(2)->get_nse, 'SINFRUP002/1-84';
 
-
 # PHYLIP interleaved
-
 $str = Bio::AlignIO->new(
     '-file' => test_input_file("testaln.phylip"),
     '-format' => 'phylip');
@@ -73,17 +69,36 @@ my $ls = $aln->get_seq_by_pos(2);
 is($ls->display_id, 'Pan_panisc');
 is($ls->start, 1);
 is($ls->end,47);
+is($ls->length,50);
 
 # bug 2984
 TODO: {
-    local $TODO = 'problems with default strand, length?';
+    local $TODO = 'problems with default strand';
     # shouldn't this be 0?
     is($ls->strand,0);
-    is($ls->length,47);
 }
 
 # check to see that newlines between header and sequences are parsed correctly
-$str = Bio::AlignIO->new('-file' => test_input_file("codeml45b.mlc"), '-format' => 'phylip', '-longid' => 1);
+$str = Bio::AlignIO->new('-file' => test_input_file("codeml45b.mlc"), -format => 'phylip', '-longid' => 1);
 $aln = $str->next_aln();
 $ls = $aln->get_seq_by_pos(9);
 ok($ls->display_id eq "Pop_trich_ch", "newline between header and sequences is parsed correctly");
+
+# bug 123 "Problem with newer versions of AlignIO to write alignment data #123"
+my $io = Bio::AlignIO->new(
+    -file => test_input_file("ORTHOMCL2345.cluster.aa.fa.aln.aa.phy.txt"),
+    -format => 'phylip');
+$aln = $io->next_aln();
+isa_ok($aln,'Bio::SimpleAlign');
+
+# Alignment file where an id has spaces in it
+$io = Bio::AlignIO->new(
+    -file => test_input_file("ids-with-spaces.phy"),
+    -format => 'phylip');
+$aln = $io->next_aln();
+isa_ok($aln,'Bio::SimpleAlign');
+is($aln->get_seq_by_pos(1)->display_id, 'A_BAD_ID');
+
+
+
+
diff --git a/t/Coordinate/CoordinateBoundaryTest.t b/t/Coordinate/CoordinateBoundaryTest.t
deleted file mode 100644
index e0a4e04..0000000
--- a/t/Coordinate/CoordinateBoundaryTest.t
+++ /dev/null
@@ -1,527 +0,0 @@
-## Test for a suspected bug and tests for debugging.
-
-use strict;
-use warnings;
-use Data::Dumper;
-
-BEGIN {
-  use Bio::Root::Test;
-
-  test_begin( -tests => 174 );
-
-  use_ok('Bio::Location::Simple');
-  use_ok('Bio::Coordinate::Pair');
-}
-
-
-## Set up two coordinate systems for the same sequence
-
-## The contig
-ok my $ctg = Bio::Location::Simple->
-  new( -seq_id => 'ctg',
-       -start  =>    1,
-       -end    => 1001,
-       -strand =>   +1,
-     );
-
-isa_ok $ctg, 'Bio::Location::Simple';
-
-
-## The contig in the chromosome
-ok my $ctg_on_chr_f = Bio::Location::Simple->
-  new( -seq_id => 'ctg on chr f',
-       -start  =>           5001,
-       -end    =>           6001,
-       -strand =>             +1,
-     );
-
-isa_ok $ctg_on_chr_f, 'Bio::Location::Simple';
-
-
-## The contig in the chromosome (again)
-ok my $ctg_on_chr_r = Bio::Location::Simple->
-  new( -seq_id => 'ctg on chr r',
-       -start  =>           5001,
-       -end    =>           6001,
-       -strand =>             -1,
-     );
-
-isa_ok $ctg_on_chr_r, 'Bio::Location::Simple';
-
-
-
-
-
-## Set up the mapping between them
-
-ok my $agp_f = Bio::Coordinate::Pair->
-  new( -in  => $ctg,
-       -out => $ctg_on_chr_f
-     );
-
-isa_ok $agp_f, 'Bio::Coordinate::Pair';
-
-
-ok my $agp_r = Bio::Coordinate::Pair->
-  new( -in  => $ctg,
-       -out => $ctg_on_chr_r
-     );
-
-isa_ok $agp_r, 'Bio::Coordinate::Pair';
-
-
-
-
-
-## Perform some very basic sanity testing on the resulting map objects
-
-## f
-
-ok $agp_f->test;
-
-is $agp_f->in->seq_id, 'ctg';
-is $agp_f->in->start,      1;
-is $agp_f->in->end,     1001;
-is $agp_f->in->strand,    +1;
-
-is $agp_f->out->seq_id, 'ctg on chr f';
-is $agp_f->out->start,            5001;
-is $agp_f->out->end,              6001;
-is $agp_f->out->strand,             +1;
-
-
-## r
-
-ok $agp_r->test;
-
-is $agp_r->in->seq_id, 'ctg';
-is $agp_r->in->start,      1;
-is $agp_r->in->end,     1001;
-is $agp_r->in->strand,    +1;
-
-is $agp_r->out->seq_id, 'ctg on chr r';
-is $agp_r->out->start,            5001;
-is $agp_r->out->end,              6001;
-is $agp_r->out->strand,             -1;
-
-
-
-
-
-##
-## Map a particular match through both map objects
-##
-
-## Define the match 1
-ok my $match_on_ctg_1 = Bio::Location::Simple->
-  new( -seq_id => 'hit 1',
-       -start  =>      25,
-       -end    =>     225,
-       -strand =>      +1,
-     );
-
-isa_ok $match_on_ctg_1, 'Bio::LocationI';
-
-
-# Convert the match from contig into chromosomal coordinates
-
-ok my $match_on_chr_1_f =
-  $agp_f->map( $match_on_ctg_1 );
-
-isa_ok $match_on_chr_1_f, 'Bio::Coordinate::Result';
-
-
-ok my $match_on_chr_1_r =
-  $agp_r->map( $match_on_ctg_1 );
-
-isa_ok $match_on_chr_1_r, 'Bio::Coordinate::Result';
-
-
-
-## Perform some very basic sanity testing on the match objects
-
-is $match_on_ctg_1->seq_id, 'hit 1';
-is $match_on_ctg_1->start,       25;
-is $match_on_ctg_1->end,        225;
-is $match_on_ctg_1->strand,      +1;
-
-is $match_on_chr_1_f->seq_id, 'ctg on chr f';
-is $match_on_chr_1_f->start,            5025;
-is $match_on_chr_1_f->end,              5225;
-is $match_on_chr_1_f->strand,             +1;
-
-is $match_on_chr_1_r->seq_id, 'ctg on chr r';
-is $match_on_chr_1_r->start,            5777;
-is $match_on_chr_1_r->end,              5977;
-is $match_on_chr_1_r->strand,             -1;
-
-
-
-## Define the match 2
-ok my $match_on_ctg_2 = Bio::Location::Simple->
-  new( -seq_id => 'hit 2',
-       -start  =>      25,
-       -end    =>     225,
-       -strand =>      -1,
-     );
-
-isa_ok $match_on_ctg_2, 'Bio::LocationI';
-
-
-# Convert the match from contig into chromosomal coordinates
-
-ok my $match_on_chr_2_f =
-  $agp_f->map( $match_on_ctg_2 );
-
-isa_ok $match_on_chr_2_f, 'Bio::Coordinate::Result';
-
-
-ok my $match_on_chr_2_r =
-  $agp_r->map( $match_on_ctg_2 );
-
-isa_ok $match_on_chr_2_r, 'Bio::Coordinate::Result';
-
-
-
-
-## Perform some very basic sanity testing on the match objects
-
-is $match_on_ctg_2->seq_id, 'hit 2';
-is $match_on_ctg_2->start,       25;
-is $match_on_ctg_2->end,        225;
-is $match_on_ctg_2->strand,      -1;
-
-is $match_on_chr_2_f->seq_id, 'ctg on chr f';
-is $match_on_chr_2_f->start,            5025;
-is $match_on_chr_2_f->end,              5225;
-is $match_on_chr_2_f->strand,             -1;
-
-is $match_on_chr_2_r->seq_id, 'ctg on chr r';
-is $match_on_chr_2_r->start,            5777;
-is $match_on_chr_2_r->end,              5977;
-is $match_on_chr_2_r->strand,             +1;
-
-
-
-
-
-
-
-## OK, now we can get down to some debugging...
-
-
-
-## TEST ONE
-
-## Create a match that goes off the end of the contig
-
-## Define the match 3
-ok my $match_on_ctg_3 = Bio::Location::Simple->
-  new( -seq_id => 'hit 3',
-       -start  =>     925,
-       -end    =>    1125,
-       -strand =>      +1,
-     );
-
-isa_ok $match_on_ctg_3, 'Bio::LocationI';
-
-
-# Convert the match from contig into chromosomal coordinates
-
-ok my $match_on_chr_3_f =
-  $agp_f->map( $match_on_ctg_3 );
-
-isa_ok $match_on_chr_3_f, 'Bio::Coordinate::Result';
-
-
-ok my $match_on_chr_3_r =
-  $agp_r->map( $match_on_ctg_3 );
-
-isa_ok $match_on_chr_3_r, 'Bio::Coordinate::Result';
-
-
-
-## Perform some very basic sanity testing on the match objects
-
-is $match_on_ctg_3->seq_id, 'hit 3';
-is $match_on_ctg_3->start,      925;
-is $match_on_ctg_3->end,       1125;
-is $match_on_ctg_3->strand,      +1;
-
-is $match_on_chr_3_f->seq_id, 'ctg on chr f';
-is $match_on_chr_3_f->start,            5925;
-isnt $match_on_chr_3_f->end,            6125; # Gets truncated to maximum!
-is $match_on_chr_3_f->end,              6001; # Gets truncated to maximum!
-is $match_on_chr_3_f->strand,             +1;
-
-#print Dumper $match_on_ctg_3;
-#print Dumper $match_on_chr_3_f;
-
-is $match_on_chr_3_r->seq_id, 'ctg on chr r';
-isnt $match_on_chr_3_r->start,          4877; # Gets truncated to minimum!
-is $match_on_chr_3_r->start,            5001; # Gets truncated to minimum!
-is $match_on_chr_3_r->end,              5077;
-#is $match_on_chr_3_r->strand,             -1; # FAIL
-is $match_on_chr_3_r->strand,          undef; # See Bio::Location::Split
-
-#print Dumper $match_on_ctg_3;
-#print Dumper $match_on_chr_3_r;
-
-
-
-## Define the match 4
-ok my $match_on_ctg_4 = Bio::Location::Simple->
-  new( -seq_id => 'hit 4',
-       -start  =>     925,
-       -end    =>    1125,
-       -strand =>      -1,
-     );
-
-isa_ok $match_on_ctg_4, 'Bio::LocationI';
-
-
-# Convert the match from contig into chromosomal coordinates
-
-ok my $match_on_chr_4_f =
-  $agp_f->map( $match_on_ctg_4 );
-
-isa_ok $match_on_chr_4_f, 'Bio::Coordinate::Result';
-
-
-ok my $match_on_chr_4_r =
-  $agp_r->map( $match_on_ctg_4 );
-
-isa_ok $match_on_chr_4_r, 'Bio::Coordinate::Result';
-
-
-
-## Perform some very basic sanity testing on the match objects
-
-is $match_on_ctg_4->seq_id, 'hit 4';
-is $match_on_ctg_4->start,      925;
-is $match_on_ctg_4->end,       1125;
-is $match_on_ctg_4->strand,      -1;
-
-is $match_on_chr_4_f->seq_id, 'ctg on chr f';
-is $match_on_chr_4_f->start,            5925;
-isnt $match_on_chr_4_f->end,            6125; # Gets truncated to maximum!
-is $match_on_chr_4_f->end,              6001; # Gets truncated to maximum!
-is $match_on_chr_4_f->strand,             -1;
-
-#print Dumper $match_on_ctg_4;
-#print Dumper $match_on_chr_4_f;
-
-is $match_on_chr_4_r->seq_id, 'ctg on chr r';
-isnt $match_on_chr_4_r->start,          4877; # Gets truncated to minimum!
-is $match_on_chr_4_r->start,            5001; # Gets truncated to minimum!
-is $match_on_chr_4_r->end,              5077;
-#is $match_on_chr_4_r->strand,             +1; # FAIL
-is $match_on_chr_4_r->strand,          undef; # See Bio::Location::Split
-
-#print Dumper $match_on_ctg_4;
-#print Dumper $match_on_chr_4_r;
-
-
-
-
-
-
-
-###
-### NOW! NONE OF THE ABOVE SHOULD BE AFFECTED BY LEAVING OFF seq_id
-### NOW SHOULD IT?!
-###
-
-## Try commenting out the three -seq_id lines below to observe strange
-## interactions!
-
-## The contig
-ok my $ctg_x = Bio::Location::Simple->
-  new( -seq_id => 'ctg',
-       -start  =>    1,
-       -end    => 1001,
-       -strand =>   +1,
-     );
-
-isa_ok $ctg_x, 'Bio::Location::Simple';
-
-## The contig in the chromosome
-ok my $ctg_on_chr_f_x = Bio::Location::Simple->
-  new( -seq_id => 'ctg on chr f',
-       -start  =>           5001,
-       -end    =>           6001,
-       -strand =>             +1,
-     );
-
-isa_ok $ctg_on_chr_f_x, 'Bio::Location::Simple';
-
-## The contig in the chromosome (again)
-ok my $ctg_on_chr_r_x = Bio::Location::Simple->
-  new( -seq_id => 'ctg on chr r',
-       -start  =>           5001,
-       -end    =>           6001,
-       -strand =>             -1,
-     );
-
-isa_ok $ctg_on_chr_r_x, 'Bio::Location::Simple';
-
-
-
-## Set up the mapping between them
-
-ok my $agp_xf = Bio::Coordinate::Pair->
-  new( -in  => $ctg_x,
-       -out => $ctg_on_chr_f_x
-     );
-
-isa_ok $agp_xf, 'Bio::Coordinate::Pair';
-
-
-ok my $agp_xr = Bio::Coordinate::Pair->
-  new( -in  => $ctg_x,
-       -out => $ctg_on_chr_r_x
-     );
-
-isa_ok $agp_xr, 'Bio::Coordinate::Pair';
-
-
-
-
-
-## Perform some very basic sanity testing on the resulting map objects
-
-## f
-
-ok $agp_xf->test;
-
-is $agp_xf->in->start,      1;
-is $agp_xf->in->end,     1001;
-is $agp_xf->in->strand,    +1;
-
-is $agp_xf->out->start,            5001;
-is $agp_xf->out->end,              6001;
-is $agp_xf->out->strand,             +1;
-
-
-## r
-
-ok $agp_r->test;
-
-is $agp_xr->in->start,      1;
-is $agp_xr->in->end,     1001;
-is $agp_xr->in->strand,    +1;
-
-is $agp_xr->out->start,            5001;
-is $agp_xr->out->end,              6001;
-is $agp_xr->out->strand,             -1;
-
-
-
-
-
-##
-## Map a particular match through both map objects
-##
-
-# Convert the match from contig into chromosomal coordinates
-
-ok my $match_on_chr_1_xf =
-  $agp_xf->map( $match_on_ctg_1 );
-
-isa_ok $match_on_chr_1_xf, 'Bio::Coordinate::Result';
-
-
-ok my $match_on_chr_1_xr =
-  $agp_xr->map( $match_on_ctg_1 );
-
-isa_ok $match_on_chr_1_xr, 'Bio::Coordinate::Result';
-
-## Perform some very basic sanity testing on the match objects
-
-is $match_on_chr_1_xf->start,            5025;
-is $match_on_chr_1_xf->end,              5225;
-is $match_on_chr_1_xf->strand,             +1;
-
-is $match_on_chr_1_xr->start,            5777;
-is $match_on_chr_1_xr->end,              5977;
-is $match_on_chr_1_xr->strand,             -1;
-
-
-
-# Convert the match from contig into chromosomal coordinates
-
-ok my $match_on_chr_2_xf =
-  $agp_xf->map( $match_on_ctg_2 );
-
-isa_ok $match_on_chr_2_xf, 'Bio::Coordinate::Result';
-
-
-ok my $match_on_chr_2_xr =
-  $agp_xr->map( $match_on_ctg_2 );
-
-isa_ok $match_on_chr_2_xr, 'Bio::Coordinate::Result';
-
-## Perform some very basic sanity testing on the match objects
-
-is $match_on_chr_2_xf->start,            5025;
-is $match_on_chr_2_xf->end,              5225;
-is $match_on_chr_2_xf->strand,             -1;
-
-is $match_on_chr_2_xr->start,            5777;
-is $match_on_chr_2_xr->end,              5977;
-is $match_on_chr_2_xr->strand,             +1;
-
-
-
-# Convert the match from contig into chromosomal coordinates
-
-ok my $match_on_chr_3_xf =
-  $agp_xf->map( $match_on_ctg_3 );
-
-isa_ok $match_on_chr_3_xf, 'Bio::Coordinate::Result';
-
-
-ok my $match_on_chr_3_xr =
-  $agp_xr->map( $match_on_ctg_3 );
-
-isa_ok $match_on_chr_3_xr, 'Bio::Coordinate::Result';
-
-## Perform some very basic sanity testing on the match objects
-
-is $match_on_chr_3_xf->start,            5925;
-isnt $match_on_chr_3_xf->end,            6125; # Gets truncated to maximum!
-is $match_on_chr_3_xf->end,              6001; # Gets truncated to maximum!
-is $match_on_chr_3_xf->strand,             +1;
-
-isnt $match_on_chr_3_xr->start,          4877; # Gets truncated to minimum!
-is $match_on_chr_3_xr->start,            5001; # Gets truncated to minimum!
-is $match_on_chr_3_xr->end,              5077;
-#is $match_on_chr_3_xr->strand,             -1; # FAIL
-is $match_on_chr_3_xr->strand,          undef; # See Bio::Location::Split
-
-
-# Convert the match from contig into chromosomal coordinates
-
-ok my $match_on_chr_4_xf =
-  $agp_xf->map( $match_on_ctg_4 );
-
-isa_ok $match_on_chr_4_xf, 'Bio::Coordinate::Result';
-
-
-ok my $match_on_chr_4_xr =
-  $agp_xr->map( $match_on_ctg_4 );
-
-isa_ok $match_on_chr_4_xr, 'Bio::Coordinate::Result';
-
-## Perform some very basic sanity testing on the match objects
-
-is $match_on_chr_4_xf->start,            5925;
-isnt $match_on_chr_4_xf->end,            6125; # Gets truncated to maximum!
-is $match_on_chr_4_xf->end,              6001; # Gets truncated to maximum!
-is $match_on_chr_4_xf->strand,             -1;
-
-isnt $match_on_chr_4_xr->start,          4877; # Gets truncated to minimum!
-is $match_on_chr_4_xr->start,            5001; # Gets truncated to minimum!
-is $match_on_chr_4_xr->end,              5077;
-#is $match_on_chr_4_xr->strand,             +1; # FAIL
-is $match_on_chr_4_xr->strand,          undef; # See Bio::Location::Split
diff --git a/t/Coordinate/CoordinateGraph.t b/t/Coordinate/CoordinateGraph.t
deleted file mode 100644
index 1db1208..0000000
--- a/t/Coordinate/CoordinateGraph.t
+++ /dev/null
@@ -1,42 +0,0 @@
-use strict;
-use warnings;
-
-BEGIN {
-    use Bio::Root::Test;
-
-    test_begin(-tests => 7);
-
-    use_ok('Bio::Coordinate::Graph');
-}
-
-ok my $graph = Bio::Coordinate::Graph->new();
-
-# graph structure
-my $dag = {
-           9  => [],
-           8  => [9],
-           7  => [],
-           6  => [7, 8],
-           5  => [],
-           4  => [5],
-           3  => [6],
-           2  => [3, 4, 6],
-           1  => [2]
-          };
-
-ok $graph->hash_of_arrays($dag);
-
-
-my $a = 1;
-my $b = 6;
-is my @a = $graph->shortest_path($a, $b), 3;
-
-$a = 7;
-$b = 8;
-is @a = $graph->shortest_path($a, $b), 1;
-
-$a = 8;
-$b = 9;
-is @a = $graph->shortest_path($a, $b), 2;
-$b = 2;
-is @a = $graph->shortest_path($a, $b), 3;
diff --git a/t/Coordinate/CoordinateMapper.t b/t/Coordinate/CoordinateMapper.t
deleted file mode 100644
index 8185e41..0000000
--- a/t/Coordinate/CoordinateMapper.t
+++ /dev/null
@@ -1,686 +0,0 @@
-use strict;
-use warnings;
-
-BEGIN {
-    use Bio::Root::Test;
-
-    test_begin(-tests => 175);
-
-    use_ok('Bio::Location::Simple');
-    use_ok('Bio::Coordinate::Pair');
-    use_ok('Bio::Coordinate::Result::Match');
-    use_ok('Bio::Coordinate::Result::Gap');
-    use_ok('Bio::Coordinate::Chain');
-    use_ok('Bio::Coordinate::Collection');
-}
-
-my ($c, $value);
-
-ok $c = Bio::Coordinate::Result::Match-> new;
-ok $c = Bio::Coordinate::Result::Gap-> new;
-
-# propepide
-my $match1 = Bio::Location::Simple->new
-    (-seq_id => 'propeptide', -start => 21, -end => 40, -strand=>1 );
-# peptide
-my $match2 = Bio::Location::Simple->new
-    (-seq_id => 'peptide', -start => 1, -end => 20, -strand=>1 );
-
-ok my $pair = Bio::Coordinate::Pair->new(-in => $match1,
-                                         -out => $match2,
-                                         -negative => 0, # false, default
-                                        );
-
-ok $pair->test;
-is $pair->strand(), 1; #  = in->strand * out->strand
-is $pair->in->seq_id(), 'propeptide';
-
-
-my ($count, $pos, $pos2, $res, $match, $res2);
-
-
-#
-# match within
-#
-$pos = Bio::Location::Simple->new
-    (-start => 25, -end => 25, -strand=> -1 );
-
-# results are in Bio::Coordinate::Result
-# they can be Matches and Gaps; are  Bio::LocationIs
-ok $res = $pair->map($pos);
-isa_ok $res, 'Bio::Coordinate::Result';
-isa_ok $res, 'Bio::Location::SplitLocationI';
-is $res->each_match, 1;
-is $res->each_gap, 0;
-is $res->each_Location, 1;
-
-isa_ok $res->match, 'Bio::LocationI';
-isa_ok $res->match, 'Bio::Coordinate::Result::Match';
-is $res->match->start, 5;
-is $res->match->end, 5;
-is $res->match->strand, -1;
-is $res->match->seq_id, 'peptide';
-is $res->start, 5;
-is $res->end, 5;
-is $res->strand, -1;
-#is $res->seq_id, 'peptide';
-
-# lets do the reverse
-$match = $res->match;
-ok $pair->swap;
-$res2 = $pair->map($match);
-is $res2->match->start, $pos->start;
-is $res2->match->end, $pos->end;
-is $res2->match->strand, $pos->strand;
-is $res2->match->seq_id, $pair->out->seq_id;
-ok $pair->swap;
-
-#
-# match outside = Gap
-#
-$pos = Bio::Location::Simple->new (-start => 5, -end => 5 );
-
-ok $res = $pair->map($pos);
-#$res->verbose(2);
-is $res->each_Location, 1;
-is $res->each_gap, 1;
-
-isa_ok $res->gap, 'Bio::Coordinate::Result::Gap';
-isa_ok $res->gap, 'Bio::LocationI';
-is $res->gap->strand, 1;
-is $res->gap->start, 5;
-is $res->gap->length, $pos->length;
-is $res->gap->seq_id, 'propeptide';
-
-
-#
-# partial match = gap & match
-#
-$pos2 = Bio::Location::Simple->new
-    (-start => 20, -end => 22, -strand=> -1 );
-
-ok $res = $pair->map($pos2);
-
-is $res->each_match, 1;
-is $res->each_gap, 1;
-is $res->each_Location, 2;
-is $res->match->length + $res->gap->length, $pos2->length;
-
-is $res->match->start, 1;
-is $res->match->end, 2;
-is $res->match->seq_id, 'peptide';
-is $res->match->strand, -1;
-is $res->gap->start, 20;
-is $res->gap->end, 20;
-is $res->gap->seq_id, 'propeptide';
-is $res->gap->strand, -1;
-
-#
-# partial match =  match & gap
-#
-$pos2 = Bio::Location::Simple->new (-start => 40, -end => 41, -strand=> 1 );
-ok $res = $pair->map($pos2);
-is $res->match->length + $res->gap->length, $pos2->length;
-
-#
-#enveloping
-#
-$pos2 = Bio::Location::Simple->new (-start => 19, -end => 41, -strand=> 1 );
-ok $res = $pair->map($pos2);
-$count = 0; map {$count += $_->length} $res->each_Location;
-is $count, $pos2->length;
-
-
-
-
-#
-# Testing insertions
-#
-#out
-$pos = Bio::Location::Simple->new (-start => 5, -end => 6, -location_type=>'^');
-$res = $pair->map($pos);
-is $res->each_gap, 1;
-is $res->each_Location, 1;
-
-#in
-$pos = Bio::Location::Simple->new (-start => 21, -end => 22, -location_type=>'^');
-$res = $pair->map($pos);
-is $res->each_match, 1;
-is $res->each_Location, 1;
-
-#just before
-$pos = Bio::Location::Simple->new (-start => 20, -end => 21, -location_type=>'^');
-$res = $pair->map($pos);
-is $res->each_gap, 1;
-is $res->each_Location, 1;
-
-#just after
-$pos = Bio::Location::Simple->new (-start => 40, -end => 41, -location_type=>'^');
-$res = $pair->map($pos);
-is $res->each_gap, 1;
-is $res->each_Location, 1;
-
-#
-# strandness
-#
-#   11   6 4 2
-#  -|--------|-
-#  -|--------|-
-#   2    7 9 11
-#
-
-# from
-$match1 = Bio::Location::Simple->new
-    (-seq_id => 'from', -start => 2, -end => 11, -strand=>1 );
-# to
-$match2 = Bio::Location::Simple->new
-    (-seq_id => 'to', -start => 2, -end => 11, -strand=>-1 );
-$pair = Bio::Coordinate::Pair->new(-in => $match1,
-                                   -out => $match2
-                                  );
-#
-# match within
-#
-
-ok $pair->test;
-is $pair->strand(), -1;
-$pos = Bio::Location::Simple->new
-    (-seq_id => 'from', -start => 7, -end => 9, -strand=>1 );
-$res = $pair->map($pos);
-is $res->match->start, 4;
-is $res->match->end, 6;
-is $res->match->strand, -1;
-
-$pos = Bio::Location::Simple->new
-    (-seq_id => 'from', -start => 3, -end => 10, -strand=>-1 );
-$res = $pair->map($pos);
-is $res->match->start, 3;
-is $res->match->end, 10;
-is $res->match->strand, 1;
-
-#
-# match outside = Gap
-#
-$pos = Bio::Location::Simple->new
-    (-seq_id => 'from', -start => 1, -end => 1, -strand=>1 );
-$res = $pair->map($pos);
-is $res->gap->start, 1;
-is $res->gap->end, 1;
-is $res->gap->strand, 1;
-$pos = Bio::Location::Simple->new
-    (-seq_id => 'from', -start => 12, -end => 12, -strand=>-1 );
-$res = $pair->map($pos);
-is $res->gap->start, 12;
-is $res->gap->end, 12;
-is $res->gap->strand, -1;
-
-
-#
-# partial match1 = gap & match
-#
-$pos = Bio::Location::Simple->new
-    (-seq_id => 'from', -start => 1, -end => 7, -strand=>-1 );
-$res = $pair->map($pos);
-is $res->gap->start, 1;
-is $res->gap->end, 1;
-is $res->gap->strand, -1;
-is $res->match->start, 6;
-is $res->match->end, 11;
-is $res->match->strand, 1;
-
-#
-# partial match2 =  match & gap
-#
-
-$pos = Bio::Location::Simple->new
-    (-seq_id => 'from', -start => 9, -end => 12, -strand=>-1 );
-$res = $pair->map($pos);
-is $res->match->start, 2;
-is $res->match->end, 4;
-is $res->match->strand, 1;
-is $res->gap->start, 12;
-is $res->gap->end, 12;
-is $res->gap->strand, -1;
-
-#
-#enveloping
-#
-
-$pos = Bio::Location::Simple->new
-    (-seq_id => 'from', -start => 1, -end => 12, -strand=>-1 );
-$res = $pair->map($pos);
-is $res->match->start, 2;
-is $res->match->end, 11;
-is $res->match->strand, 1;
-
-my ($gap1, $gap2) = $res->each_gap;
-is $gap1->start, 1;
-is $gap1->end, 1;
-is $gap1->strand, -1;
-is $gap2->start, 12;
-is $gap2->end, 12;
-is $gap2->strand, -1;
-
-#
-# Chain
-#
-# chain (two) mappers together
-#
-
-# propepide
-$match1 = Bio::Location::Simple->new
-    (-seq_id => 'propeptide', -start => 5, -end => 40, -strand=>1 );
-# peptide
-$match2 = Bio::Location::Simple->new
-    (-seq_id => 'peptide', -start => 1, -end => 36, -strand=>1 );
-
-ok $pair = Bio::Coordinate::Pair->new(-in => $match1,
-                                      -out => $match2
-                                      );
-
-
-ok my $chain = Bio::Coordinate::Chain->new;
-ok $chain->add_mapper($pair);
-$chain->add_mapper($pair);
-
-
-$pos = Bio::Location::Simple->new
-    (-seq_id => 'from', -start => 6, -end => 21, -strand=> 1 );
-
-#  6 ->  2 ->  1
-# 21 -> 17 -> 13
-$match = $chain->map($pos);
-isa_ok $match, 'Bio::Coordinate::Result::Match';
-is $match->start, 1;
-is $match->end, 13;
-is $match->strand, 1;
-
-
-
-#
-# Collection
-#
-#         1   5     6   10
-#         |---|     |---|
-#-----|-----------------------
-#     1   5   9     15  19
-#         pair1     pair2
-
-# gene
-$match1 = Bio::Location::Simple->new
-    (-seq_id => 'gene', -start => 5, -end => 9, -strand=>1 );
-# exon2
-$match2 = Bio::Location::Simple->new
-    (-seq_id => 'exon1', -start => 1, -end => 5, -strand=>1 );
-
-ok my $pair1 = Bio::Coordinate::Pair->new(-in => $match1,
-                                          -out => $match2,
-                                        );
-# gene
-my $match3 = Bio::Location::Simple->new
-    (-seq_id => 'gene', -start => 15, -end => 19, -strand=>1 );
-# exon
-my $match4 = Bio::Location::Simple->new
-    (-seq_id => 'exon2', -start => 6, -end => 10, -strand=>1 );
-
-ok my $pair2 = Bio::Coordinate::Pair->new(-in => $match3,
-                                          -out => $match4,
-                                         );
-
-ok my $transcribe = Bio::Coordinate::Collection->new;
-ok $transcribe->add_mapper($pair1);
-ok $transcribe->add_mapper($pair2);
-
-
-# simple match
-$pos = Bio::Location::Simple->new (-start => 5, -end => 9 );
-ok $res = $transcribe->map($pos);
-is $res->match->start, 1;
-is $res->match->end, 5;
-is $res->match->seq_id, 'exon1';
-
-# flank pre
-$pos = Bio::Location::Simple->new (-start => 2, -end => 9 );
-ok $res = $transcribe->map($pos);
-is $res->each_gap, 1;
-is $res->each_match, 1;
-is $res->match->start, 1;
-is $res->match->end, 5;
-
-# flank post
-$pos = Bio::Location::Simple->new (-start => 5, -end => 12 );
-ok $res = $transcribe->map($pos);
-is $res->each_gap, 1;
-is $res->each_match, 1;
-is $res->match->start, 1;
-is $res->match->end, 5;
-
-# match more than two
-$pos = Bio::Location::Simple->new (-start => 5, -end => 19 );
-ok $res = $transcribe->map($pos);
-is $res->each_gap, 2;
-is $res->each_match, 2;
-
-
-
-# testing sorting
-#
-#         1   5     6   10    11  15
-#         |---|     |---|     |---|
-#-----|-----------------------|---|--
-#     1   5   9     15  19    25  29
-#         pair1     pair2     pair3
-#
-#
-# create the third pair
-# gene
-my $match5 = Bio::Location::Simple->new
-    (-seq_id => 'gene', -start => 25, -end => 29, -strand=>1 );
-# exon
-my $match6 = Bio::Location::Simple->new
-    (-seq_id => 'exon3', -start => 11, -end => 15, -strand=>1 );
-
-my $pair3 = Bio::Coordinate::Pair->new(-in => $match5,
-                                       -out => $match6
-                                      );
-
-# create a new collection in wrong order
-$transcribe = Bio::Coordinate::Collection->new;
-$transcribe->add_mapper($pair3);
-$transcribe->add_mapper($pair1);
-$transcribe->add_mapper($pair2);
-ok $transcribe->sort;
-my @res;
-map {push @res, $_->in->start } $transcribe->each_mapper;
-ok compare_arrays ([5, 15, 25], \@res);
-
-
-#
-# Test using genomic data
-#
-
-my $mapper = Bio::Coordinate::Collection->new;
-
-load_data($mapper, undef );
-
-# transform a segment entirely within the first rawcontig
-#test_transform ($mapper,
-#               [627012, 2, 5, -1, "rawcontig"],
-#               ["chr1", 2, 5, -1]);
-$pos = Bio::Location::Simple->new (-start => 2, -end => 5, -strand => -1);
-$res = $mapper->map($pos);
-is $res->match->start, 2;
-is $res->match->end, 5;
-is $res->match->strand, -1;
-is $res->match->seq_id, '627012';
-
-## now a split coord
-my @testres = (
-             [314696, 31917, 31937, -1],
-             [341, 126, 59773, -1],
-             [315843, 5332, 5963, +1]
-);
-$pos = Bio::Location::Simple->new (-start => 383700, -end => 444000, -strand => 1);
-$res = $mapper->map($pos);
- @res =  $res->each_match;
-compare (shift @res, shift @testres);
-compare (shift @res, shift @testres);
-compare (shift @res, shift @testres);
-
-## now a simple gap
- at testres = (
-            [627011, 7447, 7507, +1],
-            ["chr1", 273762, 273781, 1]
-           );
-$pos = Bio::Location::Simple->new (-start => 273701, -end => 273781, -strand => 1);
-$res = $mapper->map($pos);
-is $res->each_match, 1;
-is $res->each_gap, 1;
- at res =  $res->each_Location;
-compare (shift @res, shift @testres);
-compare (shift @res, shift @testres);
-
-ok $mapper->swap;
-$pos = Bio::Location::Simple->new
-    (-start => 2, -end => 5, -strand => -1, -seq_id => '627012');
-$res = $mapper->map($pos);
-is $res->match->start, 2;
-is $res->match->end, 5;
-is $res->match->strand, -1;
-is $res->match->seq_id, 'chr1';
-
-#
-# tests for split locations
-#
-
-# testing a  simple pair
-$match1 = Bio::Location::Simple->new
-    (-seq_id => 'a', -start => 5, -end => 17, -strand=>1 );
-$match2 = Bio::Location::Simple->new
-    (-seq_id => 'b', -start => 1, -end => 13, -strand=>-1 );
-
-$pair = Bio::Coordinate::Pair->new(-in => $match1,
-                                   -out => $match2,
-                                  );
-
-# split location
-
-ok my $split = Bio::Location::Split->new();
-ok $split->add_sub_Location(Bio::Location::Simple->new(-start=>6,
-                                                      -end=>8,
-                                                      -strand=>1));
-$split->add_sub_Location(Bio::Location::Simple->new(-start=>15,
-                                                   -end=>16,
-                                                   -strand=>1));
-
-$res=$pair->map($split);
-ok my @sublocs = $res->each_Location(1);
-is @sublocs, 2;
-
-#print Dumper \@sublocs;
-is $sublocs[0]->start, 2;
-is $sublocs[0]->end, 3;
-is $sublocs[1]->start, 10;
-is $sublocs[1]->end, 12;
-
-
-
-#
-# from Align
-#
-
-use Bio::Coordinate::Utils;
-use Bio::LocatableSeq;
-use Bio::SimpleAlign;
-
-my $string;
-#y $out = IO::String->new($string);
-
-#AAA/3-10    --wtatgtng
-#BBB/1-7     -aaaat-tt-
-
-my $s1 = Bio::LocatableSeq->new(-id => 'AAA',
-                                -seq => '--wtatgtng',
-                                -start => 3,
-                                -end => 10,
-                                -alphabet => 'dna'
-                               );
-my $s2 = Bio::LocatableSeq->new(-id => 'BBB',
-                                -seq => '-aaaat-tt-',
-                                -start => 1,
-                                -end => 7,
-                                -alphabet => 'dna'
-                               );
-$a = Bio::SimpleAlign->new();
-$a->add_seq($s1);
-$a->add_seq($s2);
-#use Data::Dumper;
-
-ok my $uti = Bio::Coordinate::Utils->new;
-$mapper = $uti->from_align($a);
-#print Dumper $mapper;
-is $mapper->return_match, 1;
-is $mapper->return_match(1), 1;
-
-
-$pos = Bio::Location::Simple->new
-    (-start => 4, -end => 8, -strand => 1);
-$res = $mapper->map($pos);
-#print Dumper $res;
-
-exit; # end of tests
-#
-# subroutines only after this
-#
-
-sub compare_arrays {
-    my ($first, $second) = @_;
-
-    return 0 unless @$first == @$second;
-    for (my $i = 0; $i < @$first; $i++) {
-        return 0 if $first->[$i] ne $second->[$i];
-    }
-    return 1;
-}
-
-
-sub compare {
-    my ($match, $test) = @_;
-    is $match->seq_id eq $test->[0], 1,
-        "Match: |". $match->seq_id. "| Test: ". $test->[0]. "|";
-    is $match->start, $test->[1];
-    is $match->end, $test->[2];
-    is $match->strand, $test->[3];
-}
-
-
-sub load_data {
-    my ($map, $reverse) = @_;
-
-#chr_name	raw_id	chr_start	chr_end	raw_start	raw_end	raw_ori
-    my @sgp_dump = split ( /\n/, qq {
-chr1	627012	1	31276	1	31276	1
-chr1	627010	31377	42949	72250	83822	-1
-chr1	2768	42950	180950	251	138251	1
-chr1	10423	180951	266154	1	85204	-1
-chr1	627011	266255	273761	1	7507	1
-chr1	314698	273862	283122	1	9261	-1
-chr1	627009	283223	331394	251	48422	-1
-chr1	314695	331395	352162	1	20768	-1
-chr1	314697	352263	359444	1	7182	-1
-chr1	314696	359545	383720	31917	56092	-1
-chr1	341	383721	443368	126	59773	-1
-chr1	315843	443369	444727	5332	6690	1
-chr1	315844	444828	453463	1	8636	-1
-chr1	315834	453564	456692	1	3129	1
-chr1	315831	456793	458919	1	2127	1
-chr1	315827	459020	468965	251	10196	-1
-chr1	544782	468966	469955	1	990	-1
-chr1	315837	470056	473446	186	3576	-1
-chr1	544807	473447	474456	1	1010	-1
-chr1	315832	474557	477289	1	2733	1
-chr1	544806	477390	477601	1086	1297	-1
-chr1	315840	477602	482655	21	5074	1
-chr1	544802	482656	483460	1	805	-1
-chr1	544811	483561	484162	6599	7200	-1
-chr1	315829	484163	498439	15	14291	-1
-chr1	544813	498440	500980	1	2541	-1
-chr1	544773	501081	502190	1217	2326	-1
-chr1	315828	502191	513296	72	11177	1
-chr1	544815	513297	517276	2179	6158	1
-chr1	315836	517277	517662	2958	3343	1
-chr1	544805	517663	520643	299	3279	1
-chr1	315835	520744	521682	2462	3400	-1
-chr1	544784	521683	526369	54	4740	1
-chr1	544796	526470	527698	1	1229	1
-chr1	315833	527799	528303	2530	3034	-1
-chr1	544803	528304	531476	1	3173	-1
-chr1	544821	531577	532691	1	1115	1
-chr1	544810	532792	533843	1	1052	1
-chr1	544800	533944	535249	1	1306	1
-chr1	544786	535350	536652	1	1303	1
-chr1	544814	536753	538358	1	1606	1
-chr1	544812	538459	540004	1	1546	1
-chr1	544818	540105	541505	1	1401	1
-chr1	544816	541606	542693	1	1088	1
-chr1	544778	542794	544023	1	1230	1
-chr1	544779	544124	545709	1	1586	1
-chr1	544804	545810	547660	1	1851	1
-chr1	544774	547761	550105	1	2345	1
-chr1	544817	550206	552105	1	1900	1
-chr1	544781	552206	553640	1	1435	1
-chr1	315830	553741	555769	1	2029	-1
-chr1	544819	555870	558904	1	3035	-1
-chr1	544777	559005	560670	1	1666	1
-chr1	544795	560771	563092	1	2322	1
-chr1	544809	563193	565523	1	2331	1
-chr1	544808	565624	568113	1	2490	1
-chr1	544798	568214	570324	1	2111	1
-chr1	544783	570425	574640	1	4216	1
-chr1	544824	574741	578101	1	3361	1
-chr1	544775	578202	580180	1	1979	-1
-chr1	544825	580281	581858	1	1578	-1
-chr1	544772	581959	585312	1	3354	1
-chr1	544793	585413	588740	1	3328	1
-chr1	544785	588841	591656	1	2816	-1
-chr1	544791	591757	594687	1	2931	1
-chr1	544820	594788	597671	1	2884	1
-chr1	544790	597772	601587	1	3816	1
-chr1	544794	601688	603324	1	1637	-1
-chr1	544823	603425	607433	1	4009	1
-chr1	544789	607534	610856	1	3323	1
-chr1	544799	610957	614618	1	3662	1
-chr1	544776	614719	618674	1	3956	-1
-chr1	544797	618775	624522	1	5748	-1
-chr1	544787	624623	629720	1	5098	-1
-chr1	544792	629821	637065	1	7245	1
-chr1	622020	837066	851064	1	13999	-1
-chr1	622021	851165	854101	1	2937	-1
-chr1	622016	854202	856489	1	2288	-1
-chr1	625275	856590	888524	420	32354	-1
-chr1	622015	888525	891483	1	2959	-1
-chr1	622024	891584	896208	8871	13495	-1
-chr1	625537	896209	952170	1	55962	-1
-chr1	625538	952271	1051812	251	99792	-1
-chr1	625277	1051813	1055193	1	3381	-1
-chr1	625266	1055294	1062471	1	7178	-1
-chr1	598266	1062572	1086504	11	23943	-1
-chr1	625271	1086505	1096571	3943	14009	1
-chr1	625265	1096572	1100161	2436	6025	-1
-chr1	173125	1100162	1106067	3329	9234	-1
-chr1	598265	1106068	1112101	286	6319	1
-chr1	625360	1112102	1172572	251	60721	1
-chr1	173111	1172573	1172716	1	144	-1
-chr1	173103	1172817	1173945	1	1129	1
-chr1	170531	1174046	1174188	8791	8933	-1
-chr1	625363	1174189	1183590	67	9468	1
-chr1	173120	1183591	1183929	153	491	-1
-chr1	170509	1183930	1184112	864	1046	1
-chr1	173119	1184213	1189703	1	5491	-1
-chr1	625357	1189804	1213915	1	24112	1
-chr1	625359	1214016	1216330	1	2315	1
-} );
-    # test the auto-sorting feature
-    #	@sgp_dump = reverse (@sgp_dump) if defined $reverse;
-
-    my $first = 1;
-    for my $line ( @sgp_dump ) {
-        if( $first ) { $first = 0; next; }
-        my ( $chr_name, $contig_id, $chr_start, $chr_end,
-             $contig_start, $contig_end, $contig_strand ) =
-                 split ( /\t/, $line );
-
-        my $match1 = Bio::Location::Simple->new
-            (-seq_id => $chr_name, -start => $chr_start,
-             -end => $chr_end, -strand=>1 );
-        my $match2 = Bio::Location::Simple->new
-            (-seq_id => $contig_id, -start => $contig_start,
-             -end => $contig_end, -strand=>$contig_strand );
-
-        my $pair = Bio::Coordinate::Pair->new(-in => $match1,
-                                              -out => $match2,
-                                             );
-        $map->add_mapper($pair);
-    }
-    return $map;
-}
diff --git a/t/Coordinate/GeneCoordinateMapper.t b/t/Coordinate/GeneCoordinateMapper.t
deleted file mode 100644
index dc3f1af..0000000
--- a/t/Coordinate/GeneCoordinateMapper.t
+++ /dev/null
@@ -1,602 +0,0 @@
-use strict;
-use warnings;
-
-BEGIN {
-    use Bio::Root::Test;
-
-    test_begin(-tests => 116);
-
-    use_ok('Bio::Location::Simple');
-    use_ok('Bio::Coordinate::Pair');
-    use_ok('Bio::Coordinate::ExtrapolatingPair');
-    use_ok('Bio::Coordinate::GeneMapper');
-}
-
-#
-# Extrapolating pairs
-#
-#    No gaps returned, matches extrapolated
-#     returns always a match or undef
-#     -strict
-#
-
-
-# the  reverse strand pair
-my $inr = Bio::Location::Simple->new(-start=>2, -end=>5, -strand=>1);
-my $outr = Bio::Location::Simple->new(-start=>10, -end=>13, -strand=>-1);
-ok my $pairr = Bio::Coordinate::ExtrapolatingPair->
-    new(-in => $inr,
-        -out => $outr
-       );
-
-my $posr = Bio::Location::Simple->new
-    (-start => 3, -end => 4, -strand=> 1 );
-my $resr = $pairr->map($posr);
-is $resr->start, 11;
-is $resr->end, 12;
-is $resr->strand, -1;
-
-
-
-# propepide
-my $match1 = Bio::Location::Simple->new
-    (-seq_id => 'propeptide', -start => 21, -end => 40, -strand=>1 );
-# peptide
-my $match2 = Bio::Location::Simple->new
-    (-seq_id => 'peptide', -start => 1, -end => 20, -strand=>1 );
-
-ok my $pair = Bio::Coordinate::ExtrapolatingPair->
-    new(-in => $match1,
-        -out => $match2,
-        -strict => 1
-       );
-
-ok $pair->test;
-is $pair->strand(), 1; #  = in->strand * out->strand
-is $pair->in->seq_id(), 'propeptide';
-is $pair->strict(), 1;
-
-my ($count, $pos, $pos2, $res, $match, $res2);
-
-# match within
-$pos = Bio::Location::Simple->new
-    (-start => 25, -end => 25, -strand=> -1 );
-$res = $pair->map($pos);
-
-isa_ok $res, 'Bio::Location::Simple';
-is $res->start, 5;
-is $res->end, 5;
-is $res->strand, -1;
-is $res->seq_id, 'peptide';
-
-
-# match outside = undef
-$pos = Bio::Location::Simple->new (-start => 5, -end => 5 );
-$res = $pair->map($pos);
-
-is $res, undef;
-
-#
-# partial match = match
-#
-$pos2 = Bio::Location::Simple->new
-    (-start => 20, -end => 22, -strand=> -1 );
-
-ok $res = $pair->map($pos2);
-
-is $res->start, 0;
-is $res->end, 2;
-is $res->seq_id, 'peptide';
-is $res->strand, -1;
-
-
-#
-# partial match2 =  match & gap
-#
-$pos2 = Bio::Location::Simple->new (-start => 40, -end => 41, -strand=> 1 );
-ok $res = $pair->map($pos2);
-is $res->start, 20;
-is $res->end, 20;
-
-#
-#enveloping
-#
-$pos2 = Bio::Location::Simple->new (-start => 19, -end => 41, -strand=> 1 );
-ok $res = $pair->map($pos2);
-is $res->start, 1;
-is $res->end, 20;
-
-#
-# testing the changing the strand
-#
-
-# chr
-$match1 = Bio::Location::Simple->new
-    (-seq_id => 'chr', -start => 21, -end => 40, -strand=>1 );
-# gene
-$match2 = Bio::Location::Simple->new
-    (-seq_id => 'gene', -start => 1, -end => 20, -strand=>-1 );
-
- $pair = Bio::Coordinate::ExtrapolatingPair->
-#my $pair = Bio::Coordinate::Pair->
-    new(-in => $match1,
-        -out => $match2,
-        -strict => 0
-       );
-
-$pos = Bio::Location::Simple->new
-    (-start => 38, -end => 40, -strand=> 1 );
-$res = $pair->map($pos);
-is $res->start, 1;
-is $res->end, 3;
-is $res->strand, -1;
-
-$pos = Bio::Location::Simple->new
-    (-start => 1, -end => 3, -strand=> 1 );
-$res = $pair->map($pos);
-is $res->start, 38;
-is $res->end, 40;
-is $res->strand, -1;
-
-
-#
-#
-# Gene Mapper
-#
-#
-
-ok my $m = Bio::Coordinate::GeneMapper->new(-in => 'propeptide',
-                                            -out => 'peptide');
-#$m->verbose(2);
-
-is $m->peptide_offset(5), 5;
-
-
-# match within
-$pos = Bio::Location::Simple->new
-    (-start => 25, -end => 25, -strand=> 1 );
-$res = $m->map($pos);
-
-is $res->start, 20;
-is $res->end, 20;
-is $res->strand, 1;
-is $res->seq_id, 'peptide';
-
-
-#
-# nozero
-#
-
-# match within
-$pos = Bio::Location::Simple->new
-    (-start => 4, -end => 5, -strand=> 1 );
-$res = $m->map($pos);
-is $res->start, -1;
-is $res->end, 0;
-
-is $m->nozero('in&out'), 'in&out';
-$res = $m->map($pos);
-is $res->start, -2;
-is $res->end, -1;
-is $m->nozero(0), 0;
-
-
-
-ok $m->swap;
-$pos = Bio::Location::Simple->new
-    (-start => 5, -end => 5, -strand=> 1 );
-$res = $m->map($pos);
-is $res->start, 10;
-
-# cds -> propeptide
-is $m->in('cds'), 'cds';
-is $m->out('propeptide'), 'propeptide';
-
-$res = $m->map($pos);
-is $res->start, 2;
-ok $res = $m->_translate($pos);
-is $res->start, 2;
-ok $res = $m->_reverse_translate($pos);
-is $res->start, 13;
-is $res->end, 15;
-
-$pos = Bio::Location::Simple->new
-    (-start => 26, -end => 26, -strand=> 1 );
-$m->out('peptide');
-$res = $m->map($pos);
-is $res->start, 4;
-
-
-#
-# frame
-#
-
-$pos = Bio::Location::Simple->new
-    (-start => 1, -end => 3, -strand=> 1 );
-$res = $m->_frame($pos);
-is $res->start, 1;
-is $res->end, 3;
-
-
-# Collection representing exons
-#
-#  cds    1   5     6   10    11  15
-#  exon   1   5     1   5     1   5
-#  gene   1   5    11   15   21   25
-#         |---|     |---|     |---|
-#-----|-----------------------|---|--
-# chr 1   5   9    15   19   25   29
-#         pair1     pair2     pair3
-
-# gene
-my $e1 = Bio::Location::Simple->new
-    (-seq_id => 'gene', -start => 5, -end => 9, -strand=>1 );
-my $e2 = Bio::Location::Simple->new
-    (-seq_id => 'gene', -start => 15, -end => 19, -strand=>1 );
-my $e3 = Bio::Location::Simple->new
-    (-seq_id => 'gene', -start => 25, -end => 29, -strand=>1 );
-my @cexons = ($e1, $e2, $e3);
-
-$m= Bio::Coordinate::GeneMapper->new();
-
-$m->in('chr');
-$m->out('gene');
-my $off = $m->cds(5);
-is $off->start, 5; # start of the coding region
-is $m->exons(@cexons), 3;
-
-$m->out('exon');
-$pos = Bio::Location::Simple->new
-    (-start => 6, -end => 7, -strand=> 1 );
-$res = $m->map($pos);
-
-is $res->start, 2;
-is $res->end, 3;
-
-$m->out('negative_intron');
-$pos = Bio::Location::Simple->new
-    (-start => 12, -end => 14, -strand=> 1 );
-$res = $m->map($pos);
-is $res->start, -3;
-is $res->end, -1;
-is $res->seq_id, 'intron1';
-
-
-# cds
-$m->out('cds');
-$pos = Bio::Location::Simple->new
-    (-start => 5, -end => 9, -strand=> 1 );
-$res = $m->map($pos);
-is $res->start, 1;
-is $res->end, 5;
-
-$pos = Bio::Location::Simple->new
-    (-start => 15, -end => 25, -strand=> 1 );
-$res = $m->map($pos);
-is $res->start, 6;
-is $res->end, 11;
-
-$pos = Bio::Location::Simple->new
-    (-start => 5, -end => 19, -strand=> 1 );
-$res = $m->map($pos);
-is $res->start, 1;
-is $res->end, 10;
-
-
-#
-# chr to cds ; ranges into one
-#
-my $exons = Bio::Location::Split->new(-seq_id => 'gene');
-$exons->add_sub_Location($e1);
-$exons->add_sub_Location($e2);
-$exons->add_sub_Location($e3);
-
-$res = $m->map($exons);
-isa_ok $res,'Bio::Location::Simple';
-is $res->start, 1;
-is $res->end, 15;
-
-#
-# cds to chr; single range into two
-#
-$m->in('cds');
-$m->out('gene');
-
-$pos = Bio::Location::Simple->new
-    (-start => 4, -end => 7, -strand=> 1 );
-$res = $m->map($pos);
-is $res->start, 4;
-is $res->end, 12;
-
-
-
-# Collection representing exons
-#
-#  cds  -11  -7    -6  -2    -1   3  :27
-#  cds   -6  -2    -1 1 3     4   8  :17
-#  exon   1   5     1   5     1   5
-#  gene -21  -17  -11  -7    -1 1 3  :27
-#  gene -11  -7    -1 1 3     9   13 :17
-#         |---|     |---|     |---|
-#-----|-----------------------|---|--
-# chr 1   5   9    15   19   25   29
-#         pair1     pair2     pair3
-
-$m= Bio::Coordinate::GeneMapper->new();
-
-$m->in('chr');
-$m->out('gene');
-$off = $m->cds(17);
-is $off->start, 17; # start of the coding region
-is $m->exons(@cexons), 3;
-
-# testing parameter handling in the constructor
-ok $m = Bio::Coordinate::GeneMapper->new(-in => 'gene',
-                                         -out => 'peptide',
-                                         -cds => 3,
-                                         -exons => @cexons,
-                                         -utr => 7,
-                                         -peptide_offset => 5
-                                        );
-
-
-#
-# Real life data
-# Mapping SNPs into  human serum protein MSE55 and
-# human galecting LGALS2 from Ensembl:
-#
-
-#Ensembl Gene ID	Exon Start (Chr bp)	Exon End (Chr bp)	Exon Coding Start (Chr bp)
-#	Exon Coding End (Chr bp)	Strand
-
-my @gene1_dump = split ( /\n/, qq {
-ENSG00000128283	34571058	34571126			1
-ENSG00000128283	34576610	34577350	34576888	34577350	1
-ENSG00000128283	34578646	34579858	34578646	34579355	1
-});
-
-
-my @gene2_dump = split ( /\n/, qq {
-ENSG00000100079	34590438	34590464			-1
-ENSG00000100079	34582387	34582469	34582387	34582469	-1
-ENSG00000100079	34581114	34581273	34581114	34581273	-1
-ENSG00000100079	34580784	34580950	34580804	34580950	-1
-}); # exon start should be less than end or is this intentional?
-
-#Chromosome Name	Location (bp)	Strand	Reference ID
-my @snp_dump = split ( /\n/, qq {
-22	34572694	1	2235335
-22	34572799	1	2235336
-22	34572843	1	2235337
-22	34574896	1	2076087
-22	34575256	1	2076088
-22	34578830	1	2281098
-22	34579111	1	2281099
-22	34580411	1	2235338
-22	34580591	1	2281097
-22	34580845	1	2235339
-22	34581963	1	2281100
-22	34583722	1	140057
-22	34585003	1	140058
-22	34587726	1	968725
-22	34588207	1	2284055
-22	34591507	1	1969639
-22	34591949	1	140059
-});
-shift @snp_dump;
-
-my ($cdsr, @exons) = read_gene_data(@gene1_dump);
-
-ok my $g1 = Bio::Coordinate::GeneMapper->new(-in=>'chr', -out=>'gene');
-$g1->cds($cdsr);
-
-#$pos = Bio::Location::Simple->new
-#    (-start => 34576888, -end => 34579355, -strand=> 1 );
-$res = $g1->map($cdsr);
-is $res->start, 1;
-is $res->end, 2468;
-
-$g1->exons(@exons);
-$g1->in('gene');
-$g1->out('cds');
-$res = $g1->map($res);
-is $res->start, 1;
-is $res->end, 1173;
-
-#map_snps($g1, @snp_dump);
-
-
-#gene 2 in reverse strand
-($cdsr, @exons) = read_gene_data(@gene2_dump);
-ok my $g2 = Bio::Coordinate::GeneMapper->new(-in=>'chr', -out=>'gene');
-$g2->cds($cdsr);
-
-$pos = Bio::Location::Simple->new
-    (-start => $cdsr->end-2, -end => $cdsr->end, -strand=> 1 );
-$res = $g2->map($pos);
-is $res->start, 1;
-is $res->end, 3;
-is $res->strand, -1;
-
-
-$g2->exons(@exons);
-
-#map_snps($g2, @snp_dump);
-
-
-$match1 = Bio::Location::Simple->new
-    (-seq_id => 'a', -start => 5, -end => 17, -strand=>1 );
-$match2 = Bio::Location::Simple->new
-    (-seq_id => 'b', -start => 1, -end => 13, -strand=>-1 );
-ok $pair = Bio::Coordinate::Pair->new(-in => $match1,
-                                      -out => $match2,
-                                     );
-
-#
-# split location
-#
-
-ok my $split = Bio::Location::Split->new();
-ok $split->add_sub_Location(Bio::Location::Simple->new(-start=>6,
-                                                      -end=>8,
-                                                      -strand=>1));
-$split->add_sub_Location(Bio::Location::Simple->new(-start=>15,
-                                                   -end=>16,
-                                                   -strand=>1));
-
-$res=$pair->map($split);
-ok my @sublocs = $res->each_Location(1);
-is @sublocs, 2;
-
-#print Dumper \@sublocs;
-is $sublocs[0]->start, 2;
-is $sublocs[0]->end, 3;
-is $sublocs[1]->start, 10;
-is $sublocs[1]->end, 12;
-
-# testing  cds -> gene/chr which generates a split location from a simple one
-# exons in reverse strand!
-#
-#  pept   33222     111
-#  cds    8   4     3 1-1
-#  exon   5   1     5   1
-#  gene  13   9     3 1-2
-#         |---|     |---|
-#-----|-------------------
-# chr 1   5   9    15   19
-#           e1        e2
-
-# gene
-$e1 = Bio::Location::Simple->new
-    (-seq_id => 'gene', -start => 5, -end => 9, -strand=>-1 );
-$e2 = Bio::Location::Simple->new
-    (-seq_id => 'gene', -start => 15, -end => 19, -strand=>-1 );
- at cexons = ($e1, $e2);
-my $cds= Bio::Location::Simple->new
-    (-seq_id => 'gene', -start => 5, -end => 17, -strand=>-1 );
-
-$m = Bio::Coordinate::GeneMapper->new(-in=>'cds', -out=>'chr');
-
-$m->cds($cds); # this has to be set first!?
-is $m->exons(@cexons), 2;
-
-
-my $cds_f= Bio::Location::Simple->new
-    (-start => 2, -end => 7, );
-$res = $m->map($cds_f);
-
-ok @sublocs = $res->each_Location(1);
-is @sublocs, 2;
-
-is $sublocs[0]->start, 6;
-is $sublocs[0]->end, 9;
-is $sublocs[1]->start, 15;
-is $sublocs[1]->end, 16;
-
-
-# test inex, exon & negative_intron
-
-$m->in('gene');
-$m->out('inex');
-
-$pos = Bio::Location::Simple->new
-    (-seq_id => 'gene', -start => 2, -end => 10, -strand=> 1 );
-
-$res = $m->map($pos);
-is $res->each_Location, 3;
-
-
-$m->out('intron');
-$res = $m->map($pos);
-is $res->start, 1;
-is $res->end, 5;
-is $res->strand, 1;
-
-$m->out('negative_intron');
-$res = $m->map($pos);
-is $res->start, -5;
-is $res->end, -1;
-is $res->strand, 1;
-
-is $m->_mapper_code2string('1-2'), 'chr-gene';
-is $m->_mapper_string2code('chr-gene'), '1-2';
-
-
-#todo:
-#  strict mapping mode
-#  extrapolating pair code into Bio::Coordinate::Pair ?
-
-
-
-
-
-
-sub read_gene_data {
-    my ($self, at gene_dump) = @_;
-    my ($cds_start, $cds_end, $strand, @exons);
-
-    #one line per exon
-    my ($first, $first_line);
-    for my $line ( @gene_dump ) {
-
-        my ($geneid, $exon_start, $exon_end, $exon_cstart,
-            $exon_cend, $exon_strand) = split /\t/, $line;
-
-        $strand = $exon_strand if $exon_strand;
-        #print join (' ', $geneid, $exon_start, $exon_strand), "\n";
-
-        # CDS location in chromosome coordinates
-        $cds_start = $exon_cstart if !$cds_start and $exon_cstart;
-        $cds_end = $exon_cend if $exon_cend;
-
-
-        if ($exon_start > $exon_end) {
-            ($exon_start, $exon_end) = ($exon_end, $exon_start);
-        }
-
-        my $exon = Bio::Location::Simple->new
-            (-seq_id => 'gene', -start => $exon_start,
-             -end => $exon_end, -strand=>$strand, -verbose=>2);
-        push @exons, $exon;
-        }
-
-    if ($cds_start > $cds_end) {
-        ($cds_start, $cds_end) = ($cds_end, $cds_start);
-    }
-
-    my $cdsr = Bio::Location::Simple->new (-start => $cds_start,
-                                           -end => $cds_end,
-                                           -strand=> $strand);
-
-    return ($cdsr, @exons);
-}
-
-
-sub map_snps {
-    my ($mapper, @snps) =@_;
-    $mapper->in('chr');
-    $mapper->out('cds');
-    foreach my $line (@snps) {
-        $mapper->out('cds');
-
-        my ($chr, $start, $strand, $id) = split /\t/, $line;
-        my $loc = Bio::Location::Simple->new
-            ( -start => $start,
-             -end => $start, -strand=>$strand );
-
-        my $res = $mapper->map($loc);
-        my $cds_start = 0;
-        $cds_start = $res->start if defined $res;#defined $res->start;
-        print $id, "\t", $cds_start, "\n";
-
-        # coding
-        if ($cds_start) {
-            $mapper->out('propeptide');
-            my $frame_obj = $mapper->_frame($res);
-            my $res = $mapper->map($loc);
-            my $cds_start = 0;
-            $cds_start = $res->start if defined $res;#defined $res->start;
-            print  "\t\t", $cds_start, " (", $frame_obj->start, ")\n";
-        }
-    }
-}
diff --git a/t/LocalDB/Flat.t b/t/LocalDB/Flat.t
index 5b68827..25174a6 100644
--- a/t/LocalDB/Flat.t
+++ b/t/LocalDB/Flat.t
@@ -4,13 +4,13 @@
 use strict;
 
 BEGIN {
-	use lib '.';
-	use Bio::Root::Test;
+    use lib '.';
+    use Bio::Root::Test;
 
-	test_begin(-tests => 25,
-                -requires_module => 'DB_File');
+    test_begin(-tests => 25,
+               -requires_module => 'DB_File');
 
-	use_ok('Bio::DB::Flat');
+    use_ok('Bio::DB::Flat');
 }
 
 my $verbose = test_debug();
@@ -21,10 +21,10 @@ my $tmpdir = test_output_dir();
 
 my $db = Bio::DB::Flat->new(-directory  => $tmpdir,
                             -index      => 'bdb',
-									 -dbname     => 'mydb',
-									 -format     => 'fasta',
-									 -verbose    => $verbose,
-									 -write_flag => 1 );
+                            -dbname     => 'mydb',
+                            -format     => 'fasta',
+                            -verbose    => $verbose,
+                            -write_flag => 1 );
 ok($db);
 my $dir = test_input_file('AAC12660.fa');
 my $result = $db->build_index(glob($dir));
@@ -39,7 +39,7 @@ undef $db;
 $db = Bio::DB::Flat->new(-directory  => $tmpdir,
                          -index      => 'bdb',
                          -format     => 'embl',
-						 -dbname     => 'myembl',
+                         -dbname     => 'myembl',
                          -verbose    => $verbose,
                          -write_flag => 1 );
 
@@ -63,12 +63,12 @@ is($seq->length,192);
 undef $db;
 
 $db = Bio::DB::Flat->new(-directory  => $tmpdir,
-			 -index      => 'binarysearch',
-			 -format     => 'fasta',
-			 -dbname     => 'mybinfa',
-			 -verbose    => $verbose,
-			 -write_flag => 1
-			 );
+                         -index      => 'binarysearch',
+                         -format     => 'fasta',
+                         -dbname     => 'mybinfa',
+                         -verbose    => $verbose,
+                         -write_flag => 1
+                         );
 
 $dir= test_input_file('dbfa', '1.fa');
 $result = $db->build_index($dir);
@@ -78,30 +78,32 @@ ok($seq);
 is($seq->length,808);
 undef $db;
 
-$db = Bio::DB::Flat->new(-directory  => $tmpdir,
-			 -index      => 'binarysearch',
-			 -format     => 'swiss',
-			 -dbname     => 'mybinswiss',
-			 -verbose    => $verbose,
-			 -write_flag => 1
-			 );
-$dir= test_input_file('swiss.dat');
-$result = $db->build_index($dir);
-
-ok($result);
-$seq = $db->get_Seq_by_id('ACON_CAEEL');
-ok($seq);
-is($seq->length,788);
-
-$seq = $db->get_Seq_by_id('ACON_CAEEL');
-ok($seq && ref($seq));
-
-undef $db;
-
+SKIP: {
+    test_skip(-tests => 4, -requires_module => 'Data::Stag');
+    $db = Bio::DB::Flat->new(-directory  => $tmpdir,
+                             -index      => 'binarysearch',
+                             -format     => 'swiss',
+                             -dbname     => 'mybinswiss',
+                             -verbose    => $verbose,
+                             -write_flag => 1
+                             );
+    $dir= test_input_file('swiss.dat');
+    $result = $db->build_index($dir);
+
+    ok($result);
+    $seq = $db->get_Seq_by_id('ACON_CAEEL');
+    ok($seq);
+    is($seq->length,788);
+
+    $seq = $db->get_Seq_by_id('ACON_CAEEL');
+    ok($seq && ref($seq));
+
+    undef $db;
+}
 $db = Bio::DB::Flat->new(-directory  => $tmpdir,
                          -index      => 'binarysearch',
                          -format     => 'fasta',
-								 -dbname     => 'myfasta',
+                         -dbname     => 'myfasta',
                          -verbose    => $verbose,
                          -write_flag => 1 );
 
@@ -116,7 +118,7 @@ undef $db;
 $db = Bio::DB::Flat->new(-directory  => $tmpdir,
                          -index      => 'bdb',
                          -format     => 'fasta',
-								 -dbname     => 'mybfasta',
+                         -dbname     => 'mybfasta',
                          -verbose    => $verbose,
                          -write_flag => 1 );
 
@@ -124,6 +126,6 @@ $dir = test_input_file('tmp.fst');
 $result = $db->build_index(glob($dir));
 ok($result);
 for my $id ( qw(TEST00001 TEST00002 TEST00003 TEST00004) ) {
-	$seq = $db->get_Seq_by_id($id);
-	is($seq->length,98);
+    $seq = $db->get_Seq_by_id($id);
+    is($seq->length,98);
 }
diff --git a/t/LocalDB/Index/Index.t b/t/LocalDB/Index/Index.t
index f63740d..1eec2ad 100644
--- a/t/LocalDB/Index/Index.t
+++ b/t/LocalDB/Index/Index.t
@@ -87,23 +87,26 @@ $ind->make_index(test_input_file('test.embl'));
 ok ( -e "Wibbl3" || -e "Wibbl3.pag" );
 is ($ind->fetch('AL031232')->length, 4870);
 
-$ind = Bio::Index::Swissprot->new(-filename   => 'Wibbl4',
-                                  -write_flag => 1);
-$ind->make_index(test_input_file('roa1.swiss'));
-ok ( -e "Wibbl4" || -e "Wibbl4.pag" );
-$seq = $ind->fetch('ROA1_HUMAN');
-is ($seq->display_id(), 'ROA1_HUMAN');
-$seq = $ind->fetch('P09651');
-is ($seq->display_id(), 'ROA1_HUMAN');
-
-# test id_parser
-$ind = Bio::Index::Swissprot->new(-filename   => 'Wibbl4',
-                                  -write_flag => 1);
-$ind->id_parser(\&get_id);
-$ind->make_index(test_input_file('roa1.swiss'));
-ok ( -e "Wibbl4" || -e "Wibbl4.pag" );
-$seq = $ind->fetch('X12671');
-is ($seq->length,371);
+SKIP: {
+    test_skip(-tests => 5, -requires_module => 'Data::Stag');
+    $ind = Bio::Index::Swissprot->new(-filename   => 'Wibbl4',
+                                      -write_flag => 1);
+    $ind->make_index(test_input_file('roa1.swiss'));
+    ok ( -e "Wibbl4" || -e "Wibbl4.pag" );
+    $seq = $ind->fetch('ROA1_HUMAN');
+    is ($seq->display_id(), 'ROA1_HUMAN');
+    $seq = $ind->fetch('P09651');
+    is ($seq->display_id(), 'ROA1_HUMAN');
+
+    # test id_parser
+    $ind = Bio::Index::Swissprot->new(-filename   => 'Wibbl4',
+                                      -write_flag => 1);
+    $ind->id_parser(\&get_id);
+    $ind->make_index(test_input_file('roa1.swiss'));
+    ok ( -e "Wibbl4" || -e "Wibbl4.pag" );
+    $seq = $ind->fetch('X12671');
+    is ($seq->length,371);
+}
 
 
 my $gb_ind = Bio::Index::GenBank->new(-filename => 'Wibbl5',
diff --git a/t/LocalDB/Taxonomy/sqlite.t b/t/LocalDB/Taxonomy/sqlite.t
new file mode 100644
index 0000000..30d8226
--- /dev/null
+++ b/t/LocalDB/Taxonomy/sqlite.t
@@ -0,0 +1,251 @@
+# -*-Perl-*- Test Harness script for Bioperl
+# $Id$
+
+use strict;
+
+BEGIN {
+    use lib '.';
+    use Bio::Root::Test;
+
+    #test_begin(
+    #    
+    #    -requires_modules => [qw(DBI DBD::SQLite )]
+    #);
+
+    use_ok('Bio::DB::Taxonomy');
+    use_ok('Bio::Tree::Tree');
+}
+
+my $temp_dir = test_output_dir();
+
+# TODO: run basic tests making sure that a database is not regenerated if
+# present or unless forced
+
+ok my $db_flatfile = Bio::DB::Taxonomy->new(
+    -source    => 'sqlite',
+    -nodesfile => test_input_file('taxdump', 'nodes.dmp'),
+    -namesfile => test_input_file('taxdump', 'names.dmp'),
+);
+isa_ok $db_flatfile, 'Bio::DB::Taxonomy::sqlite';
+isa_ok $db_flatfile, 'Bio::DB::Taxonomy';
+
+# By not specifying a '-directory' argument, index files go to a temporary
+# folder ($Bio::Root::IO::TEMPDIR, such as 'C:\Users\USER\AppData\Local\Temp'),
+# and are implied to be temporary. So test the ability of flatfile->DESTROY to
+# remove the temporary index files at object destruction (this also affects files
+# in "test_output_dir()", since the folder is created inside the temporary folder)
+#no warnings qw(once); # silence 'Name "$Bio::Root::IO::TEMPDIR" used only once'
+#
+#is $db_flatfile->{index_directory}, $Bio::Root::IO::TEMPDIR, 'removal of temporary index files: no -directory';
+
+#$db_flatfile->DESTROY;
+#ok not -e ($db_flatfile->{index_directory} . '/id2names');
+#ok not -e ($db_flatfile->{index_directory} . '/names2id');
+#ok not -e ($db_flatfile->{index_directory} . '/nodes');
+#ok not -e ($db_flatfile->{index_directory} . '/parents');
+
+## Test removal of temporary index files from test_output_dir folder
+## (since test_output_dir() =~ m/^$Bio::Root::IO::TEMPDIR/)
+#ok $db_flatfile = Bio::DB::Taxonomy->new(
+#    -source    => 'flatfile',
+#    -directory => $temp_dir,
+#    -nodesfile => test_input_file('taxdump', 'nodes.dmp'),
+#    -namesfile => test_input_file('taxdump', 'names.dmp'),
+#    -force     => 1,
+#);
+#is $db_flatfile->{index_directory}, $temp_dir, 'removal of temporary index files: test_output_dir()';
+#$db_flatfile->DESTROY;
+#ok not -e ($db_flatfile->{index_directory} . '/id2names');
+#ok not -e ($db_flatfile->{index_directory} . '/names2id');
+#ok not -e ($db_flatfile->{index_directory} . '/nodes');
+#ok not -e ($db_flatfile->{index_directory} . '/parents');
+#
+# Generate the object (and the files) again for the remaining tests
+
+ok my $db = Bio::DB::Taxonomy->new(
+    -source    => 'sqlite',
+    -directory => $temp_dir,
+    -nodesfile => test_input_file('taxdump', 'nodes.dmp'),
+    -namesfile => test_input_file('taxdump', 'names.dmp'),
+    -force     => 1,
+);
+
+my $id;
+
+# taxid data in the nodes.dmp file should be unique, we ignore repeated values
+# if seen
+
+is $db->get_num_taxa, 188;
+
+lives_ok {$id = $db->get_taxonid('Homo sapiens')};
+
+is $id, 9606;
+
+## easy test on human, try out the main Taxon methods
+my $n;
+ok $n = $db->get_taxon(9606);
+is $n->id, 9606;
+is $n->object_id, $n->id;
+is $n->ncbi_taxid, $n->id;
+is $n->parent_id, 9605;
+is $n->rank, 'species';
+
+is $n->node_name, 'Homo sapiens';
+is $n->scientific_name, $n->node_name;
+is ${$n->name('scientific')}[0], $n->node_name;
+
+my %common_names = map { $_ => 1 } $n->common_names;
+is keys %common_names, 3, ref($db).": common names";
+ok exists $common_names{human};
+ok exists $common_names{man};
+
+is $n->division, 'Primates';
+is $n->genetic_code, 1;
+is $n->mitochondrial_genetic_code, 2;
+
+# these are entrez-only, data not available in dmp files
+#if ($db eq $db_entrez) {
+#    ok defined $n->pub_date;
+#    ok defined $n->create_date;
+#    ok defined $n->update_date;
+#}
+
+# briefly test some Bio::Tree::NodeI methods
+ok my $ancestor = $n->ancestor;
+is $ancestor->scientific_name, 'Homo';
+# unless set explicitly, Bio::Taxon doesn't return anything for
+# each_Descendent; must ask the database directly
+ok my @children = $ancestor->db_handle->each_Descendent($ancestor);
+is @children, 1;
+
+#sleep(3) if $db eq $db_entrez;
+#
+## do some trickier things...
+ok my $n2 = $db->get_Taxonomy_Node('89593');
+is $n2->scientific_name, 'Craniata';
+
+# briefly check we can use some Tree methods
+my $tree = Bio::Tree::Tree->new();
+is $tree->get_lca($n, $n2)->scientific_name, 'Craniata';
+
+# get lineage_nodes
+my @nodes = $tree->get_nodes;
+is scalar(@nodes), 0;
+my @lineage_nodes;
+ at lineage_nodes = $tree->get_lineage_nodes($n->id); # read ID, only works if nodes have been added to tree
+is scalar @lineage_nodes, 0;
+ at lineage_nodes = $tree->get_lineage_nodes($n);     # node object always works
+cmp_ok(scalar @lineage_nodes, '>', 20);
+
+# get lineage string
+like($tree->get_lineage_string($n), qr/cellular organisms;Eukaryota/);
+like($tree->get_lineage_string($n,'-'), qr/cellular organisms-Eukaryota/);
+like($tree->get_lineage_string($n2), qr/cellular organisms;Eukaryota/);
+
+# can we actually form a Tree and use other Tree methods?
+ok $tree = Bio::Tree::Tree->new(-node => $n);
+cmp_ok($tree->number_nodes, '>', 20);
+cmp_ok(scalar($tree->get_nodes), '>', 20);
+is $tree->find_node(-rank => 'genus')->scientific_name, 'Homo';
+
+# check that getting the ancestor still works now we have explitly set the
+# ancestor by making a Tree
+is $n->ancestor->scientific_name, 'Homo';
+
+ok $n = $db->get_Taxonomy_Node('1760');
+is $n->scientific_name, 'Actinobacteria (class)';
+
+# entrez isn't as good at searching as flatfile, so we have to special-case
+my @ids = sort $db->get_taxonids('Chloroflexi');
+is scalar @ids, 1;
+is_deeply \@ids, [200795];
+
+# lowercase
+ at ids = sort $db->get_taxonids('chloroflexi');
+is scalar @ids, 1;
+is_deeply \@ids, [200795];
+
+# fuzzy match using SQL syntax to match any 'Chloroflexi'
+ at ids = sort $db->get_taxonids('Chloroflexi%');
+is scalar @ids, 2;
+is_deeply \@ids, [200795, 32061];
+
+$id = $db->get_taxonids('Chloroflexi (class)');
+is($id, 32061);
+
+ at ids = $db->get_taxonids('Rhodotorula');
+is @ids, 8;
+ at ids = $db->get_taxonids('Rhodotorula <Microbotryomycetidae>');
+is @ids, 1;
+is $ids[0], 231509;
+
+# get_lca should work on nodes from different databases
+SKIP: {
+    test_skip(-tests => 9, -requires_networking => 1);
+
+    # check that the result is the same as if we are retrieving from the same DB
+    # flatfile
+    my $h_flat = $db_flatfile->get_taxon(-name => 'Homo');
+    my $h_flat2 = $db_flatfile->get_taxon(-name => 'Homo sapiens');
+    ok my $tree_functions = Bio::Tree::Tree->new();
+    is $tree_functions->get_lca($h_flat, $h_flat2)->scientific_name, 'Homo', 'get_lca() within flatfile db';
+
+    # entrez
+    #my $h_entrez;
+    #eval { $h_entrez = $db_entrez->get_taxon(-name => 'Homo sapiens');};
+    #skip "Unable to connect to entrez database; no network or server busy?", 7 if $@;
+    #my $h_entrez2;
+    #eval { $h_entrez2 = $db_entrez->get_taxon(-name => 'Homo');};
+    #skip "Unable to connect to entrez database; no network or server busy?", 7 if $@;
+    #ok $tree_functions = Bio::Tree::Tree->new();
+    #is $tree_functions->get_lca($h_entrez, $h_entrez2)->scientific_name, 'Homo', 'get_lca() within entrez db';
+
+    #ok $tree_functions = Bio::Tree::Tree->new();
+    # mixing entrez and flatfile
+    #TODO:{
+    #    local $TODO = 'Mixing databases for get_lca() not working, see bug #3416';
+    #    is $tree_functions->get_lca($h_flat, $h_entrez)->scientific_name, 'Homo', 'get_lca() mixing flatfile and remote db';
+    #}
+    # even though the species taxa for Homo sapiens from list and flat databases
+    # have the same internal id, get_lca won't work because they have different
+    # roots and descendents
+    #$h_list = $db_list->get_taxon(-name => 'Homo sapiens');
+    #is $h_list->ancestor->internal_id, $h_flat->internal_id;
+    #ok ! $tree_functions->get_lca($h_flat, $h_list);
+
+    # but we can form a tree with the flat node then remove all the ranks we're
+    # not interested in and try again
+    #$tree = Bio::Tree::Tree->new(-node => $h_flat);
+    #$tree->splice(-keep_rank => \@ranks);
+    #is $tree->get_lca($h_flat, $h_list)->scientific_name, 'Homo';
+}
+
+# Some tests carried over from flatfile and others that would be nice to pass
+
+# ideas from taxonomy2tree.PLS that let us make nice tree, using
+# Bio::Tree::TreeFunctionsI methods; this is a weird and trivial example just
+# because our test flatfile database only has the full lineage of one species
+undef $tree;
+for my $name ('Human', 'Hominidae') {
+  my $ncbi_id = $db_flatfile->get_taxonid($name);
+  if ($ncbi_id) {
+    my $node = $db_flatfile->get_taxon(-taxonid => $ncbi_id);
+
+    if ($tree) {
+        ok $tree->merge_lineage($node);
+    }
+    else {
+        ok $tree = Bio::Tree::Tree->new(-node => $node);
+    }
+  }
+}
+is $tree->get_nodes, 30;
+$tree->contract_linear_paths;
+my $ids = join(",", map { $_->id } $tree->get_nodes);
+is $ids, '131567,9606';
+
+END {
+    unlink 'taxonomy.sqlite' if (-e 'taxonomy.sqlite');
+}
+
+done_testing();
diff --git a/t/Perl.t b/t/Perl.t
index 3d46d1a..38055b2 100644
--- a/t/Perl.t
+++ b/t/Perl.t
@@ -62,10 +62,11 @@ is $trans, 'IGLGTQFVCYM';
 # these now run only with BIOPERLDEBUG set
 
 SKIP: {
-	test_skip(-tests => 12, -requires_networking => 1);
+	test_skip(-tests => 12, -requires_networking => 1, -requires_module => 'LWP::UserAgent');
 	
 	# swissprot
 	SKIP: {
+		test_skip(-tests => 2, -requires_module => 'Data::Stag');
 		eval {
 			$seq_object = get_sequence('swissprot',"ROA1_HUMAN");
 		};
@@ -80,7 +81,7 @@ SKIP: {
     # embl
 	SKIP: {
 		eval {
-			$seq_object = get_sequence('embl',"BUM");
+			$seq_object = get_sequence('embl',"HSFOS");
 		};
 		if ($@) {
 			skip("problem connecting to EMBL:$@",2);
diff --git a/t/RemoteDB/BioFetch.t b/t/RemoteDB/BioFetch.t
index 1916910..9ba007c 100644
--- a/t/RemoteDB/BioFetch.t
+++ b/t/RemoteDB/BioFetch.t
@@ -63,6 +63,7 @@ SKIP: {
 SKIP: {
     #swissprot
     ok $db2 = Bio::DB::BioFetch->new(-db => 'swissprot');
+    test_skip(-tests => 5, -requires_module => 'Data::Stag');
     eval {
         $seq = $db2->get_Seq_by_id('YNB3_YEAST');
     };
@@ -124,13 +125,13 @@ SKIP: {
 # unisave
 SKIP: {
     ok $db = Bio::DB::BioFetch->new(-db      => 'unisave',
-                                    -verbose => $verbose);
+                                    -verbose => $verbose ? $verbose : -1);
     eval {
-        $seq = $db->get_Seq_by_acc('LAM1_MOUSE');
+        $seq = $db->get_Seq_by_acc('P14733');
     };
     skip($dbwarn, 4) if $@;
     isa_ok($seq, 'Bio::SeqI');
-    is($seq->display_id, 'LAM1_MOUSE');
+    is($seq->display_id, 'LMNB1_MOUSE');
     is($seq->accession, 'P14733');
-    is($seq->length, 587);
+    is($seq->length, 588);
 }
diff --git a/t/RemoteDB/EMBL.t b/t/RemoteDB/EMBL.t
index a03992f..7f196f2 100644
--- a/t/RemoteDB/EMBL.t
+++ b/t/RemoteDB/EMBL.t
@@ -5,13 +5,15 @@ use strict;
 
 BEGIN { 
     use lib '.';
-	use Bio::Root::Test;
-	
-	test_begin(-tests => 16,
-			   -requires_modules => [qw(IO::String HTTP::Request::Common)],
-			   -requires_networking => 1);
-	
-	use_ok('Bio::DB::EMBL');
+    use Bio::Root::Test;
+
+    test_begin(-tests => 16,
+               -requires_modules    => [qw(IO::String
+                                           LWP::UserAgent
+                                           HTTP::Request::Common)],
+               -requires_networking => 1);
+
+    use_ok('Bio::DB::EMBL');
 }
 
 my $verbose = test_debug();
diff --git a/t/RemoteDB/HIV/HIV.t b/t/RemoteDB/HIV/HIV.t
index b1327e5..04ac6c8 100755
--- a/t/RemoteDB/HIV/HIV.t
+++ b/t/RemoteDB/HIV/HIV.t
@@ -7,8 +7,10 @@ BEGIN {
     use Bio::Root::Test;
     test_begin(
         -tests => 30,
-        -requires_modules => [qw( XML::Simple HTTP::Request::Common)],
-	);
+        -requires_modules => [qw(LWP::UserAgent
+                                 XML::Simple
+                                 HTTP::Request::Common)],
+        );
     use_ok('Bio::DB::HIV');
     use_ok('Bio::DB::WebDBSeqI');
     use_ok('Bio::DB::HIV::HIVAnnotProcessor');
diff --git a/t/RemoteDB/HIV/HIVQuery.t b/t/RemoteDB/HIV/HIVQuery.t
index 476359b..e7ab9c8 100755
--- a/t/RemoteDB/HIV/HIVQuery.t
+++ b/t/RemoteDB/HIV/HIVQuery.t
@@ -7,7 +7,9 @@ BEGIN {
     use Bio::Root::Test;
     test_begin(
         -tests => 41,
-        -requires_modules => [qw( XML::Simple )]
+        -requires_modules => [qw(CGI
+                                 LWP::UserAgent
+                                 XML::Simple )]
     );
     use_ok('Bio::DB::Query::HIVQuery');
     use_ok('Bio::DB::HIV');
diff --git a/t/RemoteDB/MeSH.t b/t/RemoteDB/MeSH.t
index 10517f6..0791093 100755
--- a/t/RemoteDB/MeSH.t
+++ b/t/RemoteDB/MeSH.t
@@ -4,15 +4,15 @@
 use strict;
 
 BEGIN {
-	use lib '.';
-	use Bio::Root::Test;
-	
-	test_begin(-tests => 5,
-			   -requires_modules => [qw(IO::String
-									    LWP::UserAgent
-										HTTP::Request::Common)],
-			   -requires_networking => 1);
-	
+        use lib '.';
+        use Bio::Root::Test;
+        
+        test_begin(-tests => 5,
+                        -requires_modules => [qw(IO::String
+                                                LWP::UserAgent
+                        HTTP::Request::Common)],
+                           -requires_networking => 1);
+        
     use_ok('Bio::DB::MeSH');
 }
 
@@ -27,6 +27,6 @@ SKIP: {
     is $t->each_twig(), 2;
     eval {$t = $mesh->get_exact_term("Sinus Thrombosis, Intracranial");};
     skip "Couldn't connect to MeSH with Bio::DB::MeSH. Skipping those tests", 2 if $@;
-    is $t->description, "Formation or presence of a blood clot (THROMBUS) in the CRANIAL SINUSES, large endothelium-lined venous channels situated within the SKULL. Intracranial sinuses, also called cranial venous sinuses, include the superior sagittal, cavernous, lateral, petrous sinuses, and many others. Cranial sinus thrombosis can lead to severe HEADACHE; SEIZURE; and other neurological defects.";
+    like $t->description, qr/Thrombus/i;
     is $t->id, "D012851";
 }
diff --git a/t/RemoteDB/SeqHound.t b/t/RemoteDB/SeqHound.t
deleted file mode 100644
index 37b60a8..0000000
--- a/t/RemoteDB/SeqHound.t
+++ /dev/null
@@ -1,59 +0,0 @@
-# -*-Perl-*- Test Harness script for Bioperl
-# $Id$
-
-use strict;
-
-BEGIN {
-	use lib '.';
-    use Bio::Root::Test;
-    
-    test_begin(-tests => 15,
-			   -requires_modules => [qw(IO::String LWP::UserAgent)],
-			   -requires_networking => 1);
-	
-	use_ok('Bio::DB::SeqHound');
-}
-
-END {
-	unlink $Bio::DB::SeqHound::LOGFILENAME if -f $Bio::DB::SeqHound::LOGFILENAME;
-}
-
-my $verbose = test_debug();
-
-my ($db,$seq,$seqio);
-# get a single seq
-
-$seq = $seqio = undef;
-
-SKIP: {
-    $db = Bio::DB::SeqHound->new(-verbose=>$verbose);
-    eval {ok(defined($seq = $db->get_Seq_by_acc('J00522')));};
-	skip('Could not connect to seqhound, skipping tests', 10) if $@;
-    is( $seq->length, 408); 
-    ok defined ($db->request_format('fasta'));
-    eval {ok(defined($seq = $db->get_Seq_by_acc('NP_862707')));};
-	skip('Could not connect to seqhound, skipping tests', 7) if $@;
-    is( $seq->accession, 'NP_862707');
-    is( $seq->length, 227); 
-    ok( defined($db = Bio::DB::SeqHound->new(-verbose=>$verbose, 
-					-retrievaltype => 'tempfile')));
-    eval {ok(defined($seqio = $db->get_Stream_by_id(['BTACHRE'])));};
-	skip('Could not connect to seqhound, skipping tests', 3) if $@;
-    undef $db; # testing to see if we can remove db
-    ok( defined($seq = $seqio->next_seq()));
-    is( $seq->length, 1621);
-}
-
-$seq = $seqio = undef;
-
-SKIP: {
-    $db = Bio::DB::SeqHound->new(-verbose => $verbose,
-			    -retrievaltype => 'tempfile',
-			    -format => 'genbank'
-			    ); 
-    eval {ok( defined($seqio = $db->get_Stream_by_acc(['J00522', 'AF303112', 'J02231'])));};
-	skip('Could not connect to seqhound for batch test, skipping tests', 4) if $@;
-	is($seqio->next_seq->length, 408);
-    is($seqio->next_seq->length, 1611);
-    is($seqio->next_seq->length, 200);
-}
diff --git a/t/RemoteDB/SeqRead_fail.t b/t/RemoteDB/SeqRead_fail.t
index c540b0a..bf10434 100644
--- a/t/RemoteDB/SeqRead_fail.t
+++ b/t/RemoteDB/SeqRead_fail.t
@@ -27,13 +27,19 @@ sub fetch {
     my ($id, $class) = @_;
     print "###################### $class  ####################################\n" if $verbose;
     my $seq;
-    ok defined( my $gb = $class->new('-verbose'=>$verbose,
-									 '-delay'=>0,
-									 '-retrievaltype' => 'tempfile') ), "defined for $class";
+    ok defined( my $gb = $class->new('-verbose'       => $verbose,
+                                     '-delay'         => 0,
+                                     '-retrievaltype' => 'tempfile') ), "defined for $class";
+
+    if ($class eq 'Bio::DB::SwissProt') {
+        test_skip(-tests => 1, -requires_module => 'Data::Stag');
+        next if $@;
+    }
+
     eval { $seq = $gb->get_Seq_by_id($id) };
     if ($@ || !defined $seq) {
-		ok 1, "error or undef for $class";
-		return;
+        ok 1, "error or undef for $class";
+        return;
     }
     ok 0, "failure for $class";
 }
diff --git a/t/RemoteDB/SeqVersion.t b/t/RemoteDB/SeqVersion.t
index 486be83..327a621 100644
--- a/t/RemoteDB/SeqVersion.t
+++ b/t/RemoteDB/SeqVersion.t
@@ -38,13 +38,13 @@ SKIP: {
 
     $latest_gi = $query->get_recent(27478738);
     is($latest_gi, 42659163, 'get_recent, integer');
-    is($query->get_status(27478738), 'dead');
+    is($query->get_status(27478738), 'suppressed');
 
     # check that default type is "gi"
     ok $query = Bio::DB::SeqVersion->new();
     ok my $ref = $query->get_history(3245);
     is($ref->[0]->[0], 578167, 'get_history');
-    is($query->get_status('3245'), 'dead');
+    is($query->get_status('3245'), 'suppressed');
 }
 
 done_testing();
diff --git a/t/RemoteDB/SwissProt.t b/t/RemoteDB/SwissProt.t
index b5f94e3..3c538b2 100755
--- a/t/RemoteDB/SwissProt.t
+++ b/t/RemoteDB/SwissProt.t
@@ -10,7 +10,8 @@ BEGIN {
     test_begin(-tests               => 23,
                -requires_modules    => [qw(IO::String
                                            LWP::UserAgent
-                                           HTTP::Request::Common)],
+                                           HTTP::Request::Common
+                                           Data::Stag)],
                -requires_networking => 1);
 
     use_ok('Bio::DB::SwissProt');
diff --git a/t/RemoteDB/Taxonomy.t b/t/RemoteDB/Taxonomy.t
index f781de2..bf58bff 100644
--- a/t/RemoteDB/Taxonomy.t
+++ b/t/RemoteDB/Taxonomy.t
@@ -8,9 +8,10 @@ BEGIN {
     use Bio::Root::Test;
 
     test_begin(
-        -tests            => 191,
-        -requires_modules => [ 'DB_File',
-                               'XML::Twig' ]
+        -tests            => 202,
+        -requires_modules => [qw(DB_File
+                                 LWP::UserAgent
+                                 XML::Twig )]
     );
 
     use_ok('Bio::DB::Taxonomy');
@@ -29,16 +30,46 @@ isa_ok $db_entrez, 'Bio::DB::Taxonomy';
 ok my $db_flatfile = Bio::DB::Taxonomy->new(
     -source    => 'flatfile',
     -nodesfile => test_input_file('taxdump', 'nodes.dmp'),
-    -namesfile => test_input_file('taxdump','names.dmp'),
+    -namesfile => test_input_file('taxdump', 'names.dmp'),
 );
 isa_ok $db_flatfile, 'Bio::DB::Taxonomy::flatfile';
 isa_ok $db_flatfile, 'Bio::DB::Taxonomy';
 
+# By not specifying a '-directory' argument, index files go to a temporary
+# folder ($Bio::Root::IO::TEMPDIR, such as 'C:\Users\USER\AppData\Local\Temp'),
+# and are implied to be temporary. So test the ability of flatfile->DESTROY to
+# remove the temporary index files at object destruction (this also affects files
+# in "test_output_dir()", since the folder is created inside the temporary folder)
+no warnings qw(once); # silence 'Name "$Bio::Root::IO::TEMPDIR" used only once'
+is $db_flatfile->{index_directory}, $Bio::Root::IO::TEMPDIR, 'removal of temporary index files: no -directory';
+$db_flatfile->DESTROY;
+ok not -e ($db_flatfile->{index_directory} . '/id2names');
+ok not -e ($db_flatfile->{index_directory} . '/names2id');
+ok not -e ($db_flatfile->{index_directory} . '/nodes');
+ok not -e ($db_flatfile->{index_directory} . '/parents');
+
+# Test removal of temporary index files from test_output_dir folder
+# (since test_output_dir() =~ m/^$Bio::Root::IO::TEMPDIR/)
 ok $db_flatfile = Bio::DB::Taxonomy->new(
     -source    => 'flatfile',
     -directory => $temp_dir,
     -nodesfile => test_input_file('taxdump', 'nodes.dmp'),
-    -namesfile => test_input_file('taxdump','names.dmp'),
+    -namesfile => test_input_file('taxdump', 'names.dmp'),
+    -force     => 1,
+);
+is $db_flatfile->{index_directory}, $temp_dir, 'removal of temporary index files: test_output_dir()';
+$db_flatfile->DESTROY;
+ok not -e ($db_flatfile->{index_directory} . '/id2names');
+ok not -e ($db_flatfile->{index_directory} . '/names2id');
+ok not -e ($db_flatfile->{index_directory} . '/nodes');
+ok not -e ($db_flatfile->{index_directory} . '/parents');
+
+# Generate the object (and the files) again for the remaining tests
+ok $db_flatfile = Bio::DB::Taxonomy->new(
+    -source    => 'flatfile',
+    -directory => $temp_dir,
+    -nodesfile => test_input_file('taxdump', 'nodes.dmp'),
+    -namesfile => test_input_file('taxdump', 'names.dmp'),
     -force     => 1,
 );
 
@@ -144,10 +175,17 @@ for my $db ($db_entrez, $db_flatfile) {
         $db eq $db_entrez ? is($id, undef) : is($id, 32061);
 
         @ids = $db->get_taxonids('Rhodotorula');
-        cmp_ok @ids, '>=' , 8;
-        @ids = $db->get_taxonids('Rhodotorula <Microbotryomycetidae>');
-        is @ids, 1;
-        is $ids[0], 231509;
+        cmp_ok @ids, '>=' , 2;
+        if ($db eq $db_entrez) {
+            ok grep { $_ == 592558 } @ids;
+            ok grep { $_ == 5533 } @ids;
+        } else {
+            # note the locally cached flatfile is out-of-date, but technically
+            # correct for testing purposes
+            diag(join(",", @ids));
+            ok grep { $_ == 266791 } @ids;
+            ok grep { $_ == 5533 } @ids;
+        }
     }
 }
 
diff --git a/t/Restriction/IO.t b/t/Restriction/IO.t
index db6f5bc..d3b1fca 100644
--- a/t/Restriction/IO.t
+++ b/t/Restriction/IO.t
@@ -1,22 +1,20 @@
 # -*-Perl-*- Test Harness script for Bioperl
-# $Id$
-
 
 use strict;
 
 BEGIN {
     use lib '.';
     use Bio::Root::Test;
-    
-    test_begin(-tests => 18);
-	
+
+    test_begin( -tests => 17 );
+
     use_ok('Bio::Restriction::IO');
 }
 
 #
 # default enz set
 #
-ok my $in  = Bio::Restriction::IO->new();
+ok my $in    = Bio::Restriction::IO->new();
 ok my $renzs = $in->read;
 is $renzs->each_enzyme, 532;
 
@@ -24,11 +22,12 @@ ok my $e = $renzs->get_enzyme('AccI');
 is $e->name, 'AccI';
 
 my $outfile = test_output_file();
-ok my $out = Bio::Restriction::IO->new(-format => 'base', -file => ">$outfile");
+ok my $out = Bio::Restriction::IO->new( -format => 'base', -file => ">$outfile" );
 TODO: {
     local $TODO = "writing to a file doesn't seem to work? prints to STDOUT!";
+
     #$out->write($renzs);
-    ok -s $outfile;
+    # ok -s $outfile;
     #map {print $_->name, "\t", $_->site, "\t", $_->overhang, "\n"} $renzs->each_enzyme;
 }
 
@@ -36,10 +35,11 @@ TODO: {
 # withrefm, 31
 #
 
-ok $in  = Bio::Restriction::IO->new
-  (-format=> 'withrefm',
-	-verbose => 0,
-	-file => test_input_file('rebase.withrefm'));
+ok $in = Bio::Restriction::IO->new(
+    -format  => 'withrefm',
+    -verbose => 0,
+    -file    => test_input_file('rebase.withrefm')
+);
 ok $renzs = $in->read;
 is $renzs->each_enzyme, 11;
 
@@ -49,23 +49,33 @@ is $renzs->each_enzyme, 11;
 #enzyme name [tab] prototype [tab] recognition sequence with cleavage site
 #  [tab] methylation site and type [tab] commercial source [tab] references
 
-ok $in  = Bio::Restriction::IO->new
-    (-format=> 'itype2', -verbose => 0,
-     -file => test_input_file('rebase.itype2'));
+ok $in = Bio::Restriction::IO->new(
+    -format  => 'itype2',
+    -verbose => 0,
+    -file    => test_input_file('rebase.itype2')
+);
 
 ok $renzs = $in->read;
 is $renzs->each_enzyme, 16;
 
-ok  $out  = Bio::Restriction::IO->new(-format=>'base');
+ok $out = Bio::Restriction::IO->new( -format => 'base' );
 
 SKIP: {
-   test_skip(-tests => 3, -requires_networking => 1);
-   #test_skip(-tests => 2, -requires_module => 'LWP::UserAgent');
-    
-    ok  $in  = Bio::Restriction::IO->new(-format=>'prototype',
-                                          -current => 1);
-    
+    test_skip(
+        -tests               => 3,
+        -requires_module     => 'LWP::UserAgent',
+        -requires_networking => 1
+    );
+
+    eval {$in = Bio::Restriction::IO->new(-format  => 'prototype',
+                                          -current => 1); };
+    skip "Couldn't connect to REBASE with Bio::Restriction::IO. Skipping those tests", 3 if $@;
+
+    ok $in = Bio::Restriction::IO->new(
+        -format  => 'prototype',
+        -current => 1
+    );
+
     ok my $coll = $in->read;
     cmp_ok $coll->each_enzyme, '>=', 307;
 }
-
diff --git a/t/Root/Exception.t b/t/Root/Exception.t
index c78db7c..0b6fa07 100644
--- a/t/Root/Exception.t
+++ b/t/Root/Exception.t
@@ -1,26 +1,24 @@
 # -*-Perl-*- Test Harness script for Bioperl
-# $Id$
 
 use strict;
 
 BEGIN {
     eval {require Error;};
 
-    use lib '.';
+    use lib qw( . t/lib );
     use Bio::Root::Test;
 
-    test_begin(-tests => 8,
+    test_begin(-tests => 7,
                -requires_module => 'Error');
 
-    use lib './examples/root/lib';
-    use_ok('TestObject');
+    use_ok('Bio::Root::TestObject');
 }
 
 use Error qw(:try);
 $Error::Debug = test_debug();
 
 # Set up a tester object.
-ok my $test = TestObject->new(-verbose => test_debug());
+ok my $test = Bio::Root::TestObject->new(-verbose => test_debug());
 
 is $test->data('Eeny meeny miney moe.'), 'Eeny meeny miney moe.';
 
diff --git a/t/Root/HTTPget.t b/t/Root/HTTPget.t
index aea8d96..934cdba 100644
--- a/t/Root/HTTPget.t
+++ b/t/Root/HTTPget.t
@@ -1,5 +1,4 @@
 # -*-Perl-*- Test Harness script for Bioperl
-# $Id: RootIO.t 16840 2010-02-16 17:14:12Z cjfields $
 
 use strict;
 use warnings;
diff --git a/t/Root/IO.t b/t/Root/IO.t
index 50806ea..23dfe4f 100644
--- a/t/Root/IO.t
+++ b/t/Root/IO.t
@@ -422,3 +422,4 @@ isa_ok $fh2, 'GLOB';
 ok $fh2, 'tempfile() in scalar context';
 ok close $fh2;
 }
+
diff --git a/t/Root/RootI.t b/t/Root/RootI.t
index 48d6e8a..d95703f 100644
--- a/t/Root/RootI.t
+++ b/t/Root/RootI.t
@@ -7,7 +7,7 @@ BEGIN {
     use lib '.';
     use Bio::Root::Test;
 
-    test_begin(-tests => 62);
+    test_begin(-tests => 61);
 
     use_ok 'Bio::Root::Root';
 }
@@ -290,20 +290,10 @@ is $obj->t7, 1, 'original is not modified';
                           -warn_version  => $v + 0.001,
                           -throw_version => $v + 0.002);
     }
-
-    sub plain_incorrect {
-        my $self = shift;
-        $self->deprecated(-message => 'This is not going to work',
-                          -warn_version  => '1.2.3.4',
-                          -throw_version => 'a.b.c.d');
-    }
 }
 
 my $foo = Bio::Foo5->new();
 
-throws_ok { $foo->plain_incorrect } qr/Version must be numerical/,
-    'must use proper versioning scheme';
-
 warning_like{ $foo->not_good } qr/This is not good/,
     'warns for versions >= current version';
 # this tests the three-arg (non-named) form just to make sure it works, even
diff --git a/t/Root/RootIO.t b/t/Root/RootIO.t
new file mode 100644
index 0000000..97e3738
--- /dev/null
+++ b/t/Root/RootIO.t
@@ -0,0 +1,21 @@
+##############################################
+# tests http retrieval
+##############################################
+
+use strict;
+use warnings;
+
+BEGIN {
+    use lib '.';
+    use Bio::Root::Test;
+    test_begin(-tests => 3,
+	       -requires_networking => 1);
+    use_ok 'Bio::Root::IO';
+}
+
+my $TESTURL = 'http://www.google.com/index.html';
+
+my $rio;
+
+ok $rio = Bio::Root::IO->new(-url=>$TESTURL), 'default -url method';
+lives_ok {$rio = Bio::Root::IO->new(-url=>$TESTURL)};
diff --git a/t/SearchIO/blastxml.t b/t/SearchIO/blastxml.t
deleted file mode 100644
index e125c74..0000000
--- a/t/SearchIO/blastxml.t
+++ /dev/null
@@ -1,531 +0,0 @@
-# -*-Perl-*- Test Harness script for Bioperl
-# $Id: SearchIO.t 14995 2008-11-16 06:20:00Z cjfields $
-
-use strict;
-
-BEGIN {
-	use lib '.';
-    use Bio::Root::Test;
-    
-    test_begin(-tests => 391,
-			   -requires_module => 'XML::SAX');
-	
-	use_ok('Bio::SearchIO');
-}
-
-my ($searchio, $result,$iter,$hit,$hsp);
-
-# XML encoding/decoding done within XML::SAX now, though some parsers
-# do not work properly (XML::SAX::PurePerl, XML::LibXML::SAX)
-
-eval {
-	# test with RPSBLAST data first
-	# this needs to be eval'd b/c the XML::SAX parser object is
-	# instantiated in the constructor
-	$searchio = Bio::SearchIO->new('-tempfile' => 1,
-		   '-format' => 'blastxml',
-		   '-file'   => test_input_file('ecoli_domains.rps.xml'),
-		   '-blasttype' => 'blast',
-		   '-verbose' => -1);
-	# PurePerl works with these BLAST reports, so removed verbose promotion
-	$result = $searchio->next_result;
-	die if !defined $result;
-};
-
-SKIP: {
-	# this should be fixed with newer installations of XML::SAX::Expat, but as we
-	# don't require a certain version (multiple backends can be used) we catch
-	# and skip if needed 
-	if ($@ && $@ =~ m{Handler could not resolve external entity}) {
-		skip("Older versions of XML::SAX::Expat may not work with XML tests; skipping",297);
-	} elsif ($@) {
-		skip("Problem with XML::SAX setup: $@. Check ParserDetails.ini; skipping XML tests",297);
-	}
-	is($searchio->result_count, 1);
-	
-	# basic ResultI data
-	isa_ok($result, 'Bio::Search::Result::ResultI');
-	is($result->database_name, '/data_2/jason/db/cdd/cdd/Pfam', 'database_name()');
-	is($result->query_name,'gi|1786182|gb|AAC73112.1|','query_name()');
-	is($result->query_description, '(AE000111) thr operon leader peptide [Escherichia coli]');
-	is($result->query_accession, 'AAC73112.1');
-	is($result->query_gi, 1786182);
-	is($result->query_length, 21);
-	is($result->algorithm, 'BLASTP');
-	is($result->algorithm_version, 'blastp 2.1.3 [Apr-1-2001]');
-	
-	# check parameters
-	is($result->available_parameters, 8);
-	is($result->get_parameter('matrix'), 'BLOSUM62');
-	float_is($result->get_parameter('expect'), '1e-05');
-	is($result->get_parameter('include'), 0);
-	is($result->get_parameter('match'), 0);
-	is($result->get_parameter('mismatch'), 0);
-	is($result->get_parameter('gapopen'), 11);
-	is($result->get_parameter('gapext'), 1);
-	is($result->get_parameter('filter'), 'F');
-	
-	# check statistics
-	is($result->available_statistics, 5);
-	is($result->database_entries, 0);
-	is($result->database_letters, 0);
-	is($result->get_statistic('hsplength'), 0);
-	float_is($result->get_statistic('effectivespace'), 4.16497e+11);
-	is($result->get_statistic('lambda'), 0.267);
-	is($result->get_statistic('kappa'), 0.041);
-	is($result->get_statistic('entropy'), 0.14);
-	
-	# this result actually has a hit
-	$result = $searchio->next_result;
-	
-	# does the parser catch everything in the next result?
-	is($result->database_name, '/data_2/jason/db/cdd/cdd/Pfam', 'database_name()');
-	is($result->query_name,'gi|1786183|gb|AAC73113.1|');
-	is($result->query_description, '(AE000111) aspartokinase I, homoserine dehydrogenase I [Escherichia coli]');
-	is($result->query_accession, 'AAC73113.1');
-	is($result->query_gi, 1786183);
-	is($result->query_length, 820);
-	is($result->algorithm, 'BLASTP');
-	is($result->algorithm_version, 'blastp 2.1.3 [Apr-1-2001]');	
-	
-	is($searchio->result_count, 2);
-
-	# check parameters
-	is($result->available_parameters, 8);
-	is($result->get_parameter('matrix'), 'BLOSUM62');
-	float_is($result->get_parameter('expect'), '1e-05');
-	is($result->get_parameter('include'), 0);
-	is($result->get_parameter('match'), 0);
-	is($result->get_parameter('mismatch'), 0);
-	is($result->get_parameter('gapopen'), 11);
-	is($result->get_parameter('gapext'), 1);
-	is($result->get_parameter('filter'), 'F');
-	
-	# check statistics
-	is($result->available_statistics, 5);
-	is($result->database_entries, 0);
-	is($result->database_letters, 0);
-	is($result->get_statistic('hsplength'), 0);
-	float_is($result->get_statistic('effectivespace'), 3.82682e+07);
-	is($result->get_statistic('lambda'), 0.267);
-	is($result->get_statistic('kappa'), 0.041);
-	is($result->get_statistic('entropy'), 0.14);
-	
-	$hit = $result->next_hit;
-	is($hit->name, 'gnl|Pfam|pfam00742');
-	is($hit->description(), 'HomoS_dh, HomoS dehydrogenase');
-	is($hit->accession, 'pfam00742');
-	is($hit->ncbi_gi, ''); # not found
-	is($hit->length, 310);
-	
-	$hsp = $hit->next_hsp;
-	is($hsp->query->seq_id, $result->query_name,'query name on HSP');
-	is($hsp->query->seqdesc, $result->query_description,'query desc on HSP');
-	is($hsp->hit->seq_id, $hit->name,'hitname');
-	is($hsp->hit->seqdesc, $hit->description,'hitdesc');
-	is($hsp->pvalue, undef);
-	float_is($hsp->evalue, 1.46134e-90);
-	is($hsp->score, 838);
-	is($hsp->bits,327.405);
-	is($hsp->query->start, 498);
-	is($hsp->query->end,815);
-	is($hsp->hit->start, 3);
-	is($hsp->hit->end, 310);
-	is($hsp->query->frame,0);
-	is($hsp->hit->frame,0);
-	is(sprintf("%.2f", $hsp->percent_identity), 37.73);
-	is(sprintf("%.4f", $hsp->frac_identical('hit')), 0.3994);
-	is(sprintf("%.4f", $hsp->frac_identical('query')), 0.3868);
-	is(sprintf("%.4f",$hsp->query->frac_identical), 0.3868);
-	
-	is(sprintf("%.4f",$hsp->frac_conserved('total')),0.5245);
-	is(sprintf("%.4f",$hsp->frac_conserved('hit')),0.5552);
-	is(sprintf("%.4f",$hsp->frac_conserved('query')),0.5377);
-	# gaps should match calculated sequence indices for gaps and vice versa
-	is($hsp->gaps('total'), $hsp->seq_inds('hit', 'gaps') + $hsp->seq_inds('query', 'gaps'));
-	is($hsp->gaps('hit'), $hsp->seq_inds('hit', 'gaps'));
-	is($hsp->gaps('query'), $hsp->seq_inds('query', 'gaps'));
-	is($hsp->length('total'), 326);
-	is($hsp->query_string, 'LRVCGVANSKALLTNVHGLNLENWQEELAQAKEPF-NLGRLIRLVKEYHLLN----PVIVDCTSSQAVAD-QYADFLREGFHVVTPNKKANTSSMDYYHQLRYAAEKSRRKFLYDTNVGAGLPVIENLQNLLNAGDELMKFSGILSGSLSYIFGKLDE-GMSFSEATTLAREMGYTEPDPRDDLSGMDVARKLLILARET-GRELELADIEIEPVLPAEFNAEGDVAAFMANLSQLDDLFAARVAKARDEGKVLRYVGNIDEDGVCRVKIAEVDGNDPLFKVKNGENALAFYSHYYQPLPLVLRGYGAGNDVTAAGVFADLLRTLS');
-	is($hsp->hit_string, 'GVVTGITDSREMLLSRIGLPLEIWKVALRDLEKPRKDLGKLDLTDDAFAVVDDPDIDVVVELTGGIEVARELYLDALEEGKHVVTANKALNASHGDEYLAL---AEKSGVDVLYEAAVAGGIPIIKTLRELLATGDRILKIEGIFNGTTNFILSEMDEKGLPFSDVLAEAQELGYTEADPRDDVEGIDAARKLAILARIAFGIELELDDVYVEGISPITAEDISSADEFGYTLKLLDEAMRQRVEDAESGGEVLRYPTLIPE-------------DHPLASVKGSDNAVAVEGEAYG--PLMFYGPGAGAEPTASAVVADIVRIAR');
-	is($hsp->homology_string, '  V G+ +S+ +L +  GL LE W+  L   ++P  +LG+L      + +++     V+V+ T    VA   Y D L EG HVVT NK  N S  D Y  L   AEKS    LY+  V  G+P+I+ L+ LL  GD ++K  GI +G+ ++I  ++DE G+ FS+    A+E+GYTE DPRDD+ G+D ARKL ILAR   G ELEL D+ +E + P           F   L  LD+    RV  A   G+VLRY   I E             + PL  VK  +NA+A     Y   PL+  G GAG + TA+ V AD++R   ');
-	is(join(' ', $hsp->seq_inds('query', 'gap',1)), '532 548 562 649 690');
-	is($hsp->ambiguous_seq_inds, '');
-	
-	# one more 
-	$hit = $result->next_hit;
-	isa_ok($hit,'Bio::Search::Hit::HitI');
-	
-	my $results_left = 8;
-	while( $result = $searchio->next_result ) { ok($result); $results_left--; }
-	is($results_left, 0);
-	
-	$searchio = Bio::SearchIO->new(-format => 'blastxml',
-								  -verbose => -1,
-				  -file => test_input_file('plague_yeast.bls.xml'));
-	
-	$result = $searchio->next_result;
-	is($searchio->result_count, 1);
-	is($result->database_name, 'yeast.aa');
-	is($result->query_name, 'gi|5763811|emb|CAB53164.1|');
-	is($result->query_description,  'putative transposase [Yersinia pestis]');
-	is($result->query_accession, 'CAB53164.1');
-	is($result->query_gi, 5763811);  
-	is($result->query_length, 340);
-	
-	$hit = $result->next_hit;
-	ok(! $hit);
-	
-	$searchio = Bio::SearchIO->new(-format => 'blastxml',
-								  -verbose => -1,
-				  -file => test_input_file('mus.bls.xml'));
-	
-	$result = $searchio->next_result;
-	is($searchio->result_count, 1);
-	is($result->database_name,'Hs15_up1000');
-	is($result->query_name,'NM_011441_up_1000_chr1_4505586_r');
-	is($result->query_description,'chr1:4505586-4506585');
-	is($result->query_accession,'NM_011441_up_1000_chr1_4505586_r');
-	is($result->query_gi, '');
-	is($result->query_length,'1000');
-	
-	# check parameters
-	is($result->available_parameters, 6);
-	is($result->get_parameter('matrix'), undef); # not set
-	float_is($result->get_parameter('expect'), 10);
-	is($result->get_parameter('include'), undef); # not set
-	is($result->get_parameter('match'), 1);
-	is($result->get_parameter('mismatch'), -3);
-	is($result->get_parameter('gapopen'), 5);
-	is($result->get_parameter('gapext'), 2);
-	is($result->get_parameter('filter'), 'D');
-	
-	# check statistics
-	is($result->available_statistics, 5);
-	is($result->database_entries, 17516);
-	is($result->database_letters, 17516000);
-	is($result->get_statistic('hsplength'), 0);
-	float_is($result->get_statistic('effectivespace'), 1.69255e+10);
-	is($result->get_statistic('lambda'), 1.37407);
-	is($result->get_statistic('kappa'), 0.710605);
-	is($result->get_statistic('entropy'), 1.30725);
-	
-	$hit = $result->next_hit;
-	is($hit->name,'NM_001938_up_1000_chr1_93161154_f');
-	is($hit->description,'chr1:93161154-93162153');
-	is($hit->ncbi_gi, ''); # none reported
-	is($hit->accession,'3153');
-	is($hit->length,'1000');
-	
-	# deal with new BLAST XML changes
-	$searchio = Bio::SearchIO->new(-format => 'blastxml',
-								  -verbose => -1,
-				  -file => test_input_file('newblast.xml'));
-	
-	$result = $searchio->next_result;
-	is($searchio->result_count, 1);
-	is($result->database_name,'nr');
-	is($result->algorithm,'BLASTP');
-	is($result->algorithm_version,'BLASTP 2.2.15 [Oct-15-2006]');
-	# some XML::SAX parsers (PurePerl, XML::SAX::LibXML) don't decode entities
-	# properly, not fixable using decode_entities()
-	like($result->algorithm_reference, qr{Nucleic Acids Res} ); 
-	is($result->query_name,'gi|15600734|ref|NP_254228.1|');
-	is($result->query_description,'dihydroorotase [Pseudomonas aeruginosa PAO1]');
-	is($result->query_accession,'NP_254228.1');
-	is($result->query_gi, 15600734);
-	is($result->query_length,'445');	
-
-	# check parameters
-	is($result->available_parameters, 4);
-	is($result->get_parameter('matrix'), 'BLOSUM62'); 
-	float_is($result->get_parameter('expect'), 10);
-	is($result->get_parameter('include'), undef); # not set
-	is($result->get_parameter('match'), undef);   # not set
-	is($result->get_parameter('mismatch'), undef);# not set
-	is($result->get_parameter('gapopen'), 11);
-	is($result->get_parameter('gapext'), 1);
-	is($result->get_parameter('filter'), undef);  # not set
-	
-	# check statistics
-	is($result->available_statistics, 5);
-	is($result->database_entries, 4299737);
-	is($result->database_letters, 1479795817);
-	is($result->get_statistic('hsplength'), 0);
-	float_is($result->get_statistic('effectivespace'), 0);
-	is($result->get_statistic('lambda'), 0.267);
-	is($result->get_statistic('kappa'), 0.041);
-	is($result->get_statistic('entropy'), 0.14);
-	
-	$hit = $result->next_hit;
-	is($hit->name,'gi|15600734|ref|NP_254228.1|');
-	is($hit->description,'dihydroorotase [Pseudomonas aeruginosa PAO1] '.
-	   '>gi|107104643|ref|ZP_01368561.1| hypothetical protein PaerPA_01005722 '.
-	   '[Pseudomonas aeruginosa PACS2] >gi|9951880|gb|AAG08926.1|AE004966_8 '.
-	   'dihydroorotase [Pseudomonas aeruginosa PAO1]');
-	is($hit->accession,'NP_254228');
-	is($hit->length,'445');
-	$hsp = $hit->next_hsp;
-	is($hsp->query->seq_id, $result->query_name,'query name on HSP');
-	is($hsp->query->seqdesc, $result->query_description,'query desc on HSP');
-	is($hsp->hit->seq_id, $hit->name,'hitname');
-	is($hsp->hit->seqdesc, $hit->description,'hitdesc');
-	is($hsp->pvalue, undef);
-	float_is($hsp->evalue, 0);
-	is($hsp->score, 2251);
-	is($hsp->bits,871.692);
-	is($hsp->query->start, 1);
-	is($hsp->query->end,445);
-	is($hsp->hit->start, 1);
-	is($hsp->hit->end, 445);
-	is($hsp->query->frame,0);
-	is($hsp->hit->frame,0);
-	
-	$result = $searchio->next_result;
-	is($searchio->result_count, 2);
-	is($result->database_name,'nr'); 
-	is($result->algorithm,'BLASTP');
-	is($result->algorithm_version,'BLASTP 2.2.15 [Oct-15-2006]'); 
-	like($result->algorithm_reference, qr{Nucleic Acids Res} );
-	is($result->query_name,'gi|15598723|ref|NP_252217.1|');
-	is($result->query_description,'dihydroorotase [Pseudomonas aeruginosa PAO1]');
-	is($result->query_accession,'NP_252217.1');
-	is($result->query_gi, 15598723);
-	is($result->query_length,'348');
-	
-	# check parameters
-	is($result->available_parameters, 4);
-	is($result->get_parameter('matrix'), 'BLOSUM62'); 
-	float_is($result->get_parameter('expect'), 10);
-	is($result->get_parameter('include'), undef); # not set
-	is($result->get_parameter('match'), undef);   # not set
-	is($result->get_parameter('mismatch'), undef);# not set
-	is($result->get_parameter('gapopen'), 11);
-	is($result->get_parameter('gapext'), 1);
-	is($result->get_parameter('filter'), undef);  # not set
-	
-	# check statistics
-	is($result->available_statistics, 5);
-	is($result->database_entries, 4299737);
-	is($result->database_letters, 1479795817);
-	is($result->get_statistic('hsplength'), 0);
-	float_is($result->get_statistic('effectivespace'), 0);
-	is($result->get_statistic('lambda'), 0.267);
-	is($result->get_statistic('kappa'), 0.041);
-	is($result->get_statistic('entropy'), 0.14);
-
-	$hit = $result->next_hit;
-	is($hit->name,'gi|15598723|ref|NP_252217.1|');
-	is($hit->description,'dihydroorotase [Pseudomonas aeruginosa PAO1] '.
-	   '>gi|6226683|sp|P72170|PYRC_PSEAE Dihydroorotase (DHOase) '.
-	   '>gi|9949676|gb|AAG06915.1|AE004773_4 dihydroorotase [Pseudomonas aeruginosa PAO1] '.
-	   '>gi|3868712|gb|AAC73109.1| dihydroorotase [Pseudomonas aeruginosa]');
-	is($hit->ncbi_gi, 15598723);
-	is($hit->accession,'NP_252217');
-	is($hit->length,'348');
-	$hsp = $hit->next_hsp;
-	is($hsp->query->seq_id, $result->query_name,'query name on HSP');
-	is($hsp->query->seqdesc, $result->query_description,'query desc on HSP');
-	is($hsp->hit->seq_id, $hit->name,'hitname');
-	is($hsp->hit->seqdesc, $hit->description,'hitdesc');
-	is($hsp->pvalue, undef);
-	float_is($hsp->evalue, 0);
-	is($hsp->score, 1780);
-	is($hsp->bits,690.263);
-	is($hsp->query->start, 1);
-	is($hsp->query->end,348);
-	is($hsp->hit->start, 1);
-	is($hsp->hit->end, 348);
-	is($hsp->query->frame,0);
-	is($hsp->hit->frame,0);
-	
-	# PSIBLAST XML parsing 
-	
-	$searchio = Bio::SearchIO->new('-tempfile' => 1,
-		   '-format' => 'blastxml',
-		   '-file'   => test_input_file('psiblast.xml'),
-		   '-blasttype' => 'psiblast');
-	
-	$result = $searchio->next_result;
-	is($searchio->result_count, 1);    
-	is($result->database_name, 'AL591824.faa');
-	is($result->algorithm, 'BLASTP');
-	like($result->algorithm_version, qr/2\.2\.16/);
-	is($result->query_name, 'gi|1373160|gb|AAB57770.1|');
-	is($result->query_accession, 'AAB57770.1');
-	is($result->query_gi, '1373160');
-	is($result->query_length, 173);
-	
-	# check parameters
-	is($result->available_parameters, 6);
-	is($result->get_parameter('matrix'), 'BLOSUM62'); 
-	float_is($result->get_parameter('expect'), 10);
-	is($result->get_parameter('include'), 0.002); 
-	is($result->get_parameter('match'), undef);   # not set
-	is($result->get_parameter('mismatch'), undef);# not set
-	is($result->get_parameter('gapopen'), 11);
-	is($result->get_parameter('gapext'), 1);
-	is($result->get_parameter('filter'), 'F');  
-	
-	# check statistics
-	is($result->available_statistics, 5);
-	is($result->database_entries, 2846);
-	is($result->database_letters, 870878);
-	is($result->get_statistic('hsplength'), 75);
-	float_is($result->get_statistic('effectivespace'), 6.44279e+07);
-	is($result->get_statistic('lambda'), 0.267);
-	is($result->get_statistic('kappa'), 0.0475563);
-	is($result->get_statistic('entropy'), 0.14);
-	
-	my $iter_count = 0;
-	my @valid_hit_data = ( [ 'gi|16411294|emb|CAC99918.1|', 183, 'CAC99918', 16411294, '4.5377e-56', 209.92],
-				   [ 'gi|16409584|emb|CAD00746.1|', 648, 'CAD00746', 16409584, '0.000286309', 37.7354],
-				   [ 'gi|16411285|emb|CAC99909.1|', 209, 'CAC99909', 16411285, '0.107059', 29.261]);
-	my @valid_iter_data = ( [ 16, 16, 0, 2, 14, 0, 0, 0, 0],
-				[ 16, 8, 8, 0, 8, 0, 2, 0, 6]);
-	
-	while (my $iter = $result->next_iteration) {
-		$iter_count++;
-		my $di = shift @valid_iter_data;
-		is($iter->number, $iter_count);
-		is($iter->num_hits, shift @$di);
-		is($iter->num_hits_new, shift @$di);
-		is($iter->num_hits_old, shift @$di);
-		is(scalar($iter->newhits_below_threshold), shift @$di);
-		is(scalar($iter->newhits_not_below_threshold), shift @$di);
-		is(scalar($iter->newhits_unclassified), shift @$di);
-		is(scalar($iter->oldhits_below_threshold), shift @$di);
-		is(scalar($iter->oldhits_newly_below_threshold), shift @$di);
-		is(scalar($iter->oldhits_not_below_threshold), shift @$di);
-		my $hit_count = 0;
-		if ($iter_count == 1) {
-			while( my $hit = $result->next_hit ) {
-				my $d = shift @valid_hit_data;
-				is($hit->name, shift @$d);
-				is($hit->length, shift @$d);
-				is($hit->accession, shift @$d);
-				is($hit->ncbi_gi, shift @$d);
-				float_is($hit->significance, shift @$d);
-				is($hit->bits, shift @$d );
-				if( $hit_count == 1 ) {
-					my $hsps_left = 1;
-					while( my $hsp = $hit->next_hsp ){
-						is($hsp->query->start, 4);
-						is($hsp->query->end, 155);
-						is($hsp->hit->start, 475);
-						is($hsp->hit->end, 617);
-						is($hsp->length('total'), 153);
-						is($hsp->start('hit'), $hsp->hit->start);
-						is($hsp->end('query'), $hsp->query->end);
-						is($hsp->strand('sbjct'), $hsp->subject->strand);# alias for hit
-						float_is($hsp->evalue, 0.000286309);
-						is($hsp->score, 86);
-						is($hsp->bits, 37.7354);
-						is(sprintf("%.1f",$hsp->percent_identity), 20.9);
-						is(sprintf("%.4f",$hsp->frac_identical('query')), 0.2105);
-						is(sprintf("%.3f",$hsp->frac_identical('hit')), 0.224);
-						is($hsp->gaps('total'), 11);
-						$hsps_left--;
-					}
-					is($hsps_left, 0);
-				}
-				last if( $hit_count++ > @valid_hit_data );
-			}
-		}
-	}
-	is(@valid_hit_data, 0);
-	is(@valid_iter_data, 0);
-	is($iter_count, 2);
-	
-	$result = $searchio->next_result;
-	is($searchio->result_count, 2);    
-	is($result->database_name, 'AL591824.faa');
-	is($result->algorithm, 'BLASTP');
-	like($result->algorithm_version, qr/2\.2\.16/);
-	is($result->query_name, 'gi|154350371|gb|ABS72450.1|');
-	is($result->query_accession, 'ABS72450.1');
-	is($result->query_gi, '154350371');
-	is($result->query_length, 378);
-
-	# check parameters
-	is($result->available_parameters, 6);
-	is($result->get_parameter('matrix'), 'BLOSUM62'); 
-	float_is($result->get_parameter('expect'), 10);
-	is($result->get_parameter('include'), 0.002); 
-	is($result->get_parameter('match'), undef);   # not set
-	is($result->get_parameter('mismatch'), undef);# not set
-	is($result->get_parameter('gapopen'), 11);
-	is($result->get_parameter('gapext'), 1);
-	is($result->get_parameter('filter'), 'F');  
-	
-	# check statistics
-	is($result->available_statistics, 5);
-	is($result->database_entries, 2846);
-	is($result->database_letters, 870878);
-	is($result->get_statistic('hsplength'), 82);
-	float_is($result->get_statistic('effectivespace'), 1.88702e+08);
-	is($result->get_statistic('lambda'), 0.267);
-	is($result->get_statistic('kappa'), 0.0450367);
-	is($result->get_statistic('entropy'), 0.14);
-	
-	$iter_count = 0;
-	
-	@valid_hit_data = ( [ 'gi|16409361|emb|CAC98217.1|', 381, 'CAC98217', 16409361, '5.57178e-119', 420.239],
-				   [ 'gi|16409959|emb|CAC98662.1|', 776, 'CAC98662', 16409959, '0.0242028', 32.7278],
-				   [ 'gi|16410942|emb|CAC99591.1|', 382, 'CAC99591', 16410942, '0.340848', 28.8758]);
-	@valid_iter_data = ( [ 11, 11, 0, 1, 10, 0, 0, 0, 0],
-				[ 19, 11, 8, 0, 11, 0, 1, 0, 7]);
-	
-	while (my $iter = $result->next_iteration) {
-		$iter_count++;
-		my $di = shift @valid_iter_data;
-		is($iter->number, $iter_count);
-		is($iter->num_hits, shift @$di);
-		is($iter->num_hits_new, shift @$di);
-		is($iter->num_hits_old, shift @$di);
-		is(scalar($iter->newhits_below_threshold), shift @$di);
-		is(scalar($iter->newhits_not_below_threshold), shift @$di);
-		is(scalar($iter->newhits_unclassified), shift @$di);
-		is(scalar($iter->oldhits_below_threshold), shift @$di);
-		is(scalar($iter->oldhits_newly_below_threshold), shift @$di);
-		is(scalar($iter->oldhits_not_below_threshold), shift @$di);
-		my $hit_count = 0;
-		if ($iter_count == 1) {
-			while( my $hit = $result->next_hit ) {
-				my $d = shift @valid_hit_data;
-				is($hit->name, shift @$d);
-				is($hit->length, shift @$d);
-				is($hit->accession, shift @$d);
-				is($hit->ncbi_gi, shift @$d);
-				float_is($hit->significance, shift @$d);
-				is($hit->bits, shift @$d );
-				if( $hit_count == 1 ) {
-					my $hsps_left = 1;
-					while( my $hsp = $hit->next_hsp ){
-						is($hsp->query->start, 63);
-						is($hsp->query->end, 181);
-						is($hsp->hit->start, 304);
-						is($hsp->hit->end, 432);
-						is($hsp->length('total'), 129);
-						is($hsp->start('hit'), $hsp->hit->start);
-						is($hsp->end('query'), $hsp->query->end);
-						is($hsp->strand('sbjct'), $hsp->subject->strand);# alias for hit
-						float_is($hsp->evalue, 0.0242028);
-						is($hsp->score, 73);
-						is($hsp->bits, 32.7278);
-						is(sprintf("%.1f",$hsp->percent_identity), '24.0');
-						is(sprintf("%.4f",$hsp->frac_identical('query')), '0.2605');
-						is(sprintf("%.3f",$hsp->frac_identical('hit')), '0.240');
-						is($hsp->gaps, 10);
-						$hsps_left--;
-					}
-					is($hsps_left, 0);
-				}
-				last if( $hit_count++ > @valid_hit_data );
-			}
-		}
-	}
-	is(@valid_hit_data, 0);
-	is(@valid_iter_data, 0);
-	is($iter_count, 2);
-}
diff --git a/t/SearchIO/hmmer.t b/t/SearchIO/hmmer.t
index 46ec37d..399b7e9 100644
--- a/t/SearchIO/hmmer.t
+++ b/t/SearchIO/hmmer.t
@@ -7,7 +7,7 @@ BEGIN {
     use lib '.';
     use Bio::Root::Test;
 
-    test_begin( -tests => 773 );
+    test_begin( -tests => 824 );
 
     use_ok('Bio::SearchIO');
 }
@@ -46,6 +46,7 @@ while ( $result = $searchio->next_result ) {
             'Check for hit description'
         );
         is( $hit->raw_score,          146.1,   'Check hit raw_score' );
+        is( $hit->bits,               0,       'Check hit bits (0)' );
         float_is( $hit->significance, 6.3e-40, 'Check hit significance' );
         is( $hit->num_hsps,           1,       'Check num_hsps' );
 
@@ -75,6 +76,7 @@ while ( $result = $searchio->next_result ) {
             is( $hsp->query->start, 33,      'Check for query alifrom value' );
             is( $hsp->query->end,   103,     'Check for query ali to value' );
             is( $hsp->score,        71.2,    'Check for hsp score' );
+            is( $hsp->bits,         0,       'Check for hsp bits (0)' );
             float_is( $hsp->evalue, 2.2e-17, 'Check for hsp c-Evalue' );
 
             is( $hsp->length('query'), 71, 'Check for hsp query length' );
@@ -132,6 +134,7 @@ while ( $result = $searchio->next_result ) {
         is( $hit->name,              'SEED',    'Check hit name' );
         is( $hit->description,       '',        'Check for hit description' );
         is( $hit->raw_score,          146.1,    'Check hit raw_score' );
+        is( $hit->bits,               0,        'Check hit bits (0)' );
         float_is( $hit->significance, 6.3e-040, 'Check hit significance' );
         is( $hit->num_hsps,           1,        'Check num_hsps' );
 
@@ -161,6 +164,7 @@ while ( $result = $searchio->next_result ) {
             is( $hsp->query->start, 124,     'Check for query alifrom value' );
             is( $hsp->query->end,   193,     'Check for query ali to value' );
             is( $hsp->score,        75.5,    'Check for hsp score' );
+            is( $hsp->bits,         0,       'Check for hsp bits (0)' );
             float_is( $hsp->evalue, 1.1e-18, 'Check for hsp c-Evalue' );
 
             is( $hsp->length('query'), 70, 'Check for hsp query length' );
@@ -241,6 +245,7 @@ while ( $result = $searchio->next_result ) {
         'Check for hit description'
     );
     is( $hit->raw_score,          119.7, 'Check hit raw_score' );
+    is( $hit->bits,               0,     'Check hit bits (0)' );
     float_is( $hit->significance, 2e-31, 'Check hit significance' );
     is( $hit->num_hsps,           1,     'Check num_hsps' );
     is( $hit->length,             0,     'Check hit length' );
@@ -256,6 +261,7 @@ while ( $result = $searchio->next_result ) {
     is( $hsp->query->start,     1,     'Check for query alifrom value' );
     is( $hsp->query->end,       77,    'Check for query ali to value' );
     is( $hsp->score,            119.7, 'Check for hsp score' );
+    is( $hsp->bits,             0,     'Check for hsp bits (0)' );
     float_is( $hsp->evalue,     2e-31, 'Check for hsp c-Evalue' );
 
     is( $hsp->length('query'), 77, 'Check for hsp query length' );
@@ -285,6 +291,7 @@ while ( $result = $searchio->next_result ) {
                 is( $hsp->query->start,     1,       'Check for query alifrom value' );
                 is( $hsp->query->end,       77,      'Check for query ali to value' );
                 is( $hsp->score,            72.9,    'Check for hsp score' );
+                is( $hsp->bits,             0,       'Check for hsp bits (0)' );
                 float_is( $hsp->evalue,     2.4e-17, 'Check for hsp c-Evalue' );
 
                 is( $hsp->length('query'), 77, 'Check for hsp query length' );
@@ -310,6 +317,7 @@ while ( $result = $searchio->next_result ) {
                 is( $hsp->query->start,     1,   'Check for query alifrom value' );
                 is( $hsp->query->end,       77,  'Check for query ali to value' );
                 is( $hsp->score,            3.3, 'Check for hsp score' );
+                is( $hsp->bits,             0,   'Check for hsp bits (0)' );
                 float_is( $hsp->evalue,     1.9, 'Check for hsp c-Evalue' );
 
                 is( $hsp->length('query'), 77, 'Check for hsp query length' );
@@ -360,6 +368,7 @@ while ( $result = $searchio->next_result ) {
         'Check for hit description'
     );
     is( $hit->raw_score,         -105.2,  'Check hit raw_score' );
+    is( $hit->bits,               0,      'Check hit bits (0)' );
     float_is( $hit->significance, 0.0022, 'Check hit significance' );
     is( $hit->num_hsps,           1,      'Check num_hsps' );
 
@@ -389,6 +398,7 @@ while ( $result = $searchio->next_result ) {
     is( $hsp->query->start, 280,    'Check for query alifrom value' );
     is( $hsp->query->end,   481,    'Check for query ali to value' );
     is( $hsp->score,       -105.2,  'Check for hsp score' );
+    is( $hsp->bits,         0,      'Check for hsp bits (0)' );
     float_is( $hsp->evalue, 0.0022, 'Check for hsp evalue' );
 
     is( $hsp->length('query'), 202, 'Check for hsp query length' );
@@ -482,6 +492,7 @@ while ( $result = $searchio->next_result ) {
         'Check for hit description'
     );
     is( $hit->raw_score,          449.4,  'Check hit raw_score' );
+    is( $hit->bits,               0,      'Check hit bits (0)' );
     float_is( $hit->significance, 2e-135, 'Check hit significance' );
     is( $hit->num_hsps,           1,      'Check num_hsps' );
 
@@ -511,6 +522,7 @@ while ( $result = $searchio->next_result ) {
     is( $hsp->query->start,     1,             'Check for query alifrom value' );
     is( $hsp->query->end,       337,           'Check for query ali to value' );
     is( $hsp->score,            449.4,         'Check for hsp score' );
+    is( $hsp->bits,             0,             'Check for hsp bits (0)' );
     float_is( $hsp->evalue,     2e-135,        'Check for hsp evalue' );
 
     is( $hsp->length('query'), 337, 'Check for hsp query length' );
@@ -559,6 +571,7 @@ while ( $result = $searchio->next_result ) {
     is( $hit->name,              'CATL_HUMAN', 'Check hit name' );
     is( $hit->description,       '',           'Check for hit description' );
     is( $hit->raw_score,          444.5,       'Check hit raw_score' );
+    is( $hit->bits,               0,           'Check hit bits (0)' );
     float_is( $hit->significance, 6.1e-134,    'Check hit significance' );
 }
 
@@ -641,6 +654,7 @@ while ( $result = $searchio->next_result ) {
                 'Check for hit description'
             );
             is( $hit->raw_score,          105.2, 'Check hit raw_score' );
+            is( $hit->bits,               0,     'Check hit bits (0)' );
             float_is( $hit->significance, 6e-30, 'Check hit significance' );
             is( $hit->num_hsps,           1,     'Check num_hsps' );
 
@@ -661,6 +675,7 @@ while ( $result = $searchio->next_result ) {
                 is( $hsp->query->start, 2,       'Check for query alifrom value' );
                 is( $hsp->query->end,   173,     'Check for query ali to value' );
                 is( $hsp->score,       '105.0',  'Check for hsp score' );
+                is( $hsp->bits,         0,       'Check for hsp bits (0)' );
                 float_is( $hsp->evalue, 1.5e-33, 'Check for hsp c-Evalue' );
 
                 is( $hsp->length('query'), 172, 'Check for hsp query length' );
@@ -746,6 +761,7 @@ while ( $result = $searchio->next_result ) {
                     is( $hsp->query->start, 335,     'Check for query alifrom value' );
                     is( $hsp->query->end,   369,     'Check for query ali to value' );
                     is( $hsp->score,        18.9,    'Check for hsp score' );
+                    is( $hsp->bits,         0,       'Check for hsp bits (0)' );
                     float_is( $hsp->evalue, 8.9e-08, 'Check for hsp c-Evalue' );
                 }
             }
@@ -766,7 +782,8 @@ while ( $result = $searchio->next_result ) {
                     is( $hsp->query->start, 335,    'Check for query alifrom value' );
                     is( $hsp->query->end,   369,    'Check for query ali to value' );
                     is( $hsp->score,        18.8,   'Check for hsp score' );
-                    float_is( $hsp->evalue, 9e-08, 'Check for hsp c-Evalue' );
+                    is( $hsp->bits,         0,      'Check for hsp bits (0)' );
+                    float_is( $hsp->evalue, 9e-08,  'Check for hsp c-Evalue' );
                 }
             }
         }
@@ -857,6 +874,7 @@ while ( $result = $searchio->next_result ) {
                 'Check for hit description'
             );
             is( $hit->raw_score,         -17.8, 'Check hit raw_score' );
+            is( $hit->bits,               0,    'Check hit bits (0)' );
             float_is( $hit->significance, 3,    'Check hit significance' );
             is( $hit->num_hsps,           5,    'Check num_hsps' );
 
@@ -872,6 +890,7 @@ while ( $result = $searchio->next_result ) {
                 is( $hsp->query->start, 34,  'Check for query hmmfrom value' );
                 is( $hsp->query->end,   40,  'Check for query hmm to value' );
                 is( $hsp->score,       -4.3, 'Check for hsp score' );
+                is( $hsp->bits,         0,   'Check for hsp bits (0)' );
                 float_is( $hsp->evalue, 1,   'Check for hsp c-Evalue' );
 
                 is( $hsp->length('query'), 7, 'Check for hsp query length' );
@@ -952,6 +971,7 @@ while ( $result = $searchio->next_result ) {
                 'Check for hit description'
             );
             is( $hit->raw_score,          616.9,    'Check hit raw_score' );
+            is( $hit->bits,               0,        'Check hit bits (0)' );
             float_is( $hit->significance, 9.3e-189, 'Check hit significance' );
             is( $hit->num_hsps,           1,        'Check num_hsps' );
 
@@ -972,6 +992,7 @@ while ( $result = $searchio->next_result ) {
                 is( $hsp->query->start, 71,       'Check for query hmmfrom value' );
                 is( $hsp->query->end,   1021,     'Check for query hmm to value' );
                 is( $hsp->score,        616.6,    'Check for hsp score' );
+                is( $hsp->bits,         0,        'Check for hsp bits (0)' );
                 float_is( $hsp->evalue, 3.9e-189, 'Check for hsp c-Evalue' );
 
                 is( $hsp->length('query'), 951,  'Check for hsp query length' );
@@ -1152,50 +1173,97 @@ $searchio = Bio::SearchIO->new(
     ]
 );
 
+my $result_counter = 0;
 while ( $result = $searchio->next_result ) {
-    is( ref($result),
-        'Bio::Search::Result::HMMERResult',
-        'Check for the correct result reference type'
-    );
-    is( $result->algorithm,         'HMMSCAN',    'Check algorithm' );
-    is( $result->algorithm_version, '3.0',        'Check algorithm version' );
-    is( $result->hmm_name,          'Pfam-A.hmm', 'Check hmm_name' );
-    is( $result->sequence_file, 'BA000019.orf8.fasta',
-        'Check sequence_file' );
-    is( $result->query_name, 'BA000019.orf8', 'Check query_name' );
-    is( $result->query_length, '348', 'Check query_length' );
-    is( $result->query_description, '', 'Check query_description' );
-    is( $result->num_hits(),        3,  'Check num_hits' );
-    my ( $hsp, $hit );
+    $result_counter++;
+    if ($result_counter == 1) {
+        is( ref($result),
+            'Bio::Search::Result::HMMERResult',
+            'Check for the correct result reference type'
+        );
+        is( $result->algorithm,         'HMMSCAN',             'Check algorithm' );
+        is( $result->algorithm_version, '3.0',                 'Check algorithm version' );
+        is( $result->hmm_name,          'Pfam-A.hmm',          'Check hmm_name' );
+        is( $result->sequence_file,     'BA000019.orf8.fasta', 'Check sequence_file' );
+        is( $result->query_name,        'BA000019.orf8',       'Check query_name' );
+        is( $result->query_length,       348,                  'Check query_length' );
+        is( $result->query_description, '',                    'Check query_description' );
+        is( $result->num_hits(),         3,                    'Check num_hits' );
+        my ( $hsp, $hit );
 
-    while ( $hit = $result->next_model ) {
-        if ($hit->name eq 'PKSI-KS_m3') {
-            # Hit length is usually unknown for HMMSCAN and HMMSEARCH but not for NHMMER.
-            # When is not known, sometimes it can be deduced from domain data '[]'
-            is( $hit->length,             16, 'Check hit length' );
-            is( $hit->frac_aligned_query, 0.09 );
-            is( $hit->frac_aligned_hit,  '1.00' );
+        while ( $hit = $result->next_model ) {
+            if ($hit->name eq 'PKSI-KS_m3') {
+                # Hit length is usually unknown for HMMSCAN and HMMSEARCH but not for NHMMER.
+                # When is not known, sometimes it can be deduced from domain data '[]'
+                is( $hit->length,             16, 'Check hit length' );
+                is( $hit->frac_aligned_query, 0.09 );
+                is( $hit->frac_aligned_hit,  '1.00' );
+            }
+            my @expected = @{ shift @multi_hits };
+            is( ref($hit), 'Bio::Search::Hit::HMMERHit',
+                'Check for the correct hit reference type' );
+            is( $hit->name,        shift @expected, 'Check hit name' );
+            is( $hit->description, shift @expected, 'Check for hit description' );
+            is( $hit->raw_score,   shift @expected, 'Check hit raw_score' );
+            float_is(
+                $hit->significance,
+                shift @expected,
+                'Check hit significance'
+            );
+            is( $hit->num_hsps, shift @expected, 'Check num_hsps' );
+            my @hsp_list = @{ shift @expected };
+
+            while ( defined( $hsp = $hit->next_domain ) ) {
+                my @hsp_exp = @{ shift @hsp_list };
+                is( ref($hsp), 'Bio::Search::HSP::HMMERHSP',
+                    'Check for correct hsp reference type' );
+                is( $hsp->hit_string,   shift @hsp_exp, 'Check hit sequence' );
+                is( $hsp->query_string, shift @hsp_exp, 'Check query sequence' );
+            }
         }
-        my @expected = @{ shift @multi_hits };
-        is( ref($hit), 'Bio::Search::Hit::HMMERHit',
-            'Check for the correct hit reference type' );
-        is( $hit->name,        shift @expected, 'Check hit name' );
-        is( $hit->description, shift @expected, 'Check for hit description' );
-        is( $hit->raw_score,   shift @expected, 'Check hit raw_score' );
-        float_is(
-            $hit->significance,
-            shift @expected,
-            'Check hit significance'
+    }
+    elsif ($result_counter == 2) {
+        is( ref($result),
+            'Bio::Search::Result::HMMERResult',
+            'Check for the correct result reference type'
         );
-        is( $hit->num_hsps, shift @expected, 'Check num_hsps' );
-        my @hsp_list = @{ shift @expected };
+        is( $result->algorithm,         'HMMSCAN',                    'Check algorithm' );
+        is( $result->algorithm_version, '3.0',                        'Check algorithm version' );
+        is( $result->query_name,        'lcl|aorf_00010|P1',          'Check query_name' );
+        is( $result->query_length,       132,                         'Check query_length' );
+        is( $result->query_description, 'IS481.original transposase', 'Check query_description' );
+        is( $result->num_hits(),         1,                           'Check num_hits' );
+        my ( $hsp, $hit );
 
-        while ( defined( $hsp = $hit->next_domain ) ) {
-            my @hsp_exp = @{ shift @hsp_list };
-            is( ref($hsp), 'Bio::Search::HSP::HMMERHSP',
-                'Check for correct hsp reference type' );
-            is( $hsp->hit_string,   shift @hsp_exp, 'Check hit sequence' );
-            is( $hsp->query_string, shift @hsp_exp, 'Check query sequence' );
+        while ( $hit = $result->next_model ) {
+            is( ref($hit), 'Bio::Search::Hit::HMMERHit',
+                'Check for the correct hit reference type' );
+            is( $hit->name,              'IS481.original.hmm', 'Check hit name' );
+            is( $hit->description,       '',                   'Check for hit description' );
+            is( $hit->raw_score,         '130.0',              'Check hit raw_score' );
+            float_is( $hit->significance, 3.4e-040,            'Check hit significance' );
+            is( $hit->num_hsps,           1,                   'Check num_hsps' );
+
+            while ( defined( $hsp = $hit->next_domain ) ) {
+                is( ref($hsp), 'Bio::Search::HSP::HMMERHSP',
+                    'Check for correct hsp reference type' );
+                is( $hsp->query_string,
+                    'GEIETAHPSYLGSQDTFYVGNITGAGR----------------------------IYQQTFVDTYSKWDSTKLYTTKTPITAADLLNDRVLSFFA-EQGMGIIRLLTDRSTEYCSKA--ETQDYELCLALNDIEHTKTKVYHPQTNDICRRFHKA',
+                    'Check for query string'
+                );
+                is( $hsp->hit_string,
+                    'kRYErdhPgeLvhmDvkklgripdgGgvkighRwrgrtrgrgkrtnqsrnrglgkayvitaiDDhSRfayaeilsdettttaadfllraaayfygkigeeiitrvlTDnGaayrskkrsakhdFqealaelGIkhilTrprsPqTNGKiERFhrT',
+                    'Check for hit string'
+                );
+                is( $hsp->homology_string,
+                    '+++E++hP +L+++D++++g+i + G+                            +y++t++D++S+   +++++++t++taad l++ ++ f+   ++++i r lTD+ ++y+sk   ++ d+  +la ++I+h++T++++PqTN ++ RFh+ ',
+                    'Check for homology string'
+                );
+                is( $hsp->posterior_string,
+                    '579*******************88888............................****************************************.********************8..**********************************95',
+                    'Check for posterior probability string'
+                );
+            }
         }
     }
 }
@@ -1321,7 +1389,7 @@ is( $result->num_hits(), 2, 'Check num_hits' );
     my $hit    = $result->next_hit;
     my $hsp    = $hit->next_hsp;
     is( $result->query_length, 97, 'Check query_length' );
-    is( $hit->length,          95, 'Check nhmmer hit length' );
+    is( $hit->length,          95, 'Check hit length' );
     is( $hsp->hit_string,
         'svfqqqqssksttgstvtAiAiAigYRYRYRAvtWnsGsLssGvnDnDnDqqsdgLYtiYYsvtvpssslpsqtviHHHaHkasstkiiikiePr',
         'bug3376'
@@ -1387,6 +1455,7 @@ is( $result->num_hits(), 2, 'Check num_hits' );
     is( $hit->name,              'seq1',                'Check nhmmer hit name' );
     is( $hit->description,       'Description of seq1', 'Check nhmmer hit description' );
     is( $hit->score,              148.2,                'Check nhmmer hit score' );
+    is( $hit->bits,               0,                    'Check nhmmer hit bits (0)' );
     float_is( $hit->significance, 3.2e-48,              'Check nhmmer hit significance' );
     is( $hit->num_hsps,           1,                    'Check num_hsps' );
 
@@ -1409,6 +1478,7 @@ is( $result->num_hits(), 2, 'Check num_hits' );
     is( $hsp->strand('hit'),      1,       'Check nhmmer hsp hit strand' );
     is( $hsp->strand('query'),    1,       'Check nhmmer hsp query strand' );
     is( $hsp->score,              148.2,   'Check nhmmer hsp score' );
+    is( $hsp->bits,               0,       'Check nhmmer hsp bits (0)' );
     float_is( $hsp->significance, 3.2e-48, 'Check nhmmer hsp evalue' );
 
     is( $hsp->length('query'), 154, 'Check for hsp query length' );
@@ -1468,6 +1538,7 @@ is( $result->num_hits(), 2, 'Check num_hits' );
     is( $hit->name,              'seq2',                'Check nhmmer hit name' );
     is( $hit->description,       'Description of seq2', 'Check nhmmer hit description' );
     is( $hit->score,              38.6,                 'Check nhmmer hit score' );
+    is( $hit->bits,               0,                    'Check nhmmer hit bits (0)' );
     float_is( $hit->significance, 3.9e-15,              'Check nhmmer hit significance' );
     is( $hit->length,             60,                   'Check nhmmer hit length' );
 
@@ -1482,6 +1553,7 @@ is( $result->num_hits(), 2, 'Check num_hits' );
     is( $hsp->strand('hit'),     -1,       'Check nhmmer hsp hit strand' );
     is( $hsp->strand('query'),    1,       'Check nhmmer hsp query strand' );
     is( $hsp->score,              38.6,    'Check nhmmer hsp score' );
+    is( $hsp->bits,               0,       'Check nhmmer hsp bits (0)' );
     float_is( $hsp->significance, 3.9e-15, 'Check nhmmer hsp evalue' );
 
     is( $hsp->length('query'), 59, 'Check for hsp query length' );
@@ -1602,3 +1674,39 @@ while ( my $hit = $result->next_hit ) {
     is( $hit->name, shift @valid, 'Check Hit_filter filtered hits ID' );
 }
 is( @valid, 0 );
+
+# Test for correct parsing of results from query sequences containing stops.
+# Without the patch, parsing dies with "Quantifier follows nothing in regex;" error
+$searchio = Bio::SearchIO->new(
+    '-format' => 'hmmer',
+    '-file'   => test_input_file('hmmscan_qry_stop.txt'),
+);
+eval { $searchio->next_result; };
+is( $@, '', 'Correct parsing of alignments with stops' );
+
+
+# Test for correct parsing of phmmer results
+# Without the patch, parsing skips all lines from phmmer output
+{
+	my $searchio = Bio::SearchIO->new(
+		-format => 'hmmer',
+		-file   => test_input_file('phmmer.out')
+	);
+	
+	my $result = $searchio->next_result;
+	if ( defined $result ) {
+
+		is( $result->algorithm,         'PHMMER',  'Check algorithm' );
+		is( $result->query_name,        'A0R3R7',  'Check query_name' );
+		is( $result->query_length,       762,      'Check query_length absence' );
+		is( $result->query_description, '',        'Check query_description' );
+		is( $result->num_hits(),         8,        'Check num_hits' );
+
+		my $hit = $result->next_model;
+		if ( defined $hit ) {
+			is( $hit->name, 'cath|4_0_0|1vs0A03/639-759', 'query name okay' );
+			is( $hit->num_hsps(), 1, 'Check num_hsps' );
+		}
+	}
+
+}
diff --git a/t/SearchIO/infernal.t b/t/SearchIO/infernal.t
index 24f774c..9137f7f 100644
--- a/t/SearchIO/infernal.t
+++ b/t/SearchIO/infernal.t
@@ -2,17 +2,171 @@
 # $Id: SearchIO_infernal.t 14672 2008-04-22 21:42:50Z cjfields $
 
 use strict;
+use warnings;
 
 BEGIN {
     use lib '.';
     use Bio::Root::Test;
-    
-    test_begin(-tests => 412);
-    
+
+    test_begin(-tests => 496);
+
     use_ok('Bio::SearchIO');
 }
 
-my ($result, $iter, $hit, $hsp, $algorithm, $meta);
+my ($in, $result, $iter, $hit, $hsp, $algorithm, $meta);
+
+### Infernal v. 1.1 ###
+{
+    # one query vs one database sequence report
+    $in = Bio::SearchIO->new(
+        -format  => 'infernal',
+        -file    => test_input_file('cmsearch_output.txt')
+    );
+    $result = $in->next_result;
+    isa_ok($result, 'Bio::Search::Result::ResultI');
+    is( ref($result), 'Bio::Search::Result::INFERNALResult', 'Check for the correct Result reference type');
+    is( $result->algorithm,         'CMSEARCH',    'Check algorithm' );
+    is( $result->algorithm_version, '1.1.1',       'Check cmsearch algorithm version' );
+    is( $result->cm_name,           'RF00174.cm',  'Check cm_name');
+    is( $result->database_name,     'NC_000913.fna','Check database_name' );
+    is( $result->database_entries,  1,              'Check database_entries' );
+    is( $result->database_letters,  9283304,        'Check database_letters' );
+    is( $result->query_name,        'Cobalamin',    'Check query_name' );
+    is( $result->query_length,      191,            'Check query_length' );
+    is( $result->query_accession,   'RF00174',      'Check query_accession' );
+    is( $result->query_description, '',             'Check query_description' );
+    is( $result->num_hits(),        2,              'Check num_hits' );
+
+    # 1st hit
+
+    $hit = $result->next_hit;
+    is( ref($hit), 'Bio::Search::Hit::ModelHit', 'Check for the correct hit reference type' );
+    is( $hit->algorithm, 'CMSEARCH', "Hit algorithm");
+    is( $hit->name,              'gi|556503834|ref|NC_000913.3|', 'Check hit name' );
+    is( $hit->description,       'Escherichia coli str. K-12 substr. MG1655, complete genome', 'Check hit description' );
+    is( $hit->length,             0,       'Check hit length' );
+    is( $hit->score,              98.2,    'Check hit score' );
+    is( $hit->bits,               98.2,    'Check hit bits' );
+    is( $hit->num_hsps,           1,       'Check number of HSPs' );
+    float_is( $hit->significance, 8.7e-16, 'Check hit significance' );
+    is($hit->rank,                1,       'Check hit rank' );
+
+    $hsp = $hit->next_hsp;
+    is( ref($hsp), 'Bio::Search::HSP::ModelHSP', 'Check for correct hsp reference type' );
+    isa_ok( $hsp, 'Bio::Search::HSP::HSPI' );
+    isa_ok( $hsp->get_aln, 'Bio::Align::AlignI' );
+    isa_ok( $hsp->hit,     'Bio::SeqFeature::Similarity', "Check for hsp hit isa seqfeature similarity" );
+
+    is( $hsp->hit->seq_id(),   'gi|556503834|ref|NC_000913.3|', 'Check for HSP hit seq_id' );
+    is( $hsp->query->seq_id(), 'Cobalamin', 'Check for HSP query seq_id' );
+    is( $hsp->start('query'),     1,       'Check hsp query start' );
+    is( $hsp->end('query'),       191,     'Check hsp query end' );
+    is( $hsp->start('hit'),       4163384, 'Check hsp hit start' );
+    is( $hsp->end('hit'),         4163574, 'Check hsp hit end' );
+    is( $hsp->score,              98.2,    'Check hsp score' );
+    is( $hsp->bits,               98.2,    'Check hsp bits' );
+    float_is( $hsp->significance, 8.7e-16, 'Check hsp evalue' );
+
+    is( $hsp->length('query'), 191, 'Check for hsp query length' );
+    is( $hsp->length('hit'),   191, 'Check for hsp hit length' );
+    is( $hsp->length,          207, 'Check for hsp total length' );
+    is( $hsp->gaps('query'),   16,   'Check for hsp query gaps' );
+    is( $hsp->gaps('hit'),     16,   'Check for hsp hit gaps' );
+    is( $hsp->gaps,            32,   'Check for hsp total gaps' );
+    is( $hsp->strand('hit'),      1,       'Check hsp hit strand' );
+    
+    # 2nd hit 
+     
+    $hit = $result->next_hit;
+    is( $hit->name,              'gi|556503834|ref|NC_000913.3|',                 'Check hit name' );
+    is( $hit->description,       'Escherichia coli str. K-12 substr. MG1655, complete genome','Check hit description' );
+    is( $hit->score,              8.4,  'Check hit score' );
+    is( $hit->raw_score,          8.4, "Check hit raw_score");
+    is( $hit->bits,               8.4,    'Check hit bits' );
+    float_is( $hit->significance, 0.63, 'Check hit significance' );
+    is( $hit->length,             0,  'Check hit length' );
+    is($hit->rank, 2, "Hit rank");
+
+    $hsp = $hit->next_hsp;
+    is( $hsp->hit->seq_id(),   'gi|556503834|ref|NC_000913.3|', 'Check for hit seq_id' );
+    is( $hsp->query->seq_id(), 'Cobalamin', 'Check for query seq_id' );
+    is( $hsp->start('query'),     1,       'Check hsp query start' );
+    is( $hsp->end('query'),       191,     'Check hsp query end' );
+    is( $hsp->start('hit'),       4593356, 'Check hsp hit start' );
+    is( $hsp->end('hit'),         4593565, 'Check hsp hit end' );
+    is( $hsp->score,              8.4,     'Check hsp score' );
+    is( $hsp->bits,               8.4,     'Check hsp bits' );
+    float_is( $hsp->significance, 0.63,    'Check hsp evalue' );
+
+    is( $hsp->gaps('query'),   67,   'Check for hsp query gaps' );
+    is( $hsp->gaps('hit'),     48,   'Check for hsp hit gaps' );
+    is( $hsp->gaps,            115,   'Check for hsp total gaps' );
+    is( $hsp->strand('hit'),      1,       'Check hsp hit strand' );
+
+    is( $hsp->noncanonical_string,
+        '               v                                    v             v   v        v       v  v       vvvvvv     vvv    vvv                                   vvv      vvvvvvvvv                                              v  v                    v               ',
+        'Check for NC string');
+    is( $hsp->meta,
+        ':::::::::::::::[[[[[[,<<<____________>>>,,,,,(((,,,<<<<<_______>>>>>,,<<<____>>>,<<<---<<<<.------<<<<<<-----<<<-<<<<<<_____............................._>>>>>>--->>>>>>>>>----------....................................>>>>----.>>>,,,,)))]]]]]]:::::::::::::::',
+        'Check for CS string');
+    is( $hsp->query_string,
+        'uuaaauugaaacgaugauGGUuccccuuuaaagugaaggguuAAaaGGGAAcccGGUGaaAaUCCgggGCuGcCCCCgCaACuGUAAgcGg.agagcaccccccAauAaGCCACUggcccgcaa.............................gggccGGGAAGGCggggggaaggaaugac....................................cCgcgAGc.CaGGAGACCuGCCaucaguuuuugaaucucc',
+        'Check for query string');
+    is( $hsp->homology_string,
+        '  A AUU+A+++    :UGG  :C +U ++  G     G: +AA : GGAA:  G         C  :+  GCCCCCGC +C GU+A ::     GCA ++ ++ A   GCCA   G+C G                                                                                                  :: +AG+ C GGA AC : CCA:  + + + + AU    ',
+        'Check for homology string');
+    is( $hsp->hit_string,
+        'GGAGAUUAAUCUUUACGUGGG-UCGUUGAUCGG---CUGACGAACCAGGAAGAUGU-------ACGCCAGUGCCCCCGCUGCGGUGACGCAa-CCGCAGAUGAUUAGU-GCCA---GACGG---aaugagugggugguaucaacaauaaaacc-----------------------------aguaaugaucggcgcaaaagaggcgcagaugaagcuGGCAAAGUuCUGGAUACUGCCCACCGACGCAGUCAUGCGA',
+        'Check for hit string');
+    is( $hsp->posterior_string,
+        '*********************.88877554444...5777779*********9996.......7999********************88873.333333333333333.4544...33333...44566655444444444444444444444.............................566666666666666666666666677777777776788899966*******************************',
+        'Check for posterior probability string');
+
+    isa_ok($hsp->feature1, 'Bio::SeqFeature::Similarity');
+    isa_ok($hsp->feature2, 'Bio::SeqFeature::Similarity');
+    ($meta) = $hsp->feature1->get_tag_values('meta');
+    is($meta, ':::::::::::::::[[[[[[,<<<____________>>>,,,,,(((,,,<<<<<_______>>>>>,,<<<____>>>,<<<---<<<<.------<<<<<<-----<<<-<<<<<<_____............................._>>>>>>--->>>>>>>>>----------....................................>>>>----.>>>,,,,)))]]]]]]:::::::::::::::', "Check hsp feature1 get_tag_values");
+    ($meta) = $hsp->feature2->get_tag_values('meta');
+    is($meta, ':::::::::::::::[[[[[[,<<<____________>>>,,,,,(((,,,<<<<<_______>>>>>,,<<<____>>>,<<<---<<<<.------<<<<<<-----<<<-<<<<<<_____............................._>>>>>>--->>>>>>>>>----------....................................>>>>----.>>>,,,,)))]]]]]]:::::::::::::::', "Check hsp feature2 get_tag_values");
+
+    $result = $in->next_result;
+    is( $result, undef, 'Check for undefined result' );
+
+
+    # multi query vs multi sequence database report
+    $in = Bio::SearchIO->new(
+        -format  => 'infernal',
+        -file    => test_input_file('cmsearch.multi.out')
+    );
+      # 1st query
+    $result = $in->next_result;
+    is( $result->num_hits,   12, 'Check result num_hits - multi report');
+    is( $result->query_name, 'tRNA5', 'Check result query_name - multi report');
+    $hit = $result->next_hit;
+    is( $hit->length,        72, 'Check hit length - multi report' );
+
+      # 2nd query
+    $result = $in->next_result;
+    is( $result->num_hits,   1, 'Check result#2 num_hits - multi report');
+    is( $result->query_name, 'Cobalamin', 'Check result#2 query_name - multi report');
+    $hit = $result->next_hit;
+    is( $hit->length,        0, 'Check result#2 hit length - multi report' );
+    $hsp = $hit->next_hsp;
+    is( $hsp->strand('hit'), -1, 'Check result#2 hsp hit strand - multi report');
+
+
+    # report with no hits
+    $in = Bio::SearchIO->new(
+        -format  => 'infernal',
+        -file    => test_input_file('cmsearch.nohit.out')
+    );
+    $result = $in->next_result;
+    is( $result->cm_name, 'Cobalamin.c.cm', 'Check cm_name' );
+    $hit = $result->next_hit;
+    is( $hit, undef, 'Check for undefined hit' );
+
+}
+
 
 ### Infernal v. 1.0 ####
 
@@ -107,7 +261,7 @@ warning_like {$hit->frame}
 warning_like {$hit->range}
     qr'range not implemented for Model-based searches',
     'Hit range not implemented';
-warning_like {$hit->seq_inds} 
+warning_like {$hit->seq_inds}
     qr'seq_inds not implemented for Model-based searches',
     'Hit seq_inds not implemented';
 
@@ -250,7 +404,7 @@ is($hsp->strand('hit'), 1, "HSP strand");
 $searchio = Bio::SearchIO->new( -format => 'infernal',
                                 -file   => test_input_file('test.infernal'),
                                 # version is reset to the correct one by parser
-                                -version => 0.7, 
+                                -version => 0.7,
                                 -model => 'Purine',
                                 -query_acc => 'RF00167',
                                 -query_desc => 'Purine riboswitch',
@@ -410,7 +564,7 @@ is($hit->length, 0, "Hit length");
 is($hit->locus, '', "Hit locus");
 is($hit->n, 1, "Hit n");
 is($hit->name, 'gi|633168|emb|X83878.1|', "Hit name");
-is($hit->num_hsps, 1, "Hit num_hsps"); 
+is($hit->num_hsps, 1, "Hit num_hsps");
 is($hit->overlap, 0, "Hit overlap");
 is($hit->query_length, 102, "Hit query_length");
 is($hit->rank, 2, "Hit rank");
@@ -473,7 +627,7 @@ my $symbols = {
 $searchio = Bio::SearchIO->new( -format => 'infernal',
                                 -file   => test_input_file('test.infernal'),
                                 # version is reset to the correct one by parser
-                                -version => 0.7, 
+                                -version => 0.7,
                                 -model => 'Purine',
                                 -query_acc => 'RF00167',
                                 -query_desc => 'Purine riboswitch',
@@ -664,7 +818,7 @@ is($hit->length, 0, "Hit length");
 is($hit->locus, 'BSU51115', "Hit locus");
 is($hit->n, 11, "Hit n");
 is($hit->name, 'gi|2239287|gb|U51115.1|BSU51115', "Hit name");
-is($hit->num_hsps, 11, "Hit num_hsps"); 
+is($hit->num_hsps, 11, "Hit num_hsps");
 is($hit->overlap, 0, "Hit overlap");
 is($hit->query_length, 102, "Hit query_length");
 is($hit->rank, 2, "Hit rank");
diff --git a/t/Seq/PrimarySeq.t b/t/Seq/PrimarySeq.t
index 563536e..93d430e 100644
--- a/t/Seq/PrimarySeq.t
+++ b/t/Seq/PrimarySeq.t
@@ -7,7 +7,7 @@ use Data::Dumper;
 BEGIN {
     use lib '.';
     use Bio::Root::Test;
-    test_begin( -tests => 310 );
+    test_begin( -tests => 312 );
 
     use_ok('Bio::PrimarySeq');
     use_ok('Bio::Location::Simple');
@@ -287,6 +287,19 @@ is $aa->seq, 'M' or diag( "Translation: " . $aa->seq );
 # test for character '?' in the sequence string
 is $seq->seq('TTGGTGGCG?CAACT'), 'TTGGTGGCG?CAACT';
 
+# issue #105 - when there are starts and stops in both frame 0 and
+# frame 1, frame 0 start < frame 1 start, then should return the frame
+# 0 ORF per the pod ('the first orf') even if frame 1 stop < frame 0 stop
+
+$seq->seq('ATGAATGTAAATAA');
+$aa = $seq->translate( -orf => 1 );
+my $aa0 = $seq->translate(-frame => 0);
+is $aa->seq, $aa0->seq, "frame 0 start, frame 1 stop < frame 0 stop";
+$seq->seq('AAATGAATGTAAATAA');
+$aa = $seq->translate( -orf => 1, -frame=>1 );
+my $aa2 = $seq->translate(-frame => 2);
+is $aa->seq, $aa2->seq, "frame 1 start, frame 2 stop < frame 1 stop";
+
 # test for some aliases
 $seq = Bio::PrimarySeq->new(
     -id          => 'aliasid',
diff --git a/t/Seq/Seq.t b/t/Seq/Seq.t
index 09a5355..3712066 100644
--- a/t/Seq/Seq.t
+++ b/t/Seq/Seq.t
@@ -7,7 +7,7 @@ BEGIN {
     use lib '.';
     use Bio::Root::Test;
 
-    test_begin(-tests => 73);
+    test_begin(-tests => 76);
 
     use_ok('Bio::Seq');
     use_ok('Bio::Seq::RichSeq');
@@ -192,6 +192,15 @@ is ($richseq->keywords, 'JUNK1; JUNK2');
 $richseq->seq_version('2');
 is ($richseq->seq_version, 2);
 
+# Test adding a feature to a RichSeq type, then
+# trunc() and see if the feature vanishes (we shouldn't
+# be using clone() for RichSeq types)
+$richseq->add_SeqFeature($newfeat);
+is $richseq->feature_count, 1;
+my $newrichseq = $richseq->trunc(1,5);
+is $newrichseq->feature_count, 0, "Don't use clone for trunc of Bio::Seq::RichSeq";
+is $newrichseq->length, 5;
+
 # tests for subtle misbehaviors
 $seq = Bio::Seq->new(-primary_id => 'blah', -accession_number => 'foo');
 is ($seq->accession_number, $seq->primary_seq->accession_number);
diff --git a/t/SeqFeature/Generic.t b/t/SeqFeature/Generic.t
index 39e747b..c380917 100644
--- a/t/SeqFeature/Generic.t
+++ b/t/SeqFeature/Generic.t
@@ -7,7 +7,7 @@ BEGIN {
     use lib '.';
     use Bio::Root::Test;
     
-    test_begin(-tests => 362);
+    test_begin(-tests => 364);
 
     use_ok 'Bio::Seq';
     use_ok 'Bio::SeqIO';
@@ -325,3 +325,12 @@ for my $sf (@split_sfs) {
     is $sf->end, $end, 'End';
     is $sf->length, $length, 'Expected length';
 }
+
+# spliced_seq() on the reverse strand, bug #88 (github)
+$seq = Bio::SeqIO->new( -file => test_input_file('AF222649-rc.gbk') )->next_seq;
+# All should start with "ATG"
+for my $feat ( $seq->get_SeqFeatures('CDS') ) {
+    ok $feat->spliced_seq->seq =~ /^ATG/, "Reverse strand is spliced correctly";
+}
+        
+
diff --git a/t/SeqFeature/Location.t b/t/SeqFeature/Location.t
index f638046..d737739 100644
--- a/t/SeqFeature/Location.t
+++ b/t/SeqFeature/Location.t
@@ -109,7 +109,7 @@ $f = Bio::Location::Simple->new(-start  =>30,
 			       -strand =>1);
 $splitlocation->add_sub_Location($f);
 
-$f = Bio::Location::Simple->new(-start  =>18,
+$f = Bio::Location::Simple->new(-start  =>11,
 			       -end    =>22,
 			       -strand =>1);
 $splitlocation->add_sub_Location($f);
@@ -131,12 +131,20 @@ is(scalar($splitlocation->each_Location()), 4);
 
 $splitlocation->add_sub_Location($f);
 
-is($splitlocation->max_end, 90);
-is($splitlocation->min_start, 13);
-is($splitlocation->end, 90);
+# For unsorted split locations like this:
+# ('join(13..30,30..90,11..22,19..20,<50..61)'),
+# BioPerl will assume Start and End belongs to the
+# first and last segments respectively, because sorting
+# would break real cases like circular cut by origin features
+is($splitlocation->end, 61);
 is($splitlocation->start, 13);
 is($splitlocation->sub_Location(),5);
-
+# Minimum Start and Maximum End in unsorted sublocations can be
+# achieved by asking explicitly sub_Location to sort the segments
+my @increase_sort_sublocs = $splitlocation->sub_Location(1);  # Forward sort by Start
+my @decrease_sort_sublocs = $splitlocation->sub_Location(-1); # Reverse sort by End
+is($increase_sort_sublocs[0]->min_start, 11);
+is($decrease_sort_sublocs[0]->max_end,   90);
 
 is($fuzzy->to_FTstring(), '<10..20');
 $fuzzy->strand(-1);
@@ -145,7 +153,7 @@ is($simple->to_FTstring(), '10..20');
 $simple->strand(-1);
 is($simple->to_FTstring(), 'complement(10..20)');
 is( $splitlocation->to_FTstring(), 
-    'join(13..30,30..90,18..22,19..20,<50..61)');
+    'join(13..30,30..90,11..22,19..20,<50..61)');
 
 # test for bug #1074
 $f = Bio::Location::Simple->new(-start  => 5,
@@ -153,11 +161,11 @@ $f = Bio::Location::Simple->new(-start  => 5,
 			       -strand => -1);
 $splitlocation->add_sub_Location($f);
 is( $splitlocation->to_FTstring(), 
-    'join(13..30,30..90,18..22,19..20,<50..61,complement(5..12))',
+    'join(13..30,30..90,11..22,19..20,<50..61,complement(5..12))',
 	'Bugfix 1074');
 $splitlocation->strand(-1);
 is( $splitlocation->to_FTstring(), 
-    'complement(join(13..30,30..90,18..22,19..20,<50..61,5..12))');
+    'complement(join(13..30,30..90,11..22,19..20,<50..61,5..12))');
 
 $f = Bio::Location::Fuzzy->new(-start => '45.60',
 			      -end   => '75^80');
diff --git a/t/SeqFeature/LocationFactory.t b/t/SeqFeature/LocationFactory.t
index 341228c..ef9a0d6 100644
--- a/t/SeqFeature/LocationFactory.t
+++ b/t/SeqFeature/LocationFactory.t
@@ -6,148 +6,247 @@ use strict;
 BEGIN {
     use lib '.';
     use Bio::Root::Test;
-    
-    test_begin(-tests => 272);
-	
+
+    test_begin(-tests => 325);
+
     use_ok('Bio::Factory::FTLocationFactory');
 }
 
 my $simple_impl = "Bio::Location::Simple";
-my $fuzzy_impl = "Bio::Location::Fuzzy";
-my $split_impl = "Bio::Location::Split";
+my $fuzzy_impl  = "Bio::Location::Fuzzy";
+my $split_impl  = "Bio::Location::Split";
 
 # Holds strings and results. The latter is an array of expected class name,
 # min/max start position and position type, min/max end position and position
 # type, location type, the number of locations, and the strand.
 #
 my %testcases = (
-   # note: the following are directly taken from 
-   # http://www.ncbi.nlm.nih.gov/collab/FT/#location
-   "467" => [$simple_impl,
-	    467, 467, "EXACT", 467, 467, "EXACT", "EXACT", 1, 1],
-	"340..565" => [$simple_impl,
-		 340, 340, "EXACT", 565, 565, "EXACT", "EXACT", 1, 1],
-	"<345..500" => [$fuzzy_impl,
-		 undef, 345, "BEFORE", 500, 500, "EXACT", "EXACT", 1, 1],
-	"<1..888" => [$fuzzy_impl,
-		 undef, 1, "BEFORE", 888, 888, "EXACT", "EXACT", 1, 1],
-	"(102.110)" => [$fuzzy_impl,
-		 102, 102, "EXACT", 110, 110, "EXACT", "WITHIN", 1, 1],
-	"(23.45)..600" => [$fuzzy_impl,
-		 23, 45, "WITHIN", 600, 600, "EXACT", "EXACT", 1, 1],
-	"(122.133)..(204.221)" => [$fuzzy_impl,
-		 122, 133, "WITHIN", 204, 221, "WITHIN", "EXACT", 1, 1],
-	"123^124" => [$simple_impl,
-		 123, 123, "EXACT", 124, 124, "EXACT", "IN-BETWEEN", 1, 1],
-	"145^177" => [$fuzzy_impl,
-		 145, 145, "EXACT", 177, 177, "EXACT", "IN-BETWEEN", 1, 1],
-	"join(12..78,134..202)" => [$split_impl,
-		 12, 12, "EXACT", 202, 202, "EXACT", "EXACT", 2, 1],
-	"complement(join(4918..5163,2691..4571))" => [$split_impl,
-		 2691, 2691, "EXACT", 5163, 5163, "EXACT", "EXACT", 2, -1],
-	"complement(34..(122.126))" => [$fuzzy_impl,
-		 34, 34, "EXACT", 122, 126, "WITHIN", "EXACT", 1, -1],
-	"J00194:100..202" => [$simple_impl,
-		 100, 100, "EXACT", 202, 202, "EXACT", "EXACT", 1, 1],
-	# this variant is not really allowed by the FT definition
-	# document but we want to be able to cope with it
-	"J00194:(100..202)" => [$simple_impl,
-		 100, 100, "EXACT", 202, 202, "EXACT", "EXACT", 1, 1],
-	"((122.133)..(204.221))" => [$fuzzy_impl,
-		 122, 133, "WITHIN", 204, 221, "WITHIN", "EXACT", 1, 1],
-	"join(AY016290.1:108..185,AY016291.1:1546..1599)"=> [$split_impl,
-		 108, 108, "EXACT", 185, 185, "EXACT", "EXACT", 2, undef],
-
-	# UNCERTAIN locations and positions (Swissprot)
-   "?2465..2774" => [$fuzzy_impl,
-       2465, 2465, "UNCERTAIN", 2774, 2774, "EXACT", "EXACT", 1, 1],
-   "22..?64" => [$fuzzy_impl,
-       22, 22, "EXACT", 64, 64, "UNCERTAIN", "EXACT", 1, 1],
-   "?22..?64" => [$fuzzy_impl,
-       22, 22, "UNCERTAIN", 64, 64, "UNCERTAIN", "EXACT", 1, 1],
-   "?..>393" => [$fuzzy_impl,
-       undef, undef, "UNCERTAIN", 393, undef, "AFTER", "UNCERTAIN", 1, 1],
-   "<1..?" => [$fuzzy_impl,
-       undef, 1, "BEFORE", undef, undef, "UNCERTAIN", "UNCERTAIN", 1, 1],
-   "?..536" => [$fuzzy_impl,
-       undef, undef, "UNCERTAIN", 536, 536, "EXACT", "UNCERTAIN", 1, 1],
-   "1..?" => [$fuzzy_impl,
-       1, 1, "EXACT", undef, undef, "UNCERTAIN", "UNCERTAIN", 1, 1],
-   "?..?" => [$fuzzy_impl,
-       undef, undef, "UNCERTAIN", undef, undef, "UNCERTAIN", "UNCERTAIN", 1, 1],
-   # Not working yet:
-   #"12..?1" => [$fuzzy_impl,
-   #    1, 1, "UNCERTAIN", 12, 12, "EXACT", "EXACT", 1, 1]
-		 );
+    # note: the following are directly taken from
+    # http://www.insdc.org/documents/feature_table.html#3.4.3
+    "467"
+        => [$simple_impl, 467, 467, "EXACT",
+                          467, 467, "EXACT",
+                          "EXACT", 1, 1],
+    "340..565"
+        => [$simple_impl, 340, 340, "EXACT",
+                          565, 565, "EXACT",
+                          "EXACT", 1, 1],
+    "<345..500"
+        => [$fuzzy_impl, undef, 345, "BEFORE",
+                         500,   500, "EXACT",
+                         "EXACT", 1, 1],
+    "<1..888"
+        => [$fuzzy_impl, undef, 1,   "BEFORE",
+                         888,   888, "EXACT",
+                         "EXACT", 1, 1],
+    "1..>888"
+        => [$fuzzy_impl, 1,   1,     "EXACT",
+                         888, undef, "AFTER",
+                         "EXACT", 1, 1],
+    "(102.110)"
+        => [$fuzzy_impl, 102, 102, "EXACT",
+                         110, 110, "EXACT",
+                         "WITHIN", 1, 1],
+    "(23.45)..600"
+        => [$fuzzy_impl, 23,  45,  "WITHIN",
+                         600, 600, "EXACT",
+                         "EXACT", 1, 1],
+    "(122.133)..(204.221)"
+        => [$fuzzy_impl, 122, 133, "WITHIN",
+                         204, 221, "WITHIN",
+                         "EXACT", 1, 1],
+    "123^124"
+        => [$simple_impl, 123, 123, "EXACT",
+                          124, 124, "EXACT",
+                          "IN-BETWEEN", 1, 1],
+    "145^177"
+        => [$fuzzy_impl, 145, 145, "EXACT",
+                         177, 177, "EXACT",
+                         "IN-BETWEEN", 1, 1],
+    "join(12..78,134..202)"
+        => [$split_impl, 12,  12,  "EXACT",
+                         202, 202, "EXACT",
+                         "EXACT", 2, 1],
+    "complement(join(2691..4571,4918..5163))"
+        => [$split_impl, 2691, 2691, "EXACT",
+                         5163, 5163, "EXACT",
+                         "EXACT", 2, -1],
+    # Partial frameshifted gene at the end of a contig
+    "complement(join(94468..94578,94578..>94889))"
+        => [$split_impl, 94468, 94468, "EXACT",
+                         94889, undef, "AFTER",
+                         "EXACT", 2, -1],
+    "complement(34..(122.126))"
+        => [$fuzzy_impl, 34,  34,  "EXACT",
+                         122, 126, "WITHIN",
+                         "EXACT", 1, -1],
+    "J00194:100..202"
+        => [$simple_impl, 100, 100, "EXACT",
+                          202, 202, "EXACT",
+                          "EXACT", 1, 1],
+    "join(1..100,J00194.1:100..202)"
+        => [$split_impl, 1,   1,   "EXACT",
+                         100, 100, "EXACT",
+                         "EXACT", 2, 1],
+
+    # this variant is not really allowed by the FT definition
+    # document but we want to be able to cope with it
+    "J00194:(100..202)"
+        => [$simple_impl, 100, 100, "EXACT",
+                          202, 202, "EXACT",
+                          "EXACT", 1, 1],
+    "((122.133)..(204.221))"
+        => [$fuzzy_impl, 122, 133, "WITHIN",
+                         204, 221, "WITHIN",
+                         "EXACT", 1, 1],
+    "join(AY016290.1:108..185,AY016291.1:1546..1599)"
+        => [$split_impl, 108, 108, "EXACT",
+                         185, 185, "EXACT",
+                         "EXACT", 2, 1],
+
+    # UNCERTAIN locations and positions (Swissprot)
+    "?2465..2774"
+        => [$fuzzy_impl, 2465, 2465, "UNCERTAIN",
+                         2774, 2774, "EXACT",
+                         "EXACT", 1, 1],
+    "22..?64"
+        => [$fuzzy_impl, 22, 22, "EXACT",
+                         64, 64, "UNCERTAIN",
+                         "EXACT", 1, 1],
+    "?22..?64"
+        => [$fuzzy_impl, 22, 22, "UNCERTAIN",
+                         64, 64, "UNCERTAIN",
+                         "EXACT", 1, 1],
+    "?..>393"
+        => [$fuzzy_impl, undef, undef, "UNCERTAIN",
+                         393,   undef, "AFTER",
+                         "UNCERTAIN", 1, 1],
+    "<1..?"
+        => [$fuzzy_impl, undef, 1,     "BEFORE",
+                         undef, undef, "UNCERTAIN",
+                         "UNCERTAIN", 1, 1],
+    "?..536"
+        => [$fuzzy_impl, undef, undef, "UNCERTAIN",
+                         536,   536,   "EXACT",
+                         "UNCERTAIN", 1, 1],
+    "1..?"
+        => [$fuzzy_impl, 1,     1,     "EXACT",
+                         undef, undef, "UNCERTAIN",
+                         "UNCERTAIN", 1, 1],
+    "?..?"
+        => [$fuzzy_impl, undef, undef, "UNCERTAIN",
+                         undef, undef, "UNCERTAIN",
+                         "UNCERTAIN", 1, 1],
+    "?1..12"
+        => [$fuzzy_impl, 1,  1,  "UNCERTAIN",
+                         12, 12, "EXACT",
+                         "EXACT", 1, 1]
+);
 
 my $locfac = Bio::Factory::FTLocationFactory->new();
 isa_ok($locfac,'Bio::Factory::LocationFactoryI');
 
 # sorting is to keep the order constant from one run to the next
-foreach my $locstr (keys %testcases) { 
-	my $loc = $locfac->from_string($locstr);
-	if($locstr eq "join(AY016290.1:108..185,AY016291.1:1546..1599)") {
-		$loc->seq_id("AY016295.1");
-	}
-	my @res = @{$testcases{$locstr}};
-	is(ref($loc), $res[0], $res[0]);
-	is($loc->min_start(), $res[1]);
-	is($loc->max_start(), $res[2]);
-	is($loc->start_pos_type(), $res[3]);
-	is($loc->min_end(), $res[4]);
-	is($loc->max_end(), $res[5]);
-	is($loc->end_pos_type(), $res[6]);
-	is($loc->location_type(), $res[7]);
-	my @locs = $loc->each_Location();
-	is(@locs, $res[8]);
-	my $ftstr = $loc->to_FTstring();
-	# this is a somewhat ugly hack, but we want clean output from to_FTstring()
-	# Umm, then these should really fail, correct?
-	# Should we be engineering workarounds for tests?
-	$locstr = "J00194:100..202" if $locstr eq "J00194:(100..202)";
-	$locstr = "(122.133)..(204.221)" if $locstr eq "((122.133)..(204.221))";
-	# now test
-	is($ftstr, $locstr, "Location String: $locstr");
-	# test strand production
-	is($loc->strand(), $res[9]);
+foreach my $locstr (keys %testcases) {
+    my $loc = $locfac->from_string($locstr);
+    if($locstr eq "join(AY016290.1:108..185,AY016291.1:1546..1599)") {
+        $loc->seq_id("AY016295.1");
+    }
+    if($locstr eq "join(1..100,J00194.1:100..202)") {
+        $loc->seq_id("unknown");
+    }
+    my @res = @{$testcases{$locstr}};
+    is(ref($loc), $res[0], $res[0]);
+    is($loc->min_start(), $res[1]);
+    is($loc->max_start(), $res[2]);
+    is($loc->start_pos_type(), $res[3]);
+    is($loc->min_end(), $res[4]);
+    is($loc->max_end(), $res[5]);
+    is($loc->end_pos_type(), $res[6]);
+    is($loc->location_type(), $res[7]);
+    my @locs = $loc->each_Location();
+    is(@locs, $res[8]);
+    my $ftstr = $loc->to_FTstring();
+    # this is a somewhat ugly hack, but we want clean output from to_FTstring()
+    # Umm, then these should really fail, correct?
+    # Should we be engineering workarounds for tests?
+    $locstr = "J00194:100..202"      if $locstr eq "J00194:(100..202)";
+    $locstr = "(122.133)..(204.221)" if $locstr eq "((122.133)..(204.221))";
+    # now test
+    is($ftstr, $locstr, "Location String: $locstr");
+    # test strand production
+    is($loc->strand(), $res[9]);
 }
 
 SKIP: {
-    skip('nested matches in regex only supported in v5.6.1 and higher', 5) unless $^V gt v5.6.0;
-    
-	# bug #1674, #1765, 2101
-	# EMBL-like 
-	# join(20464..20694,21548..22763,join(complement(314652..314672),complement(232596..232990),complement(231520..231669)))
-	# GenBank-like
-	# join(20464..20694,21548..22763,complement(join(231520..231669,232596..232990,314652..314672)))
-	# Note that
-	# join(1000..2000,join(3000..4000,join(5000..6000,7000..8000)),9000..10000)
-	# is the same as
-	# join(1000..2000,3000..4000,5000..6000,7000..8000,9000..10000)
-	# But I don't want to bother with it at this point
-	my @expected = (# intentionally testing same expected string twice
-					# as I am providing two different encodings
-					# that should mean the same thing
-	'join(11025..11049,complement(join(315036..315294,251354..251412,241499..241580,239890..240081)))',
-	'join(11025..11049,complement(join(315036..315294,251354..251412,241499..241580,239890..240081)))',
-	# ditto
-	'join(20464..20694,21548..22763,complement(join(314652..314672,232596..232990,231520..231669)))',
-	'join(20464..20694,21548..22763,complement(join(314652..314672,232596..232990,231520..231669)))',
-	# this is just seen once
-	'join(1000..2000,join(3000..4000,join(5000..6000,7000..8000)),9000..10000)',
-	'order(S67862.1:72..75,join(S67863.1:1..788,1..19))'
+    skip('nested matches in regex only supported in v5.6.1 and higher', 8) unless $^V gt v5.6.0;
+
+    # Tests based on location definition (http://www.insdc.org/documents/feature_table.html#3.4)
+    my $string1  = 'complement(join(2691..4571,4918..5163))';
+    my $string2  = 'join(complement(4918..5163),complement(2691..4571))';
+    my $loc1     = $locfac->from_string($string1);
+    my $loc2     = $locfac->from_string($string2);
+    my $loc1_str = $loc1->to_FTstring;
+    my $loc2_str = $loc2->to_FTstring;
+    is($loc1_str, $string1, $string1);
+    is($loc2_str, $string1, $string2);
+    is($loc1_str, $loc2_str, 'equivalent remote location strings');
+
+    # Test for equivalent reverse strand locations adding one remote component
+    $string1  = 'complement(join(TEST0001.1:2691..4571,4918..5163))';
+    $string2  = 'join(complement(4918..5163),complement(TEST0001.1:2691..4571))';
+    $loc1     = $locfac->from_string($string1);
+    $loc2     = $locfac->from_string($string2);
+    $loc1_str = $loc1->to_FTstring;
+    $loc2_str = $loc2->to_FTstring;
+    is($loc1_str, $string1, $string1);
+    is($loc2_str, $string1, $string2);
+    is($loc1_str, $loc2_str, 'equivalent remote location strings');
+
+    # Test for equivalent reverse strand locations adding two remote components
+    $string1  = 'complement(join(TEST0001.1:2691..4571,TEST0008.1:4918..5163))';
+    $string2  = 'join(complement(TEST0008.1:4918..5163),complement(TEST0001.1:2691..4571))';
+    $loc1     = $locfac->from_string($string1);
+    $loc2     = $locfac->from_string($string2);
+    $loc1_str = $loc1->to_FTstring;
+    $loc2_str = $loc2->to_FTstring;
+    is($loc1_str, $string1, $string1);
+    is($loc2_str, $string1, $string2);
+    is($loc1_str, $loc2_str, 'equivalent remote location strings');
+
+    # bug #1674, #1765, 2101
+    # EMBL-like (BAC19856.3 protein)
+    # join(20464..20694,21548..22763,join(complement(314652..314672),complement(232596..232990),complement(231520..231669)))
+    # GenBank-like
+    # join(20464..20694,21548..22763,complement(join(231520..231669,232596..232990,314652..314672)))
+    # Note that
+    # join(1000..2000,join(3000..4000,join(5000..6000,7000..8000)),9000..10000)
+    # is the same as
+    # join(1000..2000,3000..4000,5000..6000,7000..8000,9000..10000)
+
+    my @expected = (# intentionally testing same expected string twice
+                    # as I am providing two different encodings
+                    # that should mean the same thing
+    'join(11025..11049,complement(join(315036..315294,251354..251412,241499..241580,239890..240081)))',
+    'join(11025..11049,complement(join(315036..315294,251354..251412,241499..241580,239890..240081)))',
+    # ditto
+    'join(20464..20694,21548..22763,complement(join(231520..231669,232596..232990,314652..314672)))',
+    'join(20464..20694,21548..22763,complement(join(231520..231669,232596..232990,314652..314672)))',
+    # this is just seen once
+    'join(1000..2000,3000..4000,5000..6000,7000..8000,9000..10000)',
+    'order(S67862.1:72..75,join(S67863.1:1..788,1..19))'
    );
 
-	for my $locstr (
-		'join(11025..11049,join(complement(239890..240081),complement(241499..241580),complement(251354..251412),complement(315036..315294)))',
-		'join(11025..11049,complement(join(315036..315294,251354..251412,241499..241580,239890..240081)))',
-		'join(20464..20694,21548..22763,complement(join(314652..314672,232596..232990,231520..231669)))',
-		'join(20464..20694,21548..22763,join(complement(231520..231669),complement(232596..232990),complement(314652..314672)))',
-		'join(1000..2000,join(3000..4000,join(5000..6000,7000..8000)),9000..10000)',
-		'order(S67862.1:72..75,join(S67863.1:1..788,1..19))'
-	   ) {
-		my $loc = $locfac->from_string($locstr);
-		my $ftstr = $loc->to_FTstring();
-		is($ftstr, shift @expected, $locstr);
-	}
+    for my $locstr (
+        'join(11025..11049,join(complement(239890..240081),complement(241499..241580),complement(251354..251412),complement(315036..315294)))',
+        'join(11025..11049,complement(join(315036..315294,251354..251412,241499..241580,239890..240081)))',
+        'join(20464..20694,21548..22763,complement(join(231520..231669,232596..232990,314652..314672)))',
+        'join(20464..20694,21548..22763,join(complement(314652..314672),complement(232596..232990),complement(231520..231669)))',
+        'join(1000..2000,join(3000..4000,join(5000..6000,7000..8000)),9000..10000)',
+        'order(S67862.1:72..75,join(S67863.1:1..788,1..19))'
+       ) {
+        my $loc = $locfac->from_string($locstr);
+        my $ftstr = $loc->to_FTstring();
+        is($ftstr, shift @expected, $locstr);
+    }
 }
diff --git a/t/SeqIO/Splicedseq.t b/t/SeqIO/Splicedseq.t
index 8f515da..a42ed0d 100644
--- a/t/SeqIO/Splicedseq.t
+++ b/t/SeqIO/Splicedseq.t
@@ -7,8 +7,9 @@ BEGIN {
     use lib '.';
     use Bio::Root::Test;
 
-    test_begin(-tests => 19);
+    test_begin(-tests => 27);
 
+    use_ok('Bio::Seq');
     use_ok('Bio::SeqIO');
 }
 
@@ -67,11 +68,32 @@ warnings_like { $len_nodb = length($feats[1]->spliced_seq()->seq); }
               "appropriate warning if db not provided for remote sequence";
 ok($len_nodb == 374, "correct number of Ns added if remote sequence not provided");
 
+# Test for cut by origin features
+my $seq_obj = Bio::Seq->new(-display_id => 'NC_008309',
+                            -seq        => 'AAAAACCCCCGGGGGTTTTT');
+$seq_obj->is_circular(1);
+my $loc_obj = Bio::Factory::FTLocationFactory->from_string('join(16..20,1..2)');
+my $cut_feat = Bio::SeqFeature::Generic->new(-primary_tag => 'CDS',
+                                             -location    => $loc_obj,
+                                             -tag => { locus_tag  => 'HS_1792',
+                                                       product    => 'hypothetical protein',
+                                                       protein_id => 'YP_718205.1',
+                                                      } );
+$seq_obj->add_SeqFeature($cut_feat);
+is $cut_feat->seq->seq,         'TTTTTAA', 'cut by origin sequence using $feat->seq';
+is $cut_feat->spliced_seq->seq, 'TTTTTAA', 'cut by origin sequence using $feat->spliced_seq';
+is $cut_feat->start,             16,       'cut by origin start using $feat->start';
+is $cut_feat->end,               2,        'cut by origin end using $feat->end';
+is $cut_feat->location->start,   16,       'cut by origin start using $feat->location->start';
+is $cut_feat->location->end,     2,        'cut by origin end using $feat->location->end';
+
 SKIP: {
-    test_skip(-tests => 3, -requires_networking => 1);
+    test_skip(-tests => 3,
+              -requires_modules    => [qw(Bio::DB::GenBank
+                                          LWP::UserAgent )],
+              -requires_networking => 1);
     my $db_in;
     eval {
-        use Bio::DB::GenBank;
         ok $db_in = Bio::DB::GenBank->new();
         my $seq_obj = $db_in->get_Seq_by_id('AF032048.1');
     };
diff --git a/t/SeqIO/embl.t b/t/SeqIO/embl.t
index de5f09a..6f7b7ea 100644
--- a/t/SeqIO/embl.t
+++ b/t/SeqIO/embl.t
@@ -8,7 +8,7 @@ BEGIN {
     use lib '../..';
     use Bio::Root::Test;
 
-    test_begin(-tests => 96);
+    test_begin(-tests => 100);
 
     use_ok('Bio::SeqIO::embl');
 }
@@ -328,3 +328,21 @@ foreach my $feature ($seq->top_SeqFeatures) {
 
     ok($string =~ m/ID   test_id;/, "The ID field was written correctly");
 }
+
+# Test lenient handling of space after '=' sign in qualifiers:
+{
+    my $ent = Bio::SeqIO->new( -file => test_input_file('test_space.embl'),
+                               -format => 'embl');
+    my $seq;
+    eval { $seq = $ent->next_seq(); };
+    my $error=$@;
+    is($error, '', 'EMBL format with space after equal sign parses');
+
+    my ($feature)=$seq->all_SeqFeatures;
+    is($feature->primary_tag, 'CDS', 'CDS read');
+
+    ok($feature->has_tag('product'), '/product found');
+
+    my ($value)=$feature->get_tag_values('product');
+    is($value, 'somewordandt extthatisquite lon gandthereforewraps', 'Qualifier /product value matches');
+}
diff --git a/t/SeqIO/genbank.t b/t/SeqIO/genbank.t
index 2bac4d3..db64432 100644
--- a/t/SeqIO/genbank.t
+++ b/t/SeqIO/genbank.t
@@ -1,12 +1,11 @@
 # -*-Perl-*- Test Harness script for Bioperl
-# $Id$
 
 use strict;
 
 BEGIN {
     use lib '.';
     use Bio::Root::Test;
-    test_begin(-tests => 287);
+    test_begin(-tests => 301);
     use_ok('Bio::SeqIO::genbank');
 }
 
@@ -658,3 +657,63 @@ is($seq->seq, 'MENRKFGYIRVSSKDQNEGRQLEAMRKIGITERDIYLDKQSGKNFERANYQLLKRIIRKGDI'
             . 'LYIHSLDRFGRNKEEILQEWNDLTKNIEADIVVLDMPLLDTTQYKDSMGTFIADLVLQILSWMAEEERERIRK'
             . 'RQREGIDLALQNGIQFGRSPVVVSDEFKEVYRKWKAKELTAVEAMQEAGVKKTSFYKLVKAHENSIKVNS');
 
+# Genbank files with CONTIG and sequence should print the sequence with write_seq()
+$testfile = test_output_file;
+$out = Bio::SeqIO->new(-file   => ">$testfile",
+                       -format => 'genbank');
+$out->write_seq($seq);
+$out->close;
+
+$in = Bio::SeqIO->new(-file    => $testfile,
+                      -format  => 'genbank',
+                      -verbose => $verbose);
+$seq = $in->next_seq;
+is($seq->length, 205);
+
+ at anns = $seq->annotation->get_Annotations('contig');
+is(@anns, 1);
+isa_ok($anns[0], 'Bio::Annotation::SimpleValue');
+is($anns[0]->value, 'join(WP_015639704.1:1..205)');
+
+is($seq->seq, 'MENRKFGYIRVSSKDQNEGRQLEAMRKIGITERDIYLDKQSGKNFERANYQLLKRIIRKGDI'
+            . 'LYIHSLDRFGRNKEEILQEWNDLTKNIEADIVVLDMPLLDTTQYKDSMGTFIADLVLQILSWMAEEERERIRK'
+            . 'RQREGIDLALQNGIQFGRSPVVVSDEFKEVYRKWKAKELTAVEAMQEAGVKKTSFYKLVKAHENSIKVNS');
+
+$seq = Bio::SeqIO->new(-format => 'genbank',
+                       -file   => test_input_file('YP_007988852.gp') )->next_seq;
+ at features = $seq->remove_SeqFeatures;
+is $#features, 10, 'Got 11 features';
+
+$seq = Bio::SeqIO->new(-format => 'genbank',
+                       -file   => test_input_file('YP_007988852.gp') )->next_seq;
+ at features = $seq->remove_SeqFeatures('CDS');
+is $#features, 0, 'Got 1 feature';
+is $features[0]->primary_tag, 'CDS', 'Correct primary tag for feature';
+ at features = $seq->remove_SeqFeatures;
+is $#features, 9, 'Got 10 features';
+
+# Handle Structured Comments in COMMENT section
+$seq = Bio::SeqIO->new(-format => 'genbank',
+                       -file   => test_input_file('KF527485.gbk') )->next_seq;
+my $comment = ($seq->get_Annotations('comment') )[0];
+is($comment->as_text, "Comment: 
+##Assembly-Data-START##
+Assembly Method :: Lasergene v. 10
+Sequencing Technology :: ABI37XL; Sanger dideoxy sequencing
+##Assembly-Data-END##",
+"Got correct Structured Comment");
+
+$seq = Bio::SeqIO->new(-format => 'genbank',
+                       -file   => test_input_file('HM138502.gbk') )->next_seq;
+$comment = ($seq->get_Annotations('comment') )[0];
+ok( $comment->as_text
+        =~ /^Comment: Swine influenza A \(H1N1\) virus isolated during human swine flu outbreak of 2009/,
+    "Got correct Structured Comment"
+);
+ok( $comment->as_text =~ /^##GISAID_EpiFlu\(TM\)Data-START##/m,
+    "Got correct Structured Comment" );
+ok( $comment->as_text =~ /^Subtype :: H1N1/m,
+    "Got correct Structured Comment"
+);
+ok( $comment->as_text =~ /^##GISAID_EpiFlu\(TM\)Data-END##/m,
+    "Got correct Structured Comment" );
diff --git a/t/SeqIO/table.t b/t/SeqIO/table.t
index 0cb17fa..4b250b0 100644
--- a/t/SeqIO/table.t
+++ b/t/SeqIO/table.t
@@ -1,5 +1,4 @@
 # -*-Perl-*- Test Harness script for Bioperl
-# $Id$
 
 use strict;
 
@@ -7,7 +6,7 @@ BEGIN {
     use lib '.';
     use Bio::Root::Test;
     
-    test_begin(-tests => 450,
+    test_begin(-tests => 463,
 			   -requires_module => 'IO::Scalar');
 	
 	use_ok('Bio::Tools::CodonTable');
@@ -78,9 +77,44 @@ ok $seqin = Bio::SeqIO->new(-file => test_input_file("test.tsv"),
                          -trim => 1);
 run_tests([@names],[@accs],[4,4,4,4,4,5,5,5,5,5],[@psg],[@rs]);
 
+# Tests to check that 'description' is read from 'table' format
+ok $seqin = Bio::SeqIO->new(
+    -file   => test_input_file("test-1.tab"),
+    -format => 'table',
+    -header => 1,
+    -display_id => 1, 
+    -accession_number => 1, 
+    -seq => 3, 
+    -desc => 2
+);
+ok($seqin);
+my $seq = $seqin->next_seq;
+ok($seq);
+is( $seq->desc, 'd1');
+is( $seq->display_id, 'n1');
+is( $seq->seq, 'aaaa');
+$seq = $seqin->next_seq;
+ok($seq);
+is( $seq->desc, 'd2');
+is( $seq->display_id, 'n2');
+is( $seq->seq, 'tttt');
+
 $seqin->close();
 
-# need Spreadsheet::ParseExcel installed for testing Excel format
+# Tests to check that we can _not_ write to 'table' format
+ok $seqin = Bio::SeqIO->new(
+    -file   => test_input_file("test-1.tab.gb"),
+    -format => 'genbank'
+);
+ok($seqin);
+my $seq = $seqin->next_seq;
+ok($seq);
+my $tmpfile = test_output_file();
+my $seqout = Bio::SeqIO->new( -format => 'table', -file => ">$tmpfile" );
+# dies_ok not available
+# dies_ok { $seqout->write_seq($seq) } "write_seq() not implemented";
+
+# Need Spreadsheet::ParseExcel installed for testing Excel format
 SKIP: {
 	test_skip(-tests => 112, -requires_module => 'Spreadsheet::ParseExcel');
 
diff --git a/t/SeqTools/CodonTable.t b/t/SeqTools/CodonTable.t
index 4b4f06b..11652a7 100644
--- a/t/SeqTools/CodonTable.t
+++ b/t/SeqTools/CodonTable.t
@@ -3,11 +3,11 @@
 
 use strict;
 
-BEGIN { 
+BEGIN {
     use lib '.';
     use Bio::Root::Test;
 
-    test_begin(-tests => 71);
+    test_begin(-tests => 81);
 
     use_ok('Bio::Tools::CodonTable');
     use_ok('Bio::CodonUsage::IO');
@@ -23,6 +23,17 @@ isa_ok $myCodonTable, 'Bio::Tools::CodonTable';
 $myCodonTable = Bio::Tools::CodonTable->new();
 is $myCodonTable->id(), 1;
 
+# invalid table should produce a warn and set default table (1)
+my $stderr = '';
+{
+    # capture stderr output
+    local *STDERR;
+    open STDERR, '>', \$stderr;
+    $myCodonTable->id(99);
+}
+like $stderr, qr/Not a valid codon table ID/;
+is $myCodonTable->id, 1;
+
 # change codon table
 $myCodonTable->id(10);
 is $myCodonTable->id, 10;
@@ -30,12 +41,12 @@ is $myCodonTable->name(), 'Euplotid Nuclear';
 
 # enumerate tables as object method
 my $table = $myCodonTable->tables();
-cmp_ok (keys %{$table}, '>=', 17); # currently 17 known tables
-is $table->{11}, q{"Bacterial"};
+cmp_ok (keys %{$table}, '>=', 19); # currently 19 known tables
+is $table->{11}, 'Bacterial, Archaeal and Plant Plastid';
 
 # enumerate tables as class method
 $table = Bio::Tools::CodonTable->tables;
-cmp_ok (values %{$table}, '>=', 17); # currently 17 known tables
+cmp_ok (values %{$table}, '>=', 19); # currently 19 known tables
 is $table->{23}, 'Thraustochytrium Mitochondrial';
 
 # translate codons
@@ -74,7 +85,7 @@ is $myCodonTable->translate('jj',1), '';
 is $myCodonTable->translate('jjg'), 'X';
 is $myCodonTable->translate('jjg',1), 'X';
 
-is $myCodonTable->translate('gt'), ''; 
+is $myCodonTable->translate('gt'), '';
 is $myCodonTable->translate('gt',1), 'V';
 
 is $myCodonTable->translate('g'), '';
@@ -89,20 +100,20 @@ ggkggyggsggvgghggdggbggxgtmgtrgtwgtkgtygtsgtvgthgtdgtbgtxtartaytcmtcrtcwt
 cktcytcstcvtchtcdtcbtcxtgyttrttytramgamggmgrracratrayytaytgytrsaasagsartaa;
 SEQ
     $seq =~ s/\s+//g;
- at ii = grep { length == 3 } split /(.{3})/, $seq; 
+ at ii = grep { length == 3 } split /(.{3})/, $seq;
 print join (' ', @ii), "\n" if( $DEBUG);
 my $prot = <<PROT;
 MKNTTTTTTTTTTTRSIIIIQHPPPPPPPPPPPRRRRRRRRRRRLLLLLLLLLLLEDAAAAAAAAAAAGGG
 GGGGGGGGVVVVVVVVVVV*YSSSSSSSSSSSCLF*RRRBBBLLLZZZ*
 PROT
-
     $prot =~ s/\s//;
 @res = split //, $prot;
 print join (' ', @res), "\n" if( $DEBUG );
+
 $test = 1;
 for my $i (0..$#ii) {
     if ($res[$i] ne $myCodonTable->translate($ii[$i]) ) {
-        $test = 0; 
+        $test = 0;
         print $ii[$i], ": |", $res[$i], "| ne |",
         $myCodonTable->translate($ii[$i]),  "| @ $i\n" if( $DEBUG);
         last ;
@@ -110,12 +121,14 @@ for my $i (0..$#ii) {
 }
 ok $test;
 
-# reverse translate amino acids 
+# reverse translate amino acids
 
 is $myCodonTable->revtranslate('U'), 0;
 is $myCodonTable->revtranslate('O'), 0;
 is $myCodonTable->revtranslate('J'), 9;
 is $myCodonTable->revtranslate('I'), 3;
+my @RNA_codons = $myCodonTable->revtranslate('M', 'RNA');
+is $RNA_codons[0], 'aug'; # test RNA output
 
 @ii = qw(A l ACN Thr sER ter Glx);
 @res = (
@@ -144,10 +157,10 @@ $test = 1;
  }
 ok $test;
 
-#  boolean tests
-$myCodonTable->id(1);
+# boolean tests
+$myCodonTable->id(1); # Standard table
 
-ok $myCodonTable->is_start_codon('ATG');  
+ok $myCodonTable->is_start_codon('ATG');
 is $myCodonTable->is_start_codon('GGH'), 0;
 ok $myCodonTable->is_start_codon('HTG');
 is $myCodonTable->is_start_codon('CCC'), 0;
@@ -164,20 +177,17 @@ is $myCodonTable->is_unknown_codon('UAG'), 0;
 
 is $myCodonTable->translate_strict('ATG'), 'M';
 
-
-
 #
 # adding a custom codon table
 #
 
-
 my @custom_table =
     ( 'test1',
       'FFLLSSSSYY**CC*WLLLL**PPHHQQR*RRIIIMT*TT*NKKSSRRV*VVAA*ADDEE*GGG'
     );
 
 ok my $custct = $myCodonTable->add_table(@custom_table);
-is $custct, 25;
+is $custct, 26;
 is $myCodonTable->translate('atgaaraayacmacracwacka'), 'MKNTTTT';
 ok $myCodonTable->id($custct);
 is $myCodonTable->translate('atgaaraayacmacracwacka'), 'MKXXTTT';
@@ -202,18 +212,19 @@ is $myCodonTable->reverse_translate_all($seq), 'GCBWSNNNNTTYCAYAARYTN';
 
 #
 # test reverse_translate_best(), requires a Bio::CodonUsage::Table object
-# 
+#
 
-ok $seq = Bio::PrimarySeq->new(-seq =>'ACDEFGHIKLMNPQRSTVWY');
+ok $seq = Bio::PrimarySeq->new(-seq =>'ACDEFGHIKLMNPQRSTVWYX');
 ok my $io = Bio::CodonUsage::IO->new(-file => test_input_file('MmCT'));
 ok my $cut = $io->next_data();
-is $myCodonTable->reverse_translate_best($seq,$cut), 'GCCTGCGACGAGTTCGGCCACATCAAGCTGATGAACCCCCAGCGCTCCACCGTGTGGTAC';
+is $myCodonTable->reverse_translate_best($seq,$cut), 'GCCTGCGACGAGTTCGGCCACATCAAGCTGATGAACCCCCAGCGCTCCACCGTGTGGTACNNN';
+is $myCodonTable->reverse_translate_all($seq, $cut, 15), 'GCNTGYGAYGARTTYGGVCAYATYAARCTSATGAAYCCNCARMGVWSYACHGTSTGGTAYNNN';
 
 #
 # test 'Strict' table, requires a Bio::CodonUsage::Table object
 #
 
-$myCodonTable = Bio::Tools::CodonTable->new();
+$myCodonTable = Bio::Tools::CodonTable->new(); # Default Standard table
 
 #  boolean tests
 is $myCodonTable->is_start_codon('ATG'), 1;
@@ -222,10 +233,22 @@ is $myCodonTable->is_start_codon('TTG'), 1;
 is $myCodonTable->is_start_codon('CTG'), 1;
 is $myCodonTable->is_start_codon('CCC'), 0;
 
-$myCodonTable->id(24);
+$myCodonTable->id(0); # Special 'Strict' table (ATG-only start)
 
 is $myCodonTable->is_start_codon('ATG'), 1;
 is $myCodonTable->is_start_codon('GTG'), 0;
 is $myCodonTable->is_start_codon('TTG'), 0;
 is $myCodonTable->is_start_codon('CTG'), 0;
 is $myCodonTable->is_start_codon('CCC'), 0;
+
+# Pterobranchia Mitochondrial codon table
+$myCodonTable->id(24);
+is $myCodonTable->is_start_codon('GTG'), 1;
+is $myCodonTable->is_start_codon('CTG'), 1;
+is $myCodonTable->translate_strict('TGA'), 'W';
+
+# Candidate Division SR1 and Gracilibacteria codon table
+$myCodonTable->id(25);
+is $myCodonTable->is_start_codon('GTG'), 1;
+is $myCodonTable->is_start_codon('CTG'), 0;
+is $myCodonTable->translate_strict('TGA'), 'G';
diff --git a/t/Species.t b/t/Species.t
index 357af16..f5f8e64 100644
--- a/t/Species.t
+++ b/t/Species.t
@@ -1,22 +1,26 @@
 # -*-Perl-*- Test Harness script for Bioperl
 
 use strict;
+my $CYCLE;
 my $WEAKEN;
+
 BEGIN {
-	use lib '.';
+    use lib '.';
     use Bio::Root::Test;
-    eval {require Test::Weaken; 1;};
+    eval { require Test::Memory::Cycle; 1; };
+    $CYCLE = $@ ? 0 : 1;
+    eval { require Test::Weaken; 1; };
     $WEAKEN = $@ ? 0 : 1;
-    test_begin(-tests => 23);
-	
-	use_ok('Bio::Species');
-	use_ok('Bio::DB::Taxonomy');
+    test_begin(-tests => 27);
+        
+        use_ok('Bio::Species');
+        use_ok('Bio::DB::Taxonomy');
 }
 
 ok my $sps = Bio::Species->new();
 $sps->classification(qw( sapiens Homo Hominidae
-			 Catarrhini Primates Eutheria Mammalia Vertebrata
-			 Chordata Metazoa Eukaryota));
+             Catarrhini Primates Eutheria Mammalia Vertebrata
+             Chordata Metazoa Eukaryota));
 
 is $sps->binomial, 'Homo sapiens';
 
@@ -26,18 +30,18 @@ is $sps->binomial('FULL'), 'Homo sapiens sapiensis';
 is $sps->sub_species, 'sapiensis';
 
 $sps->classification(qw( sapiens Homo Hominidae
-			 Catarrhini Primates Eutheria Mammalia Vertebrata
-			 Chordata Metazoa Eukaryota));
+             Catarrhini Primates Eutheria Mammalia Vertebrata
+             Chordata Metazoa Eukaryota));
 is $sps->binomial, 'Homo sapiens';
 
 
 # test cmd line initializtion
 ok my $species = Bio::Species->new( -classification => 
-				[ qw( sapiens Homo Hominidae
-				      Catarrhini Primates Eutheria 
-				      Mammalia Vertebrata
-				      Chordata Metazoa Eukaryota) ],
-				-common_name => 'human');
+                [ qw( sapiens Homo Hominidae
+                      Catarrhini Primates Eutheria 
+                      Mammalia Vertebrata
+                      Chordata Metazoa Eukaryota) ],
+                -common_name => 'human');
 is $species->binomial, 'Homo sapiens';
 is $species->species, 'sapiens';
 is $species->genus, 'Homo';
@@ -50,8 +54,10 @@ is $species->rank, 'species';
 
 # We can make a species object from just an id an db handle
 SKIP: {
-    test_skip(-tests => 5, -requires_networking => 1);
-	
+    test_skip(-tests => 5,
+              -requires_module     => 'LWP::UserAgent',
+              -requires_networking => 1);
+    
     $species = Bio::Species->new(-id => 51351);
     my $taxdb = Bio::DB::Taxonomy->new(-source => 'entrez');
     eval {$species->db_handle($taxdb);};
@@ -64,11 +70,31 @@ SKIP: {
 }
 
 SKIP: {
-    skip("Test::Weaken not installed, skipping", 2) if !$WEAKEN;
+    skip("Test::Memory::Cycle not installed, skipping", 3) if !$CYCLE;
+    # this sub leaks, should return true
+    my ($a, $b); $a = \$b; $b = \$a;
+    Test::Memory::Cycle::memory_cycle_exists($a);
+    # this sub shouldn't leak (no circ. refs)
+    $species = Bio::Species->new( -classification => 
+                [ qw( sapiens Homo Hominidae
+                      Catarrhini Primates Eutheria 
+                      Mammalia Vertebrata
+                      Chordata Metazoa Eukaryota) ],
+                -common_name => 'human');
+    Test::Memory::Cycle::memory_cycle_exists($species);
+    
+    # Github issue #81
+    Test::Memory::Cycle::memory_cycle_exists(Bio::Species->new(-classification => ['A']));
+}
+
+SKIP: {
+    skip("Test::Weaken not installed, skipping", 3) if !$WEAKEN;
+    
     # this sub leaks, should return true
     ok(Test::Weaken::leaks({
         constructor => sub { my ($a, $b); $a = \$b; $b = \$a}
     }));
+    
     # this sub shouldn't leak (no circ. refs)
     ok(!Test::Weaken::leaks({
       constructor => sub{ Bio::Species->new( -classification => 
@@ -79,4 +105,10 @@ SKIP: {
 				-common_name => 'human') },
       }
     ));
+    
+    # Github issue #81    
+    ok(!Test::Weaken::leaks({
+      constructor => sub{ Bio::Species->new( -classification => ['A']) },
+      }
+    ));
 }
diff --git a/t/Tools/Analysis/Protein/ELM.t b/t/Tools/Analysis/Protein/ELM.t
index 279a5e6..1cb53a9 100755
--- a/t/Tools/Analysis/Protein/ELM.t
+++ b/t/Tools/Analysis/Protein/ELM.t
@@ -2,7 +2,6 @@
 # $Id$
 
 use strict;
-
 BEGIN {
     use lib '.';
     use Bio::Root::Test;
@@ -41,5 +40,6 @@ exit if $tool->status eq 'TERMINATED_BY_ERROR';
 ok my $raw = $tool->result('');
 print $raw if $verbose;
 ok my $parsed = $tool->result('parsed');
-is $parsed->{'CLV_NDR_NDR_1'}{'locus'}[0], '54-56';
+
+is $parsed->{'CLV_NRD_NRD_1'}{'locus'}[0], '54-56';
 ok my @res = $tool->result('Bio::SeqFeatureI');
diff --git a/t/Tools/Analysis/Protein/GOR4.t b/t/Tools/Analysis/Protein/GOR4.t
index 3df9ab4..2fa1e5b 100644
--- a/t/Tools/Analysis/Protein/GOR4.t
+++ b/t/Tools/Analysis/Protein/GOR4.t
@@ -4,15 +4,16 @@
 use strict;
 
 BEGIN {
-	use lib '.';
+    use lib '.';
     use Bio::Root::Test;
     
-    test_begin(-tests => 13,
-			   -requires_modules => [qw(IO::String LWP::UserAgent)],
-			   -requires_networking => 1);
-	
-	use_ok("Bio::Seq");
-	use_ok("Bio::Tools::Analysis::Protein::GOR4");
+    test_begin(-tests => 0,
+               -requires_modules => [qw(IO::String
+                                        LWP::UserAgent)],
+               -requires_networking => 1);
+    
+    use_ok("Bio::Seq");
+    use_ok("Bio::Tools::Analysis::Protein::GOR4");
 }
 
 my $seq = Bio::Seq->new(-seq => 'MSADQRWRQDSQDSFGDSFDGDPPPPPPPPFGDSFGDGFSDRSRQDQRS',
@@ -21,22 +22,23 @@ ok my $tool = Bio::Tools::Analysis::Protein::GOR4->new(-seq=>$seq->primary_seq);
 
 SKIP: {
     ok $tool->run();
-	skip "Skipping tests since we got terminated by a server error", 9 if $tool->status eq 'TERMINATED_BY_ERROR';
-    ok my $raw = $tool->result('');
+    skip "Skipping tests since we got terminated by a server error", 9 if $tool->status eq 'TERMINATED_BY_ERROR';
+    ok my $raw    = $tool->result('');
     ok my $parsed = $tool->result('parsed');
-    is $parsed->[0]{'coil'}, '999';
+    
+    is $parsed->[0]{'coil'}, '56';
     my @res = sort {$a->start <=> $b->start} $tool->result('Bio::SeqFeatureI');
     if (scalar @res > 0) {
-		ok 1;
+        ok 1;
     }
-	else {
-		skip 'No results - could not connect to GOR4 server?', 6;
+    else {
+        skip 'No results - could not connect to GOR4 server?', 6;
     }
-	is $res[0]->start, 1;
-	is $res[0]->end, 43;
+    is $res[0]->start, 1;
+    is $res[0]->end, 7;
     ok my $meta = $tool->result('meta');
     
-	test_skip(-tests => 2, -requires_module => 'Bio::Seq::Meta::Array');
-	is $meta->named_submeta_text('GOR4_coil',1,2), '999 999';
-	is $meta->seq, 'MSADQRWRQDSQDSFGDSFDGDPPPPPPPPFGDSFGDGFSDRSRQDQRS';
+    test_skip(-tests => 2, -requires_module => 'Bio::Seq::Meta::Array');
+    is $meta->named_submeta_text('GOR4_coil',1,2), '56 195';
+    is $meta->seq, 'MSADQRWRQDSQDSFGDSFDGDPPPPPPPPFGDSFGDGFSDRSRQDQRS';
 }
diff --git a/t/Tools/Analysis/Protein/HNN.t b/t/Tools/Analysis/Protein/HNN.t
index 108faf0..03c4ed4 100644
--- a/t/Tools/Analysis/Protein/HNN.t
+++ b/t/Tools/Analysis/Protein/HNN.t
@@ -4,15 +4,16 @@
 use strict;
 
 BEGIN {
-	use lib '.';
+    use lib '.';
     use Bio::Root::Test;
-    
-    test_begin(-tests => 14,
-			   -requires_modules => [qw(IO::String LWP::UserAgent)],
-			   -requires_networking => 1);
-	
-	use_ok("Bio::Seq");
-	use_ok("Bio::Tools::Analysis::Protein::HNN");
+
+    test_begin(-tests => 0,
+               -requires_modules => [qw(IO::String
+                                        LWP::UserAgent)],
+               -requires_networking => 1);
+
+    use_ok("Bio::Seq");
+    use_ok("Bio::Tools::Analysis::Protein::HNN");
 }
 
 my $seq = Bio::Seq->new(-seq => 'MSADQRWRQDSQDSFGDSFDGDPPPPPPPPFGDSFGDGFSDRSRQDQRS',
@@ -20,26 +21,26 @@ my $seq = Bio::Seq->new(-seq => 'MSADQRWRQDSQDSFGDSFDGDPPPPPPPPFGDSFGDGFSDRSRQDQ
 ok my $tool = Bio::Tools::Analysis::Protein::HNN->new(-seq=>$seq->primary_seq);
 
 SKIP: {
-	ok $tool->run();
-	skip "Skipping tests since we got terminated by a server error", 9 if $tool->status eq 'TERMINATED_BY_ERROR';
-	ok my $raw = $tool->result('');
-	ok my $parsed = $tool->result('parsed');
-	is $parsed->[0]{'coil'}, '1000';
-	my @res = $tool->result('Bio::SeqFeatureI');
-	if (scalar @res > 0) {
-		ok 1;
-	}
-	else {
-		skip 'No results - could not connect to HNN server?', 6;
-	}
-	
-	ok my $meta = $tool->result('meta');
-	ok my $seqobj = Bio::Seq->new(-primary_seq => $meta, display_id=>"a");
-	for ( $tool->result('Bio::SeqFeatureI') ) {
-		ok $seqobj->add_SeqFeature($_);
-	}
-	
-	test_skip(-tests => 2, -requires_module => 'Bio::Seq::Meta::Array');
-	is $meta->named_submeta_text('HNN_helix',1,2), '0 111';
-	is $meta->seq, 'MSADQRWRQDSQDSFGDSFDGDPPPPPPPPFGDSFGDGFSDRSRQDQRS';
+    ok $tool->run();
+    skip "Skipping tests since we got terminated by a server error", 9 if $tool->status eq 'TERMINATED_BY_ERROR';
+    ok my $raw    = $tool->result('');
+    ok my $parsed = $tool->result('parsed');
+    is $parsed->[0]{'coil'}, '1000';
+    my @res = $tool->result('Bio::SeqFeatureI');
+    if (scalar @res > 0) {
+        ok 1;
+    }
+    else {
+        skip 'No results - could not connect to HNN server?', 6;
+    }
+
+    ok my $meta   = $tool->result('meta');
+    ok my $seqobj = Bio::Seq->new(-primary_seq => $meta, display_id=>"a");
+    for ( $tool->result('Bio::SeqFeatureI') ) {
+        ok $seqobj->add_SeqFeature($_);
+    }
+
+    test_skip(-tests => 2, -requires_module => 'Bio::Seq::Meta::Array');
+    is $meta->named_submeta_text('HNN_helix',1,2), '0 111';
+    is $meta->seq, 'MSADQRWRQDSQDSFGDSFDGDPPPPPPPPFGDSFGDGFSDRSRQDQRS';
 }
diff --git a/t/Tools/Analysis/Protein/Mitoprot.t b/t/Tools/Analysis/Protein/Mitoprot.t
index a900cea..5fe60e8 100644
--- a/t/Tools/Analysis/Protein/Mitoprot.t
+++ b/t/Tools/Analysis/Protein/Mitoprot.t
@@ -8,28 +8,30 @@ BEGIN {
     use Bio::Root::Test;
     
     test_begin(-tests => 10,
-			   -requires_modules => [qw(IO::String LWP::UserAgent)],
-			   -requires_networking => 1);
-	
-	use_ok 'Bio::Tools::Analysis::Protein::Mitoprot';
-	use_ok 'Bio::PrimarySeq';
-	use_ok 'Bio::WebAgent';
+               -requires_modules => [qw(IO::String LWP::UserAgent)],
+               -requires_networking => 1);
+
+    use_ok 'Bio::Tools::Analysis::Protein::Mitoprot';
+    use_ok 'Bio::PrimarySeq';
+    use_ok 'Bio::WebAgent';
 }
 
 my $verbose = test_debug();
 
 ok my $tool = Bio::WebAgent->new(-verbose =>$verbose);
 
-my $seq = Bio::PrimarySeq->new(-seq => 'MSADQRWRQDSQDSFGDSFDGDSFFGSDFDGDS'.
-                               'DFGSDFGSDGDFGSDFGDSFGDGFSDRSRQDQRS',
+my $seq = Bio::PrimarySeq->new(-seq => 'MSADQRWRQDSQDSFGDSFDGDSFFGSDFDGDS'
+                                     . 'DFGSDFGSDGDFGSDFGDSFGDGFSDRSRQDQRS',
                                -display_id => 'test2');
 
 ok $tool = Bio::Tools::Analysis::Protein::Mitoprot->new( -seq=>$seq);
 SKIP: {
-	ok $tool->run();
-	skip('Server terminated with an error, skipping tests', 4) if $tool->status eq 'TERMINATED_BY_ERROR';
-	ok my $raw = $tool->result('');
-	ok my $parsed = $tool->result('parsed');
-	is ($parsed->{'charge'}, -13);
-	ok my @res = $tool->result('Bio::SeqFeatureI');
+    ok $tool->run();
+    skip( 'Server terminated with an error, skipping tests', 4 )
+        if (     $tool->status eq 'TERMINATED_BY_ERROR'
+            or   $tool->result =~ /Can't connect to/ );
+    ok my $raw = $tool->result('');
+    ok my $parsed = $tool->result('parsed');
+    is ($parsed->{'charge'}, -13);
+    ok my @res = $tool->result('Bio::SeqFeatureI');
 }
diff --git a/t/Tools/Analysis/Protein/NetPhos.t b/t/Tools/Analysis/Protein/NetPhos.t
index ab38d1a..1371bf3 100644
--- a/t/Tools/Analysis/Protein/NetPhos.t
+++ b/t/Tools/Analysis/Protein/NetPhos.t
@@ -1,5 +1,4 @@
 # -*-Perl-*- Test Harness script for Bioperl
-# $Id$
 
 use strict;
 
diff --git a/t/Tools/Analysis/Protein/Sopma.t b/t/Tools/Analysis/Protein/Sopma.t
index 5062e0c..54c8c7a 100644
--- a/t/Tools/Analysis/Protein/Sopma.t
+++ b/t/Tools/Analysis/Protein/Sopma.t
@@ -4,14 +4,16 @@
 use strict;
 
 BEGIN {
-	use lib '.';
+    use lib '.';
     use Bio::Root::Test;
-    
-    test_begin(-tests => 16,
-               -requires_modules => [qw(IO::String LWP::UserAgent)]);
-	
-	use_ok('Bio::PrimarySeq');
-	use_ok('Bio::Tools::Analysis::Protein::Sopma');
+
+    test_begin(-tests => 0,
+               -requires_modules => [qw(IO::String
+                                        LWP::UserAgent)],
+               -requires_networking => 1);
+
+    use_ok('Bio::PrimarySeq');
+    use_ok('Bio::Tools::Analysis::Protein::Sopma');
 }
 
 my $verbose = test_debug();
@@ -19,32 +21,31 @@ my $verbose = test_debug();
 ok my $tool = Bio::WebAgent->new(-verbose =>$verbose);
 
 my $seq = Bio::PrimarySeq->new(
-  -seq => 'MSADQRWRQDSQDSFGDSFDGDPPPPPPPPFGDSFGDGFSDRSRQDQRS',
-  -display_id => 'test2');
+    -seq => 'MSADQRWRQDSQDSFGDSFDGDPPPPPPPPFGDSFGDGFSDRSRQDQRS',
+    -display_id => 'test2'
+);
 ok $tool = Bio::Tools::Analysis::Protein::Sopma->new( -seq=>$seq,
-													  #-verbose => $verbose,
+                                                     #-verbose => $verbose,
                                                       -window_width => 15);
 
 SKIP: {
-	test_skip(-tests => 12, -requires_networking => 1);
-	
-	ok $tool->run();
-	skip "Tool was terminated by some error: problem connecting to server?", 11 if $tool->status eq 'TERMINATED_BY_ERROR';
-	
-	ok my $raw = $tool->result('');
-	ok my $parsed = $tool->result('parsed');
-	is ($parsed->[0]{'helix'}, '102');
-	ok my @res = $tool->result('Bio::SeqFeatureI');
-	ok my $meta = $tool->result('meta', "ww15");
-
-	ok $tool->window_width(21);
-	ok $tool->clear();
-	ok $tool->run;
-	ok my $meta2 = $tool->result('meta', "ww21");
-	
-	SKIP: {
-		test_skip(-tests => 2, -requires_module => 'Bio::Seq::Meta::Array');
-		is $meta->named_submeta_text('Sopma_helix|ww15',1,2), '102 195';
-		is $meta->seq, 'MSADQRWRQDSQDSFGDSFDGDPPPPPPPPFGDSFGDGFSDRSRQDQRS';
-	}
+    ok $tool->run();
+    skip "Tool was terminated by some error: problem connecting to server?", 11 if $tool->status eq 'TERMINATED_BY_ERROR';
+
+    ok my $raw    = $tool->result('');
+    ok my $parsed = $tool->result('parsed');
+    is ($parsed->[0]{'helix'}, '102');
+    ok my @res  = $tool->result('Bio::SeqFeatureI');
+    ok my $meta = $tool->result('meta', "ww15");
+
+    ok $tool->window_width(21);
+    ok $tool->clear();
+    ok $tool->run;
+    ok my $meta2 = $tool->result('meta', "ww21");
+
+    SKIP: {
+        test_skip(-tests => 2, -requires_module => 'Bio::Seq::Meta::Array');
+        is $meta->named_submeta_text('Sopma_helix|ww15',1,2), '102 195';
+        is $meta->seq, 'MSADQRWRQDSQDSFGDSFDGDPPPPPPPPFGDSFGDGFSDRSRQDQRS';
+    }
 }
diff --git a/t/Tools/Run/Dummy.pm b/t/Tools/Run/Dummy.pm
deleted file mode 100755
index c34e73b..0000000
--- a/t/Tools/Run/Dummy.pm
+++ /dev/null
@@ -1,21 +0,0 @@
-package Dummy;
-use strict;
-use warnings;
-
-use lib '.';
-use lib '..';
-use Dummy::Config;
-
-use Bio::Tools::Run::WrapperBase;
-use Bio::Tools::Run::WrapperBase::CommandExts;
-
-use base qw(Bio::Tools::Run::WrapperBase Bio::Root::Root);
-
-sub new {
-    my ($class, at args) = @_;
-    my $self = $class->SUPER::new(@args);
-    return $self;
-}
-
-1;
-
diff --git a/t/Tools/Run/Dummy/Config.pm b/t/Tools/Run/Dummy/Config.pm
deleted file mode 100755
index f3c091a..0000000
--- a/t/Tools/Run/Dummy/Config.pm
+++ /dev/null
@@ -1,75 +0,0 @@
-package Dummy::Config;
-use strict;
-use warnings;
-no warnings qw(qw);
-use Exporter;
-our (@ISA, @EXPORT, @EXPORT_OK);
-push @ISA, 'Exporter';
- at EXPORT = qw(
-             $program_name
-             $program_dir
-             $use_dash
-             $join
-             @program_commands
-             %command_prefixes
-             @program_params
-             @program_switches
-             %param_translation
-             %command_files
-             %composite_commands
-            );
-
- at EXPORT_OK = qw();
-
-our $program_name = '*flurb';
-#our $program_dir = 'C:\cygwin\usr\local\bin';
-our $use_dash = 'mixed';
-our $join = ' ';
-
-
-our @program_commands = qw(
- rpsblast
- find
- goob
- blorb
- multiglob
-  );
-
-our %command_prefixes = (
-    blastp => 'blp',
-    tblastn => 'tbn',
-    goob => 'g',
-    blorb => 'b',
-    multiglob => 'm'
-    );
-
-our @program_params = qw(
-    command
-    g|narf
-    g|schlurb
-    b|scroob
-    b|frelb
-    m|trud
-);
-
-our @program_switches = qw(
-    g|freen
-    b|klep
-);
-
-our %param_translation = (
-    'g|narf'     => 'n',
-    'g|schlurb'  => 'schlurb',
-    'g|freen'    => 'f',
-    'b|scroob'   => 's',
-    'b|frelb'    => 'frelb'
-    );
-
-our %command_files = (
-    'goob'       => [qw( fas faq )],
-    );
-
-our %composite_commands = (
-    'multiglob' => [qw( blorb goob )]
-    );
-1;
diff --git a/t/Tools/Run/RemoteBlast.t b/t/Tools/Run/RemoteBlast.t
index ce09677..baed5b0 100644
--- a/t/Tools/Run/RemoteBlast.t
+++ b/t/Tools/Run/RemoteBlast.t
@@ -9,7 +9,6 @@ BEGIN {
 
     test_begin(-tests               => 21,
                -requires_modules    => [qw(IO::String
-                                           LWP
                                            LWP::UserAgent)],
                -requires_networking => 1);
 
diff --git a/t/Tools/Run/RemoteBlast_rpsblast.t b/t/Tools/Run/RemoteBlast_rpsblast.t
index f4f6683..9ae95c9 100644
--- a/t/Tools/Run/RemoteBlast_rpsblast.t
+++ b/t/Tools/Run/RemoteBlast_rpsblast.t
@@ -16,7 +16,6 @@ BEGIN {
 
     test_begin(-tests               => 7,
                -requires_modules    => [qw(IO::String
-                                           LWP
                                            LWP::UserAgent)],
                -requires_networking => 1);
 
@@ -30,7 +29,7 @@ ok( -e $inputfilename);
 my $remote_rpsblast
     = Bio::Tools::Run::RemoteBlast->new(-verbose    => test_debug(),
                                         -prog       => 'blastp',
-                                        -data       => 'cdsearch/cdd',
+                                        -data       => 'cdd',
                                         -readmethod => 'blasttable',
                                         -expect     => '1e-10',
                                         );
@@ -76,6 +75,7 @@ SKIP: {
         $remote_rpsblast->remove_rid($rids[0]);
         my $count = 0;
         isa_ok($rc, 'Bio::SearchIO');
+        
         while (my $result = $rc->next_result) {
             while ( my $hit = $result->next_hit ) {
                 $count++;
diff --git a/t/Tools/Run/StandAloneBlast.t b/t/Tools/Run/StandAloneBlast.t
deleted file mode 100644
index 81a42ac..0000000
--- a/t/Tools/Run/StandAloneBlast.t
+++ /dev/null
@@ -1,185 +0,0 @@
-# -*-Perl-*- Test Harness script for Bioperl
-# $Id$
-
-use strict;
-use warnings;
-use File::Spec;
-
-BEGIN { 
-	use lib '.';
-    use Bio::Root::Test;
-    
-    test_begin(-tests => 45);
-	
-	use_ok('Bio::Tools::Run::StandAloneBlast');
-	use_ok('Bio::SeqIO');
-}
-
-# Note: the swissprot and ecoli.nt data sets may be downloaded from
-# ftp://ftp.ncbi.nih.gov/blast/db/FASTA
-my $verbose = test_debug() || -1;
-my $nt_database = 'ecoli.nt';
-my $amino_database = 'swissprot';
-my $evalue = 0.001;
-my ($seq1,$seq2,$seq3,$seq4);
-
-# Tests to check that "-attr" and "attr" and "a" all do the same thing
-# http://bugzilla.open-bio.org/show_bug.cgi?id=1912
-for my $p (qw(database db -d -database d)) {
-  my $f = Bio::Tools::Run::StandAloneBlast->new($p => $nt_database);
-  is $f->d(), $nt_database;
-}
-for my $p (qw(expect evalue -e -expect e)) {
-  my $f = Bio::Tools::Run::StandAloneBlast->new($p => $evalue);
-  is $f->e(), $evalue;
-}
-
-# NCBI blast params are case-sensitive, wublast aren't
-my $ncbi_factory = Bio::Tools::Run::StandAloneBlast->new(-program => 'blastn');
-isa_ok $ncbi_factory, 'Bio::Tools::Run::StandAloneBlast';
-isa_ok $ncbi_factory, 'Bio::Tools::Run::StandAloneNCBIBlast';
-my $wu_factory = Bio::Tools::Run::StandAloneBlast->new(-program => 'wublastn');
-isa_ok $wu_factory, 'Bio::Tools::Run::StandAloneBlast';
-isa_ok $wu_factory, 'Bio::Tools::Run::StandAloneWUBlast';
-for my $p (qw(e E)) {
-  $ncbi_factory->$p($p);
-  $wu_factory->$p($p);
-}
-is $ncbi_factory->e, 'e';
-is $ncbi_factory->E, 'E';
-is $wu_factory->e, 'E';
-is $wu_factory->E, 'E';
-
-# blastall switches like -I should take boolean but return 'T' or 'F' once set
-is $ncbi_factory->I, undef;
-is $ncbi_factory->I(1), 'T';
-is $ncbi_factory->I(0), 'F';
-is $ncbi_factory->I('T'), 'T';
-is $ncbi_factory->I('F'), 'F';
-
-# We should be able to set -F "m D" in an intuitive way, and also by manually
-# quoting the value ourselves
-$ncbi_factory->F('m D');
-my $param_string = $ncbi_factory->_setparams('blastall');
-like $param_string, qr/-F ['"]m D['"]/;
-$ncbi_factory->F('"m S"');
-$param_string = $ncbi_factory->_setparams('blastall');
-like $param_string, qr/-F ["']m S['"]/;
-$ncbi_factory->F("'m D'");
-$param_string = $ncbi_factory->_setparams('blastall');
-like $param_string, qr/-F ['"]m D["']/;
-
-# dashed parameters should work
-my $outfile = test_output_file();
-ok my $factory = Bio::Tools::Run::StandAloneBlast->new(-verbose     => $verbose,
-		-program     => 'blastn',
-		-database    => $nt_database , 
-		-_READMETHOD => 'SearchIO', 
-		-output      => $outfile,
-		-verbose     => 0);
-is $factory->database, $nt_database;
-
-# Setup and then do tests that actually run blast
-
-my @params = ('program'     => 'blastn',
-			  'database'    => $nt_database , 
-			  '_READMETHOD' => 'SearchIO', 
-			  'output'      => $outfile,
-			  'verbose'     => 0 );
-ok $factory = Bio::Tools::Run::StandAloneBlast->new('-verbose' => $verbose, @params);
-
-my $inputfilename = test_input_file('test.txt');
-
-is $factory->quiet(0), 0;
-is $factory->q(-3), -3;
-
-SKIP: {
-	skip 'blastall not installed, skipping tests', 12 unless $factory->executable('blastall');
-	skip 'must have BLASTDIR, BLASTDB or BLASTDATADIR env variable set, skipping tests', 12 unless defined $Bio::Tools::Run::StandAloneBlast::DATADIR;
-	
-	my @testresults = qw(37 182 182  253 167 2);
-	my $testcount = 0;
-	
-	# use ecoli.nt
-	my $nt_database_file = File::Spec->catfile($Bio::Tools::Run::StandAloneBlast::DATADIR, $nt_database);
-	like $nt_database_file, qr/$nt_database/;
-	SKIP: {
-		skip "Database $nt_database not found, skipping tests on it", 8 unless -e $nt_database_file;
-		
-		my $parser = $factory->blastall($inputfilename);
-		my $blast_report = $parser->next_result;
-		is $blast_report->num_hits, $testresults[$testcount++];
-		
-		$factory->_READMETHOD('blast_pull');  # Note required leading underscore in _READMETHOD
-		my $str = Bio::SeqIO->new('-file' => test_input_file('dna2.fa'),
-								  '-format' => 'fasta');
-		$seq1 = $str->next_seq();
-		$seq2 = $str->next_seq();
-		
-		my $pull_report = $factory->blastall($seq1);
-		my $sbjct = $pull_report->next_result->next_hit;
-		my $hsp = $sbjct->next_hsp;
-		is $hsp->score, $testresults[$testcount];
-		
-		$factory->_READMETHOD('Blast');
-		my $searchio_report = $factory->blastall($seq1);
-		$sbjct = $searchio_report->next_result->next_hit;
-		$hsp = $sbjct->next_hsp;
-		is $hsp->score, $testresults[$testcount++];
-		
-		my @seq_array =($seq1,$seq2);
-		my $seq_array_ref = \@seq_array;
-		$factory->_READMETHOD('blast_pull');
-		$pull_report = $factory->blastall($seq_array_ref);
-		$sbjct = $pull_report->next_result->next_hit;
-		$hsp = $sbjct->next_hsp;
-		is $hsp->score, $testresults[$testcount];
-		
-		$factory->_READMETHOD('Blast');
-		$searchio_report = $factory->blastall($seq_array_ref);
-		$sbjct = $searchio_report->next_result->next_hit;
-		$hsp = $sbjct->next_hsp;
-		is $hsp->score, $testresults[$testcount++];
-		
-		ok $sbjct = $searchio_report->next_result->next_hit;
-		$hsp = $sbjct->next_hsp;
-		is $hsp->score, $testresults[$testcount++];
-		
-		@params = ('-verbose' => $verbose, 'program'  => 'blastp'); 
-		$factory = Bio::Tools::Run::StandAloneBlast->new(@params);
-		
-		$str = Bio::SeqIO->new(-file => test_input_file('amino.fa'),
-							   -format => 'Fasta' );
-		$seq3 = $str->next_seq();
-		$seq4 = $str->next_seq();
-		
-		$factory->_READMETHOD('Blast');
-		my $bl2seq_report = $factory->bl2seq($seq3, $seq4);
-		$hsp = $bl2seq_report->next_result->next_hit->next_hsp;
-		is $hsp->hit->start, $testresults[$testcount++], "creating/parsing SearchIO bl2seq report object";
-	}
-	
-	# use swissprot
-	my $amino_database_file = File::Spec->catfile($Bio::Tools::Run::StandAloneBlast::DATADIR, $amino_database);
-	SKIP: {
-		skip "Database $amino_database not found, skipping tests on it", 3 unless -e $amino_database_file;
-		
-		@params = ('database' => $amino_database, '-verbose' => $verbose);
-		$factory = Bio::Tools::Run::StandAloneBlast->new(@params);
-		
-		my $iter = 2;
-		$factory->j($iter);    # 'j' is blast parameter for # of iterations
-		my $new_iter = $factory->j();
-		is $new_iter, 2, "set blast parameter";
-		
-		my $blast_report = $factory->blastpgp($seq3)->next_result;
-		is $blast_report->number_of_iterations, $testresults[$testcount];
-		
-		$factory->_READMETHOD('blast_pull');
-		$iter = 2;
-		$factory->j($iter);    # 'j' is blast parameter for # of iterations
-		$new_iter = $factory->j();
-		is $new_iter, $iter, "set blast parameter";
-		
-	}
-}
diff --git a/t/Tools/Run/WBCommandExts.t b/t/Tools/Run/WBCommandExts.t
deleted file mode 100755
index 74f473f..0000000
--- a/t/Tools/Run/WBCommandExts.t
+++ /dev/null
@@ -1,66 +0,0 @@
-#-*-perl-*-
-#$Id$
-# testing CommandExts
-use strict;
-use warnings;
-our $home;
-BEGIN {
-    use Bio::Root::Test;
-    use lib '.';
-    use lib 't/Tools/Run';
-    $home = '../../..'; # set to '.' for Build use, 
-                      # '../../..' for debugging from .t file
-    unshift @INC, $home;
-    test_begin(-tests => 25,
-	       -requires_modules => [qw(Bio::Tools::Run::WrapperBase
-                                        Bio::Tools::Run::WrapperBase::CommandExts)]);
-}
-
-use_ok( 'Dummy::Config' );
-use_ok( 'Dummy' );
-use_ok('Bio::Tools::Run::WrapperBase');
-use_ok('Bio::Tools::Run::WrapperBase::CommandExts');
-
-ok my $fac = Dummy->new( -command => 'goob',
-			 -narf => 42.0,
-			 -schlurb => 'breb',
-			 -freen => 1 ), "make factory";
-ok $fac->parameters_changed, "parm changed flag set";
-is $fac->program_name, 'flurb', "correct prog name";
-ok $fac->is_pseudo, "is pseudo";
-is $fac->narf, 42, "correct parm set";
-ok !$fac->parameters_changed, "parm flag cleared";
-my $param_str = join(' ',@{$fac->_translate_params});
-
-like ($param_str, qr/--schlurb breb/, 'translate opts to command line');
-like ($param_str, qr/-n 42/, 'translate opts to command line');
-like ($param_str, qr/-f/, 'translate opts to command line');
-
-TODO: {
-    local $TODO ='Determine whether the order of the parameters should be set somehow; this sporadically breaks hash randomization introduced in perl 5.17+';
-    is join(' ',@{$fac->_translate_params}), '--schlurb breb -n 42 -f', "translate opts to command line";
-}
-
-ok $fac->reset_parameters, "parm reset";
-ok !$fac->narf, "parm cleared after reset";
-
-is_deeply( [$fac->available_parameters('parameters')], [qw( command narf schlurb )], "avail parms");
-is_deeply( [$fac->available_parameters('switches')], ['freen'], "avail switches");
-is_deeply( [$fac->available_parameters('commands')], [qw(rpsblast find goob blorb multiglob)], "avail commands");
-
-ok $fac = Dummy->new( -command => 'multiglob',
-		     -g_freen => 1,
-		     -b_scroob => 10.5,
-		      -trud => 'sklim' ), "make composite cmd factory";
-
-is $fac->trud, 'sklim', "comp cmd parm set";
-
-ok my %facs = $fac->_create_factory_set, "make subfactories";
-is $facs{goob}->freen, 1, "subfactory 1 parm correct";
-is $facs{blorb}->scroob, 10.5, "subfactory 2 parm correct";
-
-$fac->program_dir('.');
-# ok $fac->executables('rpsblast'), "find in program_dir";
-ok $fac->executables('find'), "find in syspath";
-
-1;
diff --git a/t/Tools/Run/WrapperBase.t b/t/Tools/Run/WrapperBase.t
deleted file mode 100755
index 6d32c6c..0000000
--- a/t/Tools/Run/WrapperBase.t
+++ /dev/null
@@ -1,129 +0,0 @@
-# -*-Perl-*- Test Harness script for Bioperl
-# $Id$
-
-use strict;
-
-BEGIN { 
-    use lib '.';
-    use Bio::Root::Test;
-
-    test_begin(-tests => 27);
-
-    use_ok('Bio::Tools::Run::WrapperBase');
-}
-
-my @params = qw(test1 test_2);
-my @switches = qw(Test3 test_4);
-*Bio::Tools::Run::WrapperBase::new = sub {
-    my ($class, @args) = @_;
-    my $self = $class->Bio::Tools::Run::WrapperBase::SUPER::new(@args);
-    
-    $self->_set_from_args(\@args, -methods => [@params, @switches],
-                                  -create => 1);
-    
-    return $self;
-};
-my $new = *Bio::Tools::Run::WrapperBase::new; # just to avoid warning
-my $obj = Bio::Tools::Run::WrapperBase->new(-test_2 => 2, -test3 => 1, -test_4 => 0);
-isa_ok($obj, 'Bio::Tools::Run::WrapperBase');
-
-# it is interface-like with throw_not_implemented methods; check their
-# existance
-foreach my $method (qw(run program_dir program_name version)) {
-    ok $obj->can($method), "$method() exists";
-}
-
-## most methods are defined; check their function
-
-# simple get/setters
-foreach my $method (qw(error_string arguments no_param_checks save_tempfiles
-                       outfile_name quiet)) {
-    $obj->$method(1);
-    is $obj->$method(), 1, "$method could be set";
-}
-
-# tempdir
-
-$obj->save_tempfiles(0);
-my $tmpdir = $obj->tempdir();
-ok -d $tmpdir, 'tempdir created a directory';
-ok open(my $test, '>', File::Spec->catfile($tmpdir, 'test')), 'could create file in tempdir';
-print $test "test\n";
-close $test;
-
-# cleanup
-
-$obj->cleanup();
-ok ! -d $tmpdir, 'following cleanup() with save_tempfiles unset, tempdir was deleted';
-
-# io
-my $io1 = $obj->io;
-my $io2 = $obj->io;
-isa_ok($io1, 'Bio::Root::IO');
-is $io1, $io2, 'io() always returns the same instance of IO';
-
-# program_dir and program_name need to be defined for program_path and
-# executable to work
-{
-    no warnings 'redefine';
-    *Bio::Tools::Run::WrapperBase::program_dir = sub {
-        my $self = shift;
-        if (@_) { $self->{pdir} = shift }
-        return $self->{pdir} || '';
-    };
-    *Bio::Tools::Run::WrapperBase::program_name = sub {
-        my $self = shift;
-        if (@_) { $self->{pname} = shift }
-        return $self->{pname} || '';
-    };
-}
-$obj->program_dir('test_dir');
-$obj->program_name('test_name');
-
-# program_path
-is $obj->program_path, File::Spec->catfile('test_dir', 'test_name'.($^O =~ /mswin/i ?'.exe':'')), 'program_path was correct';
-
-# executable
-throws_ok { $obj->executable } qr/Cannot find executable/, 'pretend program name not found as executable';
-$obj->program_name('perl');
-ok $obj->executable, 'perl found as executable';
-
-# _setparams
-my $params = $obj->_setparams(-params => \@params,
-                              -switches => \@switches);
-is $params, ' test_2 2 Test3', 'params string correct';
-$params = $obj->_setparams(-params => \@params,
-                           -switches => \@switches,
-                           -join => '=');
-is $params, ' test_2=2 Test3', 'params string correct';
-$params = $obj->_setparams(-params => \@params,
-                           -switches => \@switches,
-                           -join => '=',
-                           -lc => 1);
-is $params, ' test_2=2 test3', 'params string correct';
-$params = $obj->_setparams(-params => \@params,
-                           -switches => \@switches,
-                           -join => '=',
-                           -lc => 1,
-                           -dash => 1);
-is $params, ' -test_2=2 -test3', 'params string correct';
-$params = $obj->_setparams(-params => \@params,
-                           -switches => \@switches,
-                           -join => '=',
-                           -lc => 1,
-                           -double_dash => 1);
-is $params, ' --test_2=2 --test3', 'params string correct';
-$params = $obj->_setparams(-params => \@params,
-                           -switches => \@switches,
-                           -join => '=',
-                           -lc => 1,
-                           -double_dash => 1,
-                           -underscore_to_dash => 1);
-is $params, ' --test-2=2 --test3', 'params string correct';
-$params = $obj->_setparams(-params => {(test1 => 't1', test_2 => 't_2')},
-                           -switches => {(Test3 => 'T3', test_4 => 't4')},
-                           -join => '=',
-                           -lc => 1,
-                           -double_dash => 1,
-                           -underscore_to_dash => 1);
-is $params, ' --t-2=2 --t3', 'params string correct';
diff --git a/t/Tools/SiRNA.t b/t/Tools/SiRNA.t
index cdb240d..9d25067 100644
--- a/t/Tools/SiRNA.t
+++ b/t/Tools/SiRNA.t
@@ -30,7 +30,7 @@ isa_ok( $sirna, 'Bio::Tools::SiRNA' ) ;
 
 # first test - cds only
 my @pairs = $sirna->design;
-is ( scalar(@pairs), 65, "CDS only: got ". scalar(@pairs) );
+is ( scalar(@pairs), 62, "CDS only: got ". scalar(@pairs) );
 
 
 # next test - include 3prime utr
@@ -42,7 +42,7 @@ foreach my $feat (@feats) {
 ok( $sirna->include_3pr(1) ) ;
 @pairs = $sirna->design;
 print "With 3p UTR: got ",scalar(@pairs),"\n" if $DEBUG;
-is( scalar(@pairs), 140 );
+is( scalar(@pairs), 124 );
 
 
 #third test - naked sequence
@@ -52,4 +52,4 @@ isa_ok($newseq, 'Bio::Seq') ;
 ok( $sirna->target($newseq) );
 @pairs = $sirna->design;
 print "Bare sequence: got ",scalar(@pairs),"\n" if $DEBUG;
-is ( scalar(@pairs),  142 ) ;
+is ( scalar(@pairs),  126 ) ;
diff --git a/t/Tree/TreeIO/nexml.t b/t/Tree/TreeIO/nexml.t
index 5a9f185..08d3872 100644
--- a/t/Tree/TreeIO/nexml.t
+++ b/t/Tree/TreeIO/nexml.t
@@ -3,73 +3,78 @@
 
 use strict;
 use Bio::Root::Test;
-test_begin( -tests=>46,
-	    -requires_modules => [qw(Bio::Phylo)]);
+test_begin( -tests            => 46,
+           # TODO: seeing perl version-dependent fails on perl 5.10 with
+           # Travis-CI; skip but needs debugging
+            -requires_modules => [qw(5.012 Bio::Phylo XML::Twig)]);
 
 use_ok( 'Bio::Tree::Tree' );
 use_ok( 'Bio::TreeIO' );
 use_ok('Bio::TreeIO::nexml'); # checks that your module is there and loads ok
 
 diag("WARNING: NeXML parsing for NeXML v0.9 is currently very experimental support");
+
 #Read in Data
-ok( my $TreeStream = Bio::TreeIO->new(-file => test_input_file('nexml','trees.nexml.xml'), -format => 'nexml') );
+ok( my $TreeStream = Bio::TreeIO->new(-file   => test_input_file('nexml','trees.nexml.xml'),
+                                      -format => 'nexml') );
+
+#Checking first tree object
+ok( my $tree_obj = $TreeStream->next_tree(), 'tree obj read' );
+isa_ok($tree_obj, 'Bio::Tree::Tree');
+is( $tree_obj->get_root_node()->id(), 'n1', "root node");
+my @nodes = $tree_obj->get_nodes();
+is( @nodes, 9, "number of nodes");
+ok ( my $node7 = $tree_obj->find_node('n7') );
+is( $node7->branch_length, 0.3247, "branch length");
+is( $node7->ancestor->id, 'n3', 'anc id');
+is( $node7->ancestor->branch_length, '0.34534', 'anc bl');
+
+#Check leaf nodes and taxa
+my %expected_leaves = ('n8' => 'bird',
+                       'n9' => 'worm',
+                       'n5' => 'dog',
+                       'n6' => 'mouse',
+                       'n2' => 'human'
+);
+ok( my @leaves = $tree_obj->get_leaf_nodes() );
+is( @leaves, 5, "number of leaf nodes");
+foreach my $leaf (@leaves) {
+    my $leafID = $leaf->id();
+    ok( exists $expected_leaves{$leaf->id()}, "$leafID exists" );
+    is( $leaf->get_tag_values('taxon'), $expected_leaves{$leaf->id()}, "$leafID taxon");
+}
 
-	#checking first tree object
-	ok( my $tree_obj = $TreeStream->next_tree(), 'tree obj read' );
-	isa_ok($tree_obj, 'Bio::Tree::Tree');
-	is( $tree_obj->get_root_node()->id(), 'n1', "root node");
-	my @nodes = $tree_obj->get_nodes();
-	is( @nodes, 9, "number of nodes");
-	ok ( my $node7 = $tree_obj->find_node('n7') );
-	is( $node7->branch_length, 0.3247, "branch length");
-	is( $node7->ancestor->id, 'n3', 'anc id');
-	is( $node7->ancestor->branch_length, '0.34534', 'anc bl');
-	#Check leaf nodes and taxa
-	my %expected_leaves = (
-							'n8'	=>	'bird',
-							'n9'	=>	'worm',
-							'n5'	=>	'dog',
-							'n6'	=>	'mouse',
-							'n2'	=>	'human'
-	);
-	ok( my @leaves = $tree_obj->get_leaf_nodes() );
-	is( @leaves, 5, "number of leaf nodes");
-	foreach my $leaf (@leaves) {
-		my $leafID = $leaf->id();
-		ok( exists $expected_leaves{$leaf->id()}, "$leafID exists"  );
-		is( $leaf->get_tag_values('taxon'), $expected_leaves{$leaf->id()}, "$leafID taxon");
-	}
-	
-	
 #Write data
 diag('Begin tests for writing tree files');
 my $outdata = test_output_file();
-ok( my $outTreeStream = Bio::TreeIO->new(-file => ">$outdata", -format => 'nexml'), 'out stream');
+ok( my $outTreeStream = Bio::TreeIO->new(-file   => ">$outdata",
+                                         -format => 'nexml'),
+   'out stream');
 ok( $outTreeStream->write_tree($tree_obj), 'write tree');
-close($outdata);
+$outTreeStream->close;
+
 
 #Read in the out file to test roundtrip
-my $inTreeStream = Bio::TreeIO->new(-file => $outdata, -format => 'nexml');
-	
-	#checking first tree object
-	ok($tree_obj = $inTreeStream->next_tree(), 'read tree obj (rt)' );
-	isa_ok($tree_obj, 'Bio::Tree::Tree');
-	is( $tree_obj->get_root_node()->id(), 'n1', "root node (rt)");
-	my @outnodes = $tree_obj->get_nodes();
-	is( @outnodes, 9, "number of nodes (rt)");
-	ok ( $node7 = $tree_obj->find_node('n7') );
-	is( $node7->branch_length, 0.3247, "branch length (rt)");
-	is( $node7->ancestor->id, 'n3','anc id (rt)');
-	is( $node7->ancestor->branch_length, '0.34534', 'anc bl (rt)');
-	
-	#Check leaf nodes and taxa
-	ok( my @outleaves = $tree_obj->get_leaf_nodes() );
-	is( @outleaves, 5, "number of leaf nodes (rt)");
-	foreach my $leaf (@outleaves)
-	{
-		my $leafID = $leaf->id();
-		ok( exists $expected_leaves{$leaf->id()}, "$leafID exists (rt)"  );
-		is( $leaf->get_tag_values('taxon'), $expected_leaves{$leaf->id()}, "$leafID taxon (rt)");
-	}
+my $inTreeStream = Bio::TreeIO->new(-file   => $outdata,
+                                    -format => 'nexml');
+
+#Checking first tree object
+ok($tree_obj = $inTreeStream->next_tree(), 'read tree obj (rt)' );
+isa_ok($tree_obj, 'Bio::Tree::Tree');
+is( $tree_obj->get_root_node()->id(), 'n1', "root node (rt)");
+my @outnodes = $tree_obj->get_nodes();
+is( @outnodes, 9, "number of nodes (rt)");
+ok ( $node7 = $tree_obj->find_node('n7') );
+is( $node7->branch_length, 0.3247, "branch length (rt)");
+is( $node7->ancestor->id, 'n3','anc id (rt)');
+is( $node7->ancestor->branch_length, '0.34534', 'anc bl (rt)');
 
-	
+#Check leaf nodes and taxa
+ok( my @outleaves = $tree_obj->get_leaf_nodes() );
+is( @outleaves, 5, "number of leaf nodes (rt)");
+foreach my $leaf (@outleaves) {
+    my $leafID = $leaf->id();
+    ok( exists $expected_leaves{$leaf->id()}, "$leafID exists (rt)"  );
+    is( $leaf->get_tag_values('taxon'), $expected_leaves{$leaf->id()}, "$leafID taxon (rt)");
+}
+$inTreeStream->close;
diff --git a/t/Tree/TreeIO/nhx.t b/t/Tree/TreeIO/nhx.t
index a95307c..73ed689 100644
--- a/t/Tree/TreeIO/nhx.t
+++ b/t/Tree/TreeIO/nhx.t
@@ -13,6 +13,8 @@ BEGIN {
 }
 
 my $verbose = 0; #test_debug();
+my $nl = qr/\n/;
+my $cr = qr/\r/;
 
 my $treeio = Bio::TreeIO->new(
   -format => 'nhx',
@@ -85,8 +87,8 @@ sub read_file {
   binmode $IN;
   $string = <$IN>;
   close $IN;
-  $string =~ s/\n//g;
-  $string =~ s/\r//g; # For files with Windows line-endings
+  $string =~ s/$nl//g;
+  $string =~ s/$cr//g; # For files with Windows line-endings
   #print STDERR "STR: $string\n";
   return $string;
 }
diff --git a/t/data/AF222649-rc.gbk b/t/data/AF222649-rc.gbk
new file mode 100644
index 0000000..8db5cdb
--- /dev/null
+++ b/t/data/AF222649-rc.gbk
@@ -0,0 +1,91 @@
+LOCUS       AF222649rc              1659 bp    RNA     linear   VRL 10-JAN-2001
+DEFINITION  Influenza A virus (A/Quail/Hong Kong/NT28/99(H9N2)) segment 3 PA
+            (PA) gene, partial cds.
+ACCESSION   AF222649rc
+VERSION     AF222649rc.1  
+KEYWORDS    .
+SOURCE      Influenza A virus (A/Quail/Hong Kong/NT28/99(H9N2))
+  ORGANISM  Influenza A virus (A/Quail/Hong Kong/NT28/99(H9N2))
+            Viruses; ssRNA negative-strand viruses; Orthomyxoviridae;
+            Influenzavirus A.
+REFERENCE   1  (bases 1 to 1659)
+  AUTHORS   Guan,Y., Shortridge,K.F., Krauss,S., Chin,P.S., Dyrting,K.C.,
+            Ellis,T.M., Webster,R.G. and Peiris,M.
+  TITLE     H9N2 influenza viruses possessing H5N1-like internal genomes
+            continue to circulate in poultry in southeastern China
+  JOURNAL   J. Virol. 74 (20), 9372-9380 (2000)
+   PUBMED   11000205
+REFERENCE   2  (bases 1 to 1659)
+  AUTHORS   Guan,Y., Krauss,S., Webster,R.G. and Shortridge,K.F.
+  TITLE     Direct Submission
+  JOURNAL   Submitted (10-JAN-2000) Virology and Molecular Biology, St. Jude
+            Children's Research Hospital, 332 N. Lauderdale, Memphis, TN 38105,
+            USA
+FEATURES             Location/Qualifiers
+     source          complement(1..1659)
+                     /organism="Influenza A virus (A/Quail/Hong
+                     Kong/NT28/99(H9N2))"
+                     /mol_type="genomic RNA"
+                     /strain="A/Quail/Hong Kong/NT28/99(H9N2)"
+                     /db_xref="taxon:109241"
+                     /segment="3"
+     gene            complement(1..1653)
+                     /gene="PA"
+     CDS             complement(1..1653)
+                     /gene="PA"
+                     /codon_start=1
+                     /product="PA"
+                     /protein_id="AAG48207.1"
+                     /db_xref="GI:12060686"
+                     /translation="MEDFVRQCFSPMIVELAEKAMKEYGEDPKIETNKFAAICTHLEV
+                     CFMYSDFHFIDERGESIIVEFGDPNVLLKHRFEIIEGRDRTMAWTVVNSICNTTGVEK
+                     PKYLPDLYDYKENRFIEIGVTRREVHIYYLEKANKIKSERTHIHIFSFTGEEMATKAD
+                     YTLDEESRARIKTRLFTIRQELASRGLWDSFRQSERGEETIEERFEITGTMRRLADQS
+                     LPPNFSSLENFRAYVDGFEPNGCIEGKLSQMSKEVTARIEPFLKTTPRPLKLPDGPPC
+                     SQRSKFLLMDALKLSIEDPSHEGEGIPLYDAIKCMKTFFGWKEPKIIKPHEKGINPNY
+                     LLAWKQVLAELQDIENDEKIPKTKNMKKTSQLKWALGENMAPEKVDFEDCKDVGDLKQ
+                     YDSDEPELKSLASWIQSEFNKACELTDSSWVELDEIGEDVAPIEHIASMRRNYFTAEV
+                     SHCRATEYIMKGVYINTALLNASCAAMDDFQLIPMVSKCRTKEGRRKTNLYGFIIKGR
+                     SHLRNDTDVVNFVSMEFSLTDPRLEPHKWEKYCVLEVGDMLLR"
+     misc_feature    complement(4..1593)
+                     /gene="PA"
+                     /note="Influenza RNA-dependent RNA polymerase subunit PA;
+                     Region: Flu_PA; pfam00603"
+                     /db_xref="CDD:144261"
+     gene            complement(join(1081..1653,894..1079))
+                     /gene="PA-X"
+     CDS             complement(join(1081..1653,894..1079))
+                     /gene="PA-X"
+                     /product="PA-X"
+                     /codon_start=1
+BASE COUNT      374 a    412 c    312 g    561 t
+ORIGIN
+        1 tctcaggagc atgtccccta cttcaagaac acagtacttc tcccacttgt gtggctccaa
+       61 tctcgggtct gtaagagaaa attccatgct cacaaagttt accacatcag tatcattcct
+      121 caaatgggac cttcccttga taatgaaccc atacaggttt gttttccgtc tcccttcttt
+      181 tgttctgcat ttgcttacca ttgggatcaa ttggaagtca tccatggctg cacaagatgc
+      241 attgagcaac gctgtattga tatacactcc cttcattata tactcagtag cccggcaatg
+      301 tgacacttct gctgtgaagt aattccttct catactcgca atgtgctcga ttggggcaac
+      361 atcttctcct atttcatcaa gttctaccca gcttgaatcg gtcagttcac atgccttgtt
+      421 aaattcactc tggatccaac ttgctagcga tttgagctct ggttcatcac tatcatattg
+      481 tttcaggtca ccaacgtctt tgcagtcctc aaagtccact ttctccggtg ccatattctc
+      541 acctaatgcc cattttaatt ggcttgtttt cttcatgttc ttcgtttttg ggatcttttc
+      601 atcattttca atgtcctgga gctctgccag cacctgcttc caagctaaga gataatttgg
+      661 gtttataccc ttctcatgtg gtttgataat tttgggctct ttccagccga aaaatgtttt
+      721 catgcatttg atcgcatcat acagcggtat cccctctccc tcatgactcg ggtcctcaat
+      781 gcttaatttc aaagcatcca tcagtaagaa ttttgacctt tgggaacagg gaggtccatc
+      841 aggcaatttt agaggacgtg gtgttgtttt aagaaagggc tcaattctgg ccgttacctc
+      901 ttttgacatc tgagaaagct tgccctcaat gcagccgttc ggttcgaatc catccacata
+      961 ggctctaaag ttttcaaggc tggagaaatt cggtgggaga ctttggtcgg caagcctgcg
+     1021 cattgttcct gtgatttcaa atctttcttc aattgtctct tcgcctctct cggactgacg
+     1081 aaaggaatcc catagacccc tgctagccag ttcctgtctt atggtgaaca gcctagtttt
+     1141 gatccttgcc ctgctctctt catcaagggt atagtccgcc ttggtggcca tttcttcccc
+     1201 agtaaatgaa aagatgtgaa tgtgtgttct ctcggatttt atcttgttgg ccttttctag
+     1261 atagtatatg tgcacttccc tccgtgtcac tccaatctca atgaatcgat tctccttgta
+     1321 atcatacaga tctggaaggt atttaggttt ttcgactccc gtagtgttac agatgctatt
+     1381 cactactgtc catgccattg ttcggtctct tccttcaatt atttcaaatc ggtgtttcaa
+     1441 taacacattt ggatcaccaa attccacaat tattgattcg cctctttcgt caatgaagtg
+     1501 gaaatctgaa tacatgaagc agacttccag atgagtgcat attgccgcaa acttgttcgt
+     1561 ttcgattttc gggtcttccc cgtactcttt cattgccttt tccgcaagct cgacgatcat
+     1621 tgggctgaag cattgtcgca caaagtcttc cattttgaa
+//
diff --git a/t/data/HM138502.gbk b/t/data/HM138502.gbk
new file mode 100644
index 0000000..3a1a8bf
--- /dev/null
+++ b/t/data/HM138502.gbk
@@ -0,0 +1,79 @@
+LOCUS       HM138502                1410 bp    cRNA    linear   VRL 22-APR-2010
+DEFINITION  Influenza A virus (A/California/07/2009(H1N1)) segment 6
+            neuraminidase (NA) gene, complete cds.
+ACCESSION   HM138502
+VERSION     HM138502.1  GI:295002854
+DBLINK      BioProject: PRJNA37813
+KEYWORDS    .
+SOURCE      Influenza A virus (A/California/07/2009(H1N1))
+  ORGANISM  Influenza A virus (A/California/07/2009(H1N1))
+            Viruses; ssRNA negative-strand viruses; Orthomyxoviridae;
+            Influenzavirus A.
+REFERENCE   1  (bases 1 to 1410)
+  AUTHORS   Starick,E.
+  TITLE     Direct Submission
+  JOURNAL   Submitted (21-APR-2010) Friedrich-Loeffler-Institut, Suedufer 10,
+            Greifswald-Insel Riems 17493, Germany
+COMMENT     Swine influenza A (H1N1) virus isolated during human swine flu
+            outbreak of 2009.
+            
+            ##GISAID_EpiFlu(TM)Data-START##
+            Isolate         :: A/California/07/09
+            Subtype         :: H1N1
+            Lineage         :: swl
+            ##GISAID_EpiFlu(TM)Data-END##
+FEATURES             Location/Qualifiers
+     source          1..1410
+                     /organism="Influenza A virus (A/California/07/2009(H1N1))"
+                     /mol_type="viral cRNA"
+                     /strain="A/California/07/2009"
+                     /serotype="H1N1"
+                     /host="Homo sapiens"
+                     /db_xref="taxon:641809"
+                     /segment="6"
+                     /country="USA"
+                     /collection_date="09-Apr-2009"
+                     /note="lineage: swl"
+     gene            1..1410
+                     /gene="NA"
+     CDS             1..1410
+                     /gene="NA"
+                     /codon_start=1
+                     /product="neuraminidase"
+                     /protein_id="ADF58339.1"
+                     /db_xref="GI:295002855"
+                     /translation="MNPNQKIITIGSVCMTIGMANLILQIGNIISIWISHSIQLGNQN
+                     QIETCNQSVITYENNTWVNQTYVNISNTNFAAGQSVVSVKLAGNSSLCPVSGWAIYSK
+                     DNSVRIGSKGDVFVIREPFISCSPLECRTFFLTQGALLNDKHSNGTIKDRSPYRTLMS
+                     CPIGEVPSPYNSRFESVAWSASACHDGINWLTIGISGPDNGAVAVLKYNGIITDTIKS
+                     WRNNILRTQESECACVNGSCFTVMTDGPSNGQASYKIFRIEKGKIVKSVEMNAPNYHY
+                     EECSCYPDSSEITCVCRDNWHGSNRPWVSFNQNLEYQIGYICSGIFGDNPRPNDKTGS
+                     CGPVSSNGANGVKGFSFKYGNGVWIGRTKSISSRNGFEMIWDPNGWTGTDNNFSIKQD
+                     IVGINEWSGYSGSFVQHPELTGLDCIRPCFWVELIRGRPKENTIWTSGSSISFCGVNS
+                     DTVGWSWPDGAELPFTIDK"
+ORIGIN      
+        1 atgaatccaa accaaaagat aataaccatt ggttcggtct gtatgacaat tggaatggct
+       61 aacttaatat tacaaattgg aaacataatc tcaatatgga ttagccactc aattcaactt
+      121 gggaatcaaa atcagattga aacatgcaat caaagcgtca ttacttatga aaacaacact
+      181 tgggtaaatc agacatatgt taacatcagc aacaccaact ttgctgctgg acagtcagtg
+      241 gtttccgtga aattagcagg caattcctct ctctgccctg ttagtggatg ggctatatac
+      301 agtaaagaca acagtgtaag aatcggttcc aagggggatg tgtttgtcat aagggaacca
+      361 ttcatatcat gctccccctt ggaatgcaga accttcttct tgactcaagg ggccttgcta
+      421 aatgacaaac attccaatgg aaccattaaa gacaggagcc catatcgaac cctaatgagc
+      481 tgtcctattg gtgaagttcc ctctccatac aactcaagat ttgagtcagt cgcttggtca
+      541 gcaagtgctt gtcatgatgg catcaattgg ctaacaattg gaatttctgg cccagacaat
+      601 ggggcagtgg ctgtgttaaa gtacaacggc ataataacag acactatcaa gagttggaga
+      661 aacaatatat tgagaacaca agagtctgaa tgtgcatgtg taaatggttc ttgctttact
+      721 gtaatgaccg atggaccaag taatggacag gcctcataca agatcttcag aatagaaaag
+      781 ggaaagatag tcaaatcagt cgaaatgaat gcccctaatt atcactatga ggaatgctcc
+      841 tgttatcctg attctagtga aatcacatgt gtgtgcaggg ataactggca tggctcgaat
+      901 cgaccgtggg tgtctttcaa ccagaatctg gaatatcaga taggatacat atgcagtggg
+      961 attttcggag acaatccacg ccctaatgat aagacaggca gttgtggtcc agtatcgtct
+     1021 aatggagcaa atggagtaaa agggttttca ttcaaatacg gcaatggtgt ttggataggg
+     1081 agaactaaaa gcattagttc aagaaacggt tttgagatga tttgggatcc gaacggatgg
+     1141 actgggacag acaataactt ctcaataaag caagatatcg taggaataaa tgagtggtca
+     1201 ggatatagcg ggagttttgt tcagcatcca gaactaacag ggctggattg tataagacct
+     1261 tgcttctggg ttgaactaat cagagggcga cccaaagaga acacaatctg gactagcggg
+     1321 agcagcatat ccttttgtgg tgtaaacagt gacactgtgg gttggtcttg gccagacggt
+     1381 gctgagttgc catttaccat tgacaagtaa
+//
diff --git a/t/data/KF527485.gbk b/t/data/KF527485.gbk
new file mode 100644
index 0000000..c64eb23
--- /dev/null
+++ b/t/data/KF527485.gbk
@@ -0,0 +1,82 @@
+LOCUS       KF527485                1444 bp    cRNA    linear   VRL 02-OCT-2013
+DEFINITION  Influenza A virus (A/California/07/2009(H1N1)) segment 5
+            nucleocapsid protein (NP) gene, partial cds.
+ACCESSION   KF527485
+VERSION     KF527485.1  GI:537446968
+KEYWORDS    .
+SOURCE      Influenza A virus (A/California/07/2009(H1N1))
+  ORGANISM  Influenza A virus (A/California/07/2009(H1N1))
+            Viruses; ssRNA negative-strand viruses; Orthomyxoviridae;
+            Influenzavirus A.
+REFERENCE   1  (bases 1 to 1444)
+  AUTHORS   Le,V.L., Courtney,C.L., Steel,J. and Compans,R.W.
+  TITLE     Closely Related Influenza Viruses Induce Contrasting Respiratory
+            Tract Immunopathology
+  JOURNAL   PLoS ONE 8 (9), E76708 (2013)
+   PUBMED   24086762
+  REMARK    Publication Status: Online-Only
+REFERENCE   2  (bases 1 to 1444)
+  AUTHORS   Le,V.L., Courtney,C.L., Steel,J. and Compans,R.W.
+  TITLE     Direct Submission
+  JOURNAL   Submitted (07-AUG-2013) Microbiology and Immunology, Emory
+            University, 1518 Clifton Rd Suite 5000, Atlanta, GA 30322, USA
+COMMENT     ##Assembly-Data-START##
+            Assembly Method       :: Lasergene v. 10
+            Sequencing Technology :: ABI37XL; Sanger dideoxy sequencing
+            ##Assembly-Data-END##
+FEATURES             Location/Qualifiers
+     source          1..1444
+                     /organism="Influenza A virus (A/California/07/2009(H1N1))"
+                     /mol_type="viral cRNA"
+                     /strain="A/California/07/2009"
+                     /serotype="H1N1"
+                     /host="Homo sapiens"
+                     /db_xref="taxon:641809"
+                     /segment="5"
+                     /country="USA"
+                     /collection_date="09-Apr-2009"
+                     /note="passage details: MDCK 6"
+     gene            <1..>1444
+                     /gene="NP"
+     CDS             <1..>1444
+                     /gene="NP"
+                     /codon_start=2
+                     /product="nucleocapsid protein"
+                     /protein_id="AGU69828.1"
+                     /db_xref="GI:537446969"
+                     /translation="ASQGTKRSYEQMETGGERQDATEIRASVGRMIGGIGRFYIQMCT
+                     ELKLSDYDGRLIQNSITIERMVLSAFDERRNKYLEEHPSAGKDPKKTGGPIYRRVGGK
+                     WMRELILYDKEEIRRVWRQANNGEDATAGLTHIMIWHSNLNDATYQRTRALVRTGMDP
+                     RMCSLMQGSTLPRRSGAAGAAVKGVGTIAMELIRMIKRGINDRNFWRGENGRRTRVAY
+                     ERMCNILKGKFQTAAQRAMMDQVRESRNPGNAEIEDLIFLARSALILRGSVAHKSCLP
+                     ACVYGLAVASGHDFEREGYSLVGIDPFKLLQNSQVVSLMRPNENPAHKSQLVWMACHS
+                     AAFEDLRVSSFIRGKKVIPRGKLSTRGVQIASNENVETMDSNTLELRSRYWAIRTRSG
+                     GNTNQQKASAGQISVQPTFSVQRNLPFERATVMAAFSGNNEGRTSDMRTEVIRMMESA
+                     KPEDLSFQGRGVFELSDEKATNPIVPSFDMS"
+ORIGIN      
+        1 ggcgtctcaa ggcaccaaac gatcatatga acaaatggag actggtgggg agcgccagga
+       61 tgccacagaa atcagagcat ctgtcggaag aatgattggt ggaatcggga gattctacat
+      121 ccaaatgtgc actgaactca aactcagtga ttatgatgga cgactaatcc agaatagcat
+      181 aacaatagag aggatggtgc tttctgcttt tgatgagaga agaaataaat acctagaaga
+      241 gcatcccagt gctgggaagg accctaagaa aacaggagga cccatatata gaagagtagg
+      301 cggaaagtgg atgagagaac tcatccttta tgacaaagaa gaaataagga gagtttggcg
+      361 ccaagcaaac aatggcgaag atgcaacagc aggtcttact catatcatga tttggcattc
+      421 caacctgaat gatgccacat atcagagaac aagagcgctt gttcgcaccg gaatggatcc
+      481 cagaatgtgc tctctaatgc aaggttcaac acttcccaga aggtctggtg ccgcaggtgc
+      541 tgcggtgaaa ggagttggaa caatagcaat ggagttaatc agaatgatca aacgtggaat
+      601 caatgaccga aatttctgga ggggtgaaaa tggacgaagg acaagggttg cttatgaaag
+      661 aatgtgcaat atcctcaaag gaaaatttca aacagctgcc cagagggcaa tgatggatca
+      721 agtaagagaa agtcgaaacc caggaaacgc tgagattgaa gacctcattt tcctggcacg
+      781 gtcagcactc attctgaggg gatcagttgc acataaatcc tgcctgcctg cttgtgtgta
+      841 tgggcttgca gtagcaagtg ggcatgactt tgaaagggaa gggtactcac tggtcgggat
+      901 agacccattc aaattactcc aaaacagcca agtggtcagc ctgatgagac caaatgaaaa
+      961 cccagctcac aagagtcaat tggtgtggat ggcatgccac tctgctgcat ttgaagattt
+     1021 aagagtatca agtttcataa gaggaaagaa agtgattcca agaggaaagc tttccacaag
+     1081 aggggtccag attgcttcaa atgagaatgt ggaaaccatg gactccaata ccctggaact
+     1141 gagaagcaga tactgggcca taaggaccag gagtggagga aataccaatc aacaaaaggc
+     1201 atccgcaggc cagatcagtg tgcagcctac attctcagtg cagcggaatc tcccttttga
+     1261 aagagcaacc gttatggcag cattcagcgg gaacaatgaa ggacggacat ccgacatgcg
+     1321 aacagaagtt ataagaatga tggaaagtgc aaagccagaa gatttgtcct tccaggggcg
+     1381 gggagtcttc gagctctcgg acgaaaaggc aacgaacccg atcgtgcctt cctttgacat
+     1441 gagt
+//
\ No newline at end of file
diff --git a/t/data/ORTHOMCL2345.cluster.aa.fa.aln.aa.phy.txt b/t/data/ORTHOMCL2345.cluster.aa.fa.aln.aa.phy.txt
new file mode 100644
index 0000000..40f6b9b
--- /dev/null
+++ b/t/data/ORTHOMCL2345.cluster.aa.fa.aln.aa.phy.txt
@@ -0,0 +1,19 @@
+18  162
+A5703     MTRPRTDAIHHHVVVNAPIERAFAVFTTRFGDFKPREHNLLAIPITETVFECHAGGHIYDRGVDGSVCKWARVLVYEPPSRVLFTWDIGPTWRPETDLAKTSEVEVRFTAQSAETTRVDLEHRHLDRHGPGWESVADGVDSEAGWPLYLRRYTDLLCIQVQP
+A57307    MTRPRTDAIHHHVVVNAPIERAFAVFTTRFGDFKPREHNLLAIPITETVFECHAGGHIYDRGVDGSVCKWARVLVYEPPSRVLFTWDIGPTWRPETDLAKTSEVEVRFTAQSAETTRVDLEHRHLDRHGPGWESVADGVDSEAGWPLYLRRYTDLLCIQVQP
+A61002    MTRPRTDAIHHHVVVNAPIERAFAVFTTRFGDFKPREHNLLAIPITETVFECHAGGHIYDRGVDGSVCKWARVLVYEPPSRVLFTWDIGPTWRPETDLAKTSEVEVRFTAQSAETTRVDLEHRHLDRHGPGWESVADGVDSEAGWPLYLRRYTDLLCIQVQP
+A65082    MTRPRTDAIHHHVVVNAPIERAFAVFTTRFGDFKPREHNLLAIPITETVFECHAGGHIYDRGVDGSVCKWARVLVYEPPSRVLFTWDIGPTWRPETDLAKTSEVEVRFTAQSAETTRVDLEHRHLDRHGPGWESVADGVDSEAGWPLYLRRYTDLLCIQVQP
+A1895     MTRPRTDAIHHHVVVNAPIERAFAVFTTRFGDFKPREHNLLAIPITETVFECHAGGHIYDRGVDGSVCKWARLLVYEPPSRVLFTWDIGPTWRPETDLAKTSEVEVRFTAQSAETTRVDLEHRHLDRHGPGWESVADGVDSEAGWPLYLRRYTDLLCIQVQP
+A53685    MTRPRTDAIHHHVVVNAPIERAFAVFTTRFGDFKPREHNLLAIPITETVFECHAGGHIYDRGVDGSVCKWARVLVYEPPSRVLFTWDIGPTWRPETDLAKTSEVEVRFTAQSAETTRVDLEHRHLDRHGPGWESVADGVDSEAGWPLYLRRYTDLLCIQVQP
+A9694     MTRPRTDAIHHHVVVNAPIERAFAVFTTRFGDFKPREHNLLAIPITETVFECHAGGHIYDRGVDGSVCKWARVLVYEPPSRVLFTWDIGPTWRPETDLAKTSEVEVRFTAQSAETTRVDLEHRHLDRHGPGWESVADGVDSEAGWPLYLRRYTDLLCIQVQP
+A13531    MTRPRTDAIHHHVVVNAPIERAFAVFTTRFGDFKPREHNLLAIPITETVFECHAGGHIYDRGVDGSVCKWARVLVYEPPSRVLFTWDIGPTWRPETDLAKTSEVEVRFTAQSAETTRVDLEHRHLDRHGPGWESVADGVDSEAGWPLYLRRYTDLLCIQVQP
+A21170    MTRPRTDAIHHHVVVNAPIERAFAVFTTRFGDFKPREHNLLAIPITETVFECHAGGHIYDRGVDGSVCKWARVLVYEPPSRVLFTWDIGPTWRPETDLAKTSEVEVRFTAQSAETTRVDLEHRHLDRHGPGWESVADGVDSEAGWPLYLRRYTDLLCIQVQP
+A17451    MTRPRTDAIHHHVVVNAPIERAFAVFTTRFGDFKPREHNLLAIPITETVFECHAGGHIYDRGVDGSVCKWARVLVYEPPSRVLFTWDIGPTWRPETDLAKTSEVEVRFTAQSAETTRVDLEHRHLDRHGPGWESVADGVDSEAGWPLYLRRYTDLLCIQVQP
+A30004    MTRPRTDAIHHHVVVNAPIERAFAVFTTRFGDFKPREHNLLAIPITETVFECHAGGHIYDRGVDGSVCKWARVLVYEPPSRVLFTWDIGPTWRPETDLAKTSEVEVRFTAQSAETTRVDLEHRHLDRHGPGWESVADGVDSEAGWPLYLRRYTDLLCIQVQP
+A34040    MTRPRTDAIHHHVVVNAPIERAFAVFTTRFGDFKPREHNLLAIPITETVFECHAGGHIYDRGVDGSVCKWARVLVYEPPSRVLFTWDIGPTWRPETDLAKTSEVEVRFTAQSAETTRVDLEHRHLDRHGPGWESVADGVDSEAGWPLYLRRYTDLLCIQVQP
+A38189    MTRPRTDAIHHHVVVNAPIERAFAVFTTRFGDFKPREHNLLAIPITETVFECHAGGHIYDRGVDGSVCKWARVLVYEPPSRVLFTWDIGPTWRPETDLAKTSEVEVRFTAQSAETTRVDLEHRHLDRHGPGWESVADGVDSEAGWPLYLRRYTDLLCIQVQP
+A72804    MTRPRTDAIHHHVVVNAPIERAFAVFTTRFGDFKPREHNLLAIPITETVFECHAGGHIYDRGVDGSVCKWARVLVYEPPSRVLFTWDIGPTWRPETDLAKTSEVEVRFTAQSAETTRVDLEHRHLDRHGPGWESVADGVDSEAGWPLYLRRYTDLLCIQVQP
+A42101    MTRPRTDAIHHHVVVNAPIERAFAVFTTRFGDFKPREHNLLAIPITETVFECHAGGHIYDRGVDGSVCKWARVLVYEPPSRVLFTWDIGPTWRPETDLAKTSEVEVRFTAQSAETTRVDLEHRHLDRHGPGWESVADGVDSEAGWPLYLRRYTDLXXXQVQP
+A45935    MTRPRTDAIHHHVVVNAPIERAFAVFTTRFGDFKPREHNLLAIPITETVFECHAGGHIYDRGVDGSVCKWARVLVYEPPSRVLFTWDIGPTWRPETDLAKTSEVEVRFTAQSAETTRVDLEHRHLDRHGPGWESVADGVDSEAGWPLYLRRYTDLLCIQVQP
+A76877    MTRPRTDAIHHHVVVNAPIERAFAVFTTRFGDFKPREHNLLAIPITETVFECHAGGHIYDRGVDGSVCKWARVLVYEPPSRVLFTWDIGPTWRPETDLAKTSEVEVRFTAQSAETTRVDLEHRHLDRHGPGWESVADGVDSEAGWPLYLRRYTDLLCIQVQP
+A49905    MTRPRTDAIHHHVVVNAPIERAFAVFTTRFGDFKPREHNLLAIPITETVFECHAGGHIYDRGVDGSVCKWARVLVYEPPSRVLFTWDIGPTWRPETDLAKTSEVEVRFTAQSAETTRVDLEHRHLDRHGPGWESVADGVDSEAGWPLYLRRYTDLLCIQVQP
diff --git a/t/data/U58726.gb b/t/data/U58726.gb
index c23df80..900b2b0 100644
--- a/t/data/U58726.gb
+++ b/t/data/U58726.gb
@@ -1,22 +1,23 @@
-LOCUS       U58726                 31931 bp    DNA     linear   INV 
+LOCUS       U58726                 31931 bp    DNA     linear   INV 29-APR-2011
 DEFINITION  Caenorhabditis elegans cosmid T01C8, complete sequence.
 ACCESSION   U58726
+VERSION     U58726.1  GI:1326250
 KEYWORDS    HTG.
-SOURCE      Caenorhabditis elegans.
+SOURCE      Caenorhabditis elegans
   ORGANISM  Caenorhabditis elegans
             Eukaryota; Metazoa; Nematoda; Chromadorea; Rhabditida;
             Rhabditoidea; Rhabditidae; Peloderinae; Caenorhabditis.
 REFERENCE   1  (bases 1 to 31931)
-  AUTHORS   Waterston,R.
+  CONSRTM   C. elegans Sequencing Consortium
   TITLE     Genome sequence of the nematode C. elegans: a platform for
-            investigating biology. The C. elegans Sequencing Consortium
+            investigating biology
   JOURNAL   Science 282 (5396), 2012-2018 (1998)
-  MEDLINE   99069613
    PUBMED   9851916
+  REMARK    Erratum:[Science 1999 Jan 1;283(5398):35]
 REFERENCE   2  (bases 1 to 31931)
   AUTHORS   Wohldmann,P. and Hawkins,J.
   TITLE     The sequence of C. elegans cosmid T01C8
-  JOURNAL   Unpublished (2001)
+  JOURNAL   Unpublished
 REFERENCE   3  (bases 1 to 31931)
   AUTHORS   Waterston,R.
   TITLE     Direct Submission
@@ -39,113 +40,209 @@ REFERENCE   6  (bases 1 to 31931)
   JOURNAL   Submitted (29-JUN-2002) Department of Genetics, Washington
             University, Genome Sequencing Center, 4444 Forest Park Avenue, St.
             Louis, MO 63110, USA
-COMMENT     Submitted by: Genome Sequencing Center Department of Genetics,
-            Washington University St. Louis , MO 63110, USA, and Sanger
-            Centre, Hinxton Hall Cambridge CB10 IRQ, England email:
-            rw at nematode.wustl.edu and jes at sanger.ac.uk NOTICE: This sequence
-            may not be the entire insert of this clone. It may be shorter
-            because we only sequence overlapping sections once, or longer
-            because we provide a small overlap between neighboring
-            submissions. This sequence was finished as follows unless
-            otherwise noted: all regions were double stranded, sequenced with
-            an alternate chemistry or covered by high quality data (i.e.,
-            phred quality >= 30); an attempt was made to resolve all
-            sequencing problems, such as compressions and repeats; all regions
-            were covered by sequence from more than one m13 subclone. For a
-            graphical representation of this cosmid sequence and its analysis
-            see:
-            http://www.wormbase.org/db/seq/sequence?name=T01C8;class=Sequence
-            NEIGHBORING COSMID INFORMATION The 5' cosmid is EGAP8, 200 bp
-            overlap; the 3' cosmid is F41G4, 2000 bp overlap. Actual start of
-            this cosmid is at base position 1 of T01C8; actual end is at 10488
-            of F41G4. NOTES: Coding seqences below are the result of
-            integration and manual review of the following data : computer
-            analysis using the program Genefinder (P. Green and L. Hillier,
-            personal communication), the large scale EST projects of Yuji
-            Kohara (http://www.ddbj.nig.ac.jp/c-elegans/html/CE_INDEX.html)
-            and The C. elegans ORFeome cloning project
-            (http://worfdb.dfci.harvard.edu/), similarity to other proteins
-            from BlastX analyses (http://blast.wustl.edu/), sequence
-            conservation with C. briggsae using Jim Kent's WABA alignment
-            program (Genome Research 10:1115-1125, 2000), individual C.
-            elegans GenBank submissions, and personal communications with C.
-            elegans researchers. tRNAs are predicted using the program
-            tRNAscan-SE (Lowe, T.M. and Eddy, S.R., 1997, Nucl. Acids. Res.,
-            25, 955-964).
+REFERENCE   7  (bases 1 to 31931)
+  AUTHORS   Waterston,R.
+  TITLE     Direct Submission
+  JOURNAL   Submitted (06-NOV-2002) Department of Genetics, Washington
+            University, Genome Sequencing Center, 4444 Forest Park Avenue, St.
+            Louis, MO 63110, USA
+REFERENCE   8  (bases 1 to 31931)
+  AUTHORS   Waterston,R.
+  TITLE     Direct Submission
+  JOURNAL   Submitted (21-NOV-2002) Department of Genetics, Washington
+            University, Genome Sequencing Center, 4444 Forest Park Avenue, St.
+            Louis, MO 63110, USA
+REFERENCE   9  (bases 1 to 31931)
+  AUTHORS   Waterston,R.
+  TITLE     Direct Submission
+  JOURNAL   Submitted (19-APR-2003) Department of Genetics, Washington
+            University, Genome Sequencing Center, 4444 Forest Park Avenue, St.
+            Louis, MO 63110, USA
+REFERENCE   10 (bases 1 to 31931)
+  CONSRTM   WormBase Consortium
+  TITLE     Direct Submission
+  JOURNAL   Submitted (21-SEP-2004) Department of Genetics, Washington
+            University, Genome Sequencing Center, 4444 Forest Park Avenue, St.
+            Louis, MO 63110, USA
+REFERENCE   11 (bases 1 to 31931)
+  CONSRTM   WormBase Consortium
+  TITLE     Direct Submission
+  JOURNAL   Submitted (10-SEP-2005) Department of Genetics, Washington
+            University, Genome Sequencing Center, 4444 Forest Park Avenue, St.
+            Louis, MO 63110, USA
+REFERENCE   12 (bases 1 to 31931)
+  CONSRTM   WormBase Consortium
+  TITLE     Direct Submission
+  JOURNAL   Submitted (06-MAY-2006) Department of Genetics, Washington
+            University, Genome Sequencing Center, 4444 Forest Park Avenue, St.
+            Louis, MO 63110, USA
+REFERENCE   13 (bases 1 to 31931)
+  CONSRTM   WormBase Consortium
+  TITLE     Direct Submission
+  JOURNAL   Submitted (29-APR-2011) Department of Genetics, Washington
+            University, Genome Sequencing Center, 4444 Forest Park Avenue, St.
+            Louis, MO 63110, USA
+COMMENT     [WARNING] On Oct 13, 2011 this sequence was replaced by
+            gi:351061076.
+            Submitted by:
+                   Genome Sequencing Center
+                   Department of Genetics, Washington University
+                   St. Louis , MO  63110, USA, and
+                   Sanger Centre, Hinxton Hall
+                   Cambridge CB10 IRQ, England
+                   email: stlouis at wormbase.org and sanger at wormbase.org
+            
+            NOTICE:  This sequence may not be the entire insert of this clone.
+            It may be shorter because we only sequence overlapping sections
+            once, or longer because we provide a small overlap between
+            neighboring submissions.
+            
+            This sequence was finished as follows unless otherwise noted: all
+            regions were double stranded, sequenced with an alternate chemistry
+            or covered by high quality data (i.e., phred quality >= 30); an
+            attempt was made to resolve all sequencing problems, such as
+            compressions and repeats; all regions were covered by sequence from
+            more than one m13 subclone.
+            
+            For a graphical representation of this clone sequence and its
+            analysis see:
+            http://www.wormbase.org/db/seq/sequence?name=T01C8
+            
+                        NEIGHBORING CLONE INFORMATION
+            
+            The 5' clone is EGAP8, 200 bp overlap; the 3' clone is F41G4, 2000
+            bp overlap. Actual start of this clone is at base position 1 of
+            T01C8; actual end is at 10488 of F41G4.
+            
+            NOTES:
+            
+            Coding seqences below are the result of integration and manual
+            review of the following data : computer analysis using the program
+            Genefinder (P. Green and L. Hillier, personal communication), the
+            large scale EST projects of Yuji Kohara
+            (http://www.ddbj.nig.ac.jp/c-elegans/html/CE_INDEX.html) and The C.
+            elegans ORFeome cloning project (http://worfdb.dfci.harvard.edu/),
+            similarity to other proteins from BlastX analyses
+            (http://blast.wustl.edu/), sequence conservation with C. briggsae
+            using Jim Kent's WABA alignment program (Genome Research
+            10:1115-1125, 2000), individual C. elegans GenBank submissions,
+            and personal communications with C. elegans researchers. tRNAs
+            are predicted using the program tRNAscan-SE (Lowe, T.M. and
+            Eddy, S.R., 1997, Nucl. Acids. Res., 25, 955-964).
 FEATURES             Location/Qualifiers
      source          1..31931
-                     /chromosome="X"
-                     /clone="T01C8"
-                     /strain="Bristol N2"
                      /organism="Caenorhabditis elegans"
+                     /mol_type="genomic DNA"
+                     /strain="Bristol N2"
                      /db_xref="taxon:6239"
-     gene            complement(5778..6881)
-                     /gene="T01C8.3"
-                     /note="for a graphical representation of this gene see:
-                     ttp://www.wormbase.org/db/seq/sequence?name=T01C8.3;class
-                     =Sequence"
-     CDS             join(complement(5778..5951),complement(5996..6076),
-                     complement(6123..6219),complement(6268..6317),
-                     complement(6359..6509),complement(6555..6631),
-                     complement(6783..6881))
-                     /product="Hypothetical protein T01C8.3"
-                     /gene="T01C8.3"
-                     /protein_id="AAB00575.1"
+                     /chromosome="X"
+                     /clone="T01C8"
+     gene            1698..1819
+                     /locus_tag="T01C8.8"
+                     /db_xref="WormBase:WBGene00196318"
+     ncRNA           1698..1819
+                     /locus_tag="T01C8.8"
+                     /ncRNA_class="other"
+                     /product="T01C8.8"
+                     /db_xref="WormBase:T01C8.8"
+                     /db_xref="WormBase:WBGene00196318"
+     gene            complement(5778..7678)
+                     /locus_tag="T01C8.3"
+                     /db_xref="WormBase:WBGene00020144"
+     CDS             complement(join(5778..5951,5996..6076,6123..6219,
+                     6268..6317,6359..6509,6555..6631,7562..7678))
+                     /locus_tag="T01C8.3"
+                     /standard_name="T01C8.3"
+                     /note="contains similarity to Paramecium tetraurelia
+                     Chromosome undetermined scaffold_129, whole genome shotgun
+                     sequence.; TR:A0BUB6; coded for by the following C.
+                     elegans cDNAs: FM864997"
                      /codon_start=1
-                     /translation="MLNHSLPEVWKKTAVSEKNGLQFQKIIVFCPTHGCFTSPTDLPL
-                     GCSTNSRGSIFCICNSTDYCNEMTNVKEEKNITYLICEYAKDSMFRGADCVQPWCVKT
-                     ASSYMDEMVECGEGTYEMEMYDIGFVYSGMLLPINSCYAVADDSRYDKSQICTYKVNK
-                     TTPYKLKVPGSTKCFAPGEVMTRMKNSTCIGQFCYSASAVFGCISQFNREGAILKVTI
-                     FHFEILNKNNNICLTIRNFCKKKL"
-                     /db_xref="GI:1326251"
+                     /product="Hypothetical protein T01C8.3"
+                     /protein_id="AAB00575.3"
+                     /db_xref="GI:331028906"
+                     /db_xref="WormBase:T01C8.3"
+                     /db_xref="WormBase:WBGene00020144"
+                     /translation="MQLLENCNFRCTNCTGDYCYAVNYKHLNPSLKNEQSYYQGCFTS
+                     PTDLPLGCSTNSRGSIFCICNSTDYCNEMTNVKEEKNITYLICEYAKDSMFRGADCVQ
+                     PWCVKTASSYMDEMVECGEGTYEMEMYDIGFVYSGMLLPINSCYAVADDSRYDKSQIC
+                     TYKVNKTTPYKLKVPGSTKCFAPGEVMTRMKNSTCIGQFCYSASAVFGCISQFNREGA
+                     ILKVTIFHFEILNKNNNICLTIRNFCKKKL"
+     misc_feature    11227..11228
+                     /note="SL1 trans-splice acceptor; see yk1591b07.5"
+     misc_feature    11227..11228
+                     /note="SL2 defined by RNASeq short reads (Hillier et al.);
+                     see RNASeq_Hillier.dauer_daf-2"
      gene            11238..12262
-                     /gene="T01C8.2"
-                     /note="for a graphical representation of this gene see:
-                     ttp://www.wormbase.org/db/seq/sequence?name=T01C8.2;class
-                     =Sequence"
+                     /locus_tag="T01C8.2"
+                     /db_xref="WormBase:WBGene00020143"
      CDS             join(11238..11384,12167..12262)
+                     /locus_tag="T01C8.2"
+                     /standard_name="T01C8.2"
+                     /note="contains similarity to Escherichia coli Type 4
+                     prepilin-like proteins leader peptide-processing
+                     enzymes[Includes: Leader peptidase (EC 3.4.23.43)
+                     (Prepilin peptidase); N-smethyltransferase (EC 2.1.1.-)].;
+                     SW:P25960; coded for by the following C. elegans cDNAs:
+                     OSTF201H6_1, OSTR201H6_1, yk725a4.3, yk1428d07.3,
+                     yk1428d07.5, yk1591b07.3, yk1591b07.5,
+                     MM454_FPK17YK01E1TJO"
+                     /codon_start=1
                      /product="Hypothetical protein T01C8.2"
-                     /gene="T01C8.2"
                      /protein_id="AAB00576.1"
-                     /codon_start=1
+                     /db_xref="GI:1326252"
+                     /db_xref="WormBase:T01C8.2"
+                     /db_xref="WormBase:WBGene00020143"
                      /translation="MPKQEFNPLDYTGPLIVGAIFCVFLFVISFFVINFFCITKYDDI
                      TKFELMGGKYGWRLGPHPLIVVKKGGFVAEEEVDDA"
-                     /db_xref="GI:1326252"
-                     /note="coded for by the following C. elegans cDNAs:
-                     yk725a4.3"
-     gene            complement(12416..14009)
-                     /gene="T01C8.4"
-                     /note="for a graphical representation of this gene see:
-                     ttp://www.wormbase.org/db/seq/sequence?name=T01C8.4;class
-                     =Sequence"
-     CDS             join(complement(12416..12555),complement(12785..13093),
-                     complement(13138..13358),complement(13606..14009))
-                     /product="Hypothetical protein T01C8.4"
-                     /gene="T01C8.4"
-                     /protein_id="AAB00577.1"
+     gene            complement(12416..13336)
+                     /locus_tag="T01C8.4"
+                     /db_xref="WormBase:WBGene00020145"
+     CDS             complement(join(12416..12555,12785..13093,13138..13336))
+                     /locus_tag="T01C8.4"
+                     /standard_name="T01C8.4"
+                     /note="contains similarity to Pfam domain PF00155
+                     (Aminotransferase class I and II); coded for by the
+                     following C. elegans cDNAs: FN888767, FN888768, FN888770,
+                     FM864682"
                      /codon_start=1
-                     /translation="MRLSFFDGIHVASPIKELHTSELFQKEICPVKINLAIEAYRTED
-                     GEPWVLPVVREIELKFPHEPHHNHEYLPILGHDGFCKSATALLLGNDSLAIKEGRSFS
-                     VQCISGTGAICVGAEFLAQVLSMKTIYVSNPCCLCYNPTGMDPTREQWIQMAQVIKQK
-                     NLFTFFHIADQGLASGDADADAWAVRFFVEQGLEMIVSQSFSKNFGLYNDRVGSLTVI
-                     VNKPSHIANLKSQLTLVNVSNFSNPPAYGARIVHEILKSPKYREQWQNSIKMMAFRIK
-                     KTRQELIRELNMLQTSGKWDRITQQSGLFSYTGLTPCQVDHLIAHHKIYLLSDGRINI
-                     CGLNMSNLDYVARAIDDTVRTIH"
-                     /db_xref="GI:1326253"
-                     /note="strong similarity to cytoplasmic aspartate
-                     aminotransferase; coded for by the following C. elegans
-                     cDNAs: cm20g8"
+                     /product="Hypothetical protein T01C8.4"
+                     /protein_id="AAB00577.2"
+                     /db_xref="GI:331028907"
+                     /db_xref="WormBase:T01C8.4"
+                     /db_xref="WormBase:WBGene00020145"
+                     /translation="MDPTREQWIQMAQVIKQKNLFTFFHIADQGLASGDADADAWAVR
+                     FFVEQGLEMIVSQSFSKNFGLYNDRVGSLTVIVNKPSHIANLKSQLTLVNVSNFSNPP
+                     AYGARIVHEILKSPKYREQWQNSIKMMAFRIKKTRQELIRELNMLQTSGKWDRITQQS
+                     GLFSYTGLTPCQVDHLIAHHKIYLLSDGRINICGLNMSNLDYVARAIDDTVRTIH"
      gene            complement(16309..17896)
-                     /gene="T01C8.5"
-                     /note="for a graphical representation of this gene see:
-                     ttp://www.wormbase.org/db/seq/sequence?name=T01C8.5;class
-                     =Sequence"
-     CDS             join(complement(16309..16457),complement(16507..16815),
-                     complement(16863..17233),complement(17499..17896))
+                     /locus_tag="T01C8.5"
+                     /db_xref="WormBase:WBGene00020146"
+     CDS             complement(join(16309..16457,16507..16815,16863..17233,
+                     17499..17896))
+                     /locus_tag="T01C8.5"
+                     /standard_name="T01C8.5"
+                     /note="contains similarity to Pfam domain PF00155
+                     (Aminotransferase class I and II); coded for by the
+                     following C. elegans cDNAs: OSTR040A9_1, OSTR040A9_2,
+                     yk204c10.5, yk327b7.3, yk327b7.5, yk468h3.5, yk503d6.3,
+                     yk503d6.5, yk512b9.3, yk512b9.5, yk597a11.3, yk597a11.5,
+                     yk829h10.3, yk829h10.5, yk899e07.3, yk1020c11.5,
+                     yk1023a07.3, yk1023a07.5, yk1070e06.3, yk1070e06.5,
+                     yk1318d04.3, yk1318d04.5, cm20g8.5, yk1400g10.3,
+                     yk1400g10.5, yk1444g09.3, yk1444g09.5, yk1452e06.3,
+                     yk1452e06.5, yk1471h11.3, yk1471h11.5, yk1500a04.3,
+                     yk1546b06.3, yk1546b06.5, yk1560g10.5, yk1611e03.3,
+                     yk1611e03.5, yk1613g08.3, yk1630a11.5, yk1672d12.3,
+                     yk1672d12.5, yk1675b02.3, yk1675b02.5, yk1755e02.3,
+                     yk1755e02.5, yk899b12.3, yk899b12.5, EC036254, EC029162,
+                     MM454_contig05811, FN906088, FN906090, FN906089, FN906091"
+                     /codon_start=1
                      /product="Hypothetical protein T01C8.5"
-                     /gene="T01C8.5"
                      /protein_id="AAB00578.1"
-                     /codon_start=1
+                     /db_xref="GI:1326254"
+                     /db_xref="WormBase:T01C8.5"
+                     /db_xref="WormBase:WBGene00020146"
                      /translation="MSFFDGIPVAPPIEVFHKNKMYLDETAPVKVNLTIGAYRTEEGQ
                      PWVLPVVHETEVEIANDTSLNHEYLPVLGHEGFRKAATELVLGAESPAIKEERSFGVQ
                      CLSGTGALRAGAEFLASVCNMKTVYVSNPTWGNHKLVFKKAGFTTVADYTFWDYDNKR
@@ -154,23 +251,60 @@ FEATURES             Location/Qualifiers
                      QSQMSLVIRANWSNPPAHGARIVHKVLTTPARREQWNQSIQAMSSRIKQMRAALLRHL
                      MDLGTPGTWDHIIQQIGMFSYTGLTSAQVDHLIANHKVFLLRDGRINICGLNTKNVEY
                      VAKAIDETVRAVKSNI"
-                     /db_xref="GI:1326254"
-                     /note="strong similarity to cytoplasmic aspartate
-                     aminotransferase; coded for by the following C. elegans
-                     cDNAs: yk204c10.3, yk327b7.3, yk503d6.3, cm20g8,
-                     yk204c10.5, yk327b7.5, yk468h3.3, yk468h3.5"
+     gene            16755..16901
+                     /locus_tag="T01C8.10"
+                     /db_xref="WormBase:WBGene00201366"
+     ncRNA           16755..16901
+                     /locus_tag="T01C8.10"
+                     /ncRNA_class="other"
+                     /product="T01C8.10"
+                     /db_xref="WormBase:T01C8.10"
+                     /db_xref="WormBase:WBGene00201366"
+     gene            17202..17310
+                     /locus_tag="T01C8.11"
+                     /db_xref="WormBase:WBGene00202374"
+     ncRNA           17202..17310
+                     /locus_tag="T01C8.11"
+                     /ncRNA_class="other"
+                     /product="T01C8.11"
+                     /db_xref="WormBase:T01C8.11"
+                     /db_xref="WormBase:WBGene00202374"
+     misc_feature    complement(17910..17911)
+                     /note="SL1 trans-splice acceptor; see cm20g8.5"
+     misc_feature    complement(17910..17911)
+                     /note="SL2 defined by RNASeq short reads (Hillier et al.);
+                     see RNASeq_Hillier.L1_larva"
+     misc_feature    20870..20871
+                     /note="SL1 trans-splice acceptor; see yk1146c08.5"
+     misc_feature    20870..20871
+                     /note="SL2 defined by RNASeq short reads (Hillier et al.);
+                     see RNASeq_Hillier.dauer_entry_daf-2"
      gene            20873..27634
-                     /gene="T01C8.1"
-                     /note="for a graphical representation of this gene see:
-                     ttp://www.wormbase.org/db/seq/sequence?name=T01C8.1a;clas
-                     s=Sequence"
+                     /gene="aak-2"
+                     /locus_tag="T01C8.1"
+                     /db_xref="WormBase:WBGene00020142"
      CDS             join(20873..21015,24491..24654,24830..25298,25473..25591,
                      25817..25922,26012..26117,26167..26374,26476..26787,
                      27198..27349,27533..27634)
-                     /product="Hypothetical protein T01C8.1b"
-                     /gene="T01C8.1"
-                     /protein_id="AAM69096.1"
+                     /gene="aak-2"
+                     /locus_tag="T01C8.1"
+                     /standard_name="T01C8.1b"
+                     /note="contains similarity to Pfam domains PF07714
+                     (Protein tyrosine kinase), PF00069 (Protein kinase
+                     domain); coded for by the following C. elegans cDNAs:
+                     OSTF004G3_1, OSTR004G3_1, yk114d1.5, yk133b5.5, yk222d7.5,
+                     yk273e10.5, yk298g7.5, yk390b1.5, yk443g12.5, yk507b7.5,
+                     yk607a4.5, yk652d12.5, yk677a2.5, yk848d05.3, yk1005g04.3,
+                     yk1005g04.5, yk1146c08.3, yk1146c08.5, yk1235g04.3,
+                     yk1235g04.5, yk1251g04.3, yk1251g04.5, yk848d05.5,
+                     yk1552h06.3, yk1625b07.3, yk237e11.5, MM454_contig01620"
                      /codon_start=1
+                     /product="Amp-activated kinase protein 2, isoform b,
+                     confirmed by transcript evidence"
+                     /protein_id="AAM69096.1"
+                     /db_xref="GI:21629470"
+                     /db_xref="WormBase:T01C8.1b"
+                     /db_xref="WormBase:WBGene00020142"
                      /translation="MFSHQDRDRDRKEDGGGDGTEMKSKSRSQPSGLNRVKNLSRKLS
                      AKSRKERKDRDSTDNSSKMSSPGGETSTKQQQELKAQIKIGHYILKETLGVGTFGKVK
                      VGIHETTQYKVAVKILNRQKIKSLDVVGKIRREIQNLSLFRHPHIIRLYQVISTPSDI
@@ -183,16 +317,31 @@ FEATURES             Location/Qualifiers
                      APAADPPKMSLQLYQVDQRSYLLDFKSLADEESGSASASSSRHASMSMPQKPAGIRGT
                      RTSSMPQAMSMEASIEKMEVHDFSDMSCDVTPPPSPGGAKLSQTMQFFEICAALIGTL
                      AR"
-                     /db_xref="GI:21629470"
-                     /note="coded for by the following C. elegans cDNAs:
-                     yk237e11.5"
      CDS             join(20873..21015,24491..24654,24830..25298,25473..25591,
                      25817..25922,26012..26117,26173..26374,26476..26787,
                      27198..27349,27533..27634)
-                     /product="Hypothetical protein T01C8.1a"
-                     /gene="T01C8.1"
-                     /protein_id="AAM69095.1"
+                     /gene="aak-2"
+                     /locus_tag="T01C8.1"
+                     /standard_name="T01C8.1a"
+                     /note="contains similarity to Pfam domains PF07714
+                     (Protein tyrosine kinase), PF00069 (Protein kinase
+                     domain); coded for by the following C. elegans cDNAs:
+                     OSTF004G3_1, OSTR004G3_1, yk114d1.5, yk133b5.5, yk222d7.5,
+                     yk273e10.5, yk298g7.5, yk390b1.5, yk402f12.5, yk443g12.5,
+                     yk507b7.5, yk607a4.5, yk617g6.5, yk652d12.5, yk677a2.5,
+                     yk848d05.3, yk1005g04.3, yk1005g04.5, yk1146c08.3,
+                     yk1146c08.5, yk1235g04.3, yk1235g04.5, yk1251g04.3,
+                     yk1251g04.5, yk848d05.5, yk1552h06.3, yk1625b07.3,
+                     yk114d1.3, yk133b5.3, yk222d7.3, yk273e10.3, yk390b1.3,
+                     yk402f12.3, yk607a4.3, yk617g6.3, yk652d12.3, yk677a2.3,
+                     yk1552h06.5, yk1625b07.5, AY347273, MM454_contig01620"
                      /codon_start=1
+                     /product="Amp-activated kinase protein 2, isoform a,
+                     confirmed by transcript evidence"
+                     /protein_id="AAM69095.1"
+                     /db_xref="GI:21629469"
+                     /db_xref="WormBase:T01C8.1a"
+                     /db_xref="WormBase:WBGene00020142"
                      /translation="MFSHQDRDRDRKEDGGGDGTEMKSKSRSQPSGLNRVKNLSRKLS
                      AKSRKERKDRDSTDNSSKMSSPGGETSTKQQQELKAQIKIGHYILKETLGVGTFGKVK
                      VGIHETTQYKVAVKILNRQKIKSLDVVGKIRREIQNLSLFRHPHIIRLYQVISTPSDI
@@ -205,49 +354,93 @@ FEATURES             Location/Qualifiers
                      AADPPKMSLQLYQVDQRSYLLDFKSLADEESGSASASSSRHASMSMPQKPAGIRGTRT
                      SSMPQAMSMEASIEKMEVHDFSDMSCDVTPPPSPGGAKLSQTMQFFEICAALIGTLAR
                      "
-                     /db_xref="GI:21629469"
-                     /note="strong similarity to 5'-AMP-activated protein
-                     kinase; coded for by the following C. elegans cDNAs:
-                     yk443g12.5, yk298g7.5, yk273e10.5, yk390b1.5, yk114d1.3,
-                     yk114d1.5, yk133b5.3, yk133b5.5, yk222d7.3, yk222d7.5,
-                     yk273e10.3, yk390b1.3, yk402f12.3, yk402f12.5"
-     gene            complement(28176..31889)
+     gene            complement(21899..21958)
+                     /locus_tag="T01C8.9"
+                     /db_xref="WormBase:WBGene00199326"
+     ncRNA           complement(21899..21958)
+                     /locus_tag="T01C8.9"
+                     /ncRNA_class="other"
+                     /product="T01C8.9"
+                     /db_xref="WormBase:T01C8.9"
+                     /db_xref="WormBase:WBGene00199326"
+     misc_feature    24490..24491
+                     /gene="aak-2"
+                     /locus_tag="T01C8.1"
+                     /note="SL1 trans-splice acceptor; see yk848d05.5"
+     misc_feature    24490..24491
+                     /gene="aak-2"
+                     /locus_tag="T01C8.1"
+                     /note="SL2 defined by RNASeq short reads (Hillier et al.);
+                     see RNASeq_Hillier.L1_larva"
+     CDS             join(24534..24654,24830..25298,25473..25591,25817..25922,
+                     26012..26117,26173..26374,26476..26787,27198..27349,
+                     27533..27634)
+                     /gene="aak-2"
+                     /locus_tag="T01C8.1"
+                     /standard_name="T01C8.1c"
+                     /note="contains similarity to Pfam domains PF07714
+                     (Protein tyrosine kinase), PF00069 (Protein kinase
+                     domain); coded for by the following C. elegans cDNAs:
+                     OSTF004G3_1, OSTR004G3_1, yk114d1.5, yk133b5.5, yk222d7.5,
+                     yk273e10.5, yk298g7.5, yk390b1.5, yk402f12.5, yk443g12.5,
+                     yk507b7.5, yk607a4.5, yk617g6.5, yk652d12.5, yk677a2.5,
+                     yk848d05.3, yk848d05.5, yk1005g04.3, yk1005g04.5,
+                     yk1146c08.3, yk1146c08.5, yk1235g04.3, yk1235g04.5,
+                     yk1251g04.3, yk1251g04.5, yk1552h06.3, yk1552h06.5,
+                     yk1625b07.3, yk1625b07.5, FN880253, MM454_contig01620"
+                     /codon_start=1
+                     /product="Amp-activated kinase protein 2, isoform c,
+                     confirmed by transcript evidence"
+                     /protein_id="AAP13770.1"
+                     /db_xref="GI:30025106"
+                     /db_xref="WormBase:T01C8.1c"
+                     /db_xref="WormBase:WBGene00020142"
+                     /translation="MSSPGGETSTKQQQELKAQIKIGHYILKETLGVGTFGKVKVGIH
+                     ETTQYKVAVKILNRQKIKSLDVVGKIRREIQNLSLFRHPHIIRLYQVISTPSDIFMIM
+                     EHVSGGELFDYIVKHGRLKTAEARRFFQQIISGVDYCHRHMVVHRDLKPENLLLDEQN
+                     NVKIADFGLSNIMTDGDFLRTSCGSPNYAAPEVISGKLYAGPEVDVWSCGVILYALLC
+                     GTLPFDDEHVPSLFRKIKSGVFPTPDFLERPIVNLLHHMLCVDPMKRATIKDVIAHEW
+                     FQKDLPNYLFPPINESEASIVDIEAVREVTERYHVAEEEVTSALLGDDPHHHLSIAYN
+                     LIVDNKRIADETAKLSIEEFYQVTPNKGPGPVHRHPERIAASVSSKITPTLDNTEASG
+                     ANRNKRAKWHLGIRSQSRPEDIMFEVFRAMKQLDMEWKVLNPYHVIVRRKPDAPAADP
+                     PKMSLQLYQVDQRSYLLDFKSLADEESGSASASSSRHASMSMPQKPAGIRGTRTSSMP
+                     QAMSMEASIEKMEVHDFSDMSCDVTPPPSPGGAKLSQTMQFFEICAALIGTLAR"
+     gene            complement(28176..31898)
                      /gene="mec-4"
-                     /note="for a graphical representation of this gene see:
-                     ttp://www.wormbase.org/db/seq/sequence?name=T01C8.7;class
-                     =Sequence"
-     CDS             join(complement(28176..28361),complement(28501..28576),
-                     complement(28625..28753),complement(28811..28871),
-                     complement(28916..29030),complement(29154..29249),
-                     complement(29301..29473),complement(29567..29655),
-                     complement(29698..29855),complement(29903..30051),
-                     complement(30149..30309),complement(30526..30637),
-                     complement(30690..31052),complement(31100..31355),
-                     complement(31716..31889))
-                     /product="C. elegans MEC-4 protein (corresponding
-                     sequence T01C8.7)"
+                     /locus_tag="T01C8.7"
+                     /db_xref="WormBase:WBGene00003168"
+     CDS             complement(join(28176..28361,28501..28576,28625..28753,
+                     28811..28871,28916..29030,29154..29249,29301..29473,
+                     29567..29655,29698..29855,29903..30051,30149..30309,
+                     30526..30637,30690..31052,31100..31355,31716..31898))
                      /gene="mec-4"
-                     /protein_id="AAB00580.2"
+                     /locus_tag="T01C8.7"
+                     /standard_name="T01C8.7"
+                     /note="contains similarity to Pfam domain PF00858
+                     (Amiloride-sensitive sodium channel); coded for by the
+                     following C. elegans cDNAs: yk411c2.3, yk411c2.5,
+                     yk1105a08.3, yk1105a08.5, EC002941, RST5_376858, FM864873"
                      /codon_start=1
-                     /translation="MQNLKNYQHLRDPSEYMSQVYGDPLAYLQETTKFVTEREYYEDF
-                     GYGECFNSTESEVQCELITGEFDPKLLPYDKRLAWHFKEFCYKTSAHGIPMIGEAPNV
-                     YYRAVWVVLFLGCMIMLYLNAQSVLDKYNRNEKIVDIQLKFDTAPFPAITLCNLNPYK
-                     ASLATSVDLVKRTLSAFDGAMGKAGGNKDHEEEREVVTEPPTTPAPTTKPARRRGKRD
-                     LSGAFFEPGFARCLCGSQGSSEQEDKDEEKEEELLETTTKKVFNINDADEEWDGMEEY
-                     DNEHYENYDVEATTGMNMMEECQSERTKFDEPTGFDDRCICAFDRSTHDAWPCFLNGT
-                     WETTECDTCNEHAFCTKDNKTAKGHRSPCICAPSRFCVAYNGKTPPIEIWTYLQGGTP
-                     TEDPNFLEAMGFQGMTDEVAIVTKAKENIMFAMATLSMQDRERLSTTKRELVHKCSFN
-                     GKACDIEADFLTHIDPAFGSCFTFNHNRTVNLTSIRAGPMYGLRMLVYVNASDYMPTT
-                     EATGVRLTIHDKEDFPFPDTFGYSAPTGYVSSFGLRLRKMSRLPAPYGDCVPDGKTSD
-                     YIYSNYEYSVEGCYRSCFQQLVLKECRCGDPRFPVPENARHCDAADPIARKCLDARMN
-                     DLGGLHGSFRCRCQQPCRQSIYSVTYSPAKWPSLSLQIQLGSCNGTAVECNKHYKENG
-                     AMVEVFYEQLNFEMLTESEAYGFVNLLADFGGQLGLWCGISFLTCCEFVFLFLETAYM
-                     SAEHNYSLYKKKKAEKAKKIASGSF"
-                     /db_xref="GI:15011790"
-                     /note="C. elegans mechanosensory protein 4 (PIR:S13645);
-                     coded for by the following C. elegans cDNAs: yk411c2.3,
-                     yk411c2.5"
-BASE COUNT    10115 a   5759 c   5657 g  10400 t
+                     /product="Mechanosensory abnormality protein 4, partially
+                     confirmed by transcript evidence"
+                     /protein_id="AAB00580.3"
+                     /db_xref="GI:74356167"
+                     /db_xref="WormBase:T01C8.7"
+                     /db_xref="WormBase:WBGene00003168"
+                     /translation="MSWMQNLKNYQHLRDPSEYMSQVYGDPLAYLQETTKFVTEREYY
+                     EDFGYGECFNSTESEVQCELITGEFDPKLLPYDKRLAWHFKEFCYKTSAHGIPMIGEA
+                     PNVYYRAVWVVLFLGCMIMLYLNAQSVLDKYNRNEKIVDIQLKFDTAPFPAITLCNLN
+                     PYKASLATSVDLVKRTLSAFDGAMGKAGGNKDHEEEREVVTEPPTTPAPTTKPARRRG
+                     KRDLSGAFFEPGFARCLCGSQGSSEQEDKDEEKEEELLETTTKKVFNINDADEEWDGM
+                     EEYDNEHYENYDVEATTGMNMMEECQSERTKFDEPTGFDDRCICAFDRSTHDAWPCFL
+                     NGTWETTECDTCNEHAFCTKDNKTAKGHRSPCICAPSRFCVAYNGKTPPIEIWTYLQG
+                     GTPTEDPNFLEAMGFQGMTDEVAIVTKAKENIMFAMATLSMQDRERLSTTKRELVHKC
+                     SFNGKACDIEADFLTHIDPAFGSCFTFNHNRTVNLTSIRAGPMYGLRMLVYVNASDYM
+                     PTTEATGVRLTIHDKEDFPFPDTFGYSAPTGYVSSFGLRLRKMSRLPAPYGDCVPDGK
+                     TSDYIYSNYEYSVEGCYRSCFQQLVLKECRCGDPRFPVPENARHCDAADPIARKCLDA
+                     RMNDLGGLHGSFRCRCQQPCRQSIYSVTYSPAKWPSLSLQIQLGSCNGTAVECNKHYK
+                     ENGAMVEVFYEQLNFEMLTESEAYGFVNLLADFGGQLGLWCGISFLTCCEFVFLFLET
+                     AYMSAEHNYSLYKKKKAEKAKKIASGSF"
 ORIGIN      
         1 gatcaaaacc caaaaaaaaa tttcattcaa aaatttggtt ctttcttaca agcaaaatgc
        61 gaggaatagg tgagaaggaa ctgagactga aactaaaaat ttgtgaatag aaactaaaaa
@@ -781,5 +974,5 @@ ORIGIN
     31741 aaacattcgc cataaccaaa atcttcataa tattctcttt ctgtcacaaa tttagtcgtc
     31801 tcttgtaagt acgctaacgg gtctccataa acctgggaca tgtactcgga tgggtcccga
     31861 aggtgttggt agtttttcag gttttgcatc catgacattc tataacttga tagcgataaa
-    31921 aaaaatagca t 
+    31921 aaaaatagca t
 //
diff --git a/t/data/cmsearch.multi.out b/t/data/cmsearch.multi.out
new file mode 100644
index 0000000..b552b67
--- /dev/null
+++ b/t/data/cmsearch.multi.out
@@ -0,0 +1,243 @@
+# cmsearch :: search CM(s) against a sequence database
+# INFERNAL 1.1.1 (July 2014)
+# Copyright (C) 2014 Howard Hughes Medical Institute.
+# Freely distributed under the GNU General Public License (GPLv3).
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+# query CM file:                         multimodel.c.cm
+# target sequence database:              multiseqs.fa
+# number of worker threads:              4
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+Query:       tRNA5  [CLEN=72]
+Hit scores:
+ rank     E-value  score  bias  sequence        start    end   mdl trunc   gc  description
+ ----   --------- ------ -----  -------------- ------ ------   --- ----- ----  -----------
+  (1) !   2.9e-21   71.5   0.0  mrum-tRNA.1         1     72 +  cm    no 0.50  -
+  (2) !     2e-20   68.8   0.0  mrum-tRNA.2         1     73 +  cm    no 0.67  -
+  (3) !   6.1e-19   64.1   0.0  mrum-tRNA.3         1     74 +  cm    no 0.59  -
+  (4) !     2e-18   62.5   0.0  mrum-tRNA.4         1     75 +  cm    no 0.61  -
+  (5) !   2.1e-18   62.4   0.0  AAGA01015927.1    229    302 +  cm    no 0.62  Metagenome sequence AHAI1002.g1, whole genome shotgun sequence
+  (6) !   3.6e-18   61.7   0.0  mrum-tRNA.5         1     74 +  cm    no 0.53  -
+  (7) !   2.2e-17   59.2   0.0  mrum-tRNA.6         1     73 +  cm    no 0.51  -
+  (8) !   2.2e-17   59.2   0.0  mrum-tRNA.7         1     75 +  cm    no 0.60  -
+  (9) !   2.4e-17   59.1   0.0  mrum-tRNA.8         1     74 +  cm    no 0.59  -
+ (10) !   2.7e-17   58.9   0.0  mrum-tRNA.9         1    110 +  cm    no 0.61  -
+ (11) !   8.7e-17   57.3   0.0  mrum-tRNA.10        1     72 +  cm    no 0.42  -
+ (12) !   1.4e-15   53.5   0.0  AAGA01015927.1    314    386 +  cm    no 0.59  Metagenome sequence AHAI1002.g1, whole genome shotgun sequence
+
+
+Hit alignments:
+>> mrum-tRNA.1  
+ rank     E-value  score  bias mdl mdl from   mdl to       seq from      seq to       acc trunc   gc
+ ----   --------- ------ ----- --- -------- --------    ----------- -----------      ---- ----- ----
+  (1) !   2.9e-21   71.5   0.0  cm        1       72 []           1          72 + [] 1.00    no 0.50
+
+                   v                                             v             v     v    NC
+                 (((((((,,<<<<_______>>>>,<<<<<_______>>>>>,,,,,<<<<<_______>>>>>))))))): CS
+        tRNA5  1 gCcggcAUAGcgcAgUGGuAgcgCgccagccUgucAagcuggAGgUCCgggGUUCGAUUCcccGUgccgGca 72
+                 G: G::AUAGC:CA+UGG AG:GCG:::G:CUG+CA :C:::AGGU : GGGUUCGAUUCCC :U::C :CA
+  mrum-tRNA.1  1 GGAGCUAUAGCUCAAUGGCAGAGCGUUUGGCUGACAUCCAAAAGGUUAUGGGUUCGAUUCCCUUUAGCCCCA 72
+                 ************************************************************************ PP
+
+>> mrum-tRNA.2  
+ rank     E-value  score  bias mdl mdl from   mdl to       seq from      seq to       acc trunc   gc
+ ----   --------- ------ ----- --- -------- --------    ----------- -----------      ---- ----- ----
+  (2) !     2e-20   68.8   0.0  cm        1       72 []           1          73 + [] 1.00    no 0.67
+
+                                                                                           NC
+                 (((((((,,<<<<___.____>>>>,<<<<<_______>>>>>,,,,,<<<<<_______>>>>>))))))): CS
+        tRNA5  1 gCcggcAUAGcgcAgU.GGuAgcgCgccagccUgucAagcuggAGgUCCgggGUUCGAUUCcccGUgccgGca 72
+                 G::::C UAGC:CAGU GG AG:GCGC:::CCU+ CAAG:::GAGG CC:GGGUUC A UCCC:G G::::CA
+  mrum-tRNA.2  1 GGGCCCGUAGCUCAGUuGGGAGAGCGCUGCCCUUGCAAGGCAGAGGCCCCGGGUUCAAAUCCCGGUGGGUCCA 73
+                 ************************************************************************* PP
+
+>> mrum-tRNA.3  
+ rank     E-value  score  bias mdl mdl from   mdl to       seq from      seq to       acc trunc   gc
+ ----   --------- ------ ----- --- -------- --------    ----------- -----------      ---- ----- ----
+  (3) !   6.1e-19   64.1   0.0  cm        1       72 []           1          74 + [] 1.00    no 0.59
+
+                                                                                            NC
+                 (((((((,,<<<<___..____>>>>,<<<<<_______>>>>>,,,,,<<<<<_______>>>>>))))))): CS
+        tRNA5  1 gCcggcAUAGcgcAgU..GGuAgcgCgccagccUgucAagcuggAGgUCCgggGUUCGAUUCcccGUgccgGca 72
+                 G::::CAUAGC::AG   GGUA::GCGC :G:CU + AA:C: GA GUC::GGGUUCGA UCCC::UG::::CA
+  mrum-tRNA.3  1 GGGCCCAUAGCUUAGCcaGGUAGAGCGCUCGGCUCAUAACCGGGAUGUCAUGGGUUCGAAUCCCAUUGGGCCCA 74
+                 ************************************************************************** PP
+
+>> mrum-tRNA.4  
+ rank     E-value  score  bias mdl mdl from   mdl to       seq from      seq to       acc trunc   gc
+ ----   --------- ------ ----- --- -------- --------    ----------- -----------      ---- ----- ----
+  (4) !     2e-18   62.5   0.0  cm        1       72 []           1          75 + [] 1.00    no 0.61
+
+                            v            v                                                   NC
+                 (((((((,,<<<<___..___._>>>>,<<<<<_______>>>>>,,,,,<<<<<_______>>>>>))))))): CS
+        tRNA5  1 gCcggcAUAGcgcAgU..GGu.AgcgCgccagccUgucAagcuggAGgUCCgggGUUCGAUUCcccGUgccgGca 72
+                 :::::::U+GC CAG   GGU AG GCGC::G:CUG+ AA:C::GAGGUCC:GGGUUCGA UCCC:G:::::::A
+  mrum-tRNA.4  1 AGGCUAGUGGCACAGCcuGGUcAGCGCGCACGGCUGAUAACCGUGAGGUCCUGGGUUCGAAUCCCAGCUAGCCUA 75
+                 ***************999********************************************************* PP
+
+>> AAGA01015927.1  Metagenome sequence AHAI1002.g1, whole genome shotgun sequence
+ rank     E-value  score  bias mdl mdl from   mdl to       seq from      seq to       acc trunc   gc
+ ----   --------- ------ ----- --- -------- --------    ----------- -----------      ---- ----- ----
+  (5) !   2.1e-18   62.4   0.0  cm        1       72 []         229         302 + .. 1.00    no 0.62
+
+                                                                                                NC
+                     (((((((,,<<<<___.___._>>>>,<<<<<_______>>>>>,,,,,<<<<<_______>>>>>))))))): CS
+           tRNA5   1 gCcggcAUAGcgcAgU.GGu.AgcgCgccagccUgucAagcuggAGgUCCgggGUUCGAUUCcccGUgccgGca 72 
+                     G::::::UA:::CAGU GGU AG:::+CC:GCCUGUCA+GC:GG GGU  :GGGUUCGA UCCC: ::::::C+
+  AAGA01015927.1 229 GGAGCGGUAGUUCAGUcGGUuAGAAUACCUGCCUGUCACGCAGGGGGUUGCGGGUUCGAGUCCCGUCCGUUCCG 302
+                     ************************************************************************** PP
+
+>> mrum-tRNA.5  
+ rank     E-value  score  bias mdl mdl from   mdl to       seq from      seq to       acc trunc   gc
+ ----   --------- ------ ----- --- -------- --------    ----------- -----------      ---- ----- ----
+  (6) !   3.6e-18   61.7   0.0  cm        1       72 []           1          74 + [] 1.00    no 0.53
+
+                                                                                            NC
+                 (((((((,,<<<<___..____>>>>,<<<<<_______>>>>>,,,,,<<<<<_______>>>>>))))))): CS
+        tRNA5  1 gCcggcAUAGcgcAgU..GGuAgcgCgccagccUgucAagcuggAGgUCCgggGUUCGAUUCcccGUgccgGca 72
+                 :CCG:C:UAGC:CA+U  GG AG:GCG:::G:CUGU++A:C:::A GU :::GGUUC A UCC::::G:CGG:A
+  mrum-tRNA.5  1 CCCGACUUAGCUCAAUuuGGCAGAGCGUUGGACUGUAGAUCCAAAUGUUGCUGGUUCAAGUCCGGCAGUCGGGA 74
+                 ************************************************************************** PP
+
+>> mrum-tRNA.6  
+ rank     E-value  score  bias mdl mdl from   mdl to       seq from      seq to       acc trunc   gc
+ ----   --------- ------ ----- --- -------- --------    ----------- -----------      ---- ----- ----
+  (7) !   2.2e-17   59.2   0.0  cm        1       72 []           1          73 + [] 1.00    no 0.51
+
+                                                                                            NC
+                 (((((((,,<<<<___.___._>>>>,<<<<<_______>>>>>,,,,,<<<<<_______>>>>>))))))): CS
+        tRNA5  1 gCcggcAUAGcgcAgU.GGu.AgcgCgccagccUgucAagcuggAGgUCCgggGUUCGAUUCcccGUgccgGca 72
+                 GC::::AU+G G:A+U GG  A:C C+:C:G:CU+UC+A:C:G:  +  C:GGGUUC A UCCC:GU::::GCA
+  mrum-tRNA.6  1 GCUUCUAUGGGGUAAUcGGCaAACCCAUCGGACUUUCGAUCCGAUAA-UCCGGGUUCAAAUCCCGGUAGAAGCA 73
+                 ***********************************************.9************************* PP
+
+>> mrum-tRNA.7  
+ rank     E-value  score  bias mdl mdl from   mdl to       seq from      seq to       acc trunc   gc
+ ----   --------- ------ ----- --- -------- --------    ----------- -----------      ---- ----- ----
+  (8) !   2.2e-17   59.2   0.0  cm        1       72 []           1          75 + [] 0.99    no 0.60
+
+                                                                                              NC
+                 (((((((,,<<<<___..___.._>>>>,<<<<<_______>>>>>,,,,,<<<<<_______>>>>>))))))): CS
+        tRNA5  1 gCcggcAUAGcgcAgU..GGu..AgcgCgccagccUgucAagcuggAGgUCCgggGUUCGAUUCcccGUgccgGca 72
+                 GC::::AU+::G:AGU  GG   A:C:: :C:GCCU+UC+AGC:G:AG+ C :GGGUUCGA UCCC: U::::GCA
+  mrum-tRNA.7  1 GCUCCGAUGGUGUAGUccGGCcaAUCAUUUCGGCCUUUCGAGCCGAAGA-CUCGGGUUCGAAUCCCGGUCGGAGCA 75
+                 ********************9999*************************.************************** PP
+
+>> mrum-tRNA.8  
+ rank     E-value  score  bias mdl mdl from   mdl to       seq from      seq to       acc trunc   gc
+ ----   --------- ------ ----- --- -------- --------    ----------- -----------      ---- ----- ----
+  (9) !   2.4e-17   59.1   0.0  cm        1       72 []           1          74 + [] 1.00    no 0.59
+
+                             v          v                                                    NC
+                 (((((((,,<<<<___..___._>>>>,<<<<<_______>>>>>,,,,,<<<<<_______>>>>>))))))): CS
+        tRNA5  1 gCcggcAUAGcgcAgU..GGu.AgcgCgccagccUgucAagcuggAGgUCCgggGUUCGAUUCcccGUgccgGca 72
+                 GC:G:::UAG:: AG   GGU A ::C C:A:CCUG CA+G:U:GAG+ CC:GGGUUC A UCCC:G:::C:GCA
+  mrum-tRNA.8  1 GCGGUGUUAGUCCAGCcuGGUuAAGACUCUAGCCUGCCACGUUAGAGA-CCCGGGUUCAAAUCCCGGACGCCGCA 74
+                 ***************999******************************.************************** PP
+
+>> mrum-tRNA.9  
+ rank     E-value  score  bias mdl mdl from   mdl to       seq from      seq to       acc trunc   gc
+ ----   --------- ------ ----- --- -------- --------    ----------- -----------      ---- ----- ----
+ (10) !   2.7e-17   58.9   0.0  cm        1       72 []           1         110 + [] 0.98    no 0.61
+
+                                                                                               NC
+                  (((((((,,<<<<___.___._>>>>,<<<<<___~~~~~~>>>>>,,,,,<<<<<_______>>>>>))))))): CS
+        tRNA5   1 gCcggcAUAGcgcAgU.GGu.AgcgCgccagccUg*[ 4]*gcuggAGgUCCgggGUUCGAUUCcccGUgccgGca 72 
+                  GCCGG::U+GC:CAG  GGU AG:GCGC::G:CU       :C::GAG+UC::GGGUUCGA UCCC::::CCGGCA
+  mrum-tRNA.9   1 GCCGGGGUGGCUCAGCuGGUuAGAGCGCACGGCUC*[40]*CCGUGAGAUCGCGGGUUCGAAUCCCGCCCCCGGCA 110
+                  ********************************995...*..*********************************** PP
+
+>> mrum-tRNA.10  
+ rank     E-value  score  bias mdl mdl from   mdl to       seq from      seq to       acc trunc   gc
+ ----   --------- ------ ----- --- -------- --------    ----------- -----------      ---- ----- ----
+ (11) !   8.7e-17   57.3   0.0  cm        1       72 []           1          72 + [] 1.00    no 0.42
+
+                                            v               v                               NC
+                  (((((((,,<<<<___.____>>>>,<<<<<_______>>>>>,,,,,<<<<<_______>>>>>))))))): CS
+         tRNA5  1 gCcggcAUAGcgcAgU.GGuAgcgCgccagccUgucAagcuggAGgUCCgggGUUCGAUUCcccGUgccgGca 72
+                  G:::::AUAG:::A+  GGUA:::C+ C G:CUGU AA:C G AG+  :G :GUUCGA UC: C:U:::::C+
+  mrum-tRNA.10  1 GGUUCUAUAGUUUAACaGGUAAAACAACUGGCUGUUAACCGGCAGA-UAGGAGUUCGAAUCUUCUUAGAACCG 72
+                  **********************************************.9************************* PP
+
+>> AAGA01015927.1  Metagenome sequence AHAI1002.g1, whole genome shotgun sequence
+ rank     E-value  score  bias mdl mdl from   mdl to       seq from      seq to       acc trunc   gc
+ ----   --------- ------ ----- --- -------- --------    ----------- -----------      ---- ----- ----
+ (12) !   1.4e-15   53.5   0.0  cm        1       72 []         314         386 + .. 1.00    no 0.59
+
+                                                                                               NC
+                     (((((((,,<<<<___.____>>>>,<<<<<_______>>>>>,,,,,<<<<<_______>>>>>))))))): CS
+           tRNA5   1 gCcggcAUAGcgcAgU.GGuAgcgCgccagccUgucAagcuggAGgUCCgggGUUCGAUUCcccGUgccgGca 72 
+                     :::GGC:UAG :CA+U GGUAG: C+CC:G:CU  +AA:C:GG  GU : G:GUUCGA UC:C ::GCC:::+
+  AAGA01015927.1 314 AGGGGCGUAGUUCAAUuGGUAGAGCACCGGUCUCCAAAACCGGGUGUUGGGAGUUCGAGUCUCUCCGCCCCUG 386
+                     ************************************************************************* PP
+
+
+
+Internal CM pipeline statistics summary:
+----------------------------------------
+Query model(s):                                                  1  (72 consensus positions)
+Target sequences:                                               13  (12958 residues searched)
+Target sequences re-searched for truncated hits:                13  (5412 residues re-searched)
+Windows   passing  local HMM SSV           filter:              81  (0.3848); expected (0.35)
+Windows   passing  local HMM Viterbi       filter:                  (off)
+Windows   passing  local HMM Viterbi  bias filter:                  (off)
+Windows   passing  local HMM Forward       filter:              50  (0.2035); expected (0.02)
+Windows   passing  local HMM Forward  bias filter:              48  (0.195); expected (0.02)
+Windows   passing glocal HMM Forward       filter:              42  (0.1794); expected (0.02)
+Windows   passing glocal HMM Forward  bias filter:              42  (0.1794); expected (0.02)
+Envelopes passing glocal HMM envelope defn filter:              43  (0.1724); expected (0.02)
+Envelopes passing  local CM  CYK           filter:              40  (0.1612); expected (0.0001)
+Total CM hits reported:                                         12  (0.05003); includes 0 truncated hit(s)
+
+# CPU time: 0.42u 0.01s 00:00:00.43 Elapsed: 00:00:00.44
+//
+Query:       Cobalamin  [CLEN=191]
+Accession:   RF00174
+Description: Cobalamin riboswitch
+Hit scores:
+ rank     E-value  score  bias  sequence        start    end   mdl trunc   gc  description
+ ----   --------- ------ -----  -------------- ------ ------   --- ----- ----  -----------
+  (1) !   1.4e-08   30.0   0.0  AAFY01022046.1    934    832 -  cm    5' 0.48  Metagenome sequence AGZO15064.g2, whole genome shotgun sequence
+
+
+Hit alignments:
+>> AAFY01022046.1  Metagenome sequence AGZO15064.g2, whole genome shotgun sequence
+ rank     E-value  score  bias mdl mdl from   mdl to       seq from      seq to       acc trunc   gc
+ ----   --------- ------ ----- --- -------- --------    ----------- -----------      ---- ----- ----
+  (1) !   1.4e-08   30.0   0.0  cm       32      191 ~]         934         832 - ~. 0.92    5' 0.48
+
+                                 ???              v           v      v    v                                     ???? NC
+                     ~~~~~~______>>>,,,,,(((,,,<.<<<<_______>>>>>,,<<<____>>>,<<<---<<<<~~~~~~>>>>---->>>,,,,)))]]]] CS
+       Cobalamin   1 <[31]*agugaaggguuAAaaGGGAAc.ccGGUGaaAaUCCgggGCuGcCCCCgCaACuGUAAgcGg*[61]*cCgcgAGcCaGGAGACCuGCCa 174
+                             +G+     + AA: GGAA: : GGUG AAAUCC ::+C:G CCC  C:ACUGUAA:C:        :G:+AG+CAG A AC :  C 
+  AAFY01022046.1 934 <[ 0]*GUAGGCAAAAGGAAGAGGAAGgAUGGUGGAAAUCCUUCACGGGCCCGGCCACUGUAACCAG*[ 4]*UUGGAAGUCAG-AUACUCUUCU 849
+                     ......44455566666899******989************************************97...7..79*********.9********* PP
+
+                     ??                NC
+                     ]]::::::::::::::: CS
+       Cobalamin 175 ucaguuuuugaaucucc 191
+                       ++++   GAA+CU C
+  AAFY01022046.1 848 AUUAAGGCGGAAACUAC 832
+                     ***************** PP
+
+
+
+Internal CM pipeline statistics summary:
+----------------------------------------
+Query model(s):                                                  1  (191 consensus positions)
+Target sequences:                                               13  (12958 residues searched)
+Target sequences re-searched for truncated hits:                13  (10152 residues re-searched)
+Windows   passing  local HMM SSV           filter:              10  (0.207); expected (0.35)
+Windows   passing  local HMM Viterbi       filter:                  (off)
+Windows   passing  local HMM Viterbi  bias filter:                  (off)
+Windows   passing  local HMM Forward       filter:               2  (0.03116); expected (0.02)
+Windows   passing  local HMM Forward  bias filter:               2  (0.03116); expected (0.02)
+Windows   passing glocal HMM Forward       filter:               1  (0.01558); expected (0.02)
+Windows   passing glocal HMM Forward  bias filter:               1  (0.01558); expected (0.02)
+Envelopes passing glocal HMM envelope defn filter:               1  (0.008784); expected (0.02)
+Envelopes passing  local CM  CYK           filter:               1  (0.005712); expected (0.0001)
+Total CM hits reported:                                          1  (0.008914); includes 1 truncated hit(s)
+
+# CPU time: 0.16u 0.01s 00:00:00.17 Elapsed: 00:00:00.17
+//
+[ok]
diff --git a/t/data/cmsearch.nohit.out b/t/data/cmsearch.nohit.out
new file mode 100644
index 0000000..4bac084
--- /dev/null
+++ b/t/data/cmsearch.nohit.out
@@ -0,0 +1,44 @@
+# cmsearch :: search CM(s) against a sequence database
+# INFERNAL 1.1.1 (July 2014)
+# Copyright (C) 2014 Howard Hughes Medical Institute.
+# Freely distributed under the GNU General Public License (GPLv3).
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+# query CM file:                         Cobalamin.c.cm
+# target sequence database:              mrum-tRNAs10.fa
+# number of worker threads:              4
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+Query:       Cobalamin  [CLEN=191]
+Accession:   RF00174
+Description: Cobalamin riboswitch
+Hit scores:
+ rank     E-value  score  bias  sequence  start    end   mdl trunc   gc  description
+ ----   --------- ------ -----  -------- ------ ------   --- ----- ----  -----------
+
+   [No hits detected that satisfy reporting thresholds]
+
+
+Hit alignments:
+
+   [No hits detected that satisfy reporting thresholds]
+
+
+Internal CM pipeline statistics summary:
+----------------------------------------
+Query model(s):                                                  1  (191 consensus positions)
+Target sequences:                                               10  (1544 residues searched)
+Target sequences re-searched for truncated hits:                10  (4632 residues re-searched)
+Windows   passing  local HMM SSV           filter:               1  (0.01198); expected (0.35)
+Windows   passing  local HMM Viterbi       filter:                  (off)
+Windows   passing  local HMM Viterbi  bias filter:                  (off)
+Windows   passing  local HMM Forward       filter:               0  (0); expected (0.02)
+Windows   passing  local HMM Forward  bias filter:               0  (0); expected (0.02)
+Windows   passing glocal HMM Forward       filter:               0  (0); expected (0.02)
+Windows   passing glocal HMM Forward  bias filter:               0  (0); expected (0.02)
+Envelopes passing glocal HMM envelope defn filter:               0  (0); expected (0.02)
+Envelopes passing  local CM  CYK           filter:               0  (0); expected (0.0001)
+Total CM hits reported:                                          0  (0); includes 0 truncated hit(s)
+
+# CPU time: 0.01u 0.01s 00:00:00.02 Elapsed: 00:00:00.03
+//
+[ok]
diff --git a/t/data/cmsearch_output.txt b/t/data/cmsearch_output.txt
new file mode 100644
index 0000000..9a1862b
--- /dev/null
+++ b/t/data/cmsearch_output.txt
@@ -0,0 +1,102 @@
+# cmsearch :: search CM(s) against a sequence database
+# INFERNAL 1.1.1 (July 2014)
+# Copyright (C) 2014 Howard Hughes Medical Institute.
+# Freely distributed under the GNU General Public License (GPLv3).
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+# query CM file:                         RF00174.cm
+# target sequence database:              NC_000913.fna
+# CM configuration:                      glocal
+# number of worker threads:              16
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+Query:       Cobalamin  [CLEN=191]
+Accession:   RF00174
+Hit scores:
+ rank     E-value  score  bias  sequence                        start     end   mdl trunc   gc  description
+ ----   --------- ------ -----  ----------------------------- ------- -------   --- ----- ----  -----------
+  (1) !   8.7e-16   98.2   0.0  gi|556503834|ref|NC_000913.3| 4163384 4163574 +  cm    no 0.54  Escherichia coli str. K-12 substr. MG1655, com
+ ------ inclusion threshold ------
+  (2) ?      0.63    8.4   0.0  gi|556503834|ref|NC_000913.3| 4593356 4593565 +  cm    no 0.53  Escherichia coli str. K-12 substr. MG1655, com
+
+
+Hit alignments:
+>> gi|556503834|ref|NC_000913.3|  Escherichia coli str. K-12 substr. MG1655, complete genome
+ rank     E-value  score  bias mdl mdl from   mdl to       seq from      seq to       acc trunc   gc
+ ----   --------- ------ ----- --- -------- --------    ----------- -----------      ---- ----- ----
+  (1) !   8.7e-16   98.2   0.0  cm        1      191 []     4163384     4163574 + .. 0.98    no 0.54
+
+                                                               v              v                                  NC
+                                        :::::::::::::::[[[[[[,<<<____________>>>,,,,,(((,,,<<<<<_______>>>>>,,<< CS
+                      Cobalamin       1 uuaaauugaaacgaugauGGUuccccuuuaaagugaaggguuAAaaGGGAAcccGGUGaaAaUCCgggGCuG 72     
+                                         U +A  ++ +   UG::GGU C : U          : GUUAA AGGGAA:CC:GUG++AAUC:GG:GCUG
+  gi|556503834|ref|NC_000913.3| 4163384 CUGUAGCAUCCACUUGCCGGU-CCUGU----------GAGUUAAUAGGGAAUCCAGUGCGAAUCUGGAGCUG 4163444
+                                        *********************.98888..........99********************************* PP
+
+                                        v    v            v                                                      NC
+                                        <____>>>,<<<---<<<<------<<<<<<-----......<<<-<<<<<<______>>>>>>--->>>>> CS
+                      Cobalamin      73 cCCCCgCaACuGUAAgcGgagagcaccccccAauAa......GCCACUggcccgcaagggccGGGAAGGCgg 138    
+                                          C C CA+C:GUAAG:: AG+ ++::::::  + +      G:CACU::C   +++  G::GGGAAG:C::
+  gi|556503834|ref|NC_000913.3| 4163445 A-CGCGCAGCGGUAAGGAAAGGUGCGAUGAUUGCGUuaugcgGACACUGCC--AUUC--GGUGGGAAGUCAU 4163511
+                                        *.*********************************9***************..5555..************* PP
+
+                                                                v                                       NC
+                                        >>>>----------..........>>>>---->>>,,,,)))]]]]]]::::::::::::::: CS
+                      Cobalamin     139 ggggaaggaaugac..........cCgcgAGcCaGGAGACCuGCCaucaguuuuugaaucucc 191    
+                                        ::::   +A+U+ C           ::C+AGCC:G+AGACCUGCC::C ++  U G AUCU  
+  gi|556503834|ref|NC_000913.3| 4163512 CAUCUCUUAGUAUCuuagauacccCUCCAAGCCCGAAGACCUGCCGGCCAACGUCGCAUCUGG 4163574
+                                        **********9998************************************************* PP
+
+>> gi|556503834|ref|NC_000913.3|  Escherichia coli str. K-12 substr. MG1655, complete genome
+ rank     E-value  score  bias mdl mdl from   mdl to       seq from      seq to       acc trunc   gc
+ ----   --------- ------ ----- --- -------- --------    ----------- -----------      ---- ----- ----
+  (2) ?      0.63    8.4   0.0  cm        1      191 []     4593356     4593565 + .. 0.72    no 0.53
+
+                                                       v                                    v             v   v  NC
+                                        :::::::::::::::[[[[[[,<<<____________>>>,,,,,(((,,,<<<<<_______>>>>>,,<< CS
+                      Cobalamin       1 uuaaauugaaacgaugauGGUuccccuuuaaagugaaggguuAAaaGGGAAcccGGUGaaAaUCCgggGCuG 72     
+                                          A AUU+A+++    :UGG  :C +U ++  G     G: +AA : GGAA:  G         C  :+  G
+  gi|556503834|ref|NC_000913.3| 4593356 GGAGAUUAAUCUUUACGUGGG-UCGUUGAUCGG---CUGACGAACCAGGAAGAUGU-------ACGCCAGUG 4593416
+                                        *********************.88877554444...5777779*********9996.......7999***** PP
+
+                                               v       v  v       vvvvvv     vvv    vvv                          NC
+                                        <____>>>,<<<---<<<<.------<<<<<<-----<<<-<<<<<<_____.................... CS
+                      Cobalamin      73 cCCCCgCaACuGUAAgcGg.agagcaccccccAauAaGCCACUggcccgcaa.................... 123    
+                                        CCCCCGC +C GU+A ::     GCA ++ ++ A   GCCA   G+C G                       
+  gi|556503834|ref|NC_000913.3| 4593417 CCCCCGCUGCGGUGACGCAa-CCGCAGAUGAUUAGU-GCCA---GACGG---aaugagugggugguaucaac 4593480
+                                        ***************88873.333333333333333.4544...33333...44566655444444444444 PP
+
+                                                  vvv      vvvvvvvvv                                             NC
+                                        ........._>>>>>>--->>>>>>>>>----------.................................. CS
+                      Cobalamin     124 .........gggccGGGAAGGCggggggaaggaaugac.................................. 152    
+                                                                                                                
+  gi|556503834|ref|NC_000913.3| 4593481 aauaaaacc-----------------------------aguaaugaucggcgcaaaagaggcgcagaugaag 4593523
+                                        444444444.............................5666666666666666666666666777777777 PP
+
+                                          v  v                    v                NC
+                                        ..>>>>----.>>>,,,,)))]]]]]]::::::::::::::: CS
+                      Cobalamin     153 ..cCgcgAGc.CaGGAGACCuGCCaucaguuuuugaaucucc 191    
+                                           :: +AG+ C GGA AC : CCA:  + + + + AU    
+  gi|556503834|ref|NC_000913.3| 4593524 cuGGCAAAGUuCUGGAUACUGCCCACCGACGCAGUCAUGCGA 4593565
+                                        76788899966******************************* PP
+
+
+
+Internal CM pipeline statistics summary:
+----------------------------------------
+Query model(s):                                                  1  (191 consensus positions)
+Target sequences:                                                1  (9283304 residues searched)
+Target sequences re-searched for truncated hits:                 1  (1840 residues re-searched)
+Windows   passing  local HMM SSV           filter:            7160  (0.4322); expected (0.35)
+Windows   passing  local HMM Viterbi       filter:                  (off)
+Windows   passing  local HMM Viterbi  bias filter:                  (off)
+Windows   passing  local HMM Forward       filter:             171  (0.01188); expected (0.005)
+Windows   passing  local HMM Forward  bias filter:             139  (0.0095); expected (0.005)
+Windows   passing glocal HMM Forward       filter:              76  (0.005795); expected (0.005)
+Windows   passing glocal HMM Forward  bias filter:              69  (0.005313); expected (0.005)
+Envelopes passing glocal HMM envelope defn filter:              70  (0.002021); expected (0.005)
+Envelopes passing glocal CM  CYK           filter:               2  (4.534e-05); expected (0.0001)
+Total CM hits reported:                                          2  (4.319e-05); includes 0 truncated hit(s)
+
+# CPU time: 11.74u 1.00s 00:00:12.74 Elapsed: 00:00:02.27
+//
+[ok]
diff --git a/t/data/dmel_2Lchunk.gb b/t/data/dmel_2Lchunk.gb
index 8474134..bfe4526 100644
--- a/t/data/dmel_2Lchunk.gb
+++ b/t/data/dmel_2Lchunk.gb
@@ -69,10 +69,8 @@ FEATURES             Location/Qualifiers
                      transcript_boundaries:(2L:9,836..21,372[-])
                      cyto:21A2-21A2 gene_info:[CG2671 gene symbol:l(2)gl
                      FBgn0002121 (0 ""reduction of virulence"")]"
-     CDS             join(complement(-2781..-2655),complement(-2589..-2481),
-                     complement(-2220..-1778),complement(-1713..-1071),
-                     complement(-479..-374),complement(-316..875),
-                     complement(934..1712),complement(5886..5945))
+     CDS             complement(join(-2781..-2655,-2589..-2481,-2220..-1778,
+                     -1713..-1071,-479..-374,-316..875,934..1712,5886..5945))
                      /translation="MLKFIRGKGQQPSADRQRYITAQHGFPHKPSALAYDPVLKLMAI
                      GTQTGALKVFGQPGVELYGQHTLLNNSASELNVQLLEWVYGTGRILSLTAANQLILWE
                      PVGATLLPIKTLPFDGKLKKVSSLCCSLSKDLLWIGTEGGNIYQLDLHTFTIKEPVIY
@@ -120,10 +118,8 @@ FEATURES             Location/Qualifiers
                      transcript_boundaries:(2L:9,836..21,372[-])
                      cyto:21A2-21A2 gene_info:[CG2671 gene symbol:l(2)gl
                      FBgn0002121 (0 ""reduction of virulence"")]"
-     CDS             join(complement(-2781..-2655),complement(-2589..-2481),
-                     complement(-2220..-1778),complement(-1713..-1071),
-                     complement(-479..-374),complement(-316..875),
-                     complement(934..1649))
+     CDS             complement(join(-2781..-2655,-2589..-2481,-2220..-1778,
+                     -1713..-1071,-479..-374,-316..875,934..1649))
                      /translation="MAIGTQTGALKVFGQPGVELYGQHTLLNNSASELNVQLLEWVYG
                      TGRILSLTAANQLILWEPVGATLLPIKTLPFDGKLKKVSSLCCSLSKDLLWIGTEGGN
                      IYQLDLHTFTIKEPVIYHDVVLEQVPPAYKLNPGAIESIRQLPNSPSKLLVAYNRGLC
@@ -170,10 +166,8 @@ FEATURES             Location/Qualifiers
                      transcript_boundaries:(2L:9,836..21,372[-])
                      cyto:21A2-21A2 gene_info:[CG2671 gene symbol:l(2)gl
                      FBgn0002121 (0 ""reduction of virulence"")]"
-     CDS             join(complement(-2781..-2655),complement(-2589..-2481),
-                     complement(-2220..-1778),complement(-1713..-1071),
-                     complement(-479..-374),complement(-316..875),
-                     complement(934..1649))
+     CDS             complement(join(-2781..-2655,-2589..-2481,-2220..-1778,
+                     -1713..-1071,-479..-374,-316..875,934..1649))
                      /translation="MAIGTQTGALKVFGQPGVELYGQHTLLNNSASELNVQLLEWVYG
                      TGRILSLTAANQLILWEPVGATLLPIKTLPFDGKLKKVSSLCCSLSKDLLWIGTEGGN
                      IYQLDLHTFTIKEPVIYHDVVLEQVPPAYKLNPGAIESIRQLPNSPSKLLVAYNRGLC
@@ -220,10 +214,8 @@ FEATURES             Location/Qualifiers
                      transcript_boundaries:(2L:9,836..21,372[-])
                      cyto:21A2-21A2 gene_info:[CG2671 gene symbol:l(2)gl
                      FBgn0002121 (0 ""reduction of virulence"")]"
-     CDS             join(complement(-2781..-2655),complement(-2589..-2481),
-                     complement(-2220..-1778),complement(-1713..-1071),
-                     complement(-479..-374),complement(-316..875),
-                     complement(934..1649))
+     CDS             complement(join(-2781..-2655,-2589..-2481,-2220..-1778,
+                     -1713..-1071,-479..-374,-316..875,934..1649))
                      /translation="MAIGTQTGALKVFGQPGVELYGQHTLLNNSASELNVQLLEWVYG
                      TGRILSLTAANQLILWEPVGATLLPIKTLPFDGKLKKVSSLCCSLSKDLLWIGTEGGN
                      IYQLDLHTFTIKEPVIYHDVVLEQVPPAYKLNPGAIESIRQLPNSPSKLLVAYNRGLC
@@ -270,10 +262,8 @@ FEATURES             Location/Qualifiers
                      transcript_boundaries:(2L:9,836..18,583[-])
                      cyto:21A2-21A2 gene_info:[CG2671 gene symbol:l(2)gl
                      FBgn0002121 (0 ""reduction of virulence"")]"
-     CDS             join(complement(-2781..-2655),complement(-2589..-2481),
-                     complement(-2220..-1778),complement(-1713..-1071),
-                     complement(-479..-374),complement(-316..875),
-                     complement(934..1712),complement(3054..3137))
+     CDS             complement(join(-2781..-2655,-2589..-2481,-2220..-1778,
+                     -1713..-1071,-479..-374,-316..875,934..1712,3054..3137))
                      /translation="MLKFIRGKGQQPSADRHRLQKDLFAYRKTAQHGFPHKPSALAYD
                      PVLKLMAIGTQTGALKVFGQPGVELYGQHTLLNNSASELNVQLLEWVYGTGRILSLTA
                      ANQLILWEPVGATLLPIKTLPFDGKLKKVSSLCCSLSKDLLWIGTEGGNIYQLDLHTF
@@ -321,10 +311,8 @@ FEATURES             Location/Qualifiers
                      transcript_boundaries:(2L:9,836..18,583[-])
                      cyto:21A2-21A2 gene_info:[CG2671 gene symbol:l(2)gl
                      FBgn0002121 (0 ""reduction of virulence"")]"
-     CDS             join(complement(-2781..-2655),complement(-2589..-2481),
-                     complement(-2220..-1778),complement(-1713..-1071),
-                     complement(-479..-374),complement(-316..875),
-                     complement(934..1712),complement(3054..3137))
+     CDS             complement(join(-2781..-2655,-2589..-2481,-2220..-1778,
+                     -1713..-1071,-479..-374,-316..875,934..1712,3054..3137))
                      /translation="MLKFIRGKGQQPSADRHRLQKDLFAYRKTAQHGFPHKPSALAYD
                      PVLKLMAIGTQTGALKVFGQPGVELYGQHTLLNNSASELNVQLLEWVYGTGRILSLTA
                      ANQLILWEPVGATLLPIKTLPFDGKLKKVSSLCCSLSKDLLWIGTEGGNIYQLDLHTF
diff --git a/t/data/ecoli_domains.rps.xml b/t/data/ecoli_domains.rps.xml
deleted file mode 100644
index d326178..0000000
--- a/t/data/ecoli_domains.rps.xml
+++ /dev/null
@@ -1,610 +0,0 @@
-RPS-BLAST 2.1.3 [Apr-1-2001]
-<?xml version="1.0"?>
-<!DOCTYPE BlastOutput PUBLIC "-//NCBI//NCBI BlastOutput/EN" "NCBI_BlastOutput.dtd"><BlastOutput>
-  <BlastOutput_program>blastp</BlastOutput_program>
-  <BlastOutput_version>blastp 2.1.3 [Apr-1-2001]</BlastOutput_version>
-  <BlastOutput_reference>~Reference: Altschul, Stephen F., Thomas L. Madden, Alejandro A. Schaffer, ~Jinghui Zhang, Zheng Zhang, Webb Miller, and David J. Lipman (1997), ~"Gapped BLAST and PSI-BLAST: a new generation of protein database search~programs",  Nucleic Acids Res. 25:3389-3402.</BlastOutput_reference>
-  <BlastOutput_db>/data_2/jason/db/cdd/cdd/Pfam</BlastOutput_db>
-  <BlastOutput_query-ID>lcl|QUERY_0</BlastOutput_query-ID>
-  <BlastOutput_query-def>gi|1786182|gb|AAC73112.1| (AE000111) thr operon leader peptide [Escherichia coli]</BlastOutput_query-def>
-  <BlastOutput_query-len>21</BlastOutput_query-len>
-  <BlastOutput_param>
-    <Parameters>
-      <Parameters_matrix>BLOSUM62</Parameters_matrix>
-      <Parameters_expect>1e-05</Parameters_expect>
-      <Parameters_include>0</Parameters_include>
-      <Parameters_sc-match>0</Parameters_sc-match>
-      <Parameters_sc-mismatch>0</Parameters_sc-mismatch>
-      <Parameters_gap-open>11</Parameters_gap-open>
-      <Parameters_gap-extend>1</Parameters_gap-extend>
-      <Parameters_filter>F</Parameters_filter>
-    </Parameters>
-  </BlastOutput_param>
-  <BlastOutput_iterations>
-    <Iteration>
-      <Iteration_iter-num>1</Iteration_iter-num>
-      <Iteration_stat>
-        <Statistics>
-          <Statistics_db-num>0</Statistics_db-num>
-          <Statistics_db-len>0</Statistics_db-len>
-          <Statistics_hsp-len>0</Statistics_hsp-len>
-          <Statistics_eff-space>4.16497e+11</Statistics_eff-space>
-          <Statistics_kappa>0.041</Statistics_kappa>
-          <Statistics_lambda>0.267</Statistics_lambda>
-          <Statistics_entropy>0.14</Statistics_entropy>
-        </Statistics>
-      </Iteration_stat>
-    </Iteration>
-  </BlastOutput_iterations>
-</BlastOutput>
-<?xml version="1.0"?>
-<!DOCTYPE BlastOutput PUBLIC "-//NCBI//NCBI BlastOutput/EN" "NCBI_BlastOutput.dtd"><BlastOutput>
-  <BlastOutput_program>blastp</BlastOutput_program>
-  <BlastOutput_version>blastp 2.1.3 [Apr-1-2001]</BlastOutput_version>
-  <BlastOutput_reference>~Reference: Altschul, Stephen F., Thomas L. Madden, Alejandro A. Schaffer, ~Jinghui Zhang, Zheng Zhang, Webb Miller, and David J. Lipman (1997), ~"Gapped BLAST and PSI-BLAST: a new generation of protein database search~programs",  Nucleic Acids Res. 25:3389-3402.</BlastOutput_reference>
-  <BlastOutput_db>/data_2/jason/db/cdd/cdd/Pfam</BlastOutput_db>
-  <BlastOutput_query-ID>lcl|QUERY_1</BlastOutput_query-ID>
-  <BlastOutput_query-def>gi|1786183|gb|AAC73113.1| (AE000111) aspartokinase I, homoserine dehydrogenase I [Escherichia coli]</BlastOutput_query-def>
-  <BlastOutput_query-len>820</BlastOutput_query-len>
-  <BlastOutput_param>
-    <Parameters>
-      <Parameters_matrix>BLOSUM62</Parameters_matrix>
-      <Parameters_expect>1e-05</Parameters_expect>
-      <Parameters_include>0</Parameters_include>
-      <Parameters_sc-match>0</Parameters_sc-match>
-      <Parameters_sc-mismatch>0</Parameters_sc-mismatch>
-      <Parameters_gap-open>11</Parameters_gap-open>
-      <Parameters_gap-extend>1</Parameters_gap-extend>
-      <Parameters_filter>F</Parameters_filter>
-    </Parameters>
-  </BlastOutput_param>
-  <BlastOutput_iterations>
-    <Iteration>
-      <Iteration_iter-num>1</Iteration_iter-num>
-      <Iteration_hits>
-        <Hit>
-          <Hit_num>1</Hit_num>
-          <Hit_id>gnl|Pfam|pfam00742</Hit_id>
-          <Hit_def>HomoS_dh, HomoS dehydrogenase</Hit_def>
-          <Hit_accession>pfam00742</Hit_accession>
-          <Hit_len>310</Hit_len>
-          <Hit_hsps>
-            <Hsp>
-              <Hsp_num>1</Hsp_num>
-              <Hsp_bit-score>327.405</Hsp_bit-score>
-              <Hsp_score>838</Hsp_score>
-              <Hsp_evalue>1.46134e-90</Hsp_evalue>
-              <Hsp_query-from>498</Hsp_query-from>
-              <Hsp_query-to>815</Hsp_query-to>
-              <Hsp_hit-from>3</Hsp_hit-from>
-              <Hsp_hit-to>310</Hsp_hit-to>
-              <Hsp_pattern-from>0</Hsp_pattern-from>
-              <Hsp_pattern-to>0</Hsp_pattern-to>
-              <Hsp_query-frame>1</Hsp_query-frame>
-              <Hsp_hit-frame>1</Hsp_hit-frame>
-              <Hsp_identity>123</Hsp_identity>
-              <Hsp_positive>171</Hsp_positive>
-              <Hsp_gaps>26</Hsp_gaps>
-              <Hsp_align-len>326</Hsp_align-len>
-              <Hsp_density>0</Hsp_density>
-              <Hsp_qseq>LRVCGVANSKALLTNVHGLNLENWQEELAQAKEPF-NLGRLIRLVKEYHLLN----PVIVDCTSSQAVAD-QYADFLREGFHVVTPNKKANTSSMDYYHQLRYAAEKSRRKFLYDTNVGAGLPVIENLQNLLNAGDELMKFSGILSGSLSYIFGKLDE-GMSFSEATTLAREMGYTEPDPRDDLSGMDVARKLLILARET-GRELELADIEIEPVLPAEFNAEGDVAAFMANLSQLDDLFAARVAKARDEGKVLRYVGNIDEDGVCRVKIAEVDGNDPLFKVKNGENALAFYSHYYQPLPLVLRGYGAGNDVTAAGVFADLLRTLS</Hsp_qseq>
-              <Hsp_hseq>GVVTGITDSREMLLSRIGLPLEIWKVALRDLEKPRKDLGKLDLTDDAFAVVDDPDIDVVVELTGGIEVARELYLDALEEGKHVVTANKALNASHGDEYLAL---AEKSGVDVLYEAAVAGGIPIIKTLRELLATGDRILKIEGIFNGTTNFILSEMDEKGLPFSDVLAEAQELGYTEADPRDDVEGIDAARKLAILARIAFGIELELDDVYVEGISPITAEDISSADEFGYTLKLLDEAMRQRVEDAESGGEVLRYPTLIPE-------------DHPLASVKGSDNAVAVEGEAYG--PLMFYGPGAGAEPTASAVVADIVRIAR</Hsp_hseq>
-              <Hsp_midline>  V G+ +S+ +L +  GL LE W+  L   ++P  +LG+L      + +++     V+V+ T    VA   Y D L EG HVVT NK  N S  D Y  L   AEKS    LY+  V  G+P+I+ L+ LL  GD ++K  GI +G+ ++I  ++DE G+ FS+    A+E+GYTE DPRDD+ G+D ARKL ILAR   G ELEL D+ +E + P           F   L  LD+    RV  A   G+VLRY   I E             + PL  VK  +NA+A     Y   PL+  G GAG + TA+ V AD++R   </Hsp_midline>
-            </Hsp>
-          </Hit_hsps>
-        </Hit>
-        <Hit>
-          <Hit_num>2</Hit_num>
-          <Hit_id>gnl|Pfam|pfam00696</Hit_id>
-          <Hit_def>aakinase, Amino acid kinase family. This family includes kinases that phosphorylate a variety of amino acid substrates, as well as uridylate kinase and carbamate kinase. This family includes: Aspartokinase EC:2.7.2.4, AcetylE kinase EC:2.7.2.8, E 5-kinase EC:2.7.2.11, Uridylate kinase EC:2.7.4.-, Carbamate kinase EC:2.7.2.2</Hit_def>
-          <Hit_accession>pfam00696</Hit_accession>
-          <Hit_len>236</Hit_len>
-          <Hit_hsps>
-            <Hsp>
-              <Hsp_num>1</Hsp_num>
-              <Hsp_bit-score>123.25</Hsp_bit-score>
-              <Hsp_score>308</Hsp_score>
-              <Hsp_evalue>4.18565e-29</Hsp_evalue>
-              <Hsp_query-from>1</Hsp_query-from>
-              <Hsp_query-to>284</Hsp_query-to>
-              <Hsp_hit-from>2</Hsp_hit-from>
-              <Hsp_hit-to>236</Hsp_hit-to>
-              <Hsp_pattern-from>0</Hsp_pattern-from>
-              <Hsp_pattern-to>0</Hsp_pattern-to>
-              <Hsp_query-frame>1</Hsp_query-frame>
-              <Hsp_hit-frame>1</Hsp_hit-frame>
-              <Hsp_identity>75</Hsp_identity>
-              <Hsp_positive>115</Hsp_positive>
-              <Hsp_gaps>71</Hsp_gaps>
-              <Hsp_align-len>295</Hsp_align-len>
-              <Hsp_density>0</Hsp_density>
-              <Hsp_qseq>MRVLKFGGTSVANA--ERFLRVADILESNARQG-QVATVLSAPAKITNHLVAMIEKTISGQDALPNISDAERIFAELLTGLAAAQPGFPLAQLKTFVDQEFAQIKHVLHGISLLGQCPDSINAALICRGEKMSIAIMAGVLEARGHNVTVIDPVEKLLAV--GHYLESTVDIAESTRRIAASRIPADHMVLMAGFTAGNEKGELVVLGRNGSDYSAAVLAACLRADCCEIWTDVDGVYTCDPRQVPDARLLKSMSYQEAMELSY------FGAKVLHPRTITPIAQFQIPCLIKN</Hsp_qseq>
-              <Hsp_hseq>RIVIKLGGSALSDEDDERLERVAEEIAKLREEGREVVVVHGGGPQVGRLLLKL-----------------------------AKKPGSRVTDAATL--------------------------DALGAVGEGLSGALLSAALEAPGIPAGQLSGTEDFGIDAEGRGGNAVVDSVGVEKEAIEELLEKGKIPIVAGGGGVPV-----TLGRGDSDTAAALLAALLKADLLIILTDVDGVYTADPKKVPDAKLIDELSYEEALELAGGESGFGTGGMVPKVRAAILAVRSGIPVIITN</Hsp_hseq>
-              <Hsp_midline>  V+K GG+++++   ER  RVA+ +     +G +V  V     ++   L+ +                             A +PG  +    T                            AL   GE +S A+++  LEA G     +   E       G    + VD     +      +    + ++AG            LGR  SD +AA+LAA L+AD   I TDVDGVYT DP++VPDA+L+  +SY+EA+EL+        G  V   R      +  IP +I N</Hsp_midline>
-            </Hsp>
-          </Hit_hsps>
-        </Hit>
-      </Iteration_hits>
-      <Iteration_stat>
-        <Statistics>
-          <Statistics_db-num>0</Statistics_db-num>
-          <Statistics_db-len>0</Statistics_db-len>
-          <Statistics_hsp-len>0</Statistics_hsp-len>
-          <Statistics_eff-space>3.82682e+07</Statistics_eff-space>
-          <Statistics_kappa>0.041</Statistics_kappa>
-          <Statistics_lambda>0.267</Statistics_lambda>
-          <Statistics_entropy>0.14</Statistics_entropy>
-        </Statistics>
-      </Iteration_stat>
-    </Iteration>
-  </BlastOutput_iterations>
-</BlastOutput>
-<?xml version="1.0"?>
-<!DOCTYPE BlastOutput PUBLIC "-//NCBI//NCBI BlastOutput/EN" "NCBI_BlastOutput.dtd"><BlastOutput>
-  <BlastOutput_program>blastp</BlastOutput_program>
-  <BlastOutput_version>blastp 2.1.3 [Apr-1-2001]</BlastOutput_version>
-  <BlastOutput_reference>~Reference: Altschul, Stephen F., Thomas L. Madden, Alejandro A. Schaffer, ~Jinghui Zhang, Zheng Zhang, Webb Miller, and David J. Lipman (1997), ~"Gapped BLAST and PSI-BLAST: a new generation of protein database search~programs",  Nucleic Acids Res. 25:3389-3402.</BlastOutput_reference>
-  <BlastOutput_db>/data_2/jason/db/cdd/cdd/Pfam</BlastOutput_db>
-  <BlastOutput_query-ID>lcl|QUERY_2</BlastOutput_query-ID>
-  <BlastOutput_query-def>gi|1786184|gb|AAC73114.1| (AE000111) homoserine kinase [Escherichia coli]</BlastOutput_query-def>
-  <BlastOutput_query-len>310</BlastOutput_query-len>
-  <BlastOutput_param>
-    <Parameters>
-      <Parameters_matrix>BLOSUM62</Parameters_matrix>
-      <Parameters_expect>1e-05</Parameters_expect>
-      <Parameters_include>0</Parameters_include>
-      <Parameters_sc-match>0</Parameters_sc-match>
-      <Parameters_sc-mismatch>0</Parameters_sc-mismatch>
-      <Parameters_gap-open>11</Parameters_gap-open>
-      <Parameters_gap-extend>1</Parameters_gap-extend>
-      <Parameters_filter>F</Parameters_filter>
-    </Parameters>
-  </BlastOutput_param>
-  <BlastOutput_iterations>
-    <Iteration>
-      <Iteration_iter-num>1</Iteration_iter-num>
-      <Iteration_hits>
-        <Hit>
-          <Hit_num>1</Hit_num>
-          <Hit_id>gnl|Pfam|pfam00288</Hit_id>
-          <Hit_def>GHMP_kinases, GHMP kinases putative ATP-binding protein</Hit_def>
-          <Hit_accession>pfam00288</Hit_accession>
-          <Hit_len>73</Hit_len>
-          <Hit_hsps>
-            <Hsp>
-              <Hsp_num>1</Hsp_num>
-              <Hsp_bit-score>55.4546</Hsp_bit-score>
-              <Hsp_score>132</Hsp_score>
-              <Hsp_evalue>4.05207e-09</Hsp_evalue>
-              <Hsp_query-from>69</Hsp_query-from>
-              <Hsp_query-to>132</Hsp_query-to>
-              <Hsp_hit-from>1</Hsp_hit-from>
-              <Hsp_hit-to>73</Hsp_hit-to>
-              <Hsp_pattern-from>0</Hsp_pattern-from>
-              <Hsp_pattern-to>0</Hsp_pattern-to>
-              <Hsp_query-frame>1</Hsp_query-frame>
-              <Hsp_hit-frame>1</Hsp_hit-frame>
-              <Hsp_identity>22</Hsp_identity>
-              <Hsp_positive>34</Hsp_positive>
-              <Hsp_gaps>9</Hsp_gaps>
-              <Hsp_align-len>73</Hsp_align-len>
-              <Hsp_density>0</Hsp_density>
-              <Hsp_qseq>WERFCQELGK----QIPVAMTLEKNMPIGSGLGSSAC-SVVAALMAMNE----HCGKPLNDTRLLALMGELEG</Hsp_qseq>
-              <Hsp_hseq>WANYLKGGLKVIQPLPGLDVVISSNIPLGSGLGSSAAIAVVAGAVLANEFVAGLNGLKLSLANIQHLENQFEG</Hsp_hseq>
-              <Hsp_midline>W  + +   K       + + +  N+P+GSGLGSSA  +VVA  +  NE      G  L+   +  L  + EG</Hsp_midline>
-            </Hsp>
-          </Hit_hsps>
-        </Hit>
-      </Iteration_hits>
-      <Iteration_stat>
-        <Statistics>
-          <Statistics_db-num>0</Statistics_db-num>
-          <Statistics_db-len>0</Statistics_db-len>
-          <Statistics_hsp-len>0</Statistics_hsp-len>
-          <Statistics_eff-space>3.85928e+07</Statistics_eff-space>
-          <Statistics_kappa>0.041</Statistics_kappa>
-          <Statistics_lambda>0.267</Statistics_lambda>
-          <Statistics_entropy>0.14</Statistics_entropy>
-        </Statistics>
-      </Iteration_stat>
-    </Iteration>
-  </BlastOutput_iterations>
-</BlastOutput>
-<?xml version="1.0"?>
-<!DOCTYPE BlastOutput PUBLIC "-//NCBI//NCBI BlastOutput/EN" "NCBI_BlastOutput.dtd"><BlastOutput>
-  <BlastOutput_program>blastp</BlastOutput_program>
-  <BlastOutput_version>blastp 2.1.3 [Apr-1-2001]</BlastOutput_version>
-  <BlastOutput_reference>~Reference: Altschul, Stephen F., Thomas L. Madden, Alejandro A. Schaffer, ~Jinghui Zhang, Zheng Zhang, Webb Miller, and David J. Lipman (1997), ~"Gapped BLAST and PSI-BLAST: a new generation of protein database search~programs",  Nucleic Acids Res. 25:3389-3402.</BlastOutput_reference>
-  <BlastOutput_db>/data_2/jason/db/cdd/cdd/Pfam</BlastOutput_db>
-  <BlastOutput_query-ID>lcl|QUERY_3</BlastOutput_query-ID>
-  <BlastOutput_query-def>gi|1786185|gb|AAC73115.1| (AE000111) threonine synthase [Escherichia coli]</BlastOutput_query-def>
-  <BlastOutput_query-len>428</BlastOutput_query-len>
-  <BlastOutput_param>
-    <Parameters>
-      <Parameters_matrix>BLOSUM62</Parameters_matrix>
-      <Parameters_expect>1e-05</Parameters_expect>
-      <Parameters_include>0</Parameters_include>
-      <Parameters_sc-match>0</Parameters_sc-match>
-      <Parameters_sc-mismatch>0</Parameters_sc-mismatch>
-      <Parameters_gap-open>11</Parameters_gap-open>
-      <Parameters_gap-extend>1</Parameters_gap-extend>
-      <Parameters_filter>F</Parameters_filter>
-    </Parameters>
-  </BlastOutput_param>
-  <BlastOutput_iterations>
-    <Iteration>
-      <Iteration_iter-num>1</Iteration_iter-num>
-      <Iteration_hits>
-        <Hit>
-          <Hit_num>1</Hit_num>
-          <Hit_id>gnl|Pfam|pfam00291</Hit_id>
-          <Hit_def>PALP, Pyridoxal-phosphate dependent enzyme. Members of this family are all pyridoxal-phosphate dependent enzymes. This family includes: S dehydratase EC:4.2.1.13 P20132, threonine dehydratase EC:4.2.1.16, tryptophan synthase beta chain EC:4.2.1.20, threonine synthase EC:4.2.99.2, cysteine synthase EC:4.2.99.8 P11096, cystathionine beta-synthase EC:4.2.1.22, 1-aminocyclopropane-1-carboxylate deaminase EC:4.1.99.4</Hit_def>
-          <Hit_accession>pfam00291</Hit_accession>
-          <Hit_len>298</Hit_len>
-          <Hit_hsps>
-            <Hsp>
-              <Hsp_num>1</Hsp_num>
-              <Hsp_bit-score>129.028</Hsp_bit-score>
-              <Hsp_score>323</Hsp_score>
-              <Hsp_evalue>3.98147e-31</Hsp_evalue>
-              <Hsp_query-from>96</Hsp_query-from>
-              <Hsp_query-to>363</Hsp_query-to>
-              <Hsp_hit-from>28</Hsp_hit-from>
-              <Hsp_hit-to>280</Hsp_hit-to>
-              <Hsp_pattern-from>0</Hsp_pattern-from>
-              <Hsp_pattern-to>0</Hsp_pattern-to>
-              <Hsp_query-frame>1</Hsp_query-frame>
-              <Hsp_hit-frame>1</Hsp_hit-frame>
-              <Hsp_identity>69</Hsp_identity>
-              <Hsp_positive>101</Hsp_positive>
-              <Hsp_gaps>19</Hsp_gaps>
-              <Hsp_align-len>270</Hsp_align-len>
-              <Hsp_density>0</Hsp_density>
-              <Hsp_qseq>LELFHGPTLAFKDFGGRFMAQMLTHIAGDKPVTILTATSGDTGAAVAHAFYGLPNVKVVILYPRGKISPLQEKLFCTLGGNIETVAIDGDFDACQALVKQAFDDEELKVALGLNSANSINISRLLAQICYYFEAVAQLPQETRNQL-VVSVPSGNFGDLTAGLLAKSLGLPVKRFIAATNVNDTVPRFLHDGQWSPKATQATLSNAMDVSQPNNWPRVEELFRRKIWQLKELGYAAVDDETTQQTMREL-KELGYTSEPHAAVAYRALRD</Hsp_qseq>
-              <Hsp_hseq>LEDLN-PTGSFKDRGA-LNMILLAEKLGKKGGIVPGATSGNTGIALAYA-AALLGLKCTIVMPAT-TSREKVAQLRALGAENIVVPVVGGFDDLADAVKKALELAEENPK-NAYLVNQ-FDNPANVEA-GQKTIGLEIWEQLGGKPDAVVVPVGGGGTIAGIARYLKELLPVKVIGVEPEGSAVLSGFLKPG--SPVTLPETLSIAIGLGVPFVFPILDELL--------DDEVVTVTDEEALEAARLLAREEGIFVEPSSGAAVAAALK</Hsp_hseq>
-              <Hsp_midline>LE  + PT +FKD G      +L    G K   +  ATSG+TG A+A+A   L  +K  I+ P    S  +      LG     V + G FD     VK+A +  E          N    +    +         ++ ++   +   V VP G  G +          LPVK        +  +  FL  G  SP     TLS A+ +  P  +P ++EL         +     V DE   +  R L +E G   EP +  A  A</Hsp_midline>
-            </Hsp>
-          </Hit_hsps>
-        </Hit>
-      </Iteration_hits>
-      <Iteration_stat>
-        <Statistics>
-          <Statistics_db-num>0</Statistics_db-num>
-          <Statistics_db-len>0</Statistics_db-len>
-          <Statistics_hsp-len>0</Statistics_hsp-len>
-          <Statistics_eff-space>1.52967e+08</Statistics_eff-space>
-          <Statistics_kappa>0.041</Statistics_kappa>
-          <Statistics_lambda>0.267</Statistics_lambda>
-          <Statistics_entropy>0.14</Statistics_entropy>
-        </Statistics>
-      </Iteration_stat>
-    </Iteration>
-  </BlastOutput_iterations>
-</BlastOutput>
-<?xml version="1.0"?>
-<!DOCTYPE BlastOutput PUBLIC "-//NCBI//NCBI BlastOutput/EN" "NCBI_BlastOutput.dtd"><BlastOutput>
-  <BlastOutput_program>blastp</BlastOutput_program>
-  <BlastOutput_version>blastp 2.1.3 [Apr-1-2001]</BlastOutput_version>
-  <BlastOutput_reference>~Reference: Altschul, Stephen F., Thomas L. Madden, Alejandro A. Schaffer, ~Jinghui Zhang, Zheng Zhang, Webb Miller, and David J. Lipman (1997), ~"Gapped BLAST and PSI-BLAST: a new generation of protein database search~programs",  Nucleic Acids Res. 25:3389-3402.</BlastOutput_reference>
-  <BlastOutput_db>/data_2/jason/db/cdd/cdd/Pfam</BlastOutput_db>
-  <BlastOutput_query-ID>lcl|QUERY_4</BlastOutput_query-ID>
-  <BlastOutput_query-def>gi|1786186|gb|AAC73116.1| (AE000111) orf, hypothetical protein [Escherichia coli]</BlastOutput_query-def>
-  <BlastOutput_query-len>98</BlastOutput_query-len>
-  <BlastOutput_param>
-    <Parameters>
-      <Parameters_matrix>BLOSUM62</Parameters_matrix>
-      <Parameters_expect>1e-05</Parameters_expect>
-      <Parameters_include>0</Parameters_include>
-      <Parameters_sc-match>0</Parameters_sc-match>
-      <Parameters_sc-mismatch>0</Parameters_sc-mismatch>
-      <Parameters_gap-open>11</Parameters_gap-open>
-      <Parameters_gap-extend>1</Parameters_gap-extend>
-      <Parameters_filter>F</Parameters_filter>
-    </Parameters>
-  </BlastOutput_param>
-  <BlastOutput_iterations>
-    <Iteration>
-      <Iteration_iter-num>1</Iteration_iter-num>
-      <Iteration_stat>
-        <Statistics>
-          <Statistics_db-num>0</Statistics_db-num>
-          <Statistics_db-len>0</Statistics_db-len>
-          <Statistics_hsp-len>0</Statistics_hsp-len>
-          <Statistics_eff-space>3.59021e+11</Statistics_eff-space>
-          <Statistics_kappa>0.041</Statistics_kappa>
-          <Statistics_lambda>0.267</Statistics_lambda>
-          <Statistics_entropy>0.14</Statistics_entropy>
-        </Statistics>
-      </Iteration_stat>
-    </Iteration>
-  </BlastOutput_iterations>
-</BlastOutput>
-<?xml version="1.0"?>
-<!DOCTYPE BlastOutput PUBLIC "-//NCBI//NCBI BlastOutput/EN" "NCBI_BlastOutput.dtd"><BlastOutput>
-  <BlastOutput_program>blastp</BlastOutput_program>
-  <BlastOutput_version>blastp 2.1.3 [Apr-1-2001]</BlastOutput_version>
-  <BlastOutput_reference>~Reference: Altschul, Stephen F., Thomas L. Madden, Alejandro A. Schaffer, ~Jinghui Zhang, Zheng Zhang, Webb Miller, and David J. Lipman (1997), ~"Gapped BLAST and PSI-BLAST: a new generation of protein database search~programs",  Nucleic Acids Res. 25:3389-3402.</BlastOutput_reference>
-  <BlastOutput_db>/data_2/jason/db/cdd/cdd/Pfam</BlastOutput_db>
-  <BlastOutput_query-ID>lcl|QUERY_5</BlastOutput_query-ID>
-  <BlastOutput_query-def>gi|1786187|gb|AAC73117.1| (AE000111) orf, hypothetical protein [Escherichia coli]</BlastOutput_query-def>
-  <BlastOutput_query-len>258</BlastOutput_query-len>
-  <BlastOutput_param>
-    <Parameters>
-      <Parameters_matrix>BLOSUM62</Parameters_matrix>
-      <Parameters_expect>1e-05</Parameters_expect>
-      <Parameters_include>0</Parameters_include>
-      <Parameters_sc-match>0</Parameters_sc-match>
-      <Parameters_sc-mismatch>0</Parameters_sc-mismatch>
-      <Parameters_gap-open>11</Parameters_gap-open>
-      <Parameters_gap-extend>1</Parameters_gap-extend>
-      <Parameters_filter>F</Parameters_filter>
-    </Parameters>
-  </BlastOutput_param>
-  <BlastOutput_iterations>
-    <Iteration>
-      <Iteration_iter-num>1</Iteration_iter-num>
-      <Iteration_stat>
-        <Statistics>
-          <Statistics_db-num>0</Statistics_db-num>
-          <Statistics_db-len>0</Statistics_db-len>
-          <Statistics_hsp-len>0</Statistics_hsp-len>
-          <Statistics_eff-space>3.3722e+11</Statistics_eff-space>
-          <Statistics_kappa>0.041</Statistics_kappa>
-          <Statistics_lambda>0.267</Statistics_lambda>
-          <Statistics_entropy>0.14</Statistics_entropy>
-        </Statistics>
-      </Iteration_stat>
-    </Iteration>
-  </BlastOutput_iterations>
-</BlastOutput>
-<?xml version="1.0"?>
-<!DOCTYPE BlastOutput PUBLIC "-//NCBI//NCBI BlastOutput/EN" "NCBI_BlastOutput.dtd"><BlastOutput>
-  <BlastOutput_program>blastp</BlastOutput_program>
-  <BlastOutput_version>blastp 2.1.3 [Apr-1-2001]</BlastOutput_version>
-  <BlastOutput_reference>~Reference: Altschul, Stephen F., Thomas L. Madden, Alejandro A. Schaffer, ~Jinghui Zhang, Zheng Zhang, Webb Miller, and David J. Lipman (1997), ~"Gapped BLAST and PSI-BLAST: a new generation of protein database search~programs",  Nucleic Acids Res. 25:3389-3402.</BlastOutput_reference>
-  <BlastOutput_db>/data_2/jason/db/cdd/cdd/Pfam</BlastOutput_db>
-  <BlastOutput_query-ID>lcl|QUERY_6</BlastOutput_query-ID>
-  <BlastOutput_query-def>gi|1786188|gb|AAC73118.1| (AE000111) inner membrane transport protein [Escherichia coli]</BlastOutput_query-def>
-  <BlastOutput_query-len>476</BlastOutput_query-len>
-  <BlastOutput_param>
-    <Parameters>
-      <Parameters_matrix>BLOSUM62</Parameters_matrix>
-      <Parameters_expect>1e-05</Parameters_expect>
-      <Parameters_include>0</Parameters_include>
-      <Parameters_sc-match>0</Parameters_sc-match>
-      <Parameters_sc-mismatch>0</Parameters_sc-mismatch>
-      <Parameters_gap-open>11</Parameters_gap-open>
-      <Parameters_gap-extend>1</Parameters_gap-extend>
-      <Parameters_filter>F</Parameters_filter>
-    </Parameters>
-  </BlastOutput_param>
-  <BlastOutput_iterations>
-    <Iteration>
-      <Iteration_iter-num>1</Iteration_iter-num>
-      <Iteration_hits>
-        <Hit>
-          <Hit_num>1</Hit_num>
-          <Hit_id>gnl|Pfam|pfam01235</Hit_id>
-          <Hit_def>Na_Ala_symp, Sodium:alanine symporter family</Hit_def>
-          <Hit_accession>pfam01235</Hit_accession>
-          <Hit_len>415</Hit_len>
-          <Hit_hsps>
-            <Hsp>
-              <Hsp_num>1</Hsp_num>
-              <Hsp_bit-score>558.525</Hsp_bit-score>
-              <Hsp_score>1438</Hsp_score>
-              <Hsp_evalue>2.26239e-160</Hsp_evalue>
-              <Hsp_query-from>48</Hsp_query-from>
-              <Hsp_query-to>458</Hsp_query-to>
-              <Hsp_hit-from>7</Hsp_hit-from>
-              <Hsp_hit-to>415</Hsp_hit-to>
-              <Hsp_pattern-from>0</Hsp_pattern-from>
-              <Hsp_pattern-to>0</Hsp_pattern-to>
-              <Hsp_query-frame>1</Hsp_query-frame>
-              <Hsp_hit-frame>1</Hsp_hit-frame>
-              <Hsp_identity>233</Hsp_identity>
-              <Hsp_positive>300</Hsp_positive>
-              <Hsp_gaps>2</Hsp_gaps>
-              <Hsp_align-len>411</Hsp_align-len>
-              <Hsp_density>0</Hsp_density>
-              <Hsp_qseq>KNSIHPQPGGLTSFQSLCTSLAARVGSGNLAGVALAITAGGPGAVFWMWVAAFIGMATSFAECSLAQLYKERDVNGQFRGGPAWYMARGLGMRWMGVLFAVFLLIAYGIIFSGVQANAVARALSFSFDFPPLVTGIILAVFTLLAITRGLHGVARLMQGFVPLMAIIWVLTSLVICVMNIGQLPHVIWSIFESAFGWQEAAGGAAGYTLSQAITNGFQRSMFSNEAGMGSTPNAAAAAASWPPHPAAQGIVQMIGIFIDTLVICTASAMLILLAGNGTTYMPLEGIQLIQKAMRVLMGSWGAEFVTLVVILFAFSSIVANYIYAENNLFFLRLNNPKAIWCLRICTFATVIGGTLLSLPLMWQLADIIMACMAITNLTAILLLSPVVHTIASDYLRQRKLGVRPVFDPLRY</Hsp_qseq>
-              <Hsp_hseq>KFGKKDEGGDVSSFQALTTSLAGRVGTGNIAGVATAIAAGGPGAVFWMWVTAFIGMATAFVESTLAQLYKERDKDGNFRGGPAYYIKKGLGMRWLAILFAVAVIVSFGVIFSGVQANSIADAMSNAFGIPPLVTGIVLAILTALIIFGGVKRIAAISSIVVPFMAIIYLITALAIIAMNIEKVPDVIGLIFKSAFGFDAAAGGALGATVSKAIMWGVKRGLFSNEAGMGSAPNAAAAAHVS--HPAKQGLVQMLGIFLDTFIVCTATALVILLTGNYTNVETLKGAQLTQKAFDTLIGGFGATFVAIALLLFAFSTIIANYYYAETNLAYLVRSGPRGVALYRLAYLAAVFYGTVLSLTLVWALADIVMGIMALPNLIAILLLSKVAYEALKDYERQLKQGKDPEFDADEY</Hsp_hseq>
-              <Hsp_midline>K     + G ++SFQ+L TSLA RVG+GN+AGVA AI AGGPGAVFWMWV AFIGMAT+F E +LAQLYKERD +G FRGGPA+Y+ +GLGMRW+ +LFAV +++++G+IFSGVQAN++A A+S +F  PPLVTGI+LA+ T L I  G+  +A +    VP MAII+++T+L I  MNI ++P VI  IF+SAFG+  AAGGA G T+S+AI  G +R +FSNEAGMGS PNAAAAA     HPA QG+VQM+GIF+DT ++CTA+A++ILL GN T    L+G QL QKA   L+G +GA FV + ++LFAFS+I+ANY YAE NL +L  + P+ +   R+   A V  GT+LSL L+W LADI+M  MA+ NL AILLLS V +    DY RQ K G  P FD   Y</Hsp_midline>
-            </Hsp>
-          </Hit_hsps>
-        </Hit>
-      </Iteration_hits>
-      <Iteration_stat>
-        <Statistics>
-          <Statistics_db-num>0</Statistics_db-num>
-          <Statistics_db-len>0</Statistics_db-len>
-          <Statistics_hsp-len>0</Statistics_hsp-len>
-          <Statistics_eff-space>1.95607e+08</Statistics_eff-space>
-          <Statistics_kappa>0.041</Statistics_kappa>
-          <Statistics_lambda>0.267</Statistics_lambda>
-          <Statistics_entropy>0.14</Statistics_entropy>
-        </Statistics>
-      </Iteration_stat>
-    </Iteration>
-  </BlastOutput_iterations>
-</BlastOutput>
-<?xml version="1.0"?>
-<!DOCTYPE BlastOutput PUBLIC "-//NCBI//NCBI BlastOutput/EN" "NCBI_BlastOutput.dtd"><BlastOutput>
-  <BlastOutput_program>blastp</BlastOutput_program>
-  <BlastOutput_version>blastp 2.1.3 [Apr-1-2001]</BlastOutput_version>
-  <BlastOutput_reference>~Reference: Altschul, Stephen F., Thomas L. Madden, Alejandro A. Schaffer, ~Jinghui Zhang, Zheng Zhang, Webb Miller, and David J. Lipman (1997), ~"Gapped BLAST and PSI-BLAST: a new generation of protein database search~programs",  Nucleic Acids Res. 25:3389-3402.</BlastOutput_reference>
-  <BlastOutput_db>/data_2/jason/db/cdd/cdd/Pfam</BlastOutput_db>
-  <BlastOutput_query-ID>lcl|QUERY_7</BlastOutput_query-ID>
-  <BlastOutput_query-def>gi|1786189|gb|AAC73119.1| (AE000111) transaldolase B [Escherichia coli]</BlastOutput_query-def>
-  <BlastOutput_query-len>317</BlastOutput_query-len>
-  <BlastOutput_param>
-    <Parameters>
-      <Parameters_matrix>BLOSUM62</Parameters_matrix>
-      <Parameters_expect>1e-05</Parameters_expect>
-      <Parameters_include>0</Parameters_include>
-      <Parameters_sc-match>0</Parameters_sc-match>
-      <Parameters_sc-mismatch>0</Parameters_sc-mismatch>
-      <Parameters_gap-open>11</Parameters_gap-open>
-      <Parameters_gap-extend>1</Parameters_gap-extend>
-      <Parameters_filter>F</Parameters_filter>
-    </Parameters>
-  </BlastOutput_param>
-  <BlastOutput_iterations>
-    <Iteration>
-      <Iteration_iter-num>1</Iteration_iter-num>
-      <Iteration_hits>
-        <Hit>
-          <Hit_num>1</Hit_num>
-          <Hit_id>gnl|Pfam|pfam00923</Hit_id>
-          <Hit_def>Transaldolase, Transaldolase</Hit_def>
-          <Hit_accession>pfam00923</Hit_accession>
-          <Hit_len>282</Hit_len>
-          <Hit_hsps>
-            <Hsp>
-              <Hsp_num>1</Hsp_num>
-              <Hsp_bit-score>306.99</Hsp_bit-score>
-              <Hsp_score>785</Hsp_score>
-              <Hsp_evalue>7.90128e-85</Hsp_evalue>
-              <Hsp_query-from>13</Hsp_query-from>
-              <Hsp_query-to>313</Hsp_query-to>
-              <Hsp_hit-from>1</Hsp_hit-from>
-              <Hsp_hit-to>282</Hsp_hit-to>
-              <Hsp_pattern-from>0</Hsp_pattern-from>
-              <Hsp_pattern-to>0</Hsp_pattern-to>
-              <Hsp_query-frame>1</Hsp_query-frame>
-              <Hsp_hit-frame>1</Hsp_hit-frame>
-              <Hsp_identity>161</Hsp_identity>
-              <Hsp_positive>191</Hsp_positive>
-              <Hsp_gaps>29</Hsp_gaps>
-              <Hsp_align-len>306</Hsp_align-len>
-              <Hsp_density>0</Hsp_density>
-              <Hsp_qseq>TVVADTGDIAAMKLYQP----QDATTNPSLILNAAQIPEYRKLIDDAVAWAKQQSNDRAQQIVDATDKLAVNIGLEILKLVPGRISTEVDARLSYDTEASIAKAKRLIKLYNDAGISNDRILIKLASTWQGIRAAEQLEKEGINCNLTLLFSFAQARACAEAGVFLISPFVGRILDWYKANTDKKEYAPAEDPGVVSVSEIYQYYKEHGYETVVMGASFRNIGEILE-LAGCDRLTIAPALLKELAESEGAIERKLSYTGEVKARPARITESEFLWQHNQDPMAVDKLAEGIRKFAIDQEKLEKMI</Hsp_qseq>
-              <Hsp_hseq>KVFLDTGDIEEIKKLAPIGIIQGVTTNPSLIAKAAKKSAYEKL----DAVGKKKGKTIKEQVENACDKLAVEF-PEILKIVPGRVSTEVDARLSFDAEAMIKEAKRLIKL-----ISKPNIVIKIPVTWEGLKAVKALEAEGIPVNVTLLFSAAQALAAAEAGVTYISPFVGRIDDWIDALTDK---NYEGDPGVQSVKDIYQYYKKHGYKTEVLAASFRNPGYILELLAGCDSLTIPPALLDQLLDHEPL---------NRKETGEKISEKKF--NIDEDAMAVELLDEGIRKFKKDFEKLLKST</Hsp_hseq>
-              <Hsp_midline> V  DTGDI  +K   P    Q  TTNPSLI  AA+   Y KL     A  K++     +Q+ +A DKLAV    EILK+VPGR+STEVDARLS+D EA I +AKRLIKL     IS   I+IK+  TW+G++A + LE EGI  N+TLLFS AQA A AEAGV  ISPFVGRI DW  A TDK       DPGV SV +IYQYYK+HGY+T V+ ASFRN G ILE LAGCD LTI PALL +L + E             K    +I+E +F    ++D MAV+ L EGIRKF  D EKL K  </Hsp_midline>
-            </Hsp>
-          </Hit_hsps>
-        </Hit>
-      </Iteration_hits>
-      <Iteration_stat>
-        <Statistics>
-          <Statistics_db-num>0</Statistics_db-num>
-          <Statistics_db-len>0</Statistics_db-len>
-          <Statistics_hsp-len>0</Statistics_hsp-len>
-          <Statistics_eff-space>1.4562e+08</Statistics_eff-space>
-          <Statistics_kappa>0.041</Statistics_kappa>
-          <Statistics_lambda>0.267</Statistics_lambda>
-          <Statistics_entropy>0.14</Statistics_entropy>
-        </Statistics>
-      </Iteration_stat>
-    </Iteration>
-  </BlastOutput_iterations>
-</BlastOutput>
-<?xml version="1.0"?>
-<!DOCTYPE BlastOutput PUBLIC "-//NCBI//NCBI BlastOutput/EN" "NCBI_BlastOutput.dtd"><BlastOutput>
-  <BlastOutput_program>blastp</BlastOutput_program>
-  <BlastOutput_version>blastp 2.1.3 [Apr-1-2001]</BlastOutput_version>
-  <BlastOutput_reference>~Reference: Altschul, Stephen F., Thomas L. Madden, Alejandro A. Schaffer, ~Jinghui Zhang, Zheng Zhang, Webb Miller, and David J. Lipman (1997), ~"Gapped BLAST and PSI-BLAST: a new generation of protein database search~programs",  Nucleic Acids Res. 25:3389-3402.</BlastOutput_reference>
-  <BlastOutput_db>/data_2/jason/db/cdd/cdd/Pfam</BlastOutput_db>
-  <BlastOutput_query-ID>lcl|QUERY_8</BlastOutput_query-ID>
-  <BlastOutput_query-def>gi|1786190|gb|AAC73120.1| (AE000111) required for the efficient incorporation of molybdate into molybdoproteins [Escherichia coli]</BlastOutput_query-def>
-  <BlastOutput_query-len>195</BlastOutput_query-len>
-  <BlastOutput_param>
-    <Parameters>
-      <Parameters_matrix>BLOSUM62</Parameters_matrix>
-      <Parameters_expect>1e-05</Parameters_expect>
-      <Parameters_include>0</Parameters_include>
-      <Parameters_sc-match>0</Parameters_sc-match>
-      <Parameters_sc-mismatch>0</Parameters_sc-mismatch>
-      <Parameters_gap-open>11</Parameters_gap-open>
-      <Parameters_gap-extend>1</Parameters_gap-extend>
-      <Parameters_filter>F</Parameters_filter>
-    </Parameters>
-  </BlastOutput_param>
-  <BlastOutput_iterations>
-    <Iteration>
-      <Iteration_iter-num>1</Iteration_iter-num>
-      <Iteration_stat>
-        <Statistics>
-          <Statistics_db-num>0</Statistics_db-num>
-          <Statistics_db-len>0</Statistics_db-len>
-          <Statistics_hsp-len>0</Statistics_hsp-len>
-          <Statistics_eff-space>3.35238e+11</Statistics_eff-space>
-          <Statistics_kappa>0.041</Statistics_kappa>
-          <Statistics_lambda>0.267</Statistics_lambda>
-          <Statistics_entropy>0.14</Statistics_entropy>
-        </Statistics>
-      </Iteration_stat>
-    </Iteration>
-  </BlastOutput_iterations>
-</BlastOutput>
-<?xml version="1.0"?>
-<!DOCTYPE BlastOutput PUBLIC "-//NCBI//NCBI BlastOutput/EN" "NCBI_BlastOutput.dtd"><BlastOutput>
-  <BlastOutput_program>blastp</BlastOutput_program>
-  <BlastOutput_version>blastp 2.1.3 [Apr-1-2001]</BlastOutput_version>
-  <BlastOutput_reference>~Reference: Altschul, Stephen F., Thomas L. Madden, Alejandro A. Schaffer, ~Jinghui Zhang, Zheng Zhang, Webb Miller, and David J. Lipman (1997), ~"Gapped BLAST and PSI-BLAST: a new generation of protein database search~programs",  Nucleic Acids Res. 25:3389-3402.</BlastOutput_reference>
-  <BlastOutput_db>/data_2/jason/db/cdd/cdd/Pfam</BlastOutput_db>
-  <BlastOutput_query-ID>lcl|QUERY_9</BlastOutput_query-ID>
-  <BlastOutput_query-def>gi|1786191|gb|AAC73121.1| (AE000111) orf, hypothetical protein [Escherichia coli]</BlastOutput_query-def>
-  <BlastOutput_query-len>188</BlastOutput_query-len>
-  <BlastOutput_param>
-    <Parameters>
-      <Parameters_matrix>BLOSUM62</Parameters_matrix>
-      <Parameters_expect>1e-05</Parameters_expect>
-      <Parameters_include>0</Parameters_include>
-      <Parameters_sc-match>0</Parameters_sc-match>
-      <Parameters_sc-mismatch>0</Parameters_sc-mismatch>
-      <Parameters_gap-open>11</Parameters_gap-open>
-      <Parameters_gap-extend>1</Parameters_gap-extend>
-      <Parameters_filter>F</Parameters_filter>
-    </Parameters>
-  </BlastOutput_param>
-  <BlastOutput_iterations>
-    <Iteration>
-      <Iteration_iter-num>1</Iteration_iter-num>
-      <Iteration_hits>
-        <Hit>
-          <Hit_num>1</Hit_num>
-          <Hit_id>gnl|Pfam|pfam01184</Hit_id>
-          <Hit_def>Grp1_Fun34_YaaH, GPR1/FUN34/yaaH family</Hit_def>
-          <Hit_accession>pfam01184</Hit_accession>
-          <Hit_len>210</Hit_len>
-          <Hit_hsps>
-            <Hsp>
-              <Hsp_num>1</Hsp_num>
-              <Hsp_bit-score>218.009</Hsp_bit-score>
-              <Hsp_score>554</Hsp_score>
-              <Hsp_evalue>2.86271e-58</Hsp_evalue>
-              <Hsp_query-from>5</Hsp_query-from>
-              <Hsp_query-to>188</Hsp_query-to>
-              <Hsp_hit-from>16</Hsp_hit-from>
-              <Hsp_hit-to>210</Hsp_hit-to>
-              <Hsp_pattern-from>0</Hsp_pattern-from>
-              <Hsp_pattern-to>0</Hsp_pattern-to>
-              <Hsp_query-frame>1</Hsp_query-frame>
-              <Hsp_hit-frame>1</Hsp_hit-frame>
-              <Hsp_identity>137</Hsp_identity>
-              <Hsp_positive>146</Hsp_positive>
-              <Hsp_gaps>13</Hsp_gaps>
-              <Hsp_align-len>196</Hsp_align-len>
-              <Hsp_density>0</Hsp_density>
-              <Hsp_qseq>KLANPAPLGLMGFGMTTILLNLHNVGYFALD--GIILAMGIFYGGIAQIFAGLLEYKKGNTFGLTAFTSYGSFWLTLVAILLMPKLGLTDAPNAQ-----FLGVYLGLWGVFTLFMFFGTLKGARVLQFVFFSLTVLFALLAIGNIAGNAAIIHFAGWIGLICGASAIYLAMGEVLNEQFGRTV-----LPIGESH</Hsp_qseq>
-              <Hsp_hseq>KFANPAPLGLSGFALTTIVLSLHNVGAFGLDNPGIIVGMAIFYGGIAQIFAGLWEYKKENTFGLTALTSYGGFWLSLVAIL-MPKFGITDAYNDQIEVQNALGVYLGGWGVFTLFLFFCTLKSTRVFFFLFFSLTVTFLLLAIANITGNAAIIHFGGWLGLICAFSAIYLAYAGVANEQNSYIVPVPLDLPIGEKH</Hsp_hseq>
-              <Hsp_midline>K ANPAPLGL GF +TTI+L+LHNVG F LD  GII+ M IFYGGIAQIFAGL EYKK NTFGLTA TSYG FWL+LVAIL MPK G+TDA N Q      LGVYLG WGVFTLF+FF TLK  RV  F+FFSLTV F LLAI NI GNAAIIHF GW+GLIC  SAIYLA   V NEQ    V     LPIGE H</Hsp_midline>
-            </Hsp>
-          </Hit_hsps>
-        </Hit>
-      </Iteration_hits>
-      <Iteration_stat>
-        <Statistics>
-          <Statistics_db-num>0</Statistics_db-num>
-          <Statistics_db-len>0</Statistics_db-len>
-          <Statistics_hsp-len>0</Statistics_hsp-len>
-          <Statistics_eff-space>8.17579e+07</Statistics_eff-space>
-          <Statistics_kappa>0.041</Statistics_kappa>
-          <Statistics_lambda>0.267</Statistics_lambda>
-          <Statistics_entropy>0.14</Statistics_entropy>
-        </Statistics>
-      </Iteration_stat>
-    </Iteration>
-  </BlastOutput_iterations>
-</BlastOutput>
diff --git a/t/data/hmmscan_qry_stop.txt b/t/data/hmmscan_qry_stop.txt
new file mode 100644
index 0000000..0e202c9
--- /dev/null
+++ b/t/data/hmmscan_qry_stop.txt
@@ -0,0 +1,63 @@
+# hmmscan :: search sequence(s) against a profile database
+# HMMER 3.0 (March 2010); http://hmmer.org/
+# Copyright (C) 2010 Howard Hughes Medical Institute.
+# Freely distributed under the GNU General Public License (GPLv3).
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+# query sequence file:             FQ377874.faa
+# target HMM database:             HMM_Profiles.hmm
+# output directed to file:         FQ377874.txt
+# number of worker threads:        8
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+Query:       gi|328801650|gb|CBW53803.1|  [L=243]
+Description: IS1296 A transposase protein B [Mycoplasma mycoides subsp. capri LC str. 95010]
+Scores for complete sequence (score includes all domains):
+   --- full sequence ---   --- best 1 domain ---    -#dom-
+    E-value  score  bias    E-value  score  bias    exp  N  Model                       Description
+    ------- ------ -----    ------- ------ -----   ---- --  --------                    -----------
+    2.3e-88  289.2  12.7    3.8e-88  288.5   8.8    1.3  1  IS3_IS150_ORF2.curated      
+
+
+Domain annotation for each model (and alignments):
+>> IS3_IS150_ORF2.curated  
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  288.5   8.8   7.6e-89   3.8e-88     145     386 ..       4     236 ..       1     238 [. 0.94
+
+  Alignments for each domain:
+  == domain 1    score: 288.5 bits;  conditional E-value: 7.6e-89
+       IS3_IS150_ORF2.curated 145 eiyhrhrgrYGYRRitlaLrlSEkrGkqiNhKrvqrLMkelgLkSv.iRvKk.kyrsyrgevgivadNlLqRqFkadkPnek 224
+                                   i+ ++ + YGYRR++++L      G  +NhK++ rL kelg      R K  +y sy+g+vg+ adN+L R+F +   n k
+  gi|328801650|gb|CBW53803.1|   4 DIFSKSFETYGYRRLKITLK---SKGYIVNHKKILRLTKELGVQCIkFRTKNgRYSSYKGTVGKIADNVLKRNFHSLQAN-K 81 
+                                  69999***************...*******************87642344434**********************99998.5 PP
+
+       IS3_IS150_ORF2.curated 225 W.vTDVTEFkvgggkKlYLSpIlDLFNrEIisyslserpdaklVkktLerAlkklgpdevpvlHSPRLLSDqGwqYqskay. 304
+                                    +TDVTEFkv+ g+KlYLSpI+DL+N EIisys  + p+++l+  +L++Alkk+ ++ +++ HS     DqG++Yq+  + 
+  gi|328801650|gb|CBW53803.1|  82 L*CTDVTEFKVN-GQKLYLSPIIDLYNDEIISYSIQTNPNLNLTNSMLDKALKKVKNTNGLLIHS-----DQGFHYQH--Is 155
+                                  788*********.****************************************************.....******98..75 PP
+
+       IS3_IS150_ORF2.curated 305 .remLeeqGirqSMSRKGnclDNavmEsffgtLKsEifygnlkkFeslddLeraItdYIey.YNheRIhlKLkgltPveYRt 384
+                                   + +Lee  i qSMSRKGnclDNa +E+ffg LK Ei+y   +k++s+++L++ I+ YI y YN+ RI++KLkgl+Pv+ R 
+  gi|328801650|gb|CBW53803.1| 156 *AKKLEENNITQSMSRKGNCLDNAIIENFFGLLKQEIYY--GEKYNSVEELTKRIHKYI-Y*YNNIRIKEKLKGLSPVQFRK 234
+                                  6689***********************************..67****************.*********************9 PP
+
+       IS3_IS150_ORF2.curated 385 qr 386
+                                  q+
+  gi|328801650|gb|CBW53803.1| 235 QS 236
+                                  97 PP
+
+
+
+Internal pipeline statistics summary:
+-------------------------------------
+Query sequence(s):                         1  (243 residues)
+Target model(s):                         116  (57162 nodes)
+Passed MSV filter:                        38  (0.327586); expected 2.3 (0.02)
+Passed bias filter:                       38  (0.327586); expected 2.3 (0.02)
+Passed Vit filter:                        31  (0.267241); expected 0.1 (0.001)
+Passed Fwd filter:                         1  (0.198276); expected 0.0 (1e-05)
+Initial search space (Z):                116  [actual number of targets]
+Domain search space  (domZ):               1  [number of targets reported over threshold]
+# CPU time: 0.91u 0.30s 00:00:01.20 Elapsed: 00:00:01.71
+# Mc/sec: 8.09
+//
diff --git a/t/data/hmmscan_sec_struct.out b/t/data/hmmscan_sec_struct.out
index 6be7893..d922f7f 100644
--- a/t/data/hmmscan_sec_struct.out
+++ b/t/data/hmmscan_sec_struct.out
@@ -91,3 +91,50 @@ Domain search space  (domZ):               2  [number of targets reported over t
 # CPU time: 0.24u 0.15s 00:00:00.39 Elapsed: 00:00:00.27
 # Mc/sec: 2782.58
 //
+Query:       lcl|aorf_00010|P1  [L=132]
+Description: IS481.original transposase
+Scores for complete sequence (score includes all domains):
+   --- full sequence ---   --- best 1 domain ---    -#dom-
+    E-value  score  bias    E-value  score  bias    exp  N  Model               Description
+    ------- ------ -----    ------- ------ -----   ---- --  --------            -----------
+    3.4e-40  130.0   0.4    3.8e-40  129.9   0.3    1.0  1  IS481.original.hmm  
+
+
+Domain annotation for each model (and alignments):
+>> IS481.original.hmm  
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  129.9   0.3   6.6e-42   3.8e-40     127     281 ..       7     130 ..       2     132 .] 0.97
+
+  Alignments for each domain:
+  == domain 1    score: 129.9 bits;  conditional E-value: 6.6e-42
+  IS481.original.hmm 127 kRYErdhPgeLvhmDvkklgripdgGgvkighRwrgrtrgrgkrtnqsrnrglgkayvitaiDDhSRfayaeilsd 202
+                         +++E++hP +L+++D++++g+i + G+                            +y++t++D++S+   ++++++
+   lcl|aorf_00010|P1   7 GEIETAHPSYLGSQDTFYVGNITGAGR----------------------------IYQQTFVDTYSKWDSTKLYTT 54 
+                         579*******************88888............................********************* PP
+
+  IS481.original.hmm 203 ettttaadfllraaayfygkigeeiitrvlTDnGaayrskkrsakhdFqealaelGIkhilTrprsPqTNGKiERF 278
+                         +t++taad l++ ++ f+   ++++i r lTD+ ++y+sk   ++ d+  +la ++I+h++T++++PqTN ++ RF
+   lcl|aorf_00010|P1  55 KTPITAADLLNDRVLSFFA-EQGMGIIRLLTDRSTEYCSKA--ETQDYELCLALNDIEHTKTKVYHPQTNDICRRF 127
+                         *******************.********************8..********************************* PP
+
+  IS481.original.hmm 279 hrT 281
+                         h+ 
+   lcl|aorf_00010|P1 128 HKA 130
+                         *95 PP
+
+
+
+Internal pipeline statistics summary:
+-------------------------------------
+Query sequence(s):                         1  (132 residues)
+Target model(s):                         116  (57162 nodes)
+Passed MSV filter:                         4  (0.0344828); expected 2.3 (0.02)
+Passed bias filter:                        4  (0.0344828); expected 2.3 (0.02)
+Passed Vit filter:                         3  (0.0258621); expected 0.1 (0.001)
+Passed Fwd filter:                         1  (0.0172414); expected 0.0 (1e-05)
+Initial search space (Z):                116  [actual number of targets]
+Domain search space  (domZ):               1  [number of targets reported over threshold]
+# CPU time: 0.06u 0.00s 00:00:00.06 Elapsed: 00:00:00.06
+# Mc/sec: 117.90
+//
diff --git a/t/data/ids-with-spaces.phy b/t/data/ids-with-spaces.phy
new file mode 100644
index 0000000..0bb8a53
--- /dev/null
+++ b/t/data/ids-with-spaces.phy
@@ -0,0 +1,19 @@
+18  162
+A BAD ID  MTRPRTDAIHHHVVVNAPIERAFAVFTTRFGDFKPREHNLLAIPITETVFECHAGGHIYDRGVDGSVCKWARVLVYEPPSRVLFTWDIGPTWRPETDLAKTSEVEVRFTAQSAETTRVDLEHRHLDRHGPGWESVADGVDSEAGWPLYLRRYTDLLCIQVQP
+A57307    MTRPRTDAIHHHVVVNAPIERAFAVFTTRFGDFKPREHNLLAIPITETVFECHAGGHIYDRGVDGSVCKWARVLVYEPPSRVLFTWDIGPTWRPETDLAKTSEVEVRFTAQSAETTRVDLEHRHLDRHGPGWESVADGVDSEAGWPLYLRRYTDLLCIQVQP
+A61002    MTRPRTDAIHHHVVVNAPIERAFAVFTTRFGDFKPREHNLLAIPITETVFECHAGGHIYDRGVDGSVCKWARVLVYEPPSRVLFTWDIGPTWRPETDLAKTSEVEVRFTAQSAETTRVDLEHRHLDRHGPGWESVADGVDSEAGWPLYLRRYTDLLCIQVQP
+A65082    MTRPRTDAIHHHVVVNAPIERAFAVFTTRFGDFKPREHNLLAIPITETVFECHAGGHIYDRGVDGSVCKWARVLVYEPPSRVLFTWDIGPTWRPETDLAKTSEVEVRFTAQSAETTRVDLEHRHLDRHGPGWESVADGVDSEAGWPLYLRRYTDLLCIQVQP
+A1895     MTRPRTDAIHHHVVVNAPIERAFAVFTTRFGDFKPREHNLLAIPITETVFECHAGGHIYDRGVDGSVCKWARLLVYEPPSRVLFTWDIGPTWRPETDLAKTSEVEVRFTAQSAETTRVDLEHRHLDRHGPGWESVADGVDSEAGWPLYLRRYTDLLCIQVQP
+A53685    MTRPRTDAIHHHVVVNAPIERAFAVFTTRFGDFKPREHNLLAIPITETVFECHAGGHIYDRGVDGSVCKWARVLVYEPPSRVLFTWDIGPTWRPETDLAKTSEVEVRFTAQSAETTRVDLEHRHLDRHGPGWESVADGVDSEAGWPLYLRRYTDLLCIQVQP
+A9694     MTRPRTDAIHHHVVVNAPIERAFAVFTTRFGDFKPREHNLLAIPITETVFECHAGGHIYDRGVDGSVCKWARVLVYEPPSRVLFTWDIGPTWRPETDLAKTSEVEVRFTAQSAETTRVDLEHRHLDRHGPGWESVADGVDSEAGWPLYLRRYTDLLCIQVQP
+A13531    MTRPRTDAIHHHVVVNAPIERAFAVFTTRFGDFKPREHNLLAIPITETVFECHAGGHIYDRGVDGSVCKWARVLVYEPPSRVLFTWDIGPTWRPETDLAKTSEVEVRFTAQSAETTRVDLEHRHLDRHGPGWESVADGVDSEAGWPLYLRRYTDLLCIQVQP
+A21170    MTRPRTDAIHHHVVVNAPIERAFAVFTTRFGDFKPREHNLLAIPITETVFECHAGGHIYDRGVDGSVCKWARVLVYEPPSRVLFTWDIGPTWRPETDLAKTSEVEVRFTAQSAETTRVDLEHRHLDRHGPGWESVADGVDSEAGWPLYLRRYTDLLCIQVQP
+A17451    MTRPRTDAIHHHVVVNAPIERAFAVFTTRFGDFKPREHNLLAIPITETVFECHAGGHIYDRGVDGSVCKWARVLVYEPPSRVLFTWDIGPTWRPETDLAKTSEVEVRFTAQSAETTRVDLEHRHLDRHGPGWESVADGVDSEAGWPLYLRRYTDLLCIQVQP
+A30004    MTRPRTDAIHHHVVVNAPIERAFAVFTTRFGDFKPREHNLLAIPITETVFECHAGGHIYDRGVDGSVCKWARVLVYEPPSRVLFTWDIGPTWRPETDLAKTSEVEVRFTAQSAETTRVDLEHRHLDRHGPGWESVADGVDSEAGWPLYLRRYTDLLCIQVQP
+A34040    MTRPRTDAIHHHVVVNAPIERAFAVFTTRFGDFKPREHNLLAIPITETVFECHAGGHIYDRGVDGSVCKWARVLVYEPPSRVLFTWDIGPTWRPETDLAKTSEVEVRFTAQSAETTRVDLEHRHLDRHGPGWESVADGVDSEAGWPLYLRRYTDLLCIQVQP
+A38189    MTRPRTDAIHHHVVVNAPIERAFAVFTTRFGDFKPREHNLLAIPITETVFECHAGGHIYDRGVDGSVCKWARVLVYEPPSRVLFTWDIGPTWRPETDLAKTSEVEVRFTAQSAETTRVDLEHRHLDRHGPGWESVADGVDSEAGWPLYLRRYTDLLCIQVQP
+A72804    MTRPRTDAIHHHVVVNAPIERAFAVFTTRFGDFKPREHNLLAIPITETVFECHAGGHIYDRGVDGSVCKWARVLVYEPPSRVLFTWDIGPTWRPETDLAKTSEVEVRFTAQSAETTRVDLEHRHLDRHGPGWESVADGVDSEAGWPLYLRRYTDLLCIQVQP
+A42101    MTRPRTDAIHHHVVVNAPIERAFAVFTTRFGDFKPREHNLLAIPITETVFECHAGGHIYDRGVDGSVCKWARVLVYEPPSRVLFTWDIGPTWRPETDLAKTSEVEVRFTAQSAETTRVDLEHRHLDRHGPGWESVADGVDSEAGWPLYLRRYTDLXXXQVQP
+A45935    MTRPRTDAIHHHVVVNAPIERAFAVFTTRFGDFKPREHNLLAIPITETVFECHAGGHIYDRGVDGSVCKWARVLVYEPPSRVLFTWDIGPTWRPETDLAKTSEVEVRFTAQSAETTRVDLEHRHLDRHGPGWESVADGVDSEAGWPLYLRRYTDLLCIQVQP
+A76877    MTRPRTDAIHHHVVVNAPIERAFAVFTTRFGDFKPREHNLLAIPITETVFECHAGGHIYDRGVDGSVCKWARVLVYEPPSRVLFTWDIGPTWRPETDLAKTSEVEVRFTAQSAETTRVDLEHRHLDRHGPGWESVADGVDSEAGWPLYLRRYTDLLCIQVQP
+A49905    MTRPRTDAIHHHVVVNAPIERAFAVFTTRFGDFKPREHNLLAIPITETVFECHAGGHIYDRGVDGSVCKWARVLVYEPPSRVLFTWDIGPTWRPETDLAKTSEVEVRFTAQSAETTRVDLEHRHLDRHGPGWESVADGVDSEAGWPLYLRRYTDLLCIQVQP
diff --git a/t/data/mus.bls.xml b/t/data/mus.bls.xml
deleted file mode 100644
index b33897e..0000000
--- a/t/data/mus.bls.xml
+++ /dev/null
@@ -1,660 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE BlastOutput PUBLIC "-//NCBI//NCBI BlastOutput/EN" "NCBI_BlastOutput.dtd">
-<BlastOutput>
-  <BlastOutput_program>blastn</BlastOutput_program>
-  <BlastOutput_version>blastn 2.2.6 [Apr-09-2003]</BlastOutput_version>
-  <BlastOutput_reference>~Reference: Altschul, Stephen F., Thomas L. Madden, Alejandro A. Schaffer, ~Jinghui Zhang, Zheng Zhang, Webb Miller, and David J. Lipman (1997), ~"Gapped BLAST and PSI-BLAST: a new generation of protein database search~programs",  Nucleic Acids Res. 25:3389-3402.</BlastOutput_reference>
-  <BlastOutput_db>Hs15_up1000</BlastOutput_db>
-  <BlastOutput_query-ID>lcl|QUERY</BlastOutput_query-ID>
-  <BlastOutput_query-def>NM_011441_up_1000_chr1_4505586_r chr1:4505586-4506585</BlastOutput_query-def>
-  <BlastOutput_query-len>1000</BlastOutput_query-len>
-  <BlastOutput_param>
-    <Parameters>
-      <Parameters_expect>10</Parameters_expect>
-      <Parameters_sc-match>1</Parameters_sc-match>
-      <Parameters_sc-mismatch>-3</Parameters_sc-mismatch>
-      <Parameters_gap-open>5</Parameters_gap-open>
-      <Parameters_gap-extend>2</Parameters_gap-extend>
-      <Parameters_filter>D</Parameters_filter>
-    </Parameters>
-  </BlastOutput_param>
-  <BlastOutput_iterations>
-    <Iteration>
-      <Iteration_iter-num>1</Iteration_iter-num>
-      <Iteration_hits>
-        <Hit>
-          <Hit_num>1</Hit_num>
-          <Hit_id>gnl|BL_ORD_ID|3153</Hit_id>
-          <Hit_def>NM_001938_up_1000_chr1_93161154_f chr1:93161154-93162153</Hit_def>
-          <Hit_accession>3153</Hit_accession>
-          <Hit_len>1000</Hit_len>
-          <Hit_hsps>
-            <Hsp>
-              <Hsp_num>1</Hsp_num>
-              <Hsp_bit-score>36.1753</Hsp_bit-score>
-              <Hsp_score>18</Hsp_score>
-              <Hsp_evalue>0.218116</Hsp_evalue>
-              <Hsp_query-from>881</Hsp_query-from>
-              <Hsp_query-to>860</Hsp_query-to>
-              <Hsp_hit-from>881</Hsp_hit-from>
-              <Hsp_hit-to>902</Hsp_hit-to>
-              <Hsp_query-frame>1</Hsp_query-frame>
-              <Hsp_hit-frame>-1</Hsp_hit-frame>
-              <Hsp_identity>21</Hsp_identity>
-              <Hsp_positive>21</Hsp_positive>
-              <Hsp_align-len>22</Hsp_align-len>
-              <Hsp_qseq>GGAGCGGCTTCCTGCAAGCCTT</Hsp_qseq>
-              <Hsp_hseq>GGAGCGGCTTCCTGCAAACCTT</Hsp_hseq>
-              <Hsp_midline>||||||||||||||||| ||||</Hsp_midline>
-            </Hsp>
-          </Hit_hsps>
-        </Hit>
-        <Hit>
-          <Hit_num>2</Hit_num>
-          <Hit_id>gnl|BL_ORD_ID|17120</Hit_id>
-          <Hit_def>NM_152652_up_1000_chr16_30403002_f chr16:30403002-30404001</Hit_def>
-          <Hit_accession>17120</Hit_accession>
-          <Hit_len>1000</Hit_len>
-          <Hit_hsps>
-            <Hsp>
-              <Hsp_num>1</Hsp_num>
-              <Hsp_bit-score>34.193</Hsp_bit-score>
-              <Hsp_score>17</Hsp_score>
-              <Hsp_evalue>0.861861</Hsp_evalue>
-              <Hsp_query-from>817</Hsp_query-from>
-              <Hsp_query-to>833</Hsp_query-to>
-              <Hsp_hit-from>219</Hsp_hit-from>
-              <Hsp_hit-to>235</Hsp_hit-to>
-              <Hsp_query-frame>1</Hsp_query-frame>
-              <Hsp_hit-frame>1</Hsp_hit-frame>
-              <Hsp_identity>17</Hsp_identity>
-              <Hsp_positive>17</Hsp_positive>
-              <Hsp_align-len>17</Hsp_align-len>
-              <Hsp_qseq>ATACCCACCCCCACCCC</Hsp_qseq>
-              <Hsp_hseq>ATACCCACCCCCACCCC</Hsp_hseq>
-              <Hsp_midline>|||||||||||||||||</Hsp_midline>
-            </Hsp>
-          </Hit_hsps>
-        </Hit>
-        <Hit>
-          <Hit_num>3</Hit_num>
-          <Hit_id>gnl|BL_ORD_ID|17093</Hit_id>
-          <Hit_def>NM_145239_up_1000_chr16_29821041_f chr16:29821041-29822040</Hit_def>
-          <Hit_accession>17093</Hit_accession>
-          <Hit_len>1000</Hit_len>
-          <Hit_hsps>
-            <Hsp>
-              <Hsp_num>1</Hsp_num>
-              <Hsp_bit-score>34.193</Hsp_bit-score>
-              <Hsp_score>17</Hsp_score>
-              <Hsp_evalue>0.861861</Hsp_evalue>
-              <Hsp_query-from>440</Hsp_query-from>
-              <Hsp_query-to>424</Hsp_query-to>
-              <Hsp_hit-from>157</Hsp_hit-from>
-              <Hsp_hit-to>173</Hsp_hit-to>
-              <Hsp_query-frame>1</Hsp_query-frame>
-              <Hsp_hit-frame>-1</Hsp_hit-frame>
-              <Hsp_identity>17</Hsp_identity>
-              <Hsp_positive>17</Hsp_positive>
-              <Hsp_align-len>17</Hsp_align-len>
-              <Hsp_qseq>CTGTGGAGAGCAAGTTC</Hsp_qseq>
-              <Hsp_hseq>CTGTGGAGAGCAAGTTC</Hsp_hseq>
-              <Hsp_midline>|||||||||||||||||</Hsp_midline>
-            </Hsp>
-          </Hit_hsps>
-        </Hit>
-        <Hit>
-          <Hit_num>4</Hit_num>
-          <Hit_id>gnl|BL_ORD_ID|14075</Hit_id>
-          <Hit_def>NM_013442_up_1000_chr9_35093156_r chr9:35093156-35094155</Hit_def>
-          <Hit_accession>14075</Hit_accession>
-          <Hit_len>1000</Hit_len>
-          <Hit_hsps>
-            <Hsp>
-              <Hsp_num>1</Hsp_num>
-              <Hsp_bit-score>34.193</Hsp_bit-score>
-              <Hsp_score>17</Hsp_score>
-              <Hsp_evalue>0.861861</Hsp_evalue>
-              <Hsp_query-from>158</Hsp_query-from>
-              <Hsp_query-to>142</Hsp_query-to>
-              <Hsp_hit-from>573</Hsp_hit-from>
-              <Hsp_hit-to>589</Hsp_hit-to>
-              <Hsp_query-frame>1</Hsp_query-frame>
-              <Hsp_hit-frame>-1</Hsp_hit-frame>
-              <Hsp_identity>17</Hsp_identity>
-              <Hsp_positive>17</Hsp_positive>
-              <Hsp_align-len>17</Hsp_align-len>
-              <Hsp_qseq>GGTCAGTCCCCAGTGGG</Hsp_qseq>
-              <Hsp_hseq>GGTCAGTCCCCAGTGGG</Hsp_hseq>
-              <Hsp_midline>|||||||||||||||||</Hsp_midline>
-            </Hsp>
-          </Hit_hsps>
-        </Hit>
-        <Hit>
-          <Hit_num>5</Hit_num>
-          <Hit_id>gnl|BL_ORD_ID|13691</Hit_id>
-          <Hit_def>NM_153360_up_1000_chr20_57728371_r chr20:57728371-57729370</Hit_def>
-          <Hit_accession>13691</Hit_accession>
-          <Hit_len>1000</Hit_len>
-          <Hit_hsps>
-            <Hsp>
-              <Hsp_num>1</Hsp_num>
-              <Hsp_bit-score>34.193</Hsp_bit-score>
-              <Hsp_score>17</Hsp_score>
-              <Hsp_evalue>0.861861</Hsp_evalue>
-              <Hsp_query-from>372</Hsp_query-from>
-              <Hsp_query-to>388</Hsp_query-to>
-              <Hsp_hit-from>941</Hsp_hit-from>
-              <Hsp_hit-to>957</Hsp_hit-to>
-              <Hsp_query-frame>1</Hsp_query-frame>
-              <Hsp_hit-frame>1</Hsp_hit-frame>
-              <Hsp_identity>17</Hsp_identity>
-              <Hsp_positive>17</Hsp_positive>
-              <Hsp_align-len>17</Hsp_align-len>
-              <Hsp_qseq>CGCCGGGGGCTGTCTCC</Hsp_qseq>
-              <Hsp_hseq>CGCCGGGGGCTGTCTCC</Hsp_hseq>
-              <Hsp_midline>|||||||||||||||||</Hsp_midline>
-            </Hsp>
-          </Hit_hsps>
-        </Hit>
-        <Hit>
-          <Hit_num>6</Hit_num>
-          <Hit_id>gnl|BL_ORD_ID|12570</Hit_id>
-          <Hit_def>NM_018099_up_1000_chr12_29201400_f chr12:29201400-29202399</Hit_def>
-          <Hit_accession>12570</Hit_accession>
-          <Hit_len>1000</Hit_len>
-          <Hit_hsps>
-            <Hsp>
-              <Hsp_num>1</Hsp_num>
-              <Hsp_bit-score>34.193</Hsp_bit-score>
-              <Hsp_score>17</Hsp_score>
-              <Hsp_evalue>0.861861</Hsp_evalue>
-              <Hsp_query-from>818</Hsp_query-from>
-              <Hsp_query-to>834</Hsp_query-to>
-              <Hsp_hit-from>261</Hsp_hit-from>
-              <Hsp_hit-to>277</Hsp_hit-to>
-              <Hsp_query-frame>1</Hsp_query-frame>
-              <Hsp_hit-frame>1</Hsp_hit-frame>
-              <Hsp_identity>17</Hsp_identity>
-              <Hsp_positive>17</Hsp_positive>
-              <Hsp_align-len>17</Hsp_align-len>
-              <Hsp_qseq>TACCCACCCCCACCCCA</Hsp_qseq>
-              <Hsp_hseq>TACCCACCCCCACCCCA</Hsp_hseq>
-              <Hsp_midline>|||||||||||||||||</Hsp_midline>
-            </Hsp>
-          </Hit_hsps>
-        </Hit>
-        <Hit>
-          <Hit_num>7</Hit_num>
-          <Hit_id>gnl|BL_ORD_ID|10324</Hit_id>
-          <Hit_def>NM_002556_up_1000_chr11_59634501_r chr11:59634501-59635500</Hit_def>
-          <Hit_accession>10324</Hit_accession>
-          <Hit_len>1000</Hit_len>
-          <Hit_hsps>
-            <Hsp>
-              <Hsp_num>1</Hsp_num>
-              <Hsp_bit-score>34.193</Hsp_bit-score>
-              <Hsp_score>17</Hsp_score>
-              <Hsp_evalue>0.861861</Hsp_evalue>
-              <Hsp_query-from>424</Hsp_query-from>
-              <Hsp_query-to>408</Hsp_query-to>
-              <Hsp_hit-from>978</Hsp_hit-from>
-              <Hsp_hit-to>994</Hsp_hit-to>
-              <Hsp_query-frame>1</Hsp_query-frame>
-              <Hsp_hit-frame>-1</Hsp_hit-frame>
-              <Hsp_identity>17</Hsp_identity>
-              <Hsp_positive>17</Hsp_positive>
-              <Hsp_align-len>17</Hsp_align-len>
-              <Hsp_qseq>CATGAGGGCGGAAAAGG</Hsp_qseq>
-              <Hsp_hseq>CATGAGGGCGGAAAAGG</Hsp_hseq>
-              <Hsp_midline>|||||||||||||||||</Hsp_midline>
-            </Hsp>
-          </Hit_hsps>
-        </Hit>
-        <Hit>
-          <Hit_num>8</Hit_num>
-          <Hit_id>gnl|BL_ORD_ID|7243</Hit_id>
-          <Hit_def>NM_003687_up_1000_chr5_131623250_f chr5:131623250-131624249</Hit_def>
-          <Hit_accession>7243</Hit_accession>
-          <Hit_len>1000</Hit_len>
-          <Hit_hsps>
-            <Hsp>
-              <Hsp_num>1</Hsp_num>
-              <Hsp_bit-score>34.193</Hsp_bit-score>
-              <Hsp_score>17</Hsp_score>
-              <Hsp_evalue>0.861861</Hsp_evalue>
-              <Hsp_query-from>46</Hsp_query-from>
-              <Hsp_query-to>62</Hsp_query-to>
-              <Hsp_hit-from>338</Hsp_hit-from>
-              <Hsp_hit-to>354</Hsp_hit-to>
-              <Hsp_query-frame>1</Hsp_query-frame>
-              <Hsp_hit-frame>1</Hsp_hit-frame>
-              <Hsp_identity>17</Hsp_identity>
-              <Hsp_positive>17</Hsp_positive>
-              <Hsp_align-len>17</Hsp_align-len>
-              <Hsp_qseq>GGCCTGAATGTTCTGGG</Hsp_qseq>
-              <Hsp_hseq>GGCCTGAATGTTCTGGG</Hsp_hseq>
-              <Hsp_midline>|||||||||||||||||</Hsp_midline>
-            </Hsp>
-          </Hit_hsps>
-        </Hit>
-        <Hit>
-          <Hit_num>9</Hit_num>
-          <Hit_id>gnl|BL_ORD_ID|13146</Hit_id>
-          <Hit_def>NM_002442_up_1000_chr12_120589812_r chr12:120589812-120590811</Hit_def>
-          <Hit_accession>13146</Hit_accession>
-          <Hit_len>1000</Hit_len>
-          <Hit_hsps>
-            <Hsp>
-              <Hsp_num>1</Hsp_num>
-              <Hsp_bit-score>32.2106</Hsp_bit-score>
-              <Hsp_score>16</Hsp_score>
-              <Hsp_evalue>3.40554</Hsp_evalue>
-              <Hsp_query-from>835</Hsp_query-from>
-              <Hsp_query-to>820</Hsp_query-to>
-              <Hsp_hit-from>414</Hsp_hit-from>
-              <Hsp_hit-to>429</Hsp_hit-to>
-              <Hsp_query-frame>1</Hsp_query-frame>
-              <Hsp_hit-frame>-1</Hsp_hit-frame>
-              <Hsp_identity>16</Hsp_identity>
-              <Hsp_positive>16</Hsp_positive>
-              <Hsp_align-len>16</Hsp_align-len>
-              <Hsp_qseq>CTGGGGTGGGGGTGGG</Hsp_qseq>
-              <Hsp_hseq>CTGGGGTGGGGGTGGG</Hsp_hseq>
-              <Hsp_midline>||||||||||||||||</Hsp_midline>
-            </Hsp>
-          </Hit_hsps>
-        </Hit>
-        <Hit>
-          <Hit_num>10</Hit_num>
-          <Hit_id>gnl|BL_ORD_ID|12936</Hit_id>
-          <Hit_def>NM_018057_up_1000_chr12_85239491_r chr12:85239491-85240490</Hit_def>
-          <Hit_accession>12936</Hit_accession>
-          <Hit_len>1000</Hit_len>
-          <Hit_hsps>
-            <Hsp>
-              <Hsp_num>1</Hsp_num>
-              <Hsp_bit-score>32.2106</Hsp_bit-score>
-              <Hsp_score>16</Hsp_score>
-              <Hsp_evalue>3.40554</Hsp_evalue>
-              <Hsp_query-from>265</Hsp_query-from>
-              <Hsp_query-to>280</Hsp_query-to>
-              <Hsp_hit-from>793</Hsp_hit-from>
-              <Hsp_hit-to>808</Hsp_hit-to>
-              <Hsp_query-frame>1</Hsp_query-frame>
-              <Hsp_hit-frame>1</Hsp_hit-frame>
-              <Hsp_identity>16</Hsp_identity>
-              <Hsp_positive>16</Hsp_positive>
-              <Hsp_align-len>16</Hsp_align-len>
-              <Hsp_qseq>GGGAGGTGCGGAGCCC</Hsp_qseq>
-              <Hsp_hseq>GGGAGGTGCGGAGCCC</Hsp_hseq>
-              <Hsp_midline>||||||||||||||||</Hsp_midline>
-            </Hsp>
-          </Hit_hsps>
-        </Hit>
-        <Hit>
-          <Hit_num>11</Hit_num>
-          <Hit_id>gnl|BL_ORD_ID|12754</Hit_id>
-          <Hit_def>NM_031157_up_1000_chr12_54390235_f chr12:54390235-54391234</Hit_def>
-          <Hit_accession>12754</Hit_accession>
-          <Hit_len>1000</Hit_len>
-          <Hit_hsps>
-            <Hsp>
-              <Hsp_num>1</Hsp_num>
-              <Hsp_bit-score>32.2106</Hsp_bit-score>
-              <Hsp_score>16</Hsp_score>
-              <Hsp_evalue>3.40554</Hsp_evalue>
-              <Hsp_query-from>296</Hsp_query-from>
-              <Hsp_query-to>311</Hsp_query-to>
-              <Hsp_hit-from>561</Hsp_hit-from>
-              <Hsp_hit-to>576</Hsp_hit-to>
-              <Hsp_query-frame>1</Hsp_query-frame>
-              <Hsp_hit-frame>1</Hsp_hit-frame>
-              <Hsp_identity>16</Hsp_identity>
-              <Hsp_positive>16</Hsp_positive>
-              <Hsp_align-len>16</Hsp_align-len>
-              <Hsp_qseq>GTGTTCTCAGAGGCAG</Hsp_qseq>
-              <Hsp_hseq>GTGTTCTCAGAGGCAG</Hsp_hseq>
-              <Hsp_midline>||||||||||||||||</Hsp_midline>
-            </Hsp>
-          </Hit_hsps>
-        </Hit>
-        <Hit>
-          <Hit_num>12</Hit_num>
-          <Hit_id>gnl|BL_ORD_ID|12753</Hit_id>
-          <Hit_def>NM_002136_up_1000_chr12_54390235_f chr12:54390235-54391234</Hit_def>
-          <Hit_accession>12753</Hit_accession>
-          <Hit_len>1000</Hit_len>
-          <Hit_hsps>
-            <Hsp>
-              <Hsp_num>1</Hsp_num>
-              <Hsp_bit-score>32.2106</Hsp_bit-score>
-              <Hsp_score>16</Hsp_score>
-              <Hsp_evalue>3.40554</Hsp_evalue>
-              <Hsp_query-from>296</Hsp_query-from>
-              <Hsp_query-to>311</Hsp_query-to>
-              <Hsp_hit-from>561</Hsp_hit-from>
-              <Hsp_hit-to>576</Hsp_hit-to>
-              <Hsp_query-frame>1</Hsp_query-frame>
-              <Hsp_hit-frame>1</Hsp_hit-frame>
-              <Hsp_identity>16</Hsp_identity>
-              <Hsp_positive>16</Hsp_positive>
-              <Hsp_align-len>16</Hsp_align-len>
-              <Hsp_qseq>GTGTTCTCAGAGGCAG</Hsp_qseq>
-              <Hsp_hseq>GTGTTCTCAGAGGCAG</Hsp_hseq>
-              <Hsp_midline>||||||||||||||||</Hsp_midline>
-            </Hsp>
-          </Hit_hsps>
-        </Hit>
-        <Hit>
-          <Hit_num>13</Hit_num>
-          <Hit_id>gnl|BL_ORD_ID|12752</Hit_id>
-          <Hit_def>NM_012117_up_1000_chr12_54390632_r chr12:54390632-54391631</Hit_def>
-          <Hit_accession>12752</Hit_accession>
-          <Hit_len>1000</Hit_len>
-          <Hit_hsps>
-            <Hsp>
-              <Hsp_num>1</Hsp_num>
-              <Hsp_bit-score>32.2106</Hsp_bit-score>
-              <Hsp_score>16</Hsp_score>
-              <Hsp_evalue>3.40554</Hsp_evalue>
-              <Hsp_query-from>311</Hsp_query-from>
-              <Hsp_query-to>296</Hsp_query-to>
-              <Hsp_hit-from>822</Hsp_hit-from>
-              <Hsp_hit-to>837</Hsp_hit-to>
-              <Hsp_query-frame>1</Hsp_query-frame>
-              <Hsp_hit-frame>-1</Hsp_hit-frame>
-              <Hsp_identity>16</Hsp_identity>
-              <Hsp_positive>16</Hsp_positive>
-              <Hsp_align-len>16</Hsp_align-len>
-              <Hsp_qseq>CTGCCTCTGAGAACAC</Hsp_qseq>
-              <Hsp_hseq>CTGCCTCTGAGAACAC</Hsp_hseq>
-              <Hsp_midline>||||||||||||||||</Hsp_midline>
-            </Hsp>
-          </Hit_hsps>
-        </Hit>
-        <Hit>
-          <Hit_num>14</Hit_num>
-          <Hit_id>gnl|BL_ORD_ID|12701</Hit_id>
-          <Hit_def>NM_058242_up_1000_chr12_52603721_r chr12:52603721-52604720</Hit_def>
-          <Hit_accession>12701</Hit_accession>
-          <Hit_len>1000</Hit_len>
-          <Hit_hsps>
-            <Hsp>
-              <Hsp_num>1</Hsp_num>
-              <Hsp_bit-score>32.2106</Hsp_bit-score>
-              <Hsp_score>16</Hsp_score>
-              <Hsp_evalue>3.40554</Hsp_evalue>
-              <Hsp_query-from>721</Hsp_query-from>
-              <Hsp_query-to>706</Hsp_query-to>
-              <Hsp_hit-from>390</Hsp_hit-from>
-              <Hsp_hit-to>405</Hsp_hit-to>
-              <Hsp_query-frame>1</Hsp_query-frame>
-              <Hsp_hit-frame>-1</Hsp_hit-frame>
-              <Hsp_identity>16</Hsp_identity>
-              <Hsp_positive>16</Hsp_positive>
-              <Hsp_align-len>16</Hsp_align-len>
-              <Hsp_qseq>ATCCCCAAAGCAGACC</Hsp_qseq>
-              <Hsp_hseq>ATCCCCAAAGCAGACC</Hsp_hseq>
-              <Hsp_midline>||||||||||||||||</Hsp_midline>
-            </Hsp>
-          </Hit_hsps>
-        </Hit>
-        <Hit>
-          <Hit_num>15</Hit_num>
-          <Hit_id>gnl|BL_ORD_ID|12700</Hit_id>
-          <Hit_def>NM_005554_up_1000_chr12_52603768_r chr12:52603768-52604767</Hit_def>
-          <Hit_accession>12700</Hit_accession>
-          <Hit_len>1000</Hit_len>
-          <Hit_hsps>
-            <Hsp>
-              <Hsp_num>1</Hsp_num>
-              <Hsp_bit-score>32.2106</Hsp_bit-score>
-              <Hsp_score>16</Hsp_score>
-              <Hsp_evalue>3.40554</Hsp_evalue>
-              <Hsp_query-from>721</Hsp_query-from>
-              <Hsp_query-to>706</Hsp_query-to>
-              <Hsp_hit-from>437</Hsp_hit-from>
-              <Hsp_hit-to>452</Hsp_hit-to>
-              <Hsp_query-frame>1</Hsp_query-frame>
-              <Hsp_hit-frame>-1</Hsp_hit-frame>
-              <Hsp_identity>16</Hsp_identity>
-              <Hsp_positive>16</Hsp_positive>
-              <Hsp_align-len>16</Hsp_align-len>
-              <Hsp_qseq>ATCCCCAAAGCAGACC</Hsp_qseq>
-              <Hsp_hseq>ATCCCCAAAGCAGACC</Hsp_hseq>
-              <Hsp_midline>||||||||||||||||</Hsp_midline>
-            </Hsp>
-          </Hit_hsps>
-        </Hit>
-        <Hit>
-          <Hit_num>16</Hit_num>
-          <Hit_id>gnl|BL_ORD_ID|12343</Hit_id>
-          <Hit_def>NM_152441_up_1000_chr12_1582593_r chr12:1582593-1583592</Hit_def>
-          <Hit_accession>12343</Hit_accession>
-          <Hit_len>1000</Hit_len>
-          <Hit_hsps>
-            <Hsp>
-              <Hsp_num>1</Hsp_num>
-              <Hsp_bit-score>32.2106</Hsp_bit-score>
-              <Hsp_score>16</Hsp_score>
-              <Hsp_evalue>3.40554</Hsp_evalue>
-              <Hsp_query-from>270</Hsp_query-from>
-              <Hsp_query-to>285</Hsp_query-to>
-              <Hsp_hit-from>850</Hsp_hit-from>
-              <Hsp_hit-to>865</Hsp_hit-to>
-              <Hsp_query-frame>1</Hsp_query-frame>
-              <Hsp_hit-frame>1</Hsp_hit-frame>
-              <Hsp_identity>16</Hsp_identity>
-              <Hsp_positive>16</Hsp_positive>
-              <Hsp_align-len>16</Hsp_align-len>
-              <Hsp_qseq>GTGCGGAGCCCGGGGC</Hsp_qseq>
-              <Hsp_hseq>GTGCGGAGCCCGGGGC</Hsp_hseq>
-              <Hsp_midline>||||||||||||||||</Hsp_midline>
-            </Hsp>
-          </Hit_hsps>
-        </Hit>
-        <Hit>
-          <Hit_num>17</Hit_num>
-          <Hit_id>gnl|BL_ORD_ID|10984</Hit_id>
-          <Hit_def>NM_173696_up_1000_chrX_8347800_r chrX:8347800-8348799</Hit_def>
-          <Hit_accession>10984</Hit_accession>
-          <Hit_len>1000</Hit_len>
-          <Hit_hsps>
-            <Hsp>
-              <Hsp_num>1</Hsp_num>
-              <Hsp_bit-score>32.2106</Hsp_bit-score>
-              <Hsp_score>16</Hsp_score>
-              <Hsp_evalue>3.40554</Hsp_evalue>
-              <Hsp_query-from>821</Hsp_query-from>
-              <Hsp_query-to>836</Hsp_query-to>
-              <Hsp_hit-from>51</Hsp_hit-from>
-              <Hsp_hit-to>66</Hsp_hit-to>
-              <Hsp_query-frame>1</Hsp_query-frame>
-              <Hsp_hit-frame>1</Hsp_hit-frame>
-              <Hsp_identity>16</Hsp_identity>
-              <Hsp_positive>16</Hsp_positive>
-              <Hsp_align-len>16</Hsp_align-len>
-              <Hsp_qseq>CCACCCCCACCCCAGT</Hsp_qseq>
-              <Hsp_hseq>CCACCCCCACCCCAGT</Hsp_hseq>
-              <Hsp_midline>||||||||||||||||</Hsp_midline>
-            </Hsp>
-          </Hit_hsps>
-        </Hit>
-        <Hit>
-          <Hit_num>18</Hit_num>
-          <Hit_id>gnl|BL_ORD_ID|10496</Hit_id>
-          <Hit_def>NM_004561_up_1000_chr11_65810324_f chr11:65810324-65811323</Hit_def>
-          <Hit_accession>10496</Hit_accession>
-          <Hit_len>1000</Hit_len>
-          <Hit_hsps>
-            <Hsp>
-              <Hsp_num>1</Hsp_num>
-              <Hsp_bit-score>32.2106</Hsp_bit-score>
-              <Hsp_score>16</Hsp_score>
-              <Hsp_evalue>3.40554</Hsp_evalue>
-              <Hsp_query-from>835</Hsp_query-from>
-              <Hsp_query-to>820</Hsp_query-to>
-              <Hsp_hit-from>815</Hsp_hit-from>
-              <Hsp_hit-to>830</Hsp_hit-to>
-              <Hsp_query-frame>1</Hsp_query-frame>
-              <Hsp_hit-frame>-1</Hsp_hit-frame>
-              <Hsp_identity>16</Hsp_identity>
-              <Hsp_positive>16</Hsp_positive>
-              <Hsp_align-len>16</Hsp_align-len>
-              <Hsp_qseq>CTGGGGTGGGGGTGGG</Hsp_qseq>
-              <Hsp_hseq>CTGGGGTGGGGGTGGG</Hsp_hseq>
-              <Hsp_midline>||||||||||||||||</Hsp_midline>
-            </Hsp>
-          </Hit_hsps>
-        </Hit>
-        <Hit>
-          <Hit_num>19</Hit_num>
-          <Hit_id>gnl|BL_ORD_ID|7650</Hit_id>
-          <Hit_def>NM_014123_up_1000_chr6_4801623_r chr6:4801623-4802622</Hit_def>
-          <Hit_accession>7650</Hit_accession>
-          <Hit_len>1000</Hit_len>
-          <Hit_hsps>
-            <Hsp>
-              <Hsp_num>1</Hsp_num>
-              <Hsp_bit-score>32.2106</Hsp_bit-score>
-              <Hsp_score>16</Hsp_score>
-              <Hsp_evalue>3.40554</Hsp_evalue>
-              <Hsp_query-from>323</Hsp_query-from>
-              <Hsp_query-to>308</Hsp_query-to>
-              <Hsp_hit-from>345</Hsp_hit-from>
-              <Hsp_hit-to>360</Hsp_hit-to>
-              <Hsp_query-frame>1</Hsp_query-frame>
-              <Hsp_hit-frame>-1</Hsp_hit-frame>
-              <Hsp_identity>16</Hsp_identity>
-              <Hsp_positive>16</Hsp_positive>
-              <Hsp_align-len>16</Hsp_align-len>
-              <Hsp_qseq>GTGCCTCAGAGTCTGC</Hsp_qseq>
-              <Hsp_hseq>GTGCCTCAGAGTCTGC</Hsp_hseq>
-              <Hsp_midline>||||||||||||||||</Hsp_midline>
-            </Hsp>
-          </Hit_hsps>
-        </Hit>
-        <Hit>
-          <Hit_num>20</Hit_num>
-          <Hit_id>gnl|BL_ORD_ID|7303</Hit_id>
-          <Hit_def>NM_004730_up_1000_chr5_137909767_r chr5:137909767-137910766</Hit_def>
-          <Hit_accession>7303</Hit_accession>
-          <Hit_len>1000</Hit_len>
-          <Hit_hsps>
-            <Hsp>
-              <Hsp_num>1</Hsp_num>
-              <Hsp_bit-score>32.2106</Hsp_bit-score>
-              <Hsp_score>16</Hsp_score>
-              <Hsp_evalue>3.40554</Hsp_evalue>
-              <Hsp_query-from>733</Hsp_query-from>
-              <Hsp_query-to>752</Hsp_query-to>
-              <Hsp_hit-from>163</Hsp_hit-from>
-              <Hsp_hit-to>182</Hsp_hit-to>
-              <Hsp_query-frame>1</Hsp_query-frame>
-              <Hsp_hit-frame>1</Hsp_hit-frame>
-              <Hsp_identity>19</Hsp_identity>
-              <Hsp_positive>19</Hsp_positive>
-              <Hsp_align-len>20</Hsp_align-len>
-              <Hsp_qseq>AGTAGCCACCTAGAAATCCT</Hsp_qseq>
-              <Hsp_hseq>AGTAGCCACCTAAAAATCCT</Hsp_hseq>
-              <Hsp_midline>|||||||||||| |||||||</Hsp_midline>
-            </Hsp>
-          </Hit_hsps>
-        </Hit>
-        <Hit>
-          <Hit_num>21</Hit_num>
-          <Hit_id>gnl|BL_ORD_ID|6269</Hit_id>
-          <Hit_def>NM_005750_up_1000_chr4_5518610_f chr4:5518610-5519609</Hit_def>
-          <Hit_accession>6269</Hit_accession>
-          <Hit_len>1000</Hit_len>
-          <Hit_hsps>
-            <Hsp>
-              <Hsp_num>1</Hsp_num>
-              <Hsp_bit-score>32.2106</Hsp_bit-score>
-              <Hsp_score>16</Hsp_score>
-              <Hsp_evalue>3.40554</Hsp_evalue>
-              <Hsp_query-from>820</Hsp_query-from>
-              <Hsp_query-to>835</Hsp_query-to>
-              <Hsp_hit-from>277</Hsp_hit-from>
-              <Hsp_hit-to>292</Hsp_hit-to>
-              <Hsp_query-frame>1</Hsp_query-frame>
-              <Hsp_hit-frame>1</Hsp_hit-frame>
-              <Hsp_identity>16</Hsp_identity>
-              <Hsp_positive>16</Hsp_positive>
-              <Hsp_align-len>16</Hsp_align-len>
-              <Hsp_qseq>CCCACCCCCACCCCAG</Hsp_qseq>
-              <Hsp_hseq>CCCACCCCCACCCCAG</Hsp_hseq>
-              <Hsp_midline>||||||||||||||||</Hsp_midline>
-            </Hsp>
-          </Hit_hsps>
-        </Hit>
-        <Hit>
-          <Hit_num>22</Hit_num>
-          <Hit_id>gnl|BL_ORD_ID|5123</Hit_id>
-          <Hit_def>NM_022915_up_1000_chr2_224785153_f chr2:224785153-224786152</Hit_def>
-          <Hit_accession>5123</Hit_accession>
-          <Hit_len>1000</Hit_len>
-          <Hit_hsps>
-            <Hsp>
-              <Hsp_num>1</Hsp_num>
-              <Hsp_bit-score>32.2106</Hsp_bit-score>
-              <Hsp_score>16</Hsp_score>
-              <Hsp_evalue>3.40554</Hsp_evalue>
-              <Hsp_query-from>374</Hsp_query-from>
-              <Hsp_query-to>389</Hsp_query-to>
-              <Hsp_hit-from>934</Hsp_hit-from>
-              <Hsp_hit-to>949</Hsp_hit-to>
-              <Hsp_query-frame>1</Hsp_query-frame>
-              <Hsp_hit-frame>1</Hsp_hit-frame>
-              <Hsp_identity>16</Hsp_identity>
-              <Hsp_positive>16</Hsp_positive>
-              <Hsp_align-len>16</Hsp_align-len>
-              <Hsp_qseq>CCGGGGGCTGTCTCCG</Hsp_qseq>
-              <Hsp_hseq>CCGGGGGCTGTCTCCG</Hsp_hseq>
-              <Hsp_midline>||||||||||||||||</Hsp_midline>
-            </Hsp>
-          </Hit_hsps>
-        </Hit>
-        <Hit>
-          <Hit_num>23</Hit_num>
-          <Hit_id>gnl|BL_ORD_ID|3532</Hit_id>
-          <Hit_def>NM_021948_up_1000_chr1_153388826_f chr1:153388826-153389825</Hit_def>
-          <Hit_accession>3532</Hit_accession>
-          <Hit_len>1000</Hit_len>
-          <Hit_hsps>
-            <Hsp>
-              <Hsp_num>1</Hsp_num>
-              <Hsp_bit-score>32.2106</Hsp_bit-score>
-              <Hsp_score>16</Hsp_score>
-              <Hsp_evalue>3.40554</Hsp_evalue>
-              <Hsp_query-from>820</Hsp_query-from>
-              <Hsp_query-to>835</Hsp_query-to>
-              <Hsp_hit-from>305</Hsp_hit-from>
-              <Hsp_hit-to>320</Hsp_hit-to>
-              <Hsp_query-frame>1</Hsp_query-frame>
-              <Hsp_hit-frame>1</Hsp_hit-frame>
-              <Hsp_identity>16</Hsp_identity>
-              <Hsp_positive>16</Hsp_positive>
-              <Hsp_align-len>16</Hsp_align-len>
-              <Hsp_qseq>CCCACCCCCACCCCAG</Hsp_qseq>
-              <Hsp_hseq>CCCACCCCCACCCCAG</Hsp_hseq>
-              <Hsp_midline>||||||||||||||||</Hsp_midline>
-            </Hsp>
-          </Hit_hsps>
-        </Hit>
-      </Iteration_hits>
-      <Iteration_stat>
-        <Statistics>
-          <Statistics_db-num>17516</Statistics_db-num>
-          <Statistics_db-len>17516000</Statistics_db-len>
-          <Statistics_hsp-len>0</Statistics_hsp-len>
-          <Statistics_eff-space>1.69255e+10</Statistics_eff-space>
-          <Statistics_kappa>0.710605</Statistics_kappa>
-          <Statistics_lambda>1.37407</Statistics_lambda>
-          <Statistics_entropy>1.30725</Statistics_entropy>
-        </Statistics>
-      </Iteration_stat>
-    </Iteration>
-  </BlastOutput_iterations>
-</BlastOutput>
diff --git a/t/data/newblast.xml b/t/data/newblast.xml
deleted file mode 100644
index 7da1930..0000000
--- a/t/data/newblast.xml
+++ /dev/null
@@ -1,1219 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE BlastOutput PUBLIC "-//NCBI//NCBI BlastOutput/EN" "NCBI_BlastOutput.dtd">
-<BlastOutput>
-  <BlastOutput_program>blastp</BlastOutput_program>
-  <BlastOutput_version>BLASTP 2.2.15 [Oct-15-2006]</BlastOutput_version>
-  <BlastOutput_reference>Schäffer, Alejandro A., L. Aravind, Thomas L. Madden, Sergei Shavirin, John L. Spouge, Yuri I. Wolf, Eugene V. Koonin, and Stephen F. Altschul (2001), "Improving the accuracy of PSI-BLAST protein database searches with composition-based statistics and other refinements", Nucleic Acids Res. 29:2994-3005.</BlastOutput_reference>
-  <BlastOutput_db>nr</BlastOutput_db>
-  <BlastOutput_query-ID>gi|15600734|ref|NP_254228.1|</BlastOutput_query-ID>
-  <BlastOutput_query-def>dihydroorotase [Pseudomonas aeruginosa PAO1]</BlastOutput_query-def>
-  <BlastOutput_query-len>445</BlastOutput_query-len>
-  <BlastOutput_param>
-    <Parameters>
-      <Parameters_matrix>BLOSUM62</Parameters_matrix>
-      <Parameters_expect>10</Parameters_expect>
-      <Parameters_gap-open>11</Parameters_gap-open>
-      <Parameters_gap-extend>1</Parameters_gap-extend>
-    </Parameters>
-  </BlastOutput_param>
-  <BlastOutput_iterations>
-    <Iteration>
-      <Iteration_iter-num>1</Iteration_iter-num>
-      <Iteration_query-ID>gi|15600734|ref|NP_254228.1|</Iteration_query-ID>
-      <Iteration_query-def>dihydroorotase [Pseudomonas aeruginosa PAO1]</Iteration_query-def>
-      <Iteration_query-len>445</Iteration_query-len>
-      <Iteration_hits>
-        <Hit>
-          <Hit_num>1</Hit_num>
-          <Hit_id>gi|15600734|ref|NP_254228.1|</Hit_id>
-          <Hit_def>dihydroorotase [Pseudomonas aeruginosa PAO1] >gi|107104643|ref|ZP_01368561.1| hypothetical protein PaerPA_01005722 [Pseudomonas aeruginosa PACS2] >gi|9951880|gb|AAG08926.1|AE004966_8 dihydroorotase [Pseudomonas aeruginosa PAO1]</Hit_def>
-          <Hit_accession>NP_254228</Hit_accession>
-          <Hit_len>445</Hit_len>
-          <Hit_hsps>
-            <Hsp>
-              <Hsp_num>1</Hsp_num>
-              <Hsp_bit-score>871.692</Hsp_bit-score>
-              <Hsp_score>2251</Hsp_score>
-              <Hsp_evalue>0</Hsp_evalue>
-              <Hsp_query-from>1</Hsp_query-from>
-              <Hsp_query-to>445</Hsp_query-to>
-              <Hsp_hit-from>1</Hsp_hit-from>
-              <Hsp_hit-to>445</Hsp_hit-to>
-              <Hsp_query-frame>0</Hsp_query-frame>
-              <Hsp_hit-frame>0</Hsp_hit-frame>
-              <Hsp_identity>445</Hsp_identity>
-              <Hsp_positive>445</Hsp_positive>
-              <Hsp_gaps>0</Hsp_gaps>
-              <Hsp_align-len>445</Hsp_align-len>
-              <Hsp_qseq>MQSLLIRNARMVNEGQVREGDLLVRHGRIERIAGCLENCGASREIDAAGRYLLPGMIDDQVHFREPGYPQKGSIASESRAAVAGGITSFMDMPNTRPATLSLEALAEKKRLAAAHSVANYGFHFGVSRDNLDTVAALDPREVAAVKVFMGASTGDMLVDDLPTLERLFASVPTLLLSHCEDTPRIEANLARWRQRFGERIPAAAHPRIRDAEACYRSTALAVELAQRHGTLLHVLHLSTARELALFEDKPLCQKRITAEVCVHHLLFDDSDYARLGHLLKCNPAIKSREDRDALRRALAGNRLDVIGTDHAPHAWAEKQQAYPQAPAGLPLVQHALPALLELVREGWLSLATLVAKTSHRVAELFAIADRGFLREGYWADLVLVSELEHPALASAMPLLSRCNWTPFRHRAFHHRIDTTIVSGQLAWHAGRLSDDCQGLPLRFSR</Hsp_qseq>
-              <Hsp_hseq>MQSLLIRNARMVNEGQVREGDLLVRHGRIERIAGCLENCGASREIDAAGRYLLPGMIDDQVHFREPGYPQKGSIASESRAAVAGGITSFMDMPNTRPATLSLEALAEKKRLAAAHSVANYGFHFGVSRDNLDTVAALDPREVAAVKVFMGASTGDMLVDDLPTLERLFASVPTLLLSHCEDTPRIEANLARWRQRFGERIPAAAHPRIRDAEACYRSTALAVELAQRHGTLLHVLHLSTARELALFEDKPLCQKRITAEVCVHHLLFDDSDYARLGHLLKCNPAIKSREDRDALRRALAGNRLDVIGTDHAPHAWAEKQQAYPQAPAGLPLVQHALPALLELVREGWLSLATLVAKTSHRVAELFAIADRGFLREGYWADLVLVSELEHPALASAMPLLSRCNWTPFRHRAFHHRIDTTIVSGQLAWHAGRLSDDCQGLPLRFSR</Hsp_hseq>
-              <Hsp_midline>MQSLLIRNARMVNEGQVREGDLLVRHGRIERIAGCLENCGASREIDAAGRYLLPGMIDDQVHFREPGYPQKGSIASESRAAVAGGITSFMDMPNTRPATLSLEALAEKKRLAAAHSVANYGFHFGVSRDNLDTVAALDPREVAAVKVFMGASTGDMLVDDLPTLERLFASVPTLLLSHCEDTPRIEANLARWRQRFGERIPAAAHPRIRDAEACYRSTALAVELAQRHGTLLHVLHLSTARELALFEDKPLCQKRITAEVCVHHLLFDDSDYARLGHLLKCNPAIKSREDRDALRRALAGNRLDVIGTDHAPHAWAEKQQAYPQAPAGLPLVQHALPALLELVREGWLSLATLVAKTSHRVAELFAIADRGFLREGYWADLVLVSELEHPALASAMPLLSRCNWTPFRHRAFHHRIDTTIVSGQLAWHAGRLSDDCQGLPLRFSR</Hsp_midline>
-            </Hsp>
-          </Hit_hsps>
-        </Hit>
-        <Hit>
-          <Hit_num>2</Hit_num>
-          <Hit_id>gi|116053692|ref|YP_794019.1|</Hit_id>
-          <Hit_def>dihydroorotase [Pseudomonas aeruginosa UCBPP-PA14] >gi|115588913|gb|ABJ14928.1| dihydroorotase [Pseudomonas aeruginosa UCBPP-PA14]</Hit_def>
-          <Hit_accession>YP_794019</Hit_accession>
-          <Hit_len>445</Hit_len>
-          <Hit_hsps>
-            <Hsp>
-              <Hsp_num>1</Hsp_num>
-              <Hsp_bit-score>870.152</Hsp_bit-score>
-              <Hsp_score>2247</Hsp_score>
-              <Hsp_evalue>0</Hsp_evalue>
-              <Hsp_query-from>1</Hsp_query-from>
-              <Hsp_query-to>445</Hsp_query-to>
-              <Hsp_hit-from>1</Hsp_hit-from>
-              <Hsp_hit-to>445</Hsp_hit-to>
-              <Hsp_query-frame>0</Hsp_query-frame>
-              <Hsp_hit-frame>0</Hsp_hit-frame>
-              <Hsp_identity>444</Hsp_identity>
-              <Hsp_positive>445</Hsp_positive>
-              <Hsp_gaps>0</Hsp_gaps>
-              <Hsp_align-len>445</Hsp_align-len>
-              <Hsp_qseq>MQSLLIRNARMVNEGQVREGDLLVRHGRIERIAGCLENCGASREIDAAGRYLLPGMIDDQVHFREPGYPQKGSIASESRAAVAGGITSFMDMPNTRPATLSLEALAEKKRLAAAHSVANYGFHFGVSRDNLDTVAALDPREVAAVKVFMGASTGDMLVDDLPTLERLFASVPTLLLSHCEDTPRIEANLARWRQRFGERIPAAAHPRIRDAEACYRSTALAVELAQRHGTLLHVLHLSTARELALFEDKPLCQKRITAEVCVHHLLFDDSDYARLGHLLKCNPAIKSREDRDALRRALAGNRLDVIGTDHAPHAWAEKQQAYPQAPAGLPLVQHALPALLELVREGWLSLATLVAKTSHRVAELFAIADRGFLREGYWADLVLVSELEHPALASAMPLLSRCNWTPFRHRAFHHRIDTTIVSGQLAWHAGRLSDDCQGLPLRFSR</Hsp_qseq>
-              <Hsp_hseq>MQSLLIRNARMVNEGQVREGDLLVRHGRIERIAGCLENCGASREIDAAGRYLLPGMIDDQVHFREPGYPQKGSIASESRAAVAGGITSFMDMPNTRPATLSLEALAEKKRLAAAHSVANYGFHFGVSRDNLDTVAALDPRDVAAVKVFMGASTGDMLVDDLPTLERLFASVPTLLLSHCEDTPRIEANLARWRQRFGERIPAAAHPRIRDAEACYRSTALAVELAQRHGTLLHVLHLSTARELALFEDKPLCQKRITAEVCVHHLLFDDSDYARLGHLLKCNPAIKSREDRDALRRALAGNRLDVIGTDHAPHAWAEKQQAYPQAPAGLPLVQHALPALLELVREGWLSLATLVAKTSHRVAELFAIADRGFLREGYWADLVLVSELEHPALASAMPLLSRCNWTPFRHRAFHHRIDTTIVSGQLAWHAGRLSDDCQGLPLRFSR</Hsp_hseq>
-              <Hsp_midline>MQSLLIRNARMVNEGQVREGDLLVRHGRIERIAGCLENCGASREIDAAGRYLLPGMIDDQVHFREPGYPQKGSIASESRAAVAGGITSFMDMPNTRPATLSLEALAEKKRLAAAHSVANYGFHFGVSRDNLDTVAALDPR+VAAVKVFMGASTGDMLVDDLPTLERLFASVPTLLLSHCEDTPRIEANLARWRQRFGERIPAAAHPRIRDAEACYRSTALAVELAQRHGTLLHVLHLSTARELALFEDKPLCQKRITAEVCVHHLLFDDSDYARLGHLLKCNPAIKSREDRDALRRALAGNRLDVIGTDHAPHAWAEKQQAYPQAPAGLPLVQHALPALLELVREGWLSLATLVAKTSHRVAELFAIADRGFLREGYWADLVLVSELEHPALASAMPLLSRCNWTPFRHRAFHHRIDTTIVSGQLAWHAGRLSDDCQGLPLRFSR</Hsp_midline>
-            </Hsp>
-          </Hit_hsps>
-        </Hit>
-        <Hit>
-          <Hit_num>3</Hit_num>
-          <Hit_id>gi|84318214|ref|ZP_00966642.1|</Hit_id>
-          <Hit_def>COG0044: Dihydroorotase and related cyclic amidohydrolases [Pseudomonas aeruginosa C3719]</Hit_def>
-          <Hit_accession>ZP_00966642</Hit_accession>
-          <Hit_len>445</Hit_len>
-          <Hit_hsps>
-            <Hsp>
-              <Hsp_num>1</Hsp_num>
-              <Hsp_bit-score>869.381</Hsp_bit-score>
-              <Hsp_score>2245</Hsp_score>
-              <Hsp_evalue>0</Hsp_evalue>
-              <Hsp_query-from>1</Hsp_query-from>
-              <Hsp_query-to>445</Hsp_query-to>
-              <Hsp_hit-from>1</Hsp_hit-from>
-              <Hsp_hit-to>445</Hsp_hit-to>
-              <Hsp_query-frame>0</Hsp_query-frame>
-              <Hsp_hit-frame>0</Hsp_hit-frame>
-              <Hsp_identity>444</Hsp_identity>
-              <Hsp_positive>445</Hsp_positive>
-              <Hsp_gaps>0</Hsp_gaps>
-              <Hsp_align-len>445</Hsp_align-len>
-              <Hsp_qseq>MQSLLIRNARMVNEGQVREGDLLVRHGRIERIAGCLENCGASREIDAAGRYLLPGMIDDQVHFREPGYPQKGSIASESRAAVAGGITSFMDMPNTRPATLSLEALAEKKRLAAAHSVANYGFHFGVSRDNLDTVAALDPREVAAVKVFMGASTGDMLVDDLPTLERLFASVPTLLLSHCEDTPRIEANLARWRQRFGERIPAAAHPRIRDAEACYRSTALAVELAQRHGTLLHVLHLSTARELALFEDKPLCQKRITAEVCVHHLLFDDSDYARLGHLLKCNPAIKSREDRDALRRALAGNRLDVIGTDHAPHAWAEKQQAYPQAPAGLPLVQHALPALLELVREGWLSLATLVAKTSHRVAELFAIADRGFLREGYWADLVLVSELEHPALASAMPLLSRCNWTPFRHRAFHHRIDTTIVSGQLAWHAGRLSDDCQGLPLRFSR</Hsp_qseq>
-              <Hsp_hseq>MRSLLIRNARMVNEGQVREGDLLVRHGRIERIAGCLENCGASREIDAAGRYLLPGMIDDQVHFREPGYPQKGSIASESRAAVAGGITSFMDMPNTRPATLSLEALAEKKRLAAAHSVANYGFHFGVSRDNLDTVAALDPREVAAVKVFMGASTGDMLVDDLPTLERLFASVPTLLLSHCEDTPRIEANLARWRQRFGERIPAAAHPRIRDAEACYRSTALAVELAQRHGTLLHVLHLSTARELALFEDKPLCQKRITAEVCVHHLLFDDSDYARLGHLLKCNPAIKSREDRDALRRALAGNRLDVIGTDHAPHAWAEKQQAYPQAPAGLPLVQHALPALLELVREGWLSLATLVAKTSHRVAELFAIADRGFLREGYWADLVLVSELEHPALASAMPLLSRCNWTPFRHRAFHHRIDTTIVSGQLAWHAGRLSDDCQGLPLRFSR</Hsp_hseq>
-              <Hsp_midline>M+SLLIRNARMVNEGQVREGDLLVRHGRIERIAGCLENCGASREIDAAGRYLLPGMIDDQVHFREPGYPQKGSIASESRAAVAGGITSFMDMPNTRPATLSLEALAEKKRLAAAHSVANYGFHFGVSRDNLDTVAALDPREVAAVKVFMGASTGDMLVDDLPTLERLFASVPTLLLSHCEDTPRIEANLARWRQRFGERIPAAAHPRIRDAEACYRSTALAVELAQRHGTLLHVLHLSTARELALFEDKPLCQKRITAEVCVHHLLFDDSDYARLGHLLKCNPAIKSREDRDALRRALAGNRLDVIGTDHAPHAWAEKQQAYPQAPAGLPLVQHALPALLELVREGWLSLATLVAKTSHRVAELFAIADRGFLREGYWADLVLVSELEHPALASAMPLLSRCNWTPFRHRAFHHRIDTTIVSGQLAWHAGRLSDDCQGLPLRFSR</Hsp_midline>
-            </Hsp>
-          </Hit_hsps>
-        </Hit>
-        <Hit>
-          <Hit_num>4</Hit_num>
-          <Hit_id>gi|94417254|ref|ZP_01297073.1|</Hit_id>
-          <Hit_def>hypothetical protein PaerP_01001051 [Pseudomonas aeruginosa PA7]</Hit_def>
-          <Hit_accession>ZP_01297073</Hit_accession>
-          <Hit_len>445</Hit_len>
-          <Hit_hsps>
-            <Hsp>
-              <Hsp_num>1</Hsp_num>
-              <Hsp_bit-score>831.632</Hsp_bit-score>
-              <Hsp_score>2147</Hsp_score>
-              <Hsp_evalue>0</Hsp_evalue>
-              <Hsp_query-from>1</Hsp_query-from>
-              <Hsp_query-to>445</Hsp_query-to>
-              <Hsp_hit-from>1</Hsp_hit-from>
-              <Hsp_hit-to>445</Hsp_hit-to>
-              <Hsp_query-frame>0</Hsp_query-frame>
-              <Hsp_hit-frame>0</Hsp_hit-frame>
-              <Hsp_identity>421</Hsp_identity>
-              <Hsp_positive>431</Hsp_positive>
-              <Hsp_gaps>0</Hsp_gaps>
-              <Hsp_align-len>445</Hsp_align-len>
-              <Hsp_qseq>MQSLLIRNARMVNEGQVREGDLLVRHGRIERIAGCLENCGASREIDAAGRYLLPGMIDDQVHFREPGYPQKGSIASESRAAVAGGITSFMDMPNTRPATLSLEALAEKKRLAAAHSVANYGFHFGVSRDNLDTVAALDPREVAAVKVFMGASTGDMLVDDLPTLERLFASVPTLLLSHCEDTPRIEANLARWRQRFGERIPAAAHPRIRDAEACYRSTALAVELAQRHGTLLHVLHLSTARELALFEDKPLCQKRITAEVCVHHLLFDDSDYARLGHLLKCNPAIKSREDRDALRRALAGNRLDVIGTDHAPHAWAEKQQAYPQAPAGLPLVQHALPALLELVREGWLSLATLVAKTSHRVAELFAIADRGFLREGYWADLVLVSELEHPALASAMPLLSRCNWTPFRHRAFHHRIDTTIVSGQLAWHAGRLSDDCQGLPLRFSR</Hsp_qseq>
-              <Hsp_hseq>MGSLLIRNARMINEGQVREGDLLVRQGRIERIAGSLEDCSASREIDAAGRYLLPGMIDDQVHFREPGYPQKGTIASESRAAVAGGITSFMDMPNTRPATLTLEALAEKKRRAAAHSMANYAFHFGVSRDNLDTVAALDPREVAAVKVFMGASTGDMLVDDLPTLERLFASVPTLLLSHCEDTPRIETNLARWRQRFGDRIPAAAHPRIRDAEACYRSTALAVELAQRHGTLLHVLHLSTARELALFEDKPLCQKRITAEVCVHHLLFDDGDYARLGHLLKCNPAVKSREDRDALRRALAGNRLDVIGTDHAPHTWAEKQQAYPQAPAGLPLVQHALPALLELVREGWLSLPTLVAKTSHRVAELFAIADRGFLREGYWADLVLVSELERPEAASAMPLLSRCNWTPFRHRAFHHRVDTTVVSGQLAWHAGRLCEDCQGLPLRFSR</Hsp_hseq>
-              <Hsp_midline>M SLLIRNARM+NEGQVREGDLLVR GRIERIAG LE+C ASREIDAAGRYLLPGMIDDQVHFREPGYPQKG+IASESRAAVAGGITSFMDMPNTRPATL+LEALAEKKR AAAHS+ANY FHFGVSRDNLDTVAALDPREVAAVKVFMGASTGDMLVDDLPTLERLFASVPTLLLSHCEDTPRIE NLARWRQRFG+RIPAAAHPRIRDAEACYRSTALAVELAQRHGTLLHVLHLSTARELALFEDKPLCQKRITAEVCVHHLLFDD DYARLGHLLKCNPA+KSREDRDALRRALAGNRLDVIGTDHAPH WAEKQQAYPQAPAGLPLVQHALPALLELVREGWLSL TLVAKTSHRVAELFAIADRGFLREGYWADLVLVSELE P  ASAMPLLSRCNWTPFRHRAFHHR+DTT+VSGQLAWHAGRL +DCQGLPLRFSR</Hsp_midline>
-            </Hsp>
-          </Hit_hsps>
-        </Hit>
-        <Hit>
-          <Hit_num>5</Hit_num>
-          <Hit_id>gi|77461883|ref|YP_351390.1|</Hit_id>
-          <Hit_def>dihydroorotase [Pseudomonas fluorescens PfO-1] >gi|77385886|gb|ABA77399.1| Dihydroorotase [Pseudomonas fluorescens PfO-1]</Hit_def>
-          <Hit_accession>YP_351390</Hit_accession>
-          <Hit_len>445</Hit_len>
-          <Hit_hsps>
-            <Hsp>
-              <Hsp_num>1</Hsp_num>
-              <Hsp_bit-score>658.677</Hsp_bit-score>
-              <Hsp_score>1698</Hsp_score>
-              <Hsp_evalue>0</Hsp_evalue>
-              <Hsp_query-from>1</Hsp_query-from>
-              <Hsp_query-to>445</Hsp_query-to>
-              <Hsp_hit-from>1</Hsp_hit-from>
-              <Hsp_hit-to>445</Hsp_hit-to>
-              <Hsp_query-frame>0</Hsp_query-frame>
-              <Hsp_hit-frame>0</Hsp_hit-frame>
-              <Hsp_identity>327</Hsp_identity>
-              <Hsp_positive>377</Hsp_positive>
-              <Hsp_gaps>0</Hsp_gaps>
-              <Hsp_align-len>445</Hsp_align-len>
-              <Hsp_qseq>MQSLLIRNARMVNEGQVREGDLLVRHGRIERIAGCLENCGASREIDAAGRYLLPGMIDDQVHFREPGYPQKGSIASESRAAVAGGITSFMDMPNTRPATLSLEALAEKKRLAAAHSVANYGFHFGVSRDNLDTVAALDPREVAAVKVFMGASTGDMLVDDLPTLERLFASVPTLLLSHCEDTPRIEANLARWRQRFGERIPAAAHPRIRDAEACYRSTALAVELAQRHGTLLHVLHLSTARELALFEDKPLCQKRITAEVCVHHLLFDDSDYARLGHLLKCNPAIKSREDRDALRRALAGNRLDVIGTDHAPHAWAEKQQAYPQAPAGLPLVQHALPALLELVREGWLSLATLVAKTSHRVAELFAIADRGFLREGYWADLVLVSELEHPALASAMPLLSRCNWTPFRHRAFHHRIDTTIVSGQLAWHAGRLSDDCQGLPLRFSR</Hsp_qseq>
-              <Hsp_hseq>MSSVLIRNARLVNEGREFDADLLVSHGRIVKIAGSIEGENATREIDATGQWLLPGMIDDQVHFREPGAPAKGSVHTESRAAVAGGITSFMDMPNTHPATLTLEALADKKRRAAINSVANYGFHFGVSHDNLDTVAALNPSEVAGVKVFMGASTGNMLVDDPHTLERLFAEVPTILLAHCEHTPSIEANAANLRERYGNQLPPDAHAQIRNADSCFRSSSLAVDLAKRHGTRLHVLHLTTARELALFEDKPLTQKRITAEVCLHHLLFDERDYPNLGNLIKCNPAIKSRSDRDALRQALLSNRLDVIGSDHAPHTWAEKQQAYEQAPSGLPLVQHALPALLELVADGVLPITTLVAKTSHRVADLFAIPDRGYLREGYWADLVLIQPEPKGVAVSRQPVLSQCGWTPFAQRSFRHRVSTTIVSGQIAWHDHRIHDSCQGLPLRFMR</Hsp_hseq>
-              <Hsp_midline>M S+LIRNAR+VNEG+  + DLLV HGRI +IAG +E   A+REIDA G++LLPGMIDDQVHFREPG P KGS+ +ESRAAVAGGITSFMDMPNT PATL+LEALA+KKR AA +SVANYGFHFGVS DNLDTVAAL+P EVA VKVFMGASTG+MLVDD  TLERLFA VPT+LL+HCE TP IEAN A  R+R+G ++P  AH +IR+A++C+RS++LAV+LA+RHGT LHVLHL+TARELALFEDKPL QKRITAEVC+HHLLFD+ DY  LG+L+KCNPAIKSR DRDALR+AL  NRLDVIG+DHAPH WAEKQQAY QAP+GLPLVQHALPALLELV +G L + TLVAKTSHRVA+LFAI DRG+LREGYWADLVL+         S  P+LS+C WTPF  R+F HR+ TTIVSGQ+AWH  R+ D CQGLPLRF R</Hsp_midline>
-            </Hsp>
-          </Hit_hsps>
-        </Hit>
-        <Hit>
-          <Hit_num>6</Hit_num>
-          <Hit_id>gi|104782179|ref|YP_608677.1|</Hit_id>
-          <Hit_def>dihydroorotase [Pseudomonas entomophila L48] >gi|95111166|emb|CAK15886.1| putative dihydroorotase [Pseudomonas]</Hit_def>
-          <Hit_accession>YP_608677</Hit_accession>
-          <Hit_len>449</Hit_len>
-          <Hit_hsps>
-            <Hsp>
-              <Hsp_num>1</Hsp_num>
-              <Hsp_bit-score>634.41</Hsp_bit-score>
-              <Hsp_score>1635</Hsp_score>
-              <Hsp_evalue>2.61876e-180</Hsp_evalue>
-              <Hsp_query-from>1</Hsp_query-from>
-              <Hsp_query-to>445</Hsp_query-to>
-              <Hsp_hit-from>1</Hsp_hit-from>
-              <Hsp_hit-to>445</Hsp_hit-to>
-              <Hsp_query-frame>0</Hsp_query-frame>
-              <Hsp_hit-frame>0</Hsp_hit-frame>
-              <Hsp_identity>328</Hsp_identity>
-              <Hsp_positive>365</Hsp_positive>
-              <Hsp_gaps>0</Hsp_gaps>
-              <Hsp_align-len>445</Hsp_align-len>
-              <Hsp_qseq>MQSLLIRNARMVNEGQVREGDLLVRHGRIERIAGCLENCGASREIDAAGRYLLPGMIDDQVHFREPGYPQKGSIASESRAAVAGGITSFMDMPNTRPATLSLEALAEKKRLAAAHSVANYGFHFGVSRDNLDTVAALDPREVAAVKVFMGASTGDMLVDDLPTLERLFASVPTLLLSHCEDTPRIEANLARWRQRFGERIPAAAHPRIRDAEACYRSTALAVELAQRHGTLLHVLHLSTARELALFEDKPLCQKRITAEVCVHHLLFDDSDYARLGHLLKCNPAIKSREDRDALRRALAGNRLDVIGTDHAPHAWAEKQQAYPQAPAGLPLVQHALPALLELVREGWLSLATLVAKTSHRVAELFAIADRGFLREGYWADLVLVSELEHPALASAMPLLSRCNWTPFRHRAFHHRIDTTIVSGQLAWHAGRLSDDCQGLPLRFSR</Hsp_qseq>
-              <Hsp_hseq>MDELLLRNARMVNEGREFEGDLLVRQGRIERIAGSLEGARARCEIDARGAWLLPGMIDDQVHFREPGAPHKGCIASESRAAVAGGITSFMDMPNTHPPTLTLEALADKKRRAAASSLANYAFHFGVSRDNLDTIAALDPREVAGVKVFMGASTGNMLVDDPQVLEKLFIYTPTLLLAHCEHTPSILANEARWQAHHGEFIPPAAHPLIRDAEACYRSSSLAVELARRFGTRLHVLHLTTARELELFQPGPVAGKRITAEVCLHHLLFDDGDYASLGHLIKCNPAIKTRSDRDALRRALADDRIDVIGTDHAPHTLEEKRQRYSRAPSGLPLVQHALPAALELVSEGVLSMAQVVAKTSHAVAELFAIRERGFLREGYWADLALVERLDTPRAVADDPVLARCGWTPFQARGFHHVVRSTLVSGQLAWHEGRVQPHCQGLPLMFDR</Hsp_hseq>
-              <Hsp_midline>M  LL+RNARMVNEG+  EGDLLVR GRIERIAG LE   A  EIDA G +LLPGMIDDQVHFREPG P KG IASESRAAVAGGITSFMDMPNT P TL+LEALA+KKR AAA S+ANY FHFGVSRDNLDT+AALDPREVA VKVFMGASTG+MLVDD   LE+LF   PTLLL+HCE TP I AN ARW+   GE IP AAHP IRDAEACYRS++LAVELA+R GT LHVLHL+TAREL LF+  P+  KRITAEVC+HHLLFDD DYA LGHL+KCNPAIK+R DRDALRRALA +R+DVIGTDHAPH   EK+Q Y +AP+GLPLVQHALPA LELV EG LS+A +VAKTSH VAELFAI +RGFLREGYWADL LV  L+ P   +  P+L+RC WTPF+ R FHH + +T+VSGQLAWH GR+   CQGLPL F R</Hsp_midline>
-            </Hsp>
-          </Hit_hsps>
-        </Hit>
-        <Hit>
-          <Hit_num>7</Hit_num>
-          <Hit_id>gi|70733466|ref|YP_263241.1|</Hit_id>
-          <Hit_def>dihydroorotase [Pseudomonas fluorescens Pf-5] >gi|68347765|gb|AAY95371.1| dihydroorotase, putative [Pseudomonas fluorescens Pf-5]</Hit_def>
-          <Hit_accession>YP_263241</Hit_accession>
-          <Hit_len>444</Hit_len>
-          <Hit_hsps>
-            <Hsp>
-              <Hsp_num>1</Hsp_num>
-              <Hsp_bit-score>622.854</Hsp_bit-score>
-              <Hsp_score>1605</Hsp_score>
-              <Hsp_evalue>9.39488e-177</Hsp_evalue>
-              <Hsp_query-from>1</Hsp_query-from>
-              <Hsp_query-to>445</Hsp_query-to>
-              <Hsp_hit-from>1</Hsp_hit-from>
-              <Hsp_hit-to>444</Hsp_hit-to>
-              <Hsp_query-frame>0</Hsp_query-frame>
-              <Hsp_hit-frame>0</Hsp_hit-frame>
-              <Hsp_identity>317</Hsp_identity>
-              <Hsp_positive>364</Hsp_positive>
-              <Hsp_gaps>1</Hsp_gaps>
-              <Hsp_align-len>445</Hsp_align-len>
-              <Hsp_qseq>MQSLLIRNARMVNEGQVREGDLLVRHGRIERIAGCLENCGASREIDAAGRYLLPGMIDDQVHFREPGYPQKGSIASESRAAVAGGITSFMDMPNTRPATLSLEALAEKKRLAAAHSVANYGFHFGVSRDNLDTVAALDPREVAAVKVFMGASTGDMLVDDLPTLERLFASVPTLLLSHCEDTPRIEANLARWRQRFGERIPAAAHPRIRDAEACYRSTALAVELAQRHGTLLHVLHLSTARELALFEDKPLCQKRITAEVCVHHLLFDDSDYARLGHLLKCNPAIKSREDRDALRRALAGNRLDVIGTDHAPHAWAEKQQAYPQAPAGLPLVQHALPALLELVREGWLSLATLVAKTSHRVAELFAIADRGFLREGYWADLVLVSELEHPALASAMPLLSRCNWTPFRHRAFHHRIDTTIVSGQLAWHAGRLSDDCQGLPLRFSR</Hsp_qseq>
-              <Hsp_hseq>MSRILIRSARLVNEGREFDADVLVAHGRIDTI-GSLDHLSAEIEIDARGQWLLPGMIDDQVHFRDPGAPDKGSLYSESRAAVAGGITSFMDMPNTSPATLDLAALNDKKRRAASVSVANYGFHFGVSNDNLDLVAALDPTEVAGVKVFMGASTGNMLVDDPEVLDRLFRQVPTLLLAHCEHTPSIQARQQRWLQLYGEQIPAAAHPHIRDAEACFRSSSLAVELAKKHGTRLHVLHLTSARELALFEDRPLAQKRITAEVCVHHLLFDDRDYPRLGHLIKCNPAIKTQADRDALRQALNSQRLDVIGTDHAPHTWEQKQLPYSRAPSGLPLVQHALPALLELVADRVLPLATLVEKTSHRVADLFAIPDRGYLREGYWADLVLVRAEPTGLAVDSQPILAHCGWTPFAGQRFRHSVSSTLVSGQLAWHQGRLYHDCQGLPLRFTR</Hsp_hseq>
-              <Hsp_midline>M  +LIR+AR+VNEG+  + D+LV HGRI+ I G L++  A  EIDA G++LLPGMIDDQVHFR+PG P KGS+ SESRAAVAGGITSFMDMPNT PATL L AL +KKR AA+ SVANYGFHFGVS DNLD VAALDP EVA VKVFMGASTG+MLVDD   L+RLF  VPTLLL+HCE TP I+A   RW Q +GE+IPAAAHP IRDAEAC+RS++LAVELA++HGT LHVLHL++ARELALFED+PL QKRITAEVCVHHLLFDD DY RLGHL+KCNPAIK++ DRDALR+AL   RLDVIGTDHAPH W +KQ  Y +AP+GLPLVQHALPALLELV +  L LATLV KTSHRVA+LFAI DRG+LREGYWADLVLV          + P+L+ C WTPF  + F H + +T+VSGQLAWH GRL  DCQGLPLRF+R</Hsp_midline>
-            </Hsp>
-          </Hit_hsps>
-        </Hit>
-        <Hit>
-          <Hit_num>8</Hit_num>
-          <Hit_id>gi|118059665|ref|ZP_01528121.1|</Hit_id>
-          <Hit_def>amidohydrolase [Pseudomonas mendocina ymp] >gi|118006790|gb|EAV20868.1| amidohydrolase [Pseudomonas mendocina ymp]</Hit_def>
-          <Hit_accession>ZP_01528121</Hit_accession>
-          <Hit_len>446</Hit_len>
-          <Hit_hsps>
-            <Hsp>
-              <Hsp_num>1</Hsp_num>
-              <Hsp_bit-score>606.29</Hsp_bit-score>
-              <Hsp_score>1562</Hsp_score>
-              <Hsp_evalue>9.09969e-172</Hsp_evalue>
-              <Hsp_query-from>1</Hsp_query-from>
-              <Hsp_query-to>443</Hsp_query-to>
-              <Hsp_hit-from>1</Hsp_hit-from>
-              <Hsp_hit-to>443</Hsp_hit-to>
-              <Hsp_query-frame>0</Hsp_query-frame>
-              <Hsp_hit-frame>0</Hsp_hit-frame>
-              <Hsp_identity>309</Hsp_identity>
-              <Hsp_positive>354</Hsp_positive>
-              <Hsp_gaps>0</Hsp_gaps>
-              <Hsp_align-len>443</Hsp_align-len>
-              <Hsp_qseq>MQSLLIRNARMVNEGQVREGDLLVRHGRIERIAGCLENCGASREIDAAGRYLLPGMIDDQVHFREPGYPQKGSIASESRAAVAGGITSFMDMPNTRPATLSLEALAEKKRLAAAHSVANYGFHFGVSRDNLDTVAALDPREVAAVKVFMGASTGDMLVDDLPTLERLFASVPTLLLSHCEDTPRIEANLARWRQRFGERIPAAAHPRIRDAEACYRSTALAVELAQRHGTLLHVLHLSTARELALFEDKPLCQKRITAEVCVHHLLFDDSDYARLGHLLKCNPAIKSREDRDALRRALAGNRLDVIGTDHAPHAWAEKQQAYPQAPAGLPLVQHALPALLELVREGWLSLATLVAKTSHRVAELFAIADRGFLREGYWADLVLVSELEHPALASAMPLLSRCNWTPFRHRAFHHRIDTTIVSGQLAWHAGRLSDDCQGLPLRF</Hsp_qseq>
-              <Hsp_hseq>MTDLLIRNARLVNEGREFEADIRVHNGRIEKIASSIDGLNASLEIDAAGQYLLPGMIDDQVHFRDPGAPHKGSFASESRAAAAGGITSVMDMPNTNPPTLNLEALVAKEQRAAACSRVNYGFHFGVSHDNLDTVAALDPSRVAAVKVFMGASTGNMLVDDLAALERLFRDCPTVLLTHCEHTPRIREREAQWRARFGDDIPASEHPAIRDAEACYQSSSLAVSLAQRYGTRLHVLHLTTARELSLFQPGPLAGKQITAEVCAHHLYFDDRDYAALGHLIKCNPAIKSQTDRHALRQALLCGRLDIIGTDHAPHTLEEKQRPYLQAPSGLPLVQHALPSLLELVADDLLPLSLLVEKTSHAVAERFAIEQRGYLREGYWADLTLVERLTEPRPVAADPILAHCGWTPFQGRAFRHAVRSTIVSGQLAWHAGQVQDDCQGLPLRY</Hsp_hseq>
-              <Hsp_midline>M  LLIRNAR+VNEG+  E D+ V +GRIE+IA  ++   AS EIDAAG+YLLPGMIDDQVHFR+PG P KGS ASESRAA AGGITS MDMPNT P TL+LEAL  K++ AAA S  NYGFHFGVS DNLDTVAALDP  VAAVKVFMGASTG+MLVDDL  LERLF   PT+LL+HCE TPRI    A+WR RFG+ IPA+ HP IRDAEACY+S++LAV LAQR+GT LHVLHL+TAREL+LF+  PL  K+ITAEVC HHL FDD DYA LGHL+KCNPAIKS+ DR ALR+AL   RLD+IGTDHAPH   EKQ+ Y QAP+GLPLVQHALP+LLELV +  L L+ LV KTSH VAE FAI  RG+LREGYWADL LV  L  P   +A P+L+ C WTPF+ RAF H + +TIVSGQLAWHAG++ DDCQGLPLR+</Hsp_midline>
-            </Hsp>
-          </Hit_hsps>
-        </Hit>
-        <Hit>
-          <Hit_num>9</Hit_num>
-          <Hit_id>gi|50084596|ref|YP_046106.1|</Hit_id>
-          <Hit_def>dihydroorotase [Acinetobacter sp. ADP1] >gi|49530572|emb|CAG68284.1| putative dihydroorotase [Acinetobacter sp. ADP1]</Hit_def>
-          <Hit_accession>YP_046106</Hit_accession>
-          <Hit_len>444</Hit_len>
-          <Hit_hsps>
-            <Hsp>
-              <Hsp_num>1</Hsp_num>
-              <Hsp_bit-score>562.762</Hsp_bit-score>
-              <Hsp_score>1449</Hsp_score>
-              <Hsp_evalue>1.24376e-158</Hsp_evalue>
-              <Hsp_query-from>1</Hsp_query-from>
-              <Hsp_query-to>445</Hsp_query-to>
-              <Hsp_hit-from>1</Hsp_hit-from>
-              <Hsp_hit-to>444</Hsp_hit-to>
-              <Hsp_query-frame>0</Hsp_query-frame>
-              <Hsp_hit-frame>0</Hsp_hit-frame>
-              <Hsp_identity>267</Hsp_identity>
-              <Hsp_positive>342</Hsp_positive>
-              <Hsp_gaps>3</Hsp_gaps>
-              <Hsp_align-len>446</Hsp_align-len>
-              <Hsp_qseq>MQSLLIRNARMVNEGQVREGDLLVRHGRIERIAGCLENCGASREIDAAGRYLLPGMIDDQVHFREPGYPQKGSIASESRAAVAGGITSFMDMPNTRPATLSLEALAEKKRLAAAHSVANYGFHFGVSRDNLDTVAALDPREVAAVKVFMGASTGDMLVDDLPTLERLFASVPTLLLSHCEDTPRIEANLARWRQRFGERIPAAAHPRIRDAEACYRSTALAVELAQRHGTLLHVLHLSTARELALFEDKPLCQKRITAEVCVHHLLFDDSDYARLGHLLKCNPAIKSREDRDALRRALAG-NRLDVIGTDHAPHAWAEKQQAYPQAPAGLPLVQHALPALLELVREGWLSLATLVAKTSHRVAELFAIADRGFLREGYWADLVLVSELEHPALASAMPLLSRCNWTPFRHRAFHHRIDTTIVSGQLAWHAGRLSDDCQGLPLRFSR</Hsp_qseq>
-              <Hsp_hseq>MPDIMIRNANMINEGQSKFCDVLIKNGRIAKIQSSISSINNAKEIEANGRWLLPGMIDDQVHFRDPGSPHKGCIASESAAATIGGITSYMDMPNTQPPTLDLDALQAKKTIASQTSIANYAFHFGVSADNLEIIKQLDPTLVSGVKVFMGASTGNMLVDDPKTLGLLFANVPTILLSHCESSPIISQNEKLFREKFGEDIDASCHPIIRNEECCYQSSKMAVELAKKFNTQLHVLHLTTARELALFEDKPLHEKRITAEVCIHHLHFDDRDYKQLNHLIKCNPSIKAVSDKEALIQAIANTNLLDIIGTDHAPHTLDEKQRSYFQAPAGLPLVQHALPALLELVADQKMTIENVVKKTSHQVADLFRIKERGYIREGYWADLVLID--KNPLIVAQQPNFMRCGWTPFIHQTFRHQVATTIVSGQIAWHNQQLFLNCKGHALEIDR</Hsp_hseq>
-              <Hsp_midline>M  ++IRNA M+NEGQ +  D+L+++GRI +I   + +   ++EI+A GR+LLPGMIDDQVHFR+PG P KG IASES AA  GGITS+MDMPNT+P TL L+AL  KK +A+  S+ANY FHFGVS DNL+ +  LDP  V+ VKVFMGASTG+MLVDD  TL  LFA+VPT+LLSHCE +P I  N   +R++FGE I A+ HP IR+ E CY+S+ +AVELA++  T LHVLHL+TARELALFEDKPL +KRITAEVC+HHL FDD DY +L HL+KCNP+IK+  D++AL +A+A  N LD+IGTDHAPH   EKQ++Y QAPAGLPLVQHALPALLELV +  +++  +V KTSH+VA+LF I +RG++REGYWADLVL+   ++P + +  P   RC WTPF H+ F H++ TTIVSGQ+AWH  +L  +C+G  L   R</Hsp_midline>
-            </Hsp>
-          </Hit_hsps>
-        </Hit>
-        <Hit>
-          <Hit_num>10</Hit_num>
-          <Hit_id>gi|117621557|ref|YP_857112.1|</Hit_id>
-          <Hit_def>dihydroorotase [Aeromonas hydrophila subsp. hydrophila ATCC 7966] >gi|117562964|gb|ABK39912.1| dihydroorotase [Aeromonas hydrophila subsp. hydrophila ATCC 7966]</Hit_def>
-          <Hit_accession>YP_857112</Hit_accession>
-          <Hit_len>447</Hit_len>
-          <Hit_hsps>
-            <Hsp>
-              <Hsp_num>1</Hsp_num>
-              <Hsp_bit-score>482.641</Hsp_bit-score>
-              <Hsp_score>1241</Hsp_score>
-              <Hsp_evalue>1.41943e-134</Hsp_evalue>
-              <Hsp_query-from>1</Hsp_query-from>
-              <Hsp_query-to>445</Hsp_query-to>
-              <Hsp_hit-from>1</Hsp_hit-from>
-              <Hsp_hit-to>447</Hsp_hit-to>
-              <Hsp_query-frame>0</Hsp_query-frame>
-              <Hsp_hit-frame>0</Hsp_hit-frame>
-              <Hsp_identity>237</Hsp_identity>
-              <Hsp_positive>317</Hsp_positive>
-              <Hsp_gaps>6</Hsp_gaps>
-              <Hsp_align-len>449</Hsp_align-len>
-              <Hsp_qseq>MQSLLIRNARMVNEGQVREGDLLVRHGRIERIAGCLENCGASREIDAAGRYLLPGMIDDQVHFREPGYPQKGSIASESRAAVAGGITSFMDMPNTRPATLSLEALAEKKRLAAAHSVANYGFHFGVSRDNLDTVAALDPREVAAVKVFMGASTGDMLVDDLPTLERLFASVPTLLLSHCEDTPRIEANLARWRQRFGERIPAAAHPRIRDAEACYRSTALAVELAQRHGTLLHVLHLSTARELALFEDKP----LCQKRITAEVCVHHLLFDDSDYARLGHLLKCNPAIKSREDRDALRRALAGNRLDVIGTDHAPHAWAEKQQAYPQAPAGLPLVQHALPALLELVREGWLSLATLVAKTSHRVAELFAIADRGFLREGYWADLVLVSELEHPALASAMPLLSRCNWTPFRHRAFHHRIDTTIVSGQLAWHAGRLSDDCQGLPLRFSR</Hsp_qseq>
-              <Hsp_hseq>MNKLLIKNATLVNEGRIYASDVLIEGERIARIAPDIQAPDAV-VIDAAGRHLIPGMIDDQVHFREPGLTHKGTIASESRAAVAGGTTSFMEMPNVNPQTTTLDALEAKYQIAANSSAANYSFYLGATNDNLEEIKKLDPKQSCGIKIFMGASTGNMLVDNQETLAAIFRESPVMIVTHCEDTPTIKVLEDEARAKWGEDVPMREHGRIRSADACYKSSSLAVSLAKQYGAKLHVLHLTTAKELSLFTATPDLKDLKDKNITAEVCVHHLFFNEADYDTLGSQIKCNPAVKSAADQHALLDAVRNDVLDIIATDHAPHTWEEKQNSYFKAPSGVPLVQHSLLALLELYHNGVFSLETIVKKTSHAVAERFQVQDRGYIREGYFADLVLL-DLGKPYVVNDSNLLYLCGWSPFNGYRFHSTVEMTLVNGQIAWQNGQVTNEVLGKRLTFTR</Hsp_hseq>
-              <Hsp_midline>M  LLI+NA +VNEG++   D+L+   RI RIA  ++   A   IDAAGR+L+PGMIDDQVHFREPG   KG+IASESRAAVAGG TSFM+MPN  P T +L+AL  K ++AA  S ANY F+ G + DNL+ +  LDP++   +K+FMGASTG+MLVD+  TL  +F   P ++++HCEDTP I+      R ++GE +P   H RIR A+ACY+S++LAV LA+++G  LHVLHL+TA+EL+LF   P    L  K ITAEVCVHHL F+++DY  LG  +KCNPA+KS  D+ AL  A+  + LD+I TDHAPH W EKQ +Y +AP+G+PLVQH+L ALLEL   G  SL T+V KTSH VAE F + DRG++REGY+ADLVL+ +L  P + +   LL  C W+PF    FH  ++ T+V+GQ+AW  G+++++  G  L F+R</Hsp_midline>
-            </Hsp>
-          </Hit_hsps>
-        </Hit>
-      </Iteration_hits>
-      <Iteration_stat>
-        <Statistics>
-          <Statistics_db-num>4299737</Statistics_db-num>
-          <Statistics_db-len>1479795817</Statistics_db-len>
-          <Statistics_hsp-len>0</Statistics_hsp-len>
-          <Statistics_eff-space>0</Statistics_eff-space>
-          <Statistics_kappa>0.041</Statistics_kappa>
-          <Statistics_lambda>0.267</Statistics_lambda>
-          <Statistics_entropy>0.14</Statistics_entropy>
-        </Statistics>
-      </Iteration_stat>
-    </Iteration>
-    <Iteration>
-      <Iteration_iter-num>2</Iteration_iter-num>
-      <Iteration_query-ID>gi|15598723|ref|NP_252217.1|</Iteration_query-ID>
-      <Iteration_query-def>dihydroorotase [Pseudomonas aeruginosa PAO1]</Iteration_query-def>
-      <Iteration_query-len>348</Iteration_query-len>
-      <Iteration_hits>
-        <Hit>
-          <Hit_num>1</Hit_num>
-          <Hit_id>gi|15598723|ref|NP_252217.1|</Hit_id>
-          <Hit_def>dihydroorotase [Pseudomonas aeruginosa PAO1] >gi|6226683|sp|P72170|PYRC_PSEAE Dihydroorotase (DHOase) >gi|9949676|gb|AAG06915.1|AE004773_4 dihydroorotase [Pseudomonas aeruginosa PAO1] >gi|3868712|gb|AAC73109.1| dihydroorotase [Pseudomonas aeruginosa]</Hit_def>
-          <Hit_accession>NP_252217</Hit_accession>
-          <Hit_len>348</Hit_len>
-          <Hit_hsps>
-            <Hsp>
-              <Hsp_num>1</Hsp_num>
-              <Hsp_bit-score>690.263</Hsp_bit-score>
-              <Hsp_score>1780</Hsp_score>
-              <Hsp_evalue>0</Hsp_evalue>
-              <Hsp_query-from>1</Hsp_query-from>
-              <Hsp_query-to>348</Hsp_query-to>
-              <Hsp_hit-from>1</Hsp_hit-from>
-              <Hsp_hit-to>348</Hsp_hit-to>
-              <Hsp_query-frame>0</Hsp_query-frame>
-              <Hsp_hit-frame>0</Hsp_hit-frame>
-              <Hsp_identity>348</Hsp_identity>
-              <Hsp_positive>348</Hsp_positive>
-              <Hsp_gaps>0</Hsp_gaps>
-              <Hsp_align-len>348</Hsp_align-len>
-              <Hsp_qseq>MSDRLTLLRPDDWHIHLRDGAALANTVGDAARTFGRAIVMPNLVPPVRNAAEADAYRQRILAARPAASRFEPLMVLYLTDRTSTEEIRTAKASGFVHAAKLYPAGATTNSDSGVTRIDNIFEALEAMAEVGMPLLVHGEVTRAEVDVFDREKQFIDEHLRRVVERFPTLKVVFEHITTGDAAQFVREAPANVGATITAHHLLYNRNHMLVGGIRPHFYCLPILKRNTHQEALLDAAVSGNPKFFLGTDSAPHARHAKEAACGCAGCYSAYAAIELYAEAFEQRNALDKLEGFASLHGPDFYGLPRNTDRITLVREEWQAPASLPFGDFDVVPLRAGETLRWKLLEAGA</Hsp_qseq>
-              <Hsp_hseq>MSDRLTLLRPDDWHIHLRDGAALANTVGDAARTFGRAIVMPNLVPPVRNAAEADAYRQRILAARPAASRFEPLMVLYLTDRTSTEEIRTAKASGFVHAAKLYPAGATTNSDSGVTRIDNIFEALEAMAEVGMPLLVHGEVTRAEVDVFDREKQFIDEHLRRVVERFPTLKVVFEHITTGDAAQFVREAPANVGATITAHHLLYNRNHMLVGGIRPHFYCLPILKRNTHQEALLDAAVSGNPKFFLGTDSAPHARHAKEAACGCAGCYSAYAAIELYAEAFEQRNALDKLEGFASLHGPDFYGLPRNTDRITLVREEWQAPASLPFGDFDVVPLRAGETLRWKLLEAGA</Hsp_hseq>
-              <Hsp_midline>MSDRLTLLRPDDWHIHLRDGAALANTVGDAARTFGRAIVMPNLVPPVRNAAEADAYRQRILAARPAASRFEPLMVLYLTDRTSTEEIRTAKASGFVHAAKLYPAGATTNSDSGVTRIDNIFEALEAMAEVGMPLLVHGEVTRAEVDVFDREKQFIDEHLRRVVERFPTLKVVFEHITTGDAAQFVREAPANVGATITAHHLLYNRNHMLVGGIRPHFYCLPILKRNTHQEALLDAAVSGNPKFFLGTDSAPHARHAKEAACGCAGCYSAYAAIELYAEAFEQRNALDKLEGFASLHGPDFYGLPRNTDRITLVREEWQAPASLPFGDFDVVPLRAGETLRWKLLEAGA</Hsp_midline>
-            </Hsp>
-          </Hit_hsps>
-        </Hit>
-        <Hit>
-          <Hit_num>2</Hit_num>
-          <Hit_id>gi|84319753|ref|ZP_00968143.1|</Hit_id>
-          <Hit_def>COG0418: Dihydroorotase [Pseudomonas aeruginosa C3719] >gi|84325801|ref|ZP_00973833.1| COG0418: Dihydroorotase [Pseudomonas aeruginosa 2192] >gi|107103039|ref|ZP_01366957.1| hypothetical protein PaerPA_01004108 [Pseudomonas aeruginosa PACS2]</Hit_def>
-          <Hit_accession>ZP_00968143</Hit_accession>
-          <Hit_len>348</Hit_len>
-          <Hit_hsps>
-            <Hsp>
-              <Hsp_num>1</Hsp_num>
-              <Hsp_bit-score>687.567</Hsp_bit-score>
-              <Hsp_score>1773</Hsp_score>
-              <Hsp_evalue>0</Hsp_evalue>
-              <Hsp_query-from>1</Hsp_query-from>
-              <Hsp_query-to>348</Hsp_query-to>
-              <Hsp_hit-from>1</Hsp_hit-from>
-              <Hsp_hit-to>348</Hsp_hit-to>
-              <Hsp_query-frame>0</Hsp_query-frame>
-              <Hsp_hit-frame>0</Hsp_hit-frame>
-              <Hsp_identity>347</Hsp_identity>
-              <Hsp_positive>347</Hsp_positive>
-              <Hsp_gaps>0</Hsp_gaps>
-              <Hsp_align-len>348</Hsp_align-len>
-              <Hsp_qseq>MSDRLTLLRPDDWHIHLRDGAALANTVGDAARTFGRAIVMPNLVPPVRNAAEADAYRQRILAARPAASRFEPLMVLYLTDRTSTEEIRTAKASGFVHAAKLYPAGATTNSDSGVTRIDNIFEALEAMAEVGMPLLVHGEVTRAEVDVFDREKQFIDEHLRRVVERFPTLKVVFEHITTGDAAQFVREAPANVGATITAHHLLYNRNHMLVGGIRPHFYCLPILKRNTHQEALLDAAVSGNPKFFLGTDSAPHARHAKEAACGCAGCYSAYAAIELYAEAFEQRNALDKLEGFASLHGPDFYGLPRNTDRITLVREEWQAPASLPFGDFDVVPLRAGETLRWKLLEAGA</Hsp_qseq>
-              <Hsp_hseq>MSDRLTLLRPDDWHIHLRDGAALANTVGDAARTFGRAIVMPNLVPPVRNAAEADAYRQRILAARPAASRFEPLMVLYLTDRTSAEEIRTAKASGFVHAAKLYPAGATTNSDSGVTRIDNIFEALEAMAEVGMPLLVHGEVTRAEVDVFDREKQFIDEHLRRVVERFPTLKVVFEHITTGDAAQFVREAPANVGATITAHHLLYNRNHMLVGGIRPHFYCLPILKRNTHQEALLDAAVSGNPKFFLGTDSAPHARHAKEAACGCAGCYSAYAAIELYAEAFEQRNALDKLEGFASLHGPDFYGLPRNTDRITLVREEWQAPASLPFGDFDVVPLRAGETLRWKLLEAGA</Hsp_hseq>
-              <Hsp_midline>MSDRLTLLRPDDWHIHLRDGAALANTVGDAARTFGRAIVMPNLVPPVRNAAEADAYRQRILAARPAASRFEPLMVLYLTDRTS EEIRTAKASGFVHAAKLYPAGATTNSDSGVTRIDNIFEALEAMAEVGMPLLVHGEVTRAEVDVFDREKQFIDEHLRRVVERFPTLKVVFEHITTGDAAQFVREAPANVGATITAHHLLYNRNHMLVGGIRPHFYCLPILKRNTHQEALLDAAVSGNPKFFLGTDSAPHARHAKEAACGCAGCYSAYAAIELYAEAFEQRNALDKLEGFASLHGPDFYGLPRNTDRITLVREEWQAPASLPFGDFDVVPLRAGETLRWKLLEAGA</Hsp_midline>
-            </Hsp>
-          </Hit_hsps>
-        </Hit>
-        <Hit>
-          <Hit_num>3</Hit_num>
-          <Hit_id>gi|116051526|ref|YP_789638.1|</Hit_id>
-          <Hit_def>dihydroorotase, homodimeric type [Pseudomonas aeruginosa UCBPP-PA14] >gi|115586747|gb|ABJ12762.1| dihydroorotase, homodimeric type [Pseudomonas aeruginosa UCBPP-PA14]</Hit_def>
-          <Hit_accession>YP_789638</Hit_accession>
-          <Hit_len>348</Hit_len>
-          <Hit_hsps>
-            <Hsp>
-              <Hsp_num>1</Hsp_num>
-              <Hsp_bit-score>686.797</Hsp_bit-score>
-              <Hsp_score>1771</Hsp_score>
-              <Hsp_evalue>0</Hsp_evalue>
-              <Hsp_query-from>1</Hsp_query-from>
-              <Hsp_query-to>348</Hsp_query-to>
-              <Hsp_hit-from>1</Hsp_hit-from>
-              <Hsp_hit-to>348</Hsp_hit-to>
-              <Hsp_query-frame>0</Hsp_query-frame>
-              <Hsp_hit-frame>0</Hsp_hit-frame>
-              <Hsp_identity>346</Hsp_identity>
-              <Hsp_positive>346</Hsp_positive>
-              <Hsp_gaps>0</Hsp_gaps>
-              <Hsp_align-len>348</Hsp_align-len>
-              <Hsp_qseq>MSDRLTLLRPDDWHIHLRDGAALANTVGDAARTFGRAIVMPNLVPPVRNAAEADAYRQRILAARPAASRFEPLMVLYLTDRTSTEEIRTAKASGFVHAAKLYPAGATTNSDSGVTRIDNIFEALEAMAEVGMPLLVHGEVTRAEVDVFDREKQFIDEHLRRVVERFPTLKVVFEHITTGDAAQFVREAPANVGATITAHHLLYNRNHMLVGGIRPHFYCLPILKRNTHQEALLDAAVSGNPKFFLGTDSAPHARHAKEAACGCAGCYSAYAAIELYAEAFEQRNALDKLEGFASLHGPDFYGLPRNTDRITLVREEWQAPASLPFGDFDVVPLRAGETLRWKLLEAGA</Hsp_qseq>
-              <Hsp_hseq>MSDRLTLLRPDDWHIHLRDGAALANTVGDAARTFGRAIVMPNLVPPVRNAAEADAYRQRILAARPAASRFEPLMVLYLTDRTSAEEIRTAKASGFVHAAKLYPAGATTNSDSGVTRIDNIFEALEAMAEVGMPLLVHGEVTRAEVDVFDREKQFIDEHLRRVVERFPTLKVVFEHITTGDAAQFVREAPANVGATITAHHLLYNRNHMLVGGIRPHFYCLPILKRNTHQEALLDAAVSGNPKFFLGTDSAPHARHAKETACGCAGCYSAYAAIELYAEAFEQRNALDKLEGFASLHGPDFYGLPRNTDRITLVREEWQAPASLPFGDFDVVPLRAGETLRWKLLEAGA</Hsp_hseq>
-              <Hsp_midline>MSDRLTLLRPDDWHIHLRDGAALANTVGDAARTFGRAIVMPNLVPPVRNAAEADAYRQRILAARPAASRFEPLMVLYLTDRTS EEIRTAKASGFVHAAKLYPAGATTNSDSGVTRIDNIFEALEAMAEVGMPLLVHGEVTRAEVDVFDREKQFIDEHLRRVVERFPTLKVVFEHITTGDAAQFVREAPANVGATITAHHLLYNRNHMLVGGIRPHFYCLPILKRNTHQEALLDAAVSGNPKFFLGTDSAPHARHAKE ACGCAGCYSAYAAIELYAEAFEQRNALDKLEGFASLHGPDFYGLPRNTDRITLVREEWQAPASLPFGDFDVVPLRAGETLRWKLLEAGA</Hsp_midline>
-            </Hsp>
-          </Hit_hsps>
-        </Hit>
-        <Hit>
-          <Hit_num>4</Hit_num>
-          <Hit_id>gi|94415333|ref|ZP_01295177.1|</Hit_id>
-          <Hit_def>hypothetical protein PaerP_01002886 [Pseudomonas aeruginosa PA7]</Hit_def>
-          <Hit_accession>ZP_01295177</Hit_accession>
-          <Hit_len>348</Hit_len>
-          <Hit_hsps>
-            <Hsp>
-              <Hsp_num>1</Hsp_num>
-              <Hsp_bit-score>677.937</Hsp_bit-score>
-              <Hsp_score>1748</Hsp_score>
-              <Hsp_evalue>0</Hsp_evalue>
-              <Hsp_query-from>1</Hsp_query-from>
-              <Hsp_query-to>348</Hsp_query-to>
-              <Hsp_hit-from>1</Hsp_hit-from>
-              <Hsp_hit-to>348</Hsp_hit-to>
-              <Hsp_query-frame>0</Hsp_query-frame>
-              <Hsp_hit-frame>0</Hsp_hit-frame>
-              <Hsp_identity>342</Hsp_identity>
-              <Hsp_positive>345</Hsp_positive>
-              <Hsp_gaps>0</Hsp_gaps>
-              <Hsp_align-len>348</Hsp_align-len>
-              <Hsp_qseq>MSDRLTLLRPDDWHIHLRDGAALANTVGDAARTFGRAIVMPNLVPPVRNAAEADAYRQRILAARPAASRFEPLMVLYLTDRTSTEEIRTAKASGFVHAAKLYPAGATTNSDSGVTRIDNIFEALEAMAEVGMPLLVHGEVTRAEVDVFDREKQFIDEHLRRVVERFPTLKVVFEHITTGDAAQFVREAPANVGATITAHHLLYNRNHMLVGGIRPHFYCLPILKRNTHQEALLDAAVSGNPKFFLGTDSAPHARHAKEAACGCAGCYSAYAAIELYAEAFEQRNALDKLEGFASLHGPDFYGLPRNTDRITLVREEWQAPASLPFGDFDVVPLRAGETLRWKLLEAGA</Hsp_qseq>
-              <Hsp_hseq>MSDRLTLLRPDDWHIHLRDGAALANTVGDAARTFGRAIVMPNLVPPVRNAAEADAYRQRILAARPAASRFEPLMVLYLTDRTSAEEIRTAKASGFVHAAKLYPAGATTNSDSGVTRIDNVFAALEAMAEVGMPLLVHGEVTRAEVDVFDREKQFIDEHLRRVVERFPTLKVVFEHITTGDAAQFVREAPANVGATITAHHLLYNRNHMLVGGIRPHFYCLPILKRNTHQEALLDAAVSGNPKFFLGTDSAPHARHAKEAACGCAGCYTAYAAIELYAEAFEQRNALDKLEGFASLHGPDFYGLPRNTDRITLVREQWQAPASLPFGDFDVVPLRAGETLRWKLLEAEA</Hsp_hseq>
-              <Hsp_midline>MSDRLTLLRPDDWHIHLRDGAALANTVGDAARTFGRAIVMPNLVPPVRNAAEADAYRQRILAARPAASRFEPLMVLYLTDRTS EEIRTAKASGFVHAAKLYPAGATTNSDSGVTRIDN+F ALEAMAEVGMPLLVHGEVTRAEVDVFDREKQFIDEHLRRVVERFPTLKVVFEHITTGDAAQFVREAPANVGATITAHHLLYNRNHMLVGGIRPHFYCLPILKRNTHQEALLDAAVSGNPKFFLGTDSAPHARHAKEAACGCAGCY+AYAAIELYAEAFEQRNALDKLEGFASLHGPDFYGLPRNTDRITLVRE+WQAPASLPFGDFDVVPLRAGETLRWKLLEA A</Hsp_midline>
-            </Hsp>
-          </Hit_hsps>
-        </Hit>
-        <Hit>
-          <Hit_num>5</Hit_num>
-          <Hit_id>gi|104780416|ref|YP_606914.1|</Hit_id>
-          <Hit_def>dihydroorotase [Pseudomonas entomophila L48] >gi|95109403|emb|CAK14103.1| dihydroorotase [Pseudomonas]</Hit_def>
-          <Hit_accession>YP_606914</Hit_accession>
-          <Hit_len>348</Hit_len>
-          <Hit_hsps>
-            <Hsp>
-              <Hsp_num>1</Hsp_num>
-              <Hsp_bit-score>618.616</Hsp_bit-score>
-              <Hsp_score>1594</Hsp_score>
-              <Hsp_evalue>1.8941e-175</Hsp_evalue>
-              <Hsp_query-from>1</Hsp_query-from>
-              <Hsp_query-to>348</Hsp_query-to>
-              <Hsp_hit-from>1</Hsp_hit-from>
-              <Hsp_hit-to>348</Hsp_hit-to>
-              <Hsp_query-frame>0</Hsp_query-frame>
-              <Hsp_hit-frame>0</Hsp_hit-frame>
-              <Hsp_identity>304</Hsp_identity>
-              <Hsp_positive>321</Hsp_positive>
-              <Hsp_gaps>0</Hsp_gaps>
-              <Hsp_align-len>348</Hsp_align-len>
-              <Hsp_qseq>MSDRLTLLRPDDWHIHLRDGAALANTVGDAARTFGRAIVMPNLVPPVRNAAEADAYRQRILAARPAASRFEPLMVLYLTDRTSTEEIRTAKASGFVHAAKLYPAGATTNSDSGVTRIDNIFEALEAMAEVGMPLLVHGEVTRAEVDVFDREKQFIDEHLRRVVERFPTLKVVFEHITTGDAAQFVREAPANVGATITAHHLLYNRNHMLVGGIRPHFYCLPILKRNTHQEALLDAAVSGNPKFFLGTDSAPHARHAKEAACGCAGCYSAYAAIELYAEAFEQRNALDKLEGFASLHGPDFYGLPRNTDRITLVREEWQAPASLPFGDFDVVPLRAGETLRWKLLEAGA</Hsp_qseq>
-              <Hsp_hseq>MSDRLTLLRPDDWHIHLRDGAVLQHTVGDVARTFARAIIMPNLVPPVRNALEAGGYRERILAARPAGSRFEPLMVLYLTDRTSPEDIRAAKASGFVYAAKLYPAGATTNSDSGVTSIDNIFPAIEALAETGMPLLVHGEVTRSEIDVFDREKRFIDEHMRRLVERFPTLKVVFEHITTADAAQFVTEAPANVGATITAQHLLYNRNHMLVGGIRPHFYCLPILKRNTHQVALLDAATSGNPKFFLGTDSAPHAKHAKEAACGCAGCYTAYAAIELYAEAFEQRNALDKLEGFASKHGPDFYGLPRNTDTITLVRDEWTAPDSLPFGDNTVIPLRAGEKLRWRLLEDNA</Hsp_hseq>
-              <Hsp_midline>MSDRLTLLRPDDWHIHLRDGA L +TVGD ARTF RAI+MPNLVPPVRNA EA  YR+RILAARPA SRFEPLMVLYLTDRTS E+IR AKASGFV+AAKLYPAGATTNSDSGVT IDNIF A+EA+AE GMPLLVHGEVTR+E+DVFDREK+FIDEH+RR+VERFPTLKVVFEHITT DAAQFV EAPANVGATITA HLLYNRNHMLVGGIRPHFYCLPILKRNTHQ ALLDAA SGNPKFFLGTDSAPHA+HAKEAACGCAGCY+AYAAIELYAEAFEQRNALDKLEGFAS HGPDFYGLPRNTD ITLVR+EW AP SLPFGD  V+PLRAGE LRW+LLE  A</Hsp_midline>
-            </Hsp>
-          </Hit_hsps>
-        </Hit>
-        <Hit>
-          <Hit_num>6</Hit_num>
-          <Hit_id>gi|77460740|ref|YP_350247.1|</Hit_id>
-          <Hit_def>dihydroorotase [Pseudomonas fluorescens PfO-1] >gi|77384743|gb|ABA76256.1| Dihydroorotase homodimeric type [Pseudomonas fluorescens PfO-1]</Hit_def>
-          <Hit_accession>YP_350247</Hit_accession>
-          <Hit_len>348</Hit_len>
-          <Hit_hsps>
-            <Hsp>
-              <Hsp_num>1</Hsp_num>
-              <Hsp_bit-score>617.076</Hsp_bit-score>
-              <Hsp_score>1590</Hsp_score>
-              <Hsp_evalue>4.98593e-175</Hsp_evalue>
-              <Hsp_query-from>1</Hsp_query-from>
-              <Hsp_query-to>348</Hsp_query-to>
-              <Hsp_hit-from>1</Hsp_hit-from>
-              <Hsp_hit-to>348</Hsp_hit-to>
-              <Hsp_query-frame>0</Hsp_query-frame>
-              <Hsp_hit-frame>0</Hsp_hit-frame>
-              <Hsp_identity>305</Hsp_identity>
-              <Hsp_positive>317</Hsp_positive>
-              <Hsp_gaps>0</Hsp_gaps>
-              <Hsp_align-len>348</Hsp_align-len>
-              <Hsp_qseq>MSDRLTLLRPDDWHIHLRDGAALANTVGDAARTFGRAIVMPNLVPPVRNAAEADAYRQRILAARPAASRFEPLMVLYLTDRTSTEEIRTAKASGFVHAAKLYPAGATTNSDSGVTRIDNIFEALEAMAEVGMPLLVHGEVTRAEVDVFDREKQFIDEHLRRVVERFPTLKVVFEHITTGDAAQFVREAPANVGATITAHHLLYNRNHMLVGGIRPHFYCLPILKRNTHQEALLDAAVSGNPKFFLGTDSAPHARHAKEAACGCAGCYSAYAAIELYAEAFEQRNALDKLEGFASLHGPDFYGLPRNTDRITLVREEWQAPASLPFGDFDVVPLRAGETLRWKLLEAGA</Hsp_qseq>
-              <Hsp_hseq>MSDRLTLLRPDDWHIHLRDGAVLTNTVADVARTFGRAIIMPNLVPPVRNAAEADGYRQRILAARPAGSRFEPLMVLYLTDRTQPEEIREAKASGFVHAAKLYPAGATTNSDSGVTSIDKIFPVLEAMAEAGMPLLIHGEVTRGDVDVFDREKIFIDEHMRRVVERFPTLKVVFEHITTGDAVQFVNEASANVGATITAHHLLYNRNHMLVGGIRPHFYCLPILKRNTHQEALLDAATSGSAKFFLGTDSAPHAQHAKEAACGCAGCYTAYAAIELYAEAFEQRNALDKLEAFASLNGPRFYGLPANTDRITLVRDEWTAPTSLPFGELTVIPLRAGEKLRWRLLEEHA</Hsp_hseq>
-              <Hsp_midline>MSDRLTLLRPDDWHIHLRDGA L NTV D ARTFGRAI+MPNLVPPVRNAAEAD YRQRILAARPA SRFEPLMVLYLTDRT  EEIR AKASGFVHAAKLYPAGATTNSDSGVT ID IF  LEAMAE GMPLL+HGEVTR +VDVFDREK FIDEH+RRVVERFPTLKVVFEHITTGDA QFV EA ANVGATITAHHLLYNRNHMLVGGIRPHFYCLPILKRNTHQEALLDAA SG+ KFFLGTDSAPHA+HAKEAACGCAGCY+AYAAIELYAEAFEQRNALDKLE FASL+GP FYGLP NTDRITLVR+EW AP SLPFG+  V+PLRAGE LRW+LLE  A</Hsp_midline>
-            </Hsp>
-          </Hit_hsps>
-        </Hit>
-        <Hit>
-          <Hit_num>7</Hit_num>
-          <Hit_id>gi|26987822|ref|NP_743247.1|</Hit_id>
-          <Hit_def>dihydroorotase [Pseudomonas putida KT2440] >gi|38258008|sp|Q88NW7|PYRC_PSEPK Dihydroorotase (DHOase) >gi|24982521|gb|AAN66711.1|AE016299_7 dihydroorotase, homodimeric type [Pseudomonas putida KT2440]</Hit_def>
-          <Hit_accession>NP_743247</Hit_accession>
-          <Hit_len>348</Hit_len>
-          <Hit_hsps>
-            <Hsp>
-              <Hsp_num>1</Hsp_num>
-              <Hsp_bit-score>616.305</Hsp_bit-score>
-              <Hsp_score>1588</Hsp_score>
-              <Hsp_evalue>7.75889e-175</Hsp_evalue>
-              <Hsp_query-from>1</Hsp_query-from>
-              <Hsp_query-to>348</Hsp_query-to>
-              <Hsp_hit-from>1</Hsp_hit-from>
-              <Hsp_hit-to>348</Hsp_hit-to>
-              <Hsp_query-frame>0</Hsp_query-frame>
-              <Hsp_hit-frame>0</Hsp_hit-frame>
-              <Hsp_identity>305</Hsp_identity>
-              <Hsp_positive>321</Hsp_positive>
-              <Hsp_gaps>0</Hsp_gaps>
-              <Hsp_align-len>348</Hsp_align-len>
-              <Hsp_qseq>MSDRLTLLRPDDWHIHLRDGAALANTVGDAARTFGRAIVMPNLVPPVRNAAEADAYRQRILAARPAASRFEPLMVLYLTDRTSTEEIRTAKASGFVHAAKLYPAGATTNSDSGVTRIDNIFEALEAMAEVGMPLLVHGEVTRAEVDVFDREKQFIDEHLRRVVERFPTLKVVFEHITTGDAAQFVREAPANVGATITAHHLLYNRNHMLVGGIRPHFYCLPILKRNTHQEALLDAAVSGNPKFFLGTDSAPHARHAKEAACGCAGCYSAYAAIELYAEAFEQRNALDKLEGFASLHGPDFYGLPRNTDRITLVREEWQAPASLPFGDFDVVPLRAGETLRWKLLEAGA</Hsp_qseq>
-              <Hsp_hseq>MSDRLTLLRPDDWHIHLRDGAVLPHTVGDVARTFARAIIMPNLVPPVRNVTEAGAYRERILAARPAGSRFEPLMVLYLTDRTSPEDVRAAKASGFVYAAKLYPAGATTNSDSGVTSIDNIFPAIEALAEVGMPLLVHGEVTRSEIDVFDREKRFIDEHMRRVVERFPTLKVVFEHITTSDAAQFVTEAPANVGATITAQHLLYNRNHMLVGGIRPHFYCLPILKRNTHQVALLDAATSGNPKFFLGTDSAPHARHAKEAACGCAGCYTAYAAIEMYAEAFEQRNALDKLEGFASLHGPAFYGLPANTDTITLVREEWTAPESLPFGEQTVVPLRAGEKLRWRLLEKNA</Hsp_hseq>
-              <Hsp_midline>MSDRLTLLRPDDWHIHLRDGA L +TVGD ARTF RAI+MPNLVPPVRN  EA AYR+RILAARPA SRFEPLMVLYLTDRTS E++R AKASGFV+AAKLYPAGATTNSDSGVT IDNIF A+EA+AEVGMPLLVHGEVTR+E+DVFDREK+FIDEH+RRVVERFPTLKVVFEHITT DAAQFV EAPANVGATITA HLLYNRNHMLVGGIRPHFYCLPILKRNTHQ ALLDAA SGNPKFFLGTDSAPHARHAKEAACGCAGCY+AYAAIE+YAEAFEQRNALDKLEGFASLHGP FYGLP NTD ITLVREEW AP SLPFG+  VVPLRAGE LRW+LLE  A</Hsp_midline>
-            </Hsp>
-          </Hit_hsps>
-        </Hit>
-        <Hit>
-          <Hit_num>8</Hit_num>
-          <Hit_id>gi|70732180|ref|YP_261936.1|</Hit_id>
-          <Hit_def>dihydroorotase [Pseudomonas fluorescens Pf-5] >gi|68346479|gb|AAY94085.1| dihydroorotase, homodimeric type [Pseudomonas fluorescens Pf-5]</Hit_def>
-          <Hit_accession>YP_261936</Hit_accession>
-          <Hit_len>348</Hit_len>
-          <Hit_hsps>
-            <Hsp>
-              <Hsp_num>1</Hsp_num>
-              <Hsp_bit-score>614.379</Hsp_bit-score>
-              <Hsp_score>1583</Hsp_score>
-              <Hsp_evalue>3.15189e-174</Hsp_evalue>
-              <Hsp_query-from>1</Hsp_query-from>
-              <Hsp_query-to>345</Hsp_query-to>
-              <Hsp_hit-from>1</Hsp_hit-from>
-              <Hsp_hit-to>345</Hsp_hit-to>
-              <Hsp_query-frame>0</Hsp_query-frame>
-              <Hsp_hit-frame>0</Hsp_hit-frame>
-              <Hsp_identity>303</Hsp_identity>
-              <Hsp_positive>317</Hsp_positive>
-              <Hsp_gaps>0</Hsp_gaps>
-              <Hsp_align-len>345</Hsp_align-len>
-              <Hsp_qseq>MSDRLTLLRPDDWHIHLRDGAALANTVGDAARTFGRAIVMPNLVPPVRNAAEADAYRQRILAARPAASRFEPLMVLYLTDRTSTEEIRTAKASGFVHAAKLYPAGATTNSDSGVTRIDNIFEALEAMAEVGMPLLVHGEVTRAEVDVFDREKQFIDEHLRRVVERFPTLKVVFEHITTGDAAQFVREAPANVGATITAHHLLYNRNHMLVGGIRPHFYCLPILKRNTHQEALLDAAVSGNPKFFLGTDSAPHARHAKEAACGCAGCYSAYAAIELYAEAFEQRNALDKLEGFASLHGPDFYGLPRNTDRITLVREEWQAPASLPFGDFDVVPLRAGETLRWKLLE</Hsp_qseq>
-              <Hsp_hseq>MSDRLTLLRPDDWHIHLRDGAVLPNTVADVARTFGRAIIMPNLVPPVRNAAEADAYRQRILAARPAGSRFEPLMVLYLTDRTQPEEIRAAKACGFVHAAKLYPAGATTNSDSGVTSIDKIFPVLEAMAEVGLPLLIHGEVTRGDVDVFDREKIFIDEHMRRVVERFPSLKVVFEHITTAEAVQFVKEASANVGATITAHHLLYNRNHMLVGGIRPHFYCLPILKRNTHQEALLDAATSGNAKFFLGTDSAPHAQHAKEAACGCAGCYSAYAAIELYAEAFEQRNALDQLEAFASLNGPRFYGLPANTDSITLVREEWTAPASLPFGELTVIPLRAGEKLRWRLLE</Hsp_hseq>
-              <Hsp_midline>MSDRLTLLRPDDWHIHLRDGA L NTV D ARTFGRAI+MPNLVPPVRNAAEADAYRQRILAARPA SRFEPLMVLYLTDRT  EEIR AKA GFVHAAKLYPAGATTNSDSGVT ID IF  LEAMAEVG+PLL+HGEVTR +VDVFDREK FIDEH+RRVVERFP+LKVVFEHITT +A QFV+EA ANVGATITAHHLLYNRNHMLVGGIRPHFYCLPILKRNTHQEALLDAA SGN KFFLGTDSAPHA+HAKEAACGCAGCYSAYAAIELYAEAFEQRNALD+LE FASL+GP FYGLP NTD ITLVREEW APASLPFG+  V+PLRAGE LRW+LLE</Hsp_midline>
-            </Hsp>
-          </Hit_hsps>
-        </Hit>
-        <Hit>
-          <Hit_num>9</Hit_num>
-          <Hit_id>gi|118058820|ref|ZP_01527280.1|</Hit_id>
-          <Hit_def>dihydroorotase, homodimeric type [Pseudomonas mendocina ymp] >gi|118007582|gb|EAV21656.1| dihydroorotase, homodimeric type [Pseudomonas mendocina ymp]</Hit_def>
-          <Hit_accession>ZP_01527280</Hit_accession>
-          <Hit_len>436</Hit_len>
-          <Hit_hsps>
-            <Hsp>
-              <Hsp_num>1</Hsp_num>
-              <Hsp_bit-score>613.609</Hsp_bit-score>
-              <Hsp_score>1581</Hsp_score>
-              <Hsp_evalue>5.60536e-174</Hsp_evalue>
-              <Hsp_query-from>1</Hsp_query-from>
-              <Hsp_query-to>348</Hsp_query-to>
-              <Hsp_hit-from>89</Hsp_hit-from>
-              <Hsp_hit-to>436</Hsp_hit-to>
-              <Hsp_query-frame>0</Hsp_query-frame>
-              <Hsp_hit-frame>0</Hsp_hit-frame>
-              <Hsp_identity>309</Hsp_identity>
-              <Hsp_positive>318</Hsp_positive>
-              <Hsp_gaps>0</Hsp_gaps>
-              <Hsp_align-len>348</Hsp_align-len>
-              <Hsp_qseq>MSDRLTLLRPDDWHIHLRDGAALANTVGDAARTFGRAIVMPNLVPPVRNAAEADAYRQRILAARPAASRFEPLMVLYLTDRTSTEEIRTAKASGFVHAAKLYPAGATTNSDSGVTRIDNIFEALEAMAEVGMPLLVHGEVTRAEVDVFDREKQFIDEHLRRVVERFPTLKVVFEHITTGDAAQFVREAPANVGATITAHHLLYNRNHMLVGGIRPHFYCLPILKRNTHQEALLDAAVSGNPKFFLGTDSAPHARHAKEAACGCAGCYSAYAAIELYAEAFEQRNALDKLEGFASLHGPDFYGLPRNTDRITLVREEWQAPASLPFGDFDVVPLRAGETLRWKLLEAGA</Hsp_qseq>
-              <Hsp_hseq>MSDRLTLLRPDDWHIHLRDGAVLPHTVGDAARTFGRAIIMPNLVPPVRNAAEADAYRQRILAARPAGSRFEPLMVLYLTDNTSPEDVRAAKASGFVHAAKLYPAGATTNSDSGVTSIDKIFPALEAMAEVGMLLLVHGEVTRAEIDVFDREKAFIDEHLTRVVERFPTLKVVFEHITTRDAVQFVEAASANVGATITAHHLLYNRNHMLVGGIRPHFYCLPILKRNVHQEALLDAATSGNVKFFLGTDSAPHAKHAKEAACGCAGCYTAFAAIELYAEAFEQRNALDKLEAFASFHGPDFYGLPRNTDSITLVREEWTVPASLPLGENSVVPLRAGETLRWKLLEGQA</Hsp_hseq>
-              <Hsp_midline>MSDRLTLLRPDDWHIHLRDGA L +TVGDAARTFGRAI+MPNLVPPVRNAAEADAYRQRILAARPA SRFEPLMVLYLTD TS E++R AKASGFVHAAKLYPAGATTNSDSGVT ID IF ALEAMAEVGM LLVHGEVTRAE+DVFDREK FIDEHL RVVERFPTLKVVFEHITT DA QFV  A ANVGATITAHHLLYNRNHMLVGGIRPHFYCLPILKRN HQEALLDAA SGN KFFLGTDSAPHA+HAKEAACGCAGCY+A+AAIELYAEAFEQRNALDKLE FAS HGPDFYGLPRNTD ITLVREEW  PASLP G+  VVPLRAGETLRWKLLE  A</Hsp_midline>
-            </Hsp>
-          </Hit_hsps>
-        </Hit>
-        <Hit>
-          <Hit_num>10</Hit_num>
-          <Hit_id>gi|82737454|ref|ZP_00900303.1|</Hit_id>
-          <Hit_def>Dihydroorotase homodimeric type [Pseudomonas putida F1] >gi|82715429|gb|EAP50494.1| Dihydroorotase homodimeric type [Pseudomonas putida F1]</Hit_def>
-          <Hit_accession>ZP_00900303</Hit_accession>
-          <Hit_len>348</Hit_len>
-          <Hit_hsps>
-            <Hsp>
-              <Hsp_num>1</Hsp_num>
-              <Hsp_bit-score>613.224</Hsp_bit-score>
-              <Hsp_score>1580</Hsp_score>
-              <Hsp_evalue>6.73478e-174</Hsp_evalue>
-              <Hsp_query-from>1</Hsp_query-from>
-              <Hsp_query-to>348</Hsp_query-to>
-              <Hsp_hit-from>1</Hsp_hit-from>
-              <Hsp_hit-to>348</Hsp_hit-to>
-              <Hsp_query-frame>0</Hsp_query-frame>
-              <Hsp_hit-frame>0</Hsp_hit-frame>
-              <Hsp_identity>305</Hsp_identity>
-              <Hsp_positive>319</Hsp_positive>
-              <Hsp_gaps>0</Hsp_gaps>
-              <Hsp_align-len>348</Hsp_align-len>
-              <Hsp_qseq>MSDRLTLLRPDDWHIHLRDGAALANTVGDAARTFGRAIVMPNLVPPVRNAAEADAYRQRILAARPAASRFEPLMVLYLTDRTSTEEIRTAKASGFVHAAKLYPAGATTNSDSGVTRIDNIFEALEAMAEVGMPLLVHGEVTRAEVDVFDREKQFIDEHLRRVVERFPTLKVVFEHITTGDAAQFVREAPANVGATITAHHLLYNRNHMLVGGIRPHFYCLPILKRNTHQEALLDAAVSGNPKFFLGTDSAPHARHAKEAACGCAGCYSAYAAIELYAEAFEQRNALDKLEGFASLHGPDFYGLPRNTDRITLVREEWQAPASLPFGDFDVVPLRAGETLRWKLLEAGA</Hsp_qseq>
-              <Hsp_hseq>MSDRLTLLRPDDWHIHLRDGAVLPHTVGDVARTFARAIIMPNLVPPVRTANEAGAYRERILAARPAGSRFEPLMVLYLTDNISPEDIRAAKASGFVYAAKLYPAGATTNSDSGVTSIDNIFPAIEAMAEVGMPLLVHGEVTRSEIDVFDREKRFIDEHMRRVVERFPTLKVVFEHITTSDAAQFVTEAPANVGATITAQHLLYNRNHMLVGGIRPHFYCLPILKRNTHQVALLDAATSGNPKFFLGTDSAPHARHAKEAACGCAGCYTAYAAIEMYAEAFEQRNALDKLEGFASLHGPAFYGLPANTDTITLVREEWTAPESLPFGEQTVVPLRAGEKLRWRLLEKNA</Hsp_hseq>
-              <Hsp_midline>MSDRLTLLRPDDWHIHLRDGA L +TVGD ARTF RAI+MPNLVPPVR A EA AYR+RILAARPA SRFEPLMVLYLTD  S E+IR AKASGFV+AAKLYPAGATTNSDSGVT IDNIF A+EAMAEVGMPLLVHGEVTR+E+DVFDREK+FIDEH+RRVVERFPTLKVVFEHITT DAAQFV EAPANVGATITA HLLYNRNHMLVGGIRPHFYCLPILKRNTHQ ALLDAA SGNPKFFLGTDSAPHARHAKEAACGCAGCY+AYAAIE+YAEAFEQRNALDKLEGFASLHGP FYGLP NTD ITLVREEW AP SLPFG+  VVPLRAGE LRW+LLE  A</Hsp_midline>
-            </Hsp>
-          </Hit_hsps>
-        </Hit>
-      </Iteration_hits>
-      <Iteration_stat>
-        <Statistics>
-          <Statistics_db-num>4299737</Statistics_db-num>
-          <Statistics_db-len>1479795817</Statistics_db-len>
-          <Statistics_hsp-len>0</Statistics_hsp-len>
-          <Statistics_eff-space>0</Statistics_eff-space>
-          <Statistics_kappa>0.041</Statistics_kappa>
-          <Statistics_lambda>0.267</Statistics_lambda>
-          <Statistics_entropy>0.14</Statistics_entropy>
-        </Statistics>
-      </Iteration_stat>
-    </Iteration>
-    <Iteration>
-      <Iteration_iter-num>3</Iteration_iter-num>
-      <Iteration_query-ID>gi|15595598|ref|NP_249092.1|</Iteration_query-ID>
-      <Iteration_query-def>dihydroorotase [Pseudomonas aeruginosa PAO1]</Iteration_query-def>
-      <Iteration_query-len>423</Iteration_query-len>
-      <Iteration_hits>
-        <Hit>
-          <Hit_num>1</Hit_num>
-          <Hit_id>gi|15595598|ref|NP_249092.1|</Hit_id>
-          <Hit_def>dihydroorotase [Pseudomonas aeruginosa PAO1] >gi|84318683|ref|ZP_00967104.1| COG0044: Dihydroorotase and related cyclic amidohydrolases [Pseudomonas aeruginosa C3719] >gi|107099387|ref|ZP_01363305.1| hypothetical protein PaerPA_01000399 [Pseudomonas aeruginosa PACS2] >gi|12230976|sp|Q51551|PYRX_PSEAE Dihydroorotase-like protein (Aspartate carbamoyltransferase 44 kDa Non-catalytic chain) >gi|9946255|gb|AAG03790.1|AE004477_7 noncatalytic dihydroorotase-like p [...]
-          <Hit_accession>NP_249092</Hit_accession>
-          <Hit_len>423</Hit_len>
-          <Hit_hsps>
-            <Hsp>
-              <Hsp_num>1</Hsp_num>
-              <Hsp_bit-score>775.007</Hsp_bit-score>
-              <Hsp_score>2000</Hsp_score>
-              <Hsp_evalue>0</Hsp_evalue>
-              <Hsp_query-from>1</Hsp_query-from>
-              <Hsp_query-to>423</Hsp_query-to>
-              <Hsp_hit-from>1</Hsp_hit-from>
-              <Hsp_hit-to>423</Hsp_hit-to>
-              <Hsp_query-frame>0</Hsp_query-frame>
-              <Hsp_hit-frame>0</Hsp_hit-frame>
-              <Hsp_identity>423</Hsp_identity>
-              <Hsp_positive>423</Hsp_positive>
-              <Hsp_gaps>0</Hsp_gaps>
-              <Hsp_align-len>423</Hsp_align-len>
-              <Hsp_qseq>MTISIRGARVIDPASDLDQVGDLHIEAGKIVAIGAAPAGFSAQKTLDGAGLVAAPGLVDLSVALREPGYGRKGNVESETRAAAAGGTTSLCCPPYTRPVLDTPAVAELILDRAREAGNAKVYPIGALTRGFGGEQLSELVALRDTGCVAFTNGLHGFASNRILRRALEYAATFDLTVIFTSQDTDLAEGGLAHEGPTASFLGLAGIPETAETVALARNLLLVEQSGVRAHFSQLTSARGIELVAQAQARGLPVTCDVALYQLILTDEALVGFSSLYHVQPPLRTRADREALREAVKNGVVQAIASHHQPHEADAKNAPFAATEPGISGAELLLPLAMTLVQDGLLDLPTLLARLSHGPAQALRLPAGRLAVGQAADLVLFDPQGSTLAGESWYSKGQNSPFVGHCLPGRVRYTLVDGHLTHEG</Hsp_qseq>
-              <Hsp_hseq>MTISIRGARVIDPASDLDQVGDLHIEAGKIVAIGAAPAGFSAQKTLDGAGLVAAPGLVDLSVALREPGYGRKGNVESETRAAAAGGTTSLCCPPYTRPVLDTPAVAELILDRAREAGNAKVYPIGALTRGFGGEQLSELVALRDTGCVAFTNGLHGFASNRILRRALEYAATFDLTVIFTSQDTDLAEGGLAHEGPTASFLGLAGIPETAETVALARNLLLVEQSGVRAHFSQLTSARGIELVAQAQARGLPVTCDVALYQLILTDEALVGFSSLYHVQPPLRTRADREALREAVKNGVVQAIASHHQPHEADAKNAPFAATEPGISGAELLLPLAMTLVQDGLLDLPTLLARLSHGPAQALRLPAGRLAVGQAADLVLFDPQGSTLAGESWYSKGQNSPFVGHCLPGRVRYTLVDGHLTHEG</Hsp_hseq>
-              <Hsp_midline>MTISIRGARVIDPASDLDQVGDLHIEAGKIVAIGAAPAGFSAQKTLDGAGLVAAPGLVDLSVALREPGYGRKGNVESETRAAAAGGTTSLCCPPYTRPVLDTPAVAELILDRAREAGNAKVYPIGALTRGFGGEQLSELVALRDTGCVAFTNGLHGFASNRILRRALEYAATFDLTVIFTSQDTDLAEGGLAHEGPTASFLGLAGIPETAETVALARNLLLVEQSGVRAHFSQLTSARGIELVAQAQARGLPVTCDVALYQLILTDEALVGFSSLYHVQPPLRTRADREALREAVKNGVVQAIASHHQPHEADAKNAPFAATEPGISGAELLLPLAMTLVQDGLLDLPTLLARLSHGPAQALRLPAGRLAVGQAADLVLFDPQGSTLAGESWYSKGQNSPFVGHCLPGRVRYTLVDGHLTHEG</Hsp_midline>
-            </Hsp>
-          </Hit_hsps>
-        </Hit>
-        <Hit>
-          <Hit_num>2</Hit_num>
-          <Hit_id>gi|84324488|ref|ZP_00972546.1|</Hit_id>
-          <Hit_def>COG0044: Dihydroorotase and related cyclic amidohydrolases [Pseudomonas aeruginosa 2192]</Hit_def>
-          <Hit_accession>ZP_00972546</Hit_accession>
-          <Hit_len>423</Hit_len>
-          <Hit_hsps>
-            <Hsp>
-              <Hsp_num>1</Hsp_num>
-              <Hsp_bit-score>771.155</Hsp_bit-score>
-              <Hsp_score>1990</Hsp_score>
-              <Hsp_evalue>0</Hsp_evalue>
-              <Hsp_query-from>1</Hsp_query-from>
-              <Hsp_query-to>423</Hsp_query-to>
-              <Hsp_hit-from>1</Hsp_hit-from>
-              <Hsp_hit-to>423</Hsp_hit-to>
-              <Hsp_query-frame>0</Hsp_query-frame>
-              <Hsp_hit-frame>0</Hsp_hit-frame>
-              <Hsp_identity>422</Hsp_identity>
-              <Hsp_positive>422</Hsp_positive>
-              <Hsp_gaps>0</Hsp_gaps>
-              <Hsp_align-len>423</Hsp_align-len>
-              <Hsp_qseq>MTISIRGARVIDPASDLDQVGDLHIEAGKIVAIGAAPAGFSAQKTLDGAGLVAAPGLVDLSVALREPGYGRKGNVESETRAAAAGGTTSLCCPPYTRPVLDTPAVAELILDRAREAGNAKVYPIGALTRGFGGEQLSELVALRDTGCVAFTNGLHGFASNRILRRALEYAATFDLTVIFTSQDTDLAEGGLAHEGPTASFLGLAGIPETAETVALARNLLLVEQSGVRAHFSQLTSARGIELVAQAQARGLPVTCDVALYQLILTDEALVGFSSLYHVQPPLRTRADREALREAVKNGVVQAIASHHQPHEADAKNAPFAATEPGISGAELLLPLAMTLVQDGLLDLPTLLARLSHGPAQALRLPAGRLAVGQAADLVLFDPQGSTLAGESWYSKGQNSPFVGHCLPGRVRYTLVDGHLTHEG</Hsp_qseq>
-              <Hsp_hseq>MTISIRGARVIDPASGLDQVGDLHIEAGKIVAIGAAPAGFSAQKTLDGAGLVAAPGLVDLSVALREPGYGRKGNVESETRAAAAGGTTSLCCPPYTRPVLDTPAVAELILDRAREAGNAKVYPIGALTRGFGGEQLSELVALRDTGCVAFTNGLHGFASNRILRRALEYAATFDLTVIFTSQDTDLAEGGLAHEGPTASFLGLAGIPETAETVALARNLLLVEQSGVRAHFSQLTSARGIELVAQAQARGLPVTCDVALYQLILTDEALVGFSSLYHVQPPLRTRADREALREAVKNGVVQAIASHHQPHEADAKNAPFAATEPGISGAELLLPLAMTLVQDGLLDLPTLLARLSHGPAQALRLPAGRLAVGQAADLVLFDPQGSTLAGESWYSKGQNSPFVGHCLPGRVRYTLVDGHLTHEG</Hsp_hseq>
-              <Hsp_midline>MTISIRGARVIDPAS LDQVGDLHIEAGKIVAIGAAPAGFSAQKTLDGAGLVAAPGLVDLSVALREPGYGRKGNVESETRAAAAGGTTSLCCPPYTRPVLDTPAVAELILDRAREAGNAKVYPIGALTRGFGGEQLSELVALRDTGCVAFTNGLHGFASNRILRRALEYAATFDLTVIFTSQDTDLAEGGLAHEGPTASFLGLAGIPETAETVALARNLLLVEQSGVRAHFSQLTSARGIELVAQAQARGLPVTCDVALYQLILTDEALVGFSSLYHVQPPLRTRADREALREAVKNGVVQAIASHHQPHEADAKNAPFAATEPGISGAELLLPLAMTLVQDGLLDLPTLLARLSHGPAQALRLPAGRLAVGQAADLVLFDPQGSTLAGESWYSKGQNSPFVGHCLPGRVRYTLVDGHLTHEG</Hsp_midline>
-            </Hsp>
-          </Hit_hsps>
-        </Hit>
-        <Hit>
-          <Hit_num>3</Hit_num>
-          <Hit_id>gi|116054132|ref|YP_788575.1|</Hit_id>
-          <Hit_def>noncatalytic dihydroorotase-like protein noncataly [Pseudomonas aeruginosa UCBPP-PA14] >gi|115589353|gb|ABJ15368.1| noncatalytic dihydroorotase-like protein noncataly [Pseudomonas aeruginosa UCBPP-PA14]</Hit_def>
-          <Hit_accession>YP_788575</Hit_accession>
-          <Hit_len>423</Hit_len>
-          <Hit_hsps>
-            <Hsp>
-              <Hsp_num>1</Hsp_num>
-              <Hsp_bit-score>770.385</Hsp_bit-score>
-              <Hsp_score>1988</Hsp_score>
-              <Hsp_evalue>0</Hsp_evalue>
-              <Hsp_query-from>1</Hsp_query-from>
-              <Hsp_query-to>423</Hsp_query-to>
-              <Hsp_hit-from>1</Hsp_hit-from>
-              <Hsp_hit-to>423</Hsp_hit-to>
-              <Hsp_query-frame>0</Hsp_query-frame>
-              <Hsp_hit-frame>0</Hsp_hit-frame>
-              <Hsp_identity>421</Hsp_identity>
-              <Hsp_positive>422</Hsp_positive>
-              <Hsp_gaps>0</Hsp_gaps>
-              <Hsp_align-len>423</Hsp_align-len>
-              <Hsp_qseq>MTISIRGARVIDPASDLDQVGDLHIEAGKIVAIGAAPAGFSAQKTLDGAGLVAAPGLVDLSVALREPGYGRKGNVESETRAAAAGGTTSLCCPPYTRPVLDTPAVAELILDRAREAGNAKVYPIGALTRGFGGEQLSELVALRDTGCVAFTNGLHGFASNRILRRALEYAATFDLTVIFTSQDTDLAEGGLAHEGPTASFLGLAGIPETAETVALARNLLLVEQSGVRAHFSQLTSARGIELVAQAQARGLPVTCDVALYQLILTDEALVGFSSLYHVQPPLRTRADREALREAVKNGVVQAIASHHQPHEADAKNAPFAATEPGISGAELLLPLAMTLVQDGLLDLPTLLARLSHGPAQALRLPAGRLAVGQAADLVLFDPQGSTLAGESWYSKGQNSPFVGHCLPGRVRYTLVDGHLTHEG</Hsp_qseq>
-              <Hsp_hseq>MTISIRGARVIDPASGLDQVGDLHIEAGKIVAIGAAPAGFSAQKTLDGAGLVAAPGLVDLSVALREPGYGRKGNVESETRAAAAGGTTSLCCPPYTRPVLDTPAVAELILDRAREAGNAKVYPIGALTRGFGGEQLSELVALRDTGCVAFTNGLHGFASNRILRRALEYAATFDLTVIFTSQDTDLAEGGLAHEGPTASFLGLAGIPETAETVALARNLLLVEQSGVRAHFSQLTSARGIELVAQAQARGLPVTCDVALYQLILTDEALVGFSSLYHVQPPLRTKADREALREAVKNGVVQAIASHHQPHEADAKNAPFAATEPGISGAELLLPLAMTLVQDGLLDLPTLLARLSHGPAQALRLPAGRLAVGQAADLVLFDPQGSTLAGESWYSKGQNSPFVGHCLPGRVRYTLVDGHLTHEG</Hsp_hseq>
-              <Hsp_midline>MTISIRGARVIDPAS LDQVGDLHIEAGKIVAIGAAPAGFSAQKTLDGAGLVAAPGLVDLSVALREPGYGRKGNVESETRAAAAGGTTSLCCPPYTRPVLDTPAVAELILDRAREAGNAKVYPIGALTRGFGGEQLSELVALRDTGCVAFTNGLHGFASNRILRRALEYAATFDLTVIFTSQDTDLAEGGLAHEGPTASFLGLAGIPETAETVALARNLLLVEQSGVRAHFSQLTSARGIELVAQAQARGLPVTCDVALYQLILTDEALVGFSSLYHVQPPLRT+ADREALREAVKNGVVQAIASHHQPHEADAKNAPFAATEPGISGAELLLPLAMTLVQDGLLDLPTLLARLSHGPAQALRLPAGRLAVGQAADLVLFDPQGSTLAGESWYSKGQNSPFVGHCLPGRVRYTLVDGHLTHEG</Hsp_midline>
-            </Hsp>
-          </Hit_hsps>
-        </Hit>
-        <Hit>
-          <Hit_num>4</Hit_num>
-          <Hit_id>gi|309886|gb|AAA25977.1|</Hit_id>
-          <Hit_def>dihydroorotase-like</Hit_def>
-          <Hit_accession>AAA25977</Hit_accession>
-          <Hit_len>423</Hit_len>
-          <Hit_hsps>
-            <Hsp>
-              <Hsp_num>1</Hsp_num>
-              <Hsp_bit-score>768.844</Hsp_bit-score>
-              <Hsp_score>1984</Hsp_score>
-              <Hsp_evalue>0</Hsp_evalue>
-              <Hsp_query-from>1</Hsp_query-from>
-              <Hsp_query-to>423</Hsp_query-to>
-              <Hsp_hit-from>1</Hsp_hit-from>
-              <Hsp_hit-to>423</Hsp_hit-to>
-              <Hsp_query-frame>0</Hsp_query-frame>
-              <Hsp_hit-frame>0</Hsp_hit-frame>
-              <Hsp_identity>420</Hsp_identity>
-              <Hsp_positive>420</Hsp_positive>
-              <Hsp_gaps>0</Hsp_gaps>
-              <Hsp_align-len>423</Hsp_align-len>
-              <Hsp_qseq>MTISIRGARVIDPASDLDQVGDLHIEAGKIVAIGAAPAGFSAQKTLDGAGLVAAPGLVDLSVALREPGYGRKGNVESETRAAAAGGTTSLCCPPYTRPVLDTPAVAELILDRAREAGNAKVYPIGALTRGFGGEQLSELVALRDTGCVAFTNGLHGFASNRILRRALEYAATFDLTVIFTSQDTDLAEGGLAHEGPTASFLGLAGIPETAETVALARNLLLVEQSGVRAHFSQLTSARGIELVAQAQARGLPVTCDVALYQLILTDEALVGFSSLYHVQPPLRTRADREALREAVKNGVVQAIASHHQPHEADAKNAPFAATEPGISGAELLLPLAMTLVQDGLLDLPTLLARLSHGPAQALRLPAGRLAVGQAADLVLFDPQGSTLAGESWYSKGQNSPFVGHCLPGRVRYTLVDGHLTHEG</Hsp_qseq>
-              <Hsp_hseq>MTISIRGARVIDPASDLDQVGDLHIEAGKIVAIGAAPAGFSAQKTLDGAGLVAAAGLVDLSVALREPGYGRKGNVESETRAAAAGGTTSLCCPPYTRPVLDTPAVAELILDRAREAGNAKVYPIGALTRGFGGEQLSELVALRDTGCVAFTNGLHGFASNRILRRALEYAATFDLTVIFTSQDTDLAEGGLAHEGPTASFLGLAGIPETAETVALARNLLLVEQSGVRAHFSQLTSARGIELVAQAQARGLPVTCDVALYQLILTDEALVGFSSLYHVQPPLRTRADREALREAVNNGVVQAIASHHQPHEPDAKNAPFAATEPGISGAELLLPLAMTLVQDGLLDLPTLLARLSHGPAQALRLPAGRLAVGQAADLVLFDPQGSTLAGESWYSKGQNSPFVGHCLPGRVRYTLVDGHLTHEG</Hsp_hseq>
-              <Hsp_midline>MTISIRGARVIDPASDLDQVGDLHIEAGKIVAIGAAPAGFSAQKTLDGAGLVAA GLVDLSVALREPGYGRKGNVESETRAAAAGGTTSLCCPPYTRPVLDTPAVAELILDRAREAGNAKVYPIGALTRGFGGEQLSELVALRDTGCVAFTNGLHGFASNRILRRALEYAATFDLTVIFTSQDTDLAEGGLAHEGPTASFLGLAGIPETAETVALARNLLLVEQSGVRAHFSQLTSARGIELVAQAQARGLPVTCDVALYQLILTDEALVGFSSLYHVQPPLRTRADREALREAV NGVVQAIASHHQPHE DAKNAPFAATEPGISGAELLLPLAMTLVQDGLLDLPTLLARLSHGPAQALRLPAGRLAVGQAADLVLFDPQGSTLAGESWYSKGQNSPFVGHCLPGRVRYTLVDGHLTHEG</Hsp_midline>
-            </Hsp>
-          </Hit_hsps>
-        </Hit>
-        <Hit>
-          <Hit_num>5</Hit_num>
-          <Hit_id>gi|94415759|ref|ZP_01295595.1|</Hit_id>
-          <Hit_def>hypothetical protein PaerP_01002536 [Pseudomonas aeruginosa PA7]</Hit_def>
-          <Hit_accession>ZP_01295595</Hit_accession>
-          <Hit_len>423</Hit_len>
-          <Hit_hsps>
-            <Hsp>
-              <Hsp_num>1</Hsp_num>
-              <Hsp_bit-score>744.962</Hsp_bit-score>
-              <Hsp_score>1922</Hsp_score>
-              <Hsp_evalue>0</Hsp_evalue>
-              <Hsp_query-from>1</Hsp_query-from>
-              <Hsp_query-to>423</Hsp_query-to>
-              <Hsp_hit-from>1</Hsp_hit-from>
-              <Hsp_hit-to>423</Hsp_hit-to>
-              <Hsp_query-frame>0</Hsp_query-frame>
-              <Hsp_hit-frame>0</Hsp_hit-frame>
-              <Hsp_identity>415</Hsp_identity>
-              <Hsp_positive>420</Hsp_positive>
-              <Hsp_gaps>0</Hsp_gaps>
-              <Hsp_align-len>423</Hsp_align-len>
-              <Hsp_qseq>MTISIRGARVIDPASDLDQVGDLHIEAGKIVAIGAAPAGFSAQKTLDGAGLVAAPGLVDLSVALREPGYGRKGNVESETRAAAAGGTTSLCCPPYTRPVLDTPAVAELILDRAREAGNAKVYPIGALTRGFGGEQLSELVALRDTGCVAFTNGLHGFASNRILRRALEYAATFDLTVIFTSQDTDLAEGGLAHEGPTASFLGLAGIPETAETVALARNLLLVEQSGVRAHFSQLTSARGIELVAQAQARGLPVTCDVALYQLILTDEALVGFSSLYHVQPPLRTRADREALREAVKNGVVQAIASHHQPHEADAKNAPFAATEPGISGAELLLPLAMTLVQDGLLDLPTLLARLSHGPAQALRLPAGRLAVGQAADLVLFDPQGSTLAGESWYSKGQNSPFVGHCLPGRVRYTLVDGHLTHEG</Hsp_qseq>
-              <Hsp_hseq>MTISIRGARVIDPASGLDQVGDLHIEAGRIVAIGAAPAGFSAQKTLDGAGLVAAPGLVDLSVALREPGYGRKGNVESETRAAAAGGTTSLCCPPYTRPVLDTPAVAELILDRAREAGNAKVYPIGALTRGFGGEQLSELVALRDTGCVAFTNGLHGFASNRILRRALEYAATFDLTVIFTSQDPDLAEGGLAHEGPTASFLGLAGIPETAETVALARNLLLVEQSGVRAHFSQLTSARGIELVAQAQARGLPVTCDVALYQLILTDEALVGFSSLYHVQPPLRTRADREALREAVKSGVVQAIASHHQPHEADAKNAPFAATEPGISGAELLLPLALTLVQDGLLDLPTLLARLAHGPAQALRLPAGRLAVGQTADLVLFDPQGSTLAGESWYSKGQNSPFIGHCLPGRVRYTLVDGHLTHEG</Hsp_hseq>
-              <Hsp_midline>MTISIRGARVIDPAS LDQVGDLHIEAG+IVAIGAAPAGFSAQKTLDGAGLVAAPGLVDLSVALREPGYGRKGNVESETRAAAAGGTTSLCCPPYTRPVLDTPAVAELILDRAREAGNAKVYPIGALTRGFGGEQLSELVALRDTGCVAFTNGLHGFASNRILRRALEYAATFDLTVIFTSQD DLAEGGLAHEGPTASFLGLAGIPETAETVALARNLLLVEQSGVRAHFSQLTSARGIELVAQAQARGLPVTCDVALYQLILTDEALVGFSSLYHVQPPLRTRADREALREAVK+GVVQAIASHHQPHEADAKNAPFAATEPGISGAELLLPLA+TLVQDGLLDLPTLLARL+HGPAQALRLPAGRLAVGQ ADLVLFDPQGSTLAGESWYSKGQNSPF+GHCLPGRVRYTLVDGHLTHEG</Hsp_midline>
-            </Hsp>
-          </Hit_hsps>
-        </Hit>
-        <Hit>
-          <Hit_num>6</Hit_num>
-          <Hit_id>gi|26991676|ref|NP_747101.1|</Hit_id>
-          <Hit_def>dihydroorotase [Pseudomonas putida KT2440] >gi|24986775|gb|AAN70565.1|AE016699_6 dihydroorotase, multifunctional complex type [Pseudomonas putida KT2440]</Hit_def>
-          <Hit_accession>NP_747101</Hit_accession>
-          <Hit_len>423</Hit_len>
-          <Hit_hsps>
-            <Hsp>
-              <Hsp_num>1</Hsp_num>
-              <Hsp_bit-score>628.632</Hsp_bit-score>
-              <Hsp_score>1620</Hsp_score>
-              <Hsp_evalue>1.69792e-178</Hsp_evalue>
-              <Hsp_query-from>1</Hsp_query-from>
-              <Hsp_query-to>423</Hsp_query-to>
-              <Hsp_hit-from>1</Hsp_hit-from>
-              <Hsp_hit-to>423</Hsp_hit-to>
-              <Hsp_query-frame>0</Hsp_query-frame>
-              <Hsp_hit-frame>0</Hsp_hit-frame>
-              <Hsp_identity>339</Hsp_identity>
-              <Hsp_positive>368</Hsp_positive>
-              <Hsp_gaps>0</Hsp_gaps>
-              <Hsp_align-len>423</Hsp_align-len>
-              <Hsp_qseq>MTISIRGARVIDPASDLDQVGDLHIEAGKIVAIGAAPAGFSAQKTLDGAGLVAAPGLVDLSVALREPGYGRKGNVESETRAAAAGGTTSLCCPPYTRPVLDTPAVAELILDRAREAGNAKVYPIGALTRGFGGEQLSELVALRDTGCVAFTNGLHGFASNRILRRALEYAATFDLTVIFTSQDTDLAEGGLAHEGPTASFLGLAGIPETAETVALARNLLLVEQSGVRAHFSQLTSARGIELVAQAQARGLPVTCDVALYQLILTDEALVGFSSLYHVQPPLRTRADREALREAVKNGVVQAIASHHQPHEADAKNAPFAATEPGISGAELLLPLAMTLVQDGLLDLPTLLARLSHGPAQALRLPAGRLAVGQAADLVLFDPQGSTLAGESWYSKGQNSPFVGHCLPGRVRYTLVDGHLTHEG</Hsp_qseq>
-              <Hsp_hseq>MTISILGARVIDPNSGLDQVTDLHLDGGRIVAIGAAPAGFSASRTIQADGLVAAPGLVDLGVSLREPGYSRKGNIASETRAAVAGGVTSLCCPPQTKPVLDTSAVAELILDRAREAANSKVYPVGALTKGLEGEQLAELVALRDTGCVAFGNGLKEIPNNRTLARALEYAATFDLTVVFHSQDRDLAQGGLAHEGAMASFLGLPGIPESAETVALARNLLLVEQSGVRAHFSQITSARGARLIAQAQALGLPVTADVALYQLILTDESLREFSSLYHVQPPLRTAADRDGLREAVKSGVIQAISSHHQPHERDAKLAPFGATEPGISSVELLLPLAMTLVQDGLLDLPTLLARLSSGPAAALRLPAGELKVGGAADLVLFDPQASTVAGEQWFSRGENCPFIGHCLPGAVRYTLVDGHICHEA</Hsp_hseq>
-              <Hsp_midline>MTISI GARVIDP S LDQV DLH++ G+IVAIGAAPAGFSA +T+   GLVAAPGLVDL V+LREPGY RKGN+ SETRAA AGG TSLCCPP T+PVLDT AVAELILDRAREA N+KVYP+GALT+G  GEQL+ELVALRDTGCVAF NGL    +NR L RALEYAATFDLTV+F SQD DLA+GGLAHEG  ASFLGL GIPE+AETVALARNLLLVEQSGVRAHFSQ+TSARG  L+AQAQA GLPVT DVALYQLILTDE+L  FSSLYHVQPPLRT ADR+ LREAVK+GV+QAI+SHHQPHE DAK APF ATEPGIS  ELLLPLAMTLVQDGLLDLPTLLARLS GPA ALRLPAG L VG AADLVLFDPQ ST+AGE W+S+G+N PF+GHCLPG VRYTLVDGH+ HE </Hsp_midline>
-            </Hsp>
-          </Hit_hsps>
-        </Hit>
-        <Hit>
-          <Hit_num>7</Hit_num>
-          <Hit_id>gi|82736201|ref|ZP_00899061.1|</Hit_id>
-          <Hit_def>Dihydroorotase multifunctional complex type [Pseudomonas putida F1] >gi|82716844|gb|EAP51898.1| Dihydroorotase multifunctional complex type [Pseudomonas putida F1]</Hit_def>
-          <Hit_accession>ZP_00899061</Hit_accession>
-          <Hit_len>423</Hit_len>
-          <Hit_hsps>
-            <Hsp>
-              <Hsp_num>1</Hsp_num>
-              <Hsp_bit-score>627.861</Hsp_bit-score>
-              <Hsp_score>1618</Hsp_score>
-              <Hsp_evalue>2.70921e-178</Hsp_evalue>
-              <Hsp_query-from>1</Hsp_query-from>
-              <Hsp_query-to>423</Hsp_query-to>
-              <Hsp_hit-from>1</Hsp_hit-from>
-              <Hsp_hit-to>423</Hsp_hit-to>
-              <Hsp_query-frame>0</Hsp_query-frame>
-              <Hsp_hit-frame>0</Hsp_hit-frame>
-              <Hsp_identity>339</Hsp_identity>
-              <Hsp_positive>368</Hsp_positive>
-              <Hsp_gaps>0</Hsp_gaps>
-              <Hsp_align-len>423</Hsp_align-len>
-              <Hsp_qseq>MTISIRGARVIDPASDLDQVGDLHIEAGKIVAIGAAPAGFSAQKTLDGAGLVAAPGLVDLSVALREPGYGRKGNVESETRAAAAGGTTSLCCPPYTRPVLDTPAVAELILDRAREAGNAKVYPIGALTRGFGGEQLSELVALRDTGCVAFTNGLHGFASNRILRRALEYAATFDLTVIFTSQDTDLAEGGLAHEGPTASFLGLAGIPETAETVALARNLLLVEQSGVRAHFSQLTSARGIELVAQAQARGLPVTCDVALYQLILTDEALVGFSSLYHVQPPLRTRADREALREAVKNGVVQAIASHHQPHEADAKNAPFAATEPGISGAELLLPLAMTLVQDGLLDLPTLLARLSHGPAQALRLPAGRLAVGQAADLVLFDPQGSTLAGESWYSKGQNSPFVGHCLPGRVRYTLVDGHLTHEG</Hsp_qseq>
-              <Hsp_hseq>MTISILGARVIDPNSGLDQVTDLHLDGGRIVAIGAAPAGFSASRTIQADGLVAAPGLVDLGVSLREPGYSRKGNIASETRAAVAGGVTSLCCPPQTKPVLDTSAVAELILDRAREAANSKVYPVGALTKGLEGEQLAELVALRDTGCVAFGNGLKEIPNNRTLARALEYAATFDLTVVFHSQDRDLAQGGLAHEGAMASFLGLPGIPESAETVALARNLLLVEQSGVRAHFSQITSARGARLIAQAQALGLPVTADVALYQLILTDESLREFSSLYHVQPPLRTAADRDGLREAVKSGVIQAISSHHQPHERDAKLAPFGATEPGISSVELLLPLAMTLVQDGLLDLPTLLARLSSGPAAALRLPAGELKVGGAADLVLFDPQASTVAGEQWFSRGENCPFIGHCLPGAVRYTLVDGHVCHEA</Hsp_hseq>
-              <Hsp_midline>MTISI GARVIDP S LDQV DLH++ G+IVAIGAAPAGFSA +T+   GLVAAPGLVDL V+LREPGY RKGN+ SETRAA AGG TSLCCPP T+PVLDT AVAELILDRAREA N+KVYP+GALT+G  GEQL+ELVALRDTGCVAF NGL    +NR L RALEYAATFDLTV+F SQD DLA+GGLAHEG  ASFLGL GIPE+AETVALARNLLLVEQSGVRAHFSQ+TSARG  L+AQAQA GLPVT DVALYQLILTDE+L  FSSLYHVQPPLRT ADR+ LREAVK+GV+QAI+SHHQPHE DAK APF ATEPGIS  ELLLPLAMTLVQDGLLDLPTLLARLS GPA ALRLPAG L VG AADLVLFDPQ ST+AGE W+S+G+N PF+GHCLPG VRYTLVDGH+ HE </Hsp_midline>
-            </Hsp>
-          </Hit_hsps>
-        </Hit>
-        <Hit>
-          <Hit_num>8</Hit_num>
-          <Hit_id>gi|77461536|ref|YP_351043.1|</Hit_id>
-          <Hit_def>dihydroorotase [Pseudomonas fluorescens PfO-1] >gi|77385539|gb|ABA77052.1| Dihydroorotase multifunctional complex type [Pseudomonas fluorescens PfO-1]</Hit_def>
-          <Hit_accession>YP_351043</Hit_accession>
-          <Hit_len>423</Hit_len>
-          <Hit_hsps>
-            <Hsp>
-              <Hsp_num>1</Hsp_num>
-              <Hsp_bit-score>624.394</Hsp_bit-score>
-              <Hsp_score>1609</Hsp_score>
-              <Hsp_evalue>2.80197e-177</Hsp_evalue>
-              <Hsp_query-from>1</Hsp_query-from>
-              <Hsp_query-to>423</Hsp_query-to>
-              <Hsp_hit-from>1</Hsp_hit-from>
-              <Hsp_hit-to>423</Hsp_hit-to>
-              <Hsp_query-frame>0</Hsp_query-frame>
-              <Hsp_hit-frame>0</Hsp_hit-frame>
-              <Hsp_identity>335</Hsp_identity>
-              <Hsp_positive>374</Hsp_positive>
-              <Hsp_gaps>0</Hsp_gaps>
-              <Hsp_align-len>423</Hsp_align-len>
-              <Hsp_qseq>MTISIRGARVIDPASDLDQVGDLHIEAGKIVAIGAAPAGFSAQKTLDGAGLVAAPGLVDLSVALREPGYGRKGNVESETRAAAAGGTTSLCCPPYTRPVLDTPAVAELILDRAREAGNAKVYPIGALTRGFGGEQLSELVALRDTGCVAFTNGLHGFASNRILRRALEYAATFDLTVIFTSQDTDLAEGGLAHEGPTASFLGLAGIPETAETVALARNLLLVEQSGVRAHFSQLTSARGIELVAQAQARGLPVTCDVALYQLILTDEALVGFSSLYHVQPPLRTRADREALREAVKNGVVQAIASHHQPHEADAKNAPFAATEPGISGAELLLPLAMTLVQDGLLDLPTLLARLSHGPAQALRLPAGRLAVGQAADLVLFDPQGSTLAGESWYSKGQNSPFVGHCLPGRVRYTLVDGHLTHEG</Hsp_qseq>
-              <Hsp_hseq>MKLSILGARVIDPSSGLDQITDIHVEACKIVALGAAPAGFTAVETIDAQGLVAAPGLVDLNVALREPGYSRKGTIASETRAAAAGGVTSLCCPPKTRPVLDTSAVAELILDRAREAGNTKVFPIGALSKGLDGEQLAELVALRDAGCVAFGNGLESFRNTRTLCRALDYAATFDLTVIFNSQDHDLADGGLAHEGATASFLGLPGIPETAETVALARDLLLVEQTGVRAHFSQLTSARGVALIAQAQARGLKVTADVALYQLILTDEALIDFSSLYHVQPPLRTRADRDGLREAVKSGVVSAISSHHQPHERDAKLAPFGATEPGISSVELLLPLAMTLVEDGLLDLPTLLSRLSAGPAEALRLPAGKLAVGGAADIVLFDPKASTVAGETWLSKGENCPFLGHSLPGVVRYTLVDGRISHQA</Hsp_hseq>
-              <Hsp_midline>M +SI GARVIDP+S LDQ+ D+H+EA KIVA+GAAPAGF+A +T+D  GLVAAPGLVDL+VALREPGY RKG + SETRAAAAGG TSLCCPP TRPVLDT AVAELILDRAREAGN KV+PIGAL++G  GEQL+ELVALRD GCVAF NGL  F + R L RAL+YAATFDLTVIF SQD DLA+GGLAHEG TASFLGL GIPETAETVALAR+LLLVEQ+GVRAHFSQLTSARG+ L+AQAQARGL VT DVALYQLILTDEAL+ FSSLYHVQPPLRTRADR+ LREAVK+GVV AI+SHHQPHE DAK APF ATEPGIS  ELLLPLAMTLV+DGLLDLPTLL+RLS GPA+ALRLPAG+LAVG AAD+VLFDP+ ST+AGE+W SKG+N PF+GH LPG VRYTLVDG ++H+ </Hsp_midline>
-            </Hsp>
-          </Hit_hsps>
-        </Hit>
-        <Hit>
-          <Hit_num>9</Hit_num>
-          <Hit_id>gi|66043748|ref|YP_233589.1|</Hit_id>
-          <Hit_def>dihydroorotase [Pseudomonas syringae pv. syringae B728a] >gi|63254455|gb|AAY35551.1| Amidohydrolase [Pseudomonas syringae pv. syringae B728a]</Hit_def>
-          <Hit_accession>YP_233589</Hit_accession>
-          <Hit_len>423</Hit_len>
-          <Hit_hsps>
-            <Hsp>
-              <Hsp_num>1</Hsp_num>
-              <Hsp_bit-score>622.083</Hsp_bit-score>
-              <Hsp_score>1603</Hsp_score>
-              <Hsp_evalue>1.69891e-176</Hsp_evalue>
-              <Hsp_query-from>1</Hsp_query-from>
-              <Hsp_query-to>421</Hsp_query-to>
-              <Hsp_hit-from>1</Hsp_hit-from>
-              <Hsp_hit-to>421</Hsp_hit-to>
-              <Hsp_query-frame>0</Hsp_query-frame>
-              <Hsp_hit-frame>0</Hsp_hit-frame>
-              <Hsp_identity>331</Hsp_identity>
-              <Hsp_positive>370</Hsp_positive>
-              <Hsp_gaps>0</Hsp_gaps>
-              <Hsp_align-len>421</Hsp_align-len>
-              <Hsp_qseq>MTISIRGARVIDPASDLDQVGDLHIEAGKIVAIGAAPAGFSAQKTLDGAGLVAAPGLVDLSVALREPGYGRKGNVESETRAAAAGGTTSLCCPPYTRPVLDTPAVAELILDRAREAGNAKVYPIGALTRGFGGEQLSELVALRDTGCVAFTNGLHGFASNRILRRALEYAATFDLTVIFTSQDTDLAEGGLAHEGPTASFLGLAGIPETAETVALARNLLLVEQSGVRAHFSQLTSARGIELVAQAQARGLPVTCDVALYQLILTDEALVGFSSLYHVQPPLRTRADREALREAVKNGVVQAIASHHQPHEADAKNAPFAATEPGISGAELLLPLAMTLVQDGLLDLPTLLARLSHGPAQALRLPAGRLAVGQAADLVLFDPQGSTLAGESWYSKGQNSPFVGHCLPGRVRYTLVDGHLTH</Hsp_qseq>
-              <Hsp_hseq>MKLSILGARVIDPVSGLDQITDLHLEAGKLSAIGSAPAGFEPTQTIDATGLVAAPGLVDLNVSLREPGYSRKGSIASETRAAVAGGVTSLCCPPRTKPVLDTSAVAELILDRAREAGFSKVFPIGALSKGLDGEQLAELIALRDAGCVAFGNGLSSFSNTRTLCRALEYAATFDLTVIFNSQDRDLAEGGLAHDGPTASFLGLAGIPETAETVALARDLLLVEQSGVRAHFSQLTSARGAALIAQAQARGLPVTADVALYQLILTDEALIDFSSLYHVQPPLRTRADRDGLREAVKSGVIQAISSHHQPHERDAKLAPFGATEPGISSVELLLPLAMTLVDDGLLDLPTLIARLSSGPAAALRLPAGKLSAGAPADIVLFDPAASTVAGETWLSKGENCPFIGHCLPGSVRYTLVDGRISY</Hsp_hseq>
-              <Hsp_midline>M +SI GARVIDP S LDQ+ DLH+EAGK+ AIG+APAGF   +T+D  GLVAAPGLVDL+V+LREPGY RKG++ SETRAA AGG TSLCCPP T+PVLDT AVAELILDRAREAG +KV+PIGAL++G  GEQL+EL+ALRD GCVAF NGL  F++ R L RALEYAATFDLTVIF SQD DLAEGGLAH+GPTASFLGLAGIPETAETVALAR+LLLVEQSGVRAHFSQLTSARG  L+AQAQARGLPVT DVALYQLILTDEAL+ FSSLYHVQPPLRTRADR+ LREAVK+GV+QAI+SHHQPHE DAK APF ATEPGIS  ELLLPLAMTLV DGLLDLPTL+ARLS GPA ALRLPAG+L+ G  AD+VLFDP  ST+AGE+W SKG+N PF+GHCLPG VRYTLVDG +++</Hsp_midline>
-            </Hsp>
-          </Hit_hsps>
-        </Hit>
-        <Hit>
-          <Hit_num>10</Hit_num>
-          <Hit_id>gi|118056991|ref|ZP_01525457.1|</Hit_id>
-          <Hit_def>dihydroorotase, multifunctional complex type [Pseudomonas mendocina ymp] >gi|118009697|gb|EAV23765.1| dihydroorotase, multifunctional complex type [Pseudomonas mendocina ymp]</Hit_def>
-          <Hit_accession>ZP_01525457</Hit_accession>
-          <Hit_len>423</Hit_len>
-          <Hit_hsps>
-            <Hsp>
-              <Hsp_num>1</Hsp_num>
-              <Hsp_bit-score>621.698</Hsp_bit-score>
-              <Hsp_score>1602</Hsp_score>
-              <Hsp_evalue>2.14601e-176</Hsp_evalue>
-              <Hsp_query-from>1</Hsp_query-from>
-              <Hsp_query-to>422</Hsp_query-to>
-              <Hsp_hit-from>1</Hsp_hit-from>
-              <Hsp_hit-to>422</Hsp_hit-to>
-              <Hsp_query-frame>0</Hsp_query-frame>
-              <Hsp_hit-frame>0</Hsp_hit-frame>
-              <Hsp_identity>337</Hsp_identity>
-              <Hsp_positive>370</Hsp_positive>
-              <Hsp_gaps>0</Hsp_gaps>
-              <Hsp_align-len>422</Hsp_align-len>
-              <Hsp_qseq>MTISIRGARVIDPASDLDQVGDLHIEAGKIVAIGAAPAGFSAQKTLDGAGLVAAPGLVDLSVALREPGYGRKGNVESETRAAAAGGTTSLCCPPYTRPVLDTPAVAELILDRAREAGNAKVYPIGALTRGFGGEQLSELVALRDTGCVAFTNGLHGFASNRILRRALEYAATFDLTVIFTSQDTDLAEGGLAHEGPTASFLGLAGIPETAETVALARNLLLVEQSGVRAHFSQLTSARGIELVAQAQARGLPVTCDVALYQLILTDEALVGFSSLYHVQPPLRTRADREALREAVKNGVVQAIASHHQPHEADAKNAPFAATEPGISGAELLLPLAMTLVQDGLLDLPTLLARLSHGPAQALRLPAGRLAVGQAADLVLFDPQGSTLAGESWYSKGQNSPFVGHCLPGRVRYTLVDGHLTHE</Hsp_qseq>
-              <Hsp_hseq>MRTAILGARVIDPASGLDQVTDLYIDGTKLVAFGQAPAGFTADKTLNAQGLIAAPGLVDLSVALREPGYSRKGSIATETLAAAAGGVTSLCCPPLTKPVLDTPAVAELILDRAREAGHTKVFPIGALSKGLAGEQLAELVALRDAGCVAFGNGLDNFRSARTLRRALEYAATFDLQVIFHSQDFDLAEGGLAHEGPTASFLGLAGIPETAETVALARDLLLVEQSGVRAHFSQITSARGAELIANAQARGLPVTADVALYQLILTDEALIDFSSLYHVQPPLRSRADRDGLREAVKAGVISAIASHHQPHERDAKLAPFAATEPGISSVQLQLPLAMSLVQDGLLDLPTLLARLSSGPAAALRLPAGTLSVGGAADIVLFDAQASTVAGEQWYSKGSNCPFIGHCLPGAVRYTLVDGHISYQ</Hsp_hseq>
-              <Hsp_midline>M  +I GARVIDPAS LDQV DL+I+  K+VA G APAGF+A KTL+  GL+AAPGLVDLSVALREPGY RKG++ +ET AAAAGG TSLCCPP T+PVLDTPAVAELILDRAREAG+ KV+PIGAL++G  GEQL+ELVALRD GCVAF NGL  F S R LRRALEYAATFDL VIF SQD DLAEGGLAHEGPTASFLGLAGIPETAETVALAR+LLLVEQSGVRAHFSQ+TSARG EL+A AQARGLPVT DVALYQLILTDEAL+ FSSLYHVQPPLR+RADR+ LREAVK GV+ AIASHHQPHE DAK APFAATEPGIS  +L LPLAM+LVQDGLLDLPTLLARLS GPA ALRLPAG L+VG AAD+VLFD Q ST+AGE WYSKG N PF+GHCLPG VRYTLVDGH++++</Hsp_midline>
-            </Hsp>
-          </Hit_hsps>
-        </Hit>
-      </Iteration_hits>
-      <Iteration_stat>
-        <Statistics>
-          <Statistics_db-num>4299737</Statistics_db-num>
-          <Statistics_db-len>1479795817</Statistics_db-len>
-          <Statistics_hsp-len>0</Statistics_hsp-len>
-          <Statistics_eff-space>0</Statistics_eff-space>
-          <Statistics_kappa>0.041</Statistics_kappa>
-          <Statistics_lambda>0.267</Statistics_lambda>
-          <Statistics_entropy>0.14</Statistics_entropy>
-        </Statistics>
-      </Iteration_stat>
-    </Iteration>
-    <Iteration>
-      <Iteration_iter-num>4</Iteration_iter-num>
-      <Iteration_query-ID>gi|16078614|ref|NP_389433.1|</Iteration_query-ID>
-      <Iteration_query-def>dihydroorotase [Bacillus subtilis subsp. subtilis str. 168]</Iteration_query-def>
-      <Iteration_query-len>428</Iteration_query-len>
-      <Iteration_hits>
-        <Hit>
-          <Hit_num>1</Hit_num>
-          <Hit_id>gi|16078614|ref|NP_389433.1|</Hit_id>
-          <Hit_def>dihydroorotase [Bacillus subtilis subsp. subtilis str. 168] >gi|131715|sp|P25995|PYRC_BACSU Dihydroorotase (DHOase) >gi|143388|gb|AAA21268.1| dihydroorotase [Bacillus subtilis] >gi|2633923|emb|CAB13424.1| dihydroorotase [Bacillus subtilis subsp. subtilis str. 168]</Hit_def>
-          <Hit_accession>NP_389433</Hit_accession>
-          <Hit_len>428</Hit_len>
-          <Hit_hsps>
-            <Hsp>
-              <Hsp_num>1</Hsp_num>
-              <Hsp_bit-score>877.085</Hsp_bit-score>
-              <Hsp_score>2265</Hsp_score>
-              <Hsp_evalue>0</Hsp_evalue>
-              <Hsp_query-from>1</Hsp_query-from>
-              <Hsp_query-to>428</Hsp_query-to>
-              <Hsp_hit-from>1</Hsp_hit-from>
-              <Hsp_hit-to>428</Hsp_hit-to>
-              <Hsp_query-frame>0</Hsp_query-frame>
-              <Hsp_hit-frame>0</Hsp_hit-frame>
-              <Hsp_identity>428</Hsp_identity>
-              <Hsp_positive>428</Hsp_positive>
-              <Hsp_gaps>0</Hsp_gaps>
-              <Hsp_align-len>428</Hsp_align-len>
-              <Hsp_qseq>MSYLIKNGWILNENGEKTQADIRVTGETITAIGKLDATDNETVIDAKGLLVSPGFVDLHVHFREPGGEKKETIETGAKAAGRGGYTTVAAMPNTRPVPDTKEQMEWVQNRIKETSCVRVLPYASITIRQIGDEMTNFEALKEAGAFAFTDDGVGIQTAGMMYEAMKRAAAIDKAIVAHCEDNSLIYGGSVHEGTFSKANGLNGIPSVCESVHIARDVLLLGANCHYHVCHISTKESVRVVRDAKKAGIRVTAEVSPHHLLLCDEDIPGLDTNYKMNPPLRSPEDRAALIEGLLDGTIDFIATDHAPHTEEEKNTEMKLAPFRNCRLRNSIPASLHTLCQKWQLVTEAADLTYMTIKPCEAFGLPYGTLQTGQAADITLIDLEKEAVIDKETFLSKGKNTPFNGISCTGWPVATIAAGKLAYEEGRLVK</Hsp_qseq>
-              <Hsp_hseq>MSYLIKNGWILNENGEKTQADIRVTGETITAIGKLDATDNETVIDAKGLLVSPGFVDLHVHFREPGGEKKETIETGAKAAGRGGYTTVAAMPNTRPVPDTKEQMEWVQNRIKETSCVRVLPYASITIRQIGDEMTNFEALKEAGAFAFTDDGVGIQTAGMMYEAMKRAAAIDKAIVAHCEDNSLIYGGSVHEGTFSKANGLNGIPSVCESVHIARDVLLLGANCHYHVCHISTKESVRVVRDAKKAGIRVTAEVSPHHLLLCDEDIPGLDTNYKMNPPLRSPEDRAALIEGLLDGTIDFIATDHAPHTEEEKNTEMKLAPFRNCRLRNSIPASLHTLCQKWQLVTEAADLTYMTIKPCEAFGLPYGTLQTGQAADITLIDLEKEAVIDKETFLSKGKNTPFNGISCTGWPVATIAAGKLAYEEGRLVK</Hsp_hseq>
-              <Hsp_midline>MSYLIKNGWILNENGEKTQADIRVTGETITAIGKLDATDNETVIDAKGLLVSPGFVDLHVHFREPGGEKKETIETGAKAAGRGGYTTVAAMPNTRPVPDTKEQMEWVQNRIKETSCVRVLPYASITIRQIGDEMTNFEALKEAGAFAFTDDGVGIQTAGMMYEAMKRAAAIDKAIVAHCEDNSLIYGGSVHEGTFSKANGLNGIPSVCESVHIARDVLLLGANCHYHVCHISTKESVRVVRDAKKAGIRVTAEVSPHHLLLCDEDIPGLDTNYKMNPPLRSPEDRAALIEGLLDGTIDFIATDHAPHTEEEKNTEMKLAPFRNCRLRNSIPASLHTLCQKWQLVTEAADLTYMTIKPCEAFGLPYGTLQTGQAADITLIDLEKEAVIDKETFLSKGKNTPFNGISCTGWPVATIAAGKLAYEEGRLVK</Hsp_midline>
-            </Hsp>
-          </Hit_hsps>
-        </Hit>
-        <Hit>
-          <Hit_num>2</Hit_num>
-          <Hit_id>gi|52080152|ref|YP_078943.1|</Hit_id>
-          <Hit_def>dihydroorotase [Bacillus licheniformis ATCC 14580] >gi|52785529|ref|YP_091358.1| PyrC [Bacillus licheniformis ATCC 14580] >gi|52003363|gb|AAU23305.1| dihydroorotase [Bacillus licheniformis ATCC 14580] >gi|52348031|gb|AAU40665.1| PyrC [Bacillus licheniformis DSM 13]</Hit_def>
-          <Hit_accession>YP_078943</Hit_accession>
-          <Hit_len>428</Hit_len>
-          <Hit_hsps>
-            <Hsp>
-              <Hsp_num>1</Hsp_num>
-              <Hsp_bit-score>675.241</Hsp_bit-score>
-              <Hsp_score>1741</Hsp_score>
-              <Hsp_evalue>0</Hsp_evalue>
-              <Hsp_query-from>1</Hsp_query-from>
-              <Hsp_query-to>428</Hsp_query-to>
-              <Hsp_hit-from>1</Hsp_hit-from>
-              <Hsp_hit-to>428</Hsp_hit-to>
-              <Hsp_query-frame>0</Hsp_query-frame>
-              <Hsp_hit-frame>0</Hsp_hit-frame>
-              <Hsp_identity>334</Hsp_identity>
-              <Hsp_positive>365</Hsp_positive>
-              <Hsp_gaps>6</Hsp_gaps>
-              <Hsp_align-len>431</Hsp_align-len>
-              <Hsp_qseq>MSYLIKNGWILNENGEKTQADIRVTGETITAIGKLDATDNETVIDAKGLLVSPGFVDLHVHFREPGGEKKETIETGAKAAGRGGYTTVAAMPNTRPVPDTKEQMEWVQNRIKETSCVRVLPYASITIRQIGDEMTNFEALKEAGAFAFTDDGVGIQTAGMMYEAMKRAAAIDKAIVAHCEDNSLIYGGSVHEGTFSKANGLNGIPSVCESVHIARDVLLL-GANCHYHVCHISTKESVRVVRDAKKAGIRVTAEVSPHHLLLCDEDIPGLDTNYKMNPPLRSPEDRAALIEGLLDGTIDFIATDHAPHTEEEKNTEMKLAPFRNCRLRNSIPASLHTLCQ--KWQLVTEAADLTYMTIKPCEAFGLPYGTLQTGQAADITLIDLEKEAVIDKETFLSKGKNTPFNGISCTGWPVATIAAGKLAYEEGRLVK</Hsp_qseq>
-              <Hsp_hseq>MSYLIKNGFMLDEKGEKVQRDIRVEGDAISEIGSLEAASGETVIDADGLFVSPGLVDLHVHFREPGGEKKETIETGAKAAARGGFTTVAAMPNTRPVPDTKEQMEWLVNRIDETASVRVLPYASITIRQTGREMTDFEGLKDAGAFAFTDDGVGVQTAGMMYEAMKKAASINKAIVAHCEDNSLIYGGSVHDGEFAKANGLNGIPSVCEAVHIARDVLLAEAAGCHYHVCHISTKESVRVVRDAKKAGIRVTAEVTPHHLLLSDSDIPGLDTNYKMNPPLRSPEDREALLEGLRDGTIDFIATDHAPHTEEEKQQTMSLAPFGIVGLETAFPLLYTHFVKTGKWTL-KQLHD--YMTVKPCEAFGLPYGKLEAGRSADITLIDLEREEKIDKSTFLSKGKNTPFDGISCFGWPAMTMAKGKLVYQEGRLVK</Hsp_hseq>
-              <Hsp_midline>MSYLIKNG++L+E GEK Q DIRV G+ I+ IG L+A   ETVIDA GL VSPG VDLHVHFREPGGEKKETIETGAKAA RGG+TTVAAMPNTRPVPDTKEQMEW+ NRI ET+ VRVLPYASITIRQ G EMT+FE LK+AGAFAFTDDGVG+QTAGMMYEAMK+AA+I+KAIVAHCEDNSLIYGGSVH+G F+KANGLNGIPSVCE+VHIARDVLL   A CHYHVCHISTKESVRVVRDAKKAGIRVTAEV+PHHLLL D DIPGLDTNYKMNPPLRSPEDR AL+EGL DGTIDFIATDHAPHTEEEK   M LAPF    L  + P       +  KW L  +  D  YMT+KPCEAFGLPYG L+ G++ADITLIDLE+E  IDK TFLSKGKNTPF+GISC GWP  T+A GKL Y+EGRLVK</Hsp_midline>
-            </Hsp>
-          </Hit_hsps>
-        </Hit>
-        <Hit>
-          <Hit_num>3</Hit_num>
-          <Hit_id>gi|89098723|ref|ZP_01171605.1|</Hit_id>
-          <Hit_def>dihydroorotase [Bacillus sp. NRRL B-14911] >gi|89086685|gb|EAR65804.1| dihydroorotase [Bacillus sp. NRRL B-14911]</Hit_def>
-          <Hit_accession>ZP_01171605</Hit_accession>
-          <Hit_len>428</Hit_len>
-          <Hit_hsps>
-            <Hsp>
-              <Hsp_num>1</Hsp_num>
-              <Hsp_bit-score>563.148</Hsp_bit-score>
-              <Hsp_score>1450</Hsp_score>
-              <Hsp_evalue>8.98289e-159</Hsp_evalue>
-              <Hsp_query-from>1</Hsp_query-from>
-              <Hsp_query-to>421</Hsp_query-to>
-              <Hsp_hit-from>1</Hsp_hit-from>
-              <Hsp_hit-to>421</Hsp_hit-to>
-              <Hsp_query-frame>0</Hsp_query-frame>
-              <Hsp_hit-frame>0</Hsp_hit-frame>
-              <Hsp_identity>281</Hsp_identity>
-              <Hsp_positive>327</Hsp_positive>
-              <Hsp_gaps>4</Hsp_gaps>
-              <Hsp_align-len>423</Hsp_align-len>
-              <Hsp_qseq>MSYLIKNGWILNENGEKTQADIRVTGETITAIG-KLDATDNETVIDAKGLLVSPGFVDLHVHFREPGGEKKETIETGAKAAGRGGYTTVAAMPNTRPVPDTKEQMEWVQNRIKETSCVRVLPYASITIRQIGDEMTNFEALKEAGAFAFTDDGVGIQTAGMMYEAMKRAAAIDKAIVAHCEDNSLIYGGSVHEGTFSKANGLNGIPSVCESVHIARDVLLL-GANCHYHVCHISTKESVRVVRDAKKAGIRVTAEVSPHHLLLCDEDIPGLDTNYKMNPPLRSPEDRAALIEGLLDGTIDFIATDHAPHTEEEKNTEMKLAPFRNCRLRNSIPASLHTLCQKWQLVTEAADLTYMTIKPCEAFGLPYGTLQTGQAADITLIDLEKEAVIDKETFLSKGKNTPFNGISCTGWPVATIAAGKLAY</Hsp_qseq>
-              <Hsp_hseq>MKKLIKNGRLLTENGELVQKDILIEGGKIAKIGVEFEGTDAE-VIDAGGLLAVPGLVDLHVHLREPGGEKKETIETGTLAAARGGFTTIAPMPNTRPVPDTVEQLEWLNRRIAETAHVRVLPYASITVRQLGSELTDFEGLKQAGAFAFTDDGVGVQSAGMMLSAMKKAAAVSMPVVAHCEENTLINKGSVHEGEFSRKHAINGIPSVCESVHIARDVLLAEAAGCHYHVCHISTKESVRVVRDSKRAGIKVTAEVTPHHLLLCEDDIPGLDANFKMNPPLRSASDREALIEGLLDGTIDFIATDHAPHTSEEKEEGMELAPFGITGLETAFPLLYTHLVLKGTLTLKQL-VDFMTIKPSEAFGLPYGKLEEGSPADLVLVNLDHGQNIDPQEFVSKGKNTPFSGWNCKGWPVLTIAGGKTVW</Hsp_hseq>
-              <Hsp_midline>M  LIKNG +L ENGE  Q DI + G  I  IG + + TD E VIDA GLL  PG VDLHVH REPGGEKKETIETG  AA RGG+TT+A MPNTRPVPDT EQ+EW+  RI ET+ VRVLPYASIT+RQ+G E+T+FE LK+AGAFAFTDDGVG+Q+AGMM  AMK+AAA+   +VAHCE+N+LI  GSVHEG FS+ + +NGIPSVCESVHIARDVLL   A CHYHVCHISTKESVRVVRD+K+AGI+VTAEV+PHHLLLC++DIPGLD N+KMNPPLRS  DR ALIEGLLDGTIDFIATDHAPHT EEK   M+LAPF    L  + P     L  K  L  +   + +MTIKP EAFGLPYG L+ G  AD+ L++L+    ID + F+SKGKNTPF+G +C GWPV TIA GK  +</Hsp_midline>
-            </Hsp>
-          </Hit_hsps>
-        </Hit>
-        <Hit>
-          <Hit_num>4</Hit_num>
-          <Hit_id>gi|15615101|ref|NP_243404.1|</Hit_id>
-          <Hit_def>dihydroorotase [Bacillus halodurans C-125] >gi|20139768|sp|Q9K9V7|PYRC_BACHD Dihydroorotase (DHOase) >gi|10175158|dbj|BAB06257.1| dihydroorotase [Bacillus halodurans C-125]</Hit_def>
-          <Hit_accession>NP_243404</Hit_accession>
-          <Hit_len>428</Hit_len>
-          <Hit_hsps>
-            <Hsp>
-              <Hsp_num>1</Hsp_num>
-              <Hsp_bit-score>545.814</Hsp_bit-score>
-              <Hsp_score>1405</Hsp_score>
-              <Hsp_evalue>1.3427e-153</Hsp_evalue>
-              <Hsp_query-from>1</Hsp_query-from>
-              <Hsp_query-to>428</Hsp_query-to>
-              <Hsp_hit-from>1</Hsp_hit-from>
-              <Hsp_hit-to>428</Hsp_hit-to>
-              <Hsp_query-frame>0</Hsp_query-frame>
-              <Hsp_hit-frame>0</Hsp_hit-frame>
-              <Hsp_identity>281</Hsp_identity>
-              <Hsp_positive>323</Hsp_positive>
-              <Hsp_gaps>4</Hsp_gaps>
-              <Hsp_align-len>430</Hsp_align-len>
-              <Hsp_qseq>MSYLIKNGWILNENGEKTQADIRVTGETITAIG-KLDATDNETVIDAKGLLVSPGFVDLHVHFREPGGEKKETIETGAKAAGRGGYTTVAAMPNTRPVPDTKEQMEWVQNRIKETSCVRVLPYASITIRQIGDEMTNFEALKEAGAFAFTDDGVGIQTAGMMYEAMKRAAAIDKAIVAHCEDNSLIYGGSVHEGTFSKANGLNGIPSVCESVHIARDVLLL-GANCHYHVCHISTKESVRVVRDAKKAGIRVTAEVSPHHLLLCDEDIPGLDTNYKMNPPLRSPEDRAALIEGLLDGTIDFIATDHAPHTEEEKNTEMKLAPFRNCRLRNSIPASLHTLCQKWQLVTEAADLTYMTIKPCEAFGLPYGTLQTGQAADITLIDLEKEAVIDKETFLSKGKNTPFNGISCTGWPVATIAAGKLAYEEGRLVK</Hsp_qseq>
-              <Hsp_hseq>MKTLIKNGSIVTKEGTVKTQDVLLHDGVISAIGLNLEETDAH-VIEANGKLVTPGLVDLHVHLREPGGEAKETIETGTKAAAKGGFTTVAAMPNTRPVPDSAEQMSWLTGRIDETGVVRVLPYAAITTRQLGRELTDFAKLKEAGAFAFTDDGVGVQSAAMMLEAMKEAAKLEMAIVAHCEENTLIQNGSVHEGVFSKKHGIAGIPSVCESVHIARDVLLAEAAGVHYHVCHISTKESVRVVRDAKRAGIRVTAEVTPHHLLLCDEDIPGLDAHYKMNPPLRGKEDREALIEGLLDGTIDFIATDHAPHTEEEKGQGMERAPFGIVGLETAFPL-LYTHFVKKGTFTLKQLVDWLTIDPAETFQLPYGRLEEGAPADVTIIDLEAERAIDPAHFASKGRNTPFAGWTCQGWPVATLVGGKLVWEEKEVAR</Hsp_hseq>
-              <Hsp_midline>M  LIKNG I+ + G     D+ +    I+AIG  L+ TD   VI+A G LV+PG VDLHVH REPGGE KETIETG KAA +GG+TTVAAMPNTRPVPD+ EQM W+  RI ET  VRVLPYA+IT RQ+G E+T+F  LKEAGAFAFTDDGVG+Q+A MM EAMK AA ++ AIVAHCE+N+LI  GSVHEG FSK +G+ GIPSVCESVHIARDVLL   A  HYHVCHISTKESVRVVRDAK+AGIRVTAEV+PHHLLLCDEDIPGLD +YKMNPPLR  EDR ALIEGLLDGTIDFIATDHAPHTEEEK   M+ APF    L  + P  L+T   K    T    + ++TI P E F LPYG L+ G  AD+T+IDLE E  ID   F SKG+NTPF G +C GWPVAT+  GKL +EE  + +</Hsp_midline>
-            </Hsp>
-          </Hit_hsps>
-        </Hit>
-        <Hit>
-          <Hit_num>5</Hit_num>
-          <Hit_id>gi|1172784|sp|P46538|PYRC_BACCL</Hit_id>
-          <Hit_def>Dihydroorotase (DHOase) >gi|312441|emb|CAA51737.1| dihydroorotase [Bacillus caldolyticus]</Hit_def>
-          <Hit_accession>P46538</Hit_accession>
-          <Hit_len>427</Hit_len>
-          <Hit_hsps>
-            <Hsp>
-              <Hsp_num>1</Hsp_num>
-              <Hsp_bit-score>545.428</Hsp_bit-score>
-              <Hsp_score>1404</Hsp_score>
-              <Hsp_evalue>1.73906e-153</Hsp_evalue>
-              <Hsp_query-from>1</Hsp_query-from>
-              <Hsp_query-to>425</Hsp_query-to>
-              <Hsp_hit-from>1</Hsp_hit-from>
-              <Hsp_hit-to>426</Hsp_hit-to>
-              <Hsp_query-frame>0</Hsp_query-frame>
-              <Hsp_hit-frame>0</Hsp_hit-frame>
-              <Hsp_identity>279</Hsp_identity>
-              <Hsp_positive>323</Hsp_positive>
-              <Hsp_gaps>7</Hsp_gaps>
-              <Hsp_align-len>429</Hsp_align-len>
-              <Hsp_qseq>MSYLIKNGWILNENGEKTQADIRVTGETITAI---GKLDATDNETVIDAKGLLVSPGFVDLHVHFREPGGEKKETIETGAKAAGRGGYTTVAAMPNTRPVPDTKEQMEWVQNRIKETSCVRVLPYASITIRQIGDEMTNFEALKEAGAFAFTDDGVGIQTAGMMYEAMKRAAAIDKAIVAHCEDNSLIYGGSVHEGTFSKANGLNGIPSVCESVHIARDVLLL-GANCHYHVCHISTKESVRVVRDAKKAGIRVTAEVSPHHLLLCDEDIPGLDTNYKMNPPLRSPEDRAALIEGLLDGTIDFIATDHAPHTEEEKNTEMKLAPFRNCRLRNSIPASLHTLCQKWQLVTEAADLTYMTIKPCEAFGLPYGTLQTGQAADITLIDLEKEAVIDKETFLSKGKNTPFNGISCTGWPVATIAAGKLAYEEGR</Hsp_qseq>
-              <Hsp_hseq>MGVWLKNGMSFNKDGELMRTHIKIEHGTIAAILYEQPLEA--NEDVIDVGGRLIVPGLIDLHVHLREPGGEAKETIETGTLAAAKGGFTTVAAMPNTNPAPDRKEQMEWLQARIRETARVNVLPYAAITIGQKGEELTDFAALKEAGAFAFTDDGVGVQSAGMMFEAMKQAAALDMAIVAHCEDDTLTNGGAVHDGEFARRYGLRGIPSVCEAVHIARDVLLAEAAGCHYHVCHISTKESVRVVRDAKRAGIRVTAEVTPHHLLLCDEDIPGLDANYKMNPPLRSREDRDALIEGLLDGTIDFIATDHAPHTAAEKAKGIEAAPFGIVGLETAFPL-LYTHFVKTGVFTLKQLVDWLTIKPAQCFGLKAGRLAVGAPADIAVIDLETEEAIDPETFASKGKNTPFAGWVCQGWPVMTFVGGTLVWEKGR</Hsp_hseq>
-              <Hsp_midline>M   +KNG   N++GE  +  I++   TI AI     L+A  NE VID  G L+ PG +DLHVH REPGGE KETIETG  AA +GG+TTVAAMPNT P PD KEQMEW+Q RI+ET+ V VLPYA+ITI Q G+E+T+F ALKEAGAFAFTDDGVG+Q+AGMM+EAMK+AAA+D AIVAHCED++L  GG+VH+G F++  GL GIPSVCE+VHIARDVLL   A CHYHVCHISTKESVRVVRDAK+AGIRVTAEV+PHHLLLCDEDIPGLD NYKMNPPLRS EDR ALIEGLLDGTIDFIATDHAPHT  EK   ++ APF    L  + P  L+T   K  + T    + ++TIKP + FGL  G L  G  ADI +IDLE E  ID ETF SKGKNTPF G  C GWPV T   G L +E+GR</Hsp_midline>
-            </Hsp>
-          </Hit_hsps>
-        </Hit>
-        <Hit>
-          <Hit_num>6</Hit_num>
-          <Hit_id>gi|56419685|ref|YP_147003.1|</Hit_id>
-          <Hit_def>dihydroorotase [Geobacillus kaustophilus HTA426] >gi|56379527|dbj|BAD75435.1| dihydroorotase [Geobacillus kaustophilus HTA426]</Hit_def>
-          <Hit_accession>YP_147003</Hit_accession>
-          <Hit_len>428</Hit_len>
-          <Hit_hsps>
-            <Hsp>
-              <Hsp_num>1</Hsp_num>
-              <Hsp_bit-score>543.502</Hsp_bit-score>
-              <Hsp_score>1399</Hsp_score>
-              <Hsp_evalue>6.28571e-153</Hsp_evalue>
-              <Hsp_query-from>1</Hsp_query-from>
-              <Hsp_query-to>425</Hsp_query-to>
-              <Hsp_hit-from>1</Hsp_hit-from>
-              <Hsp_hit-to>427</Hsp_hit-to>
-              <Hsp_query-frame>0</Hsp_query-frame>
-              <Hsp_hit-frame>0</Hsp_hit-frame>
-              <Hsp_identity>278</Hsp_identity>
-              <Hsp_positive>323</Hsp_positive>
-              <Hsp_gaps>6</Hsp_gaps>
-              <Hsp_align-len>429</Hsp_align-len>
-              <Hsp_qseq>MSYLIKNGWILNENGEKTQADIRVTGETITAI---GKLDATDNETVIDAKGLLVSPGFVDLHVHFREPGGEKKETIETGAKAAGRGGYTTVAAMPNTRPVPDTKEQMEWVQNRIKETSCVRVLPYASITIRQIGDEMTNFEALKEAGAFAFTDDGVGIQTAGMMYEAMKRAAAIDKAIVAHCEDNSLIYGGSVHEGTFSKANGLNGIPSVCESVHIARDVLLL-GANCHYHVCHISTKESVRVVRDAKKAGIRVTAEVSPHHLLLCDEDIPGLDTNYKMNPPLRSPEDRAALIEGLLDGTIDFIATDHAPHTEEEKNTEMKLAPFRNCRLRNSIPASLHTLCQKWQLVTEAADLTYMTIKPCEAFGLPYGTLQTGQAADITLIDLEKEAVIDKETFLSKGKNTPFNGISCTGWPVATIAAGKLAYEEGR</Hsp_qseq>
-              <Hsp_hseq>MGVWLKNGMSFNKDGELMRTHIKIEHGTIAAILYEQPLEANE-EDVIDVGGRLIVPGLIDLHVHLREPGGEAKETIETGTLAAAKGGFTTVAAMPNTNPAPDRKEQMEWLQARIRETARVNVLPYAAITIGQKGEELTDFAALKEAGAFAFTDDGVGVQSAGMMFEAMKQAAALDMAIVAHCEDDTLTNGGAVHDGEFARRYGLRGIPSVCEAVHIARDVLLAEAAGCHYHVCHISTKESVRVVRDAKRAGIRVTAEVTPHHLLLCDEDIPGLDANYKMNPPLRSREDRDALIEGLLDGTIDFIATDHAPHTAAEKAKGIEAAPFGIVGLETAFPL-LYTHFVKTGVFTLKQLVDWLTIKPAQCFGLKAGRLAVGAPADIAVIDLETEEAIDPETFASKGKNTPFAGWVCQGWPVMTFVGGTLVWEKGR</Hsp_hseq>
-              <Hsp_midline>M   +KNG   N++GE  +  I++   TI AI     L+A + E VID  G L+ PG +DLHVH REPGGE KETIETG  AA +GG+TTVAAMPNT P PD KEQMEW+Q RI+ET+ V VLPYA+ITI Q G+E+T+F ALKEAGAFAFTDDGVG+Q+AGMM+EAMK+AAA+D AIVAHCED++L  GG+VH+G F++  GL GIPSVCE+VHIARDVLL   A CHYHVCHISTKESVRVVRDAK+AGIRVTAEV+PHHLLLCDEDIPGLD NYKMNPPLRS EDR ALIEGLLDGTIDFIATDHAPHT  EK   ++ APF    L  + P  L+T   K  + T    + ++TIKP + FGL  G L  G  ADI +IDLE E  ID ETF SKGKNTPF G  C GWPV T   G L +E+GR</Hsp_midline>
-            </Hsp>
-          </Hit_hsps>
-        </Hit>
-        <Hit>
-          <Hit_num>7</Hit_num>
-          <Hit_id>gi|56964100|ref|YP_175831.1|</Hit_id>
-          <Hit_def>dihydroorotase [Bacillus clausii KSM-K16] >gi|56910343|dbj|BAD64870.1| dihydroorotase [Bacillus clausii KSM-K16]</Hit_def>
-          <Hit_accession>YP_175831</Hit_accession>
-          <Hit_len>427</Hit_len>
-          <Hit_hsps>
-            <Hsp>
-              <Hsp_num>1</Hsp_num>
-              <Hsp_bit-score>540.806</Hsp_bit-score>
-              <Hsp_score>1392</Hsp_score>
-              <Hsp_evalue>4.00686e-152</Hsp_evalue>
-              <Hsp_query-from>1</Hsp_query-from>
-              <Hsp_query-to>426</Hsp_query-to>
-              <Hsp_hit-from>1</Hsp_hit-from>
-              <Hsp_hit-to>424</Hsp_hit-to>
-              <Hsp_query-frame>0</Hsp_query-frame>
-              <Hsp_hit-frame>0</Hsp_hit-frame>
-              <Hsp_identity>273</Hsp_identity>
-              <Hsp_positive>325</Hsp_positive>
-              <Hsp_gaps>4</Hsp_gaps>
-              <Hsp_align-len>427</Hsp_align-len>
-              <Hsp_qseq>MSYLIKNGWILNENGEKTQADIRVTGETITAIGKLDATDNETVIDAKGLLVSPGFVDLHVHFREPGGEKKETIETGAKAAGRGGYTTVAAMPNTRPVPDTKEQMEWVQNRIKETSCVRVLPYASITIRQIGDEMTNFEALKEAGAFAFTDDGVGIQTAGMMYEAMKRAAAIDKAIVAHCEDNSLIYGGSVHEGTFSKANGLNGIPSVCESVHIARDVLLL-GANCHYHVCHISTKESVRVVRDAKKAGIRVTAEVSPHHLLLCDEDIPGLDTNYKMNPPLRSPEDRAALIEGLLDGTIDFIATDHAPHTEEEKNTEMKLAPFRNCRLRNSIPASLHTLCQKWQLVTEAADLTYMTIKPCEAFGLPYGTLQTGQAADITLIDLEKEAVIDKETFLSKGKNTPFNGISCTGWPVATIAAGKLAYEEGRL</Hsp_qseq>
-              <Hsp_hseq>MAMKVTGGFILDENGEQVAKDVYIKDGKI--VEHVADGDIRQQFDATGLLISPGFVDVHVHLREPGGEKKETIETGTKAAARGGFTTVAAMPNTRPVPDNAEQLDLLQARISETAVVRVLPYASITTRQLGQELTDFKALKEAGAFAFTDDGVGIQEAGMMLSAMKEAAALNMAVVAHCEDNSLINGGAVHEGHYAKAHGLNGIPSVCEAVHIARDVLLAEAAGAHYHVCHVSTKESVRTIRDAKKAGIRVTAEVTPHHLLLCEDDIIGKDPNFKMNPPLRAKEDRDALVAGLLDGTIDFIATDHAPHTAEEKSASLERAPFGIVGLETAFPL-LYTHFVKPGTFTLKQLIDWLTVKPAQTFNLPYGTLQVGAAADLTLIDLKANETIDPSMFLSKGKNTPFAGWDCAGIPQATMVAGKTVYKKERI</Hsp_hseq>
-              <Hsp_midline>M+  +  G+IL+ENGE+   D+ +    I  +  +   D     DA GLL+SPGFVD+HVH REPGGEKKETIETG KAA RGG+TTVAAMPNTRPVPD  EQ++ +Q RI ET+ VRVLPYASIT RQ+G E+T+F+ALKEAGAFAFTDDGVGIQ AGMM  AMK AAA++ A+VAHCEDNSLI GG+VHEG ++KA+GLNGIPSVCE+VHIARDVLL   A  HYHVCH+STKESVR +RDAKKAGIRVTAEV+PHHLLLC++DI G D N+KMNPPLR+ EDR AL+ GLLDGTIDFIATDHAPHT EEK+  ++ APF    L  + P  L+T   K    T    + ++T+KP + F LPYGTLQ G AAD+TLIDL+    ID   FLSKGKNTPF G  C G P AT+ AGK  Y++ R+</Hsp_midline>
-            </Hsp>
-          </Hit_hsps>
-        </Hit>
-        <Hit>
-          <Hit_num>8</Hit_num>
-          <Hit_id>gi|16801017|ref|NP_471285.1|</Hit_id>
-          <Hit_def>dihydroorotase [Listeria innocua Clip11262] >gi|21542203|sp|Q92AH1|PYRC_LISIN Dihydroorotase (DHOase) >gi|16414452|emb|CAC97181.1| pyrC [Listeria innocua]</Hit_def>
-          <Hit_accession>NP_471285</Hit_accession>
-          <Hit_len>426</Hit_len>
-          <Hit_hsps>
-            <Hsp>
-              <Hsp_num>1</Hsp_num>
-              <Hsp_bit-score>538.11</Hsp_bit-score>
-              <Hsp_score>1385</Hsp_score>
-              <Hsp_evalue>2.79971e-151</Hsp_evalue>
-              <Hsp_query-from>3</Hsp_query-from>
-              <Hsp_query-to>424</Hsp_query-to>
-              <Hsp_hit-from>2</Hsp_hit-from>
-              <Hsp_hit-to>423</Hsp_hit-to>
-              <Hsp_query-frame>0</Hsp_query-frame>
-              <Hsp_hit-frame>0</Hsp_hit-frame>
-              <Hsp_identity>275</Hsp_identity>
-              <Hsp_positive>320</Hsp_positive>
-              <Hsp_gaps>4</Hsp_gaps>
-              <Hsp_align-len>424</Hsp_align-len>
-              <Hsp_qseq>YLIKNGWILNENGEKTQADIRVTGETITAIG-KLDATDNETVIDAKGLLVSPGFVDLHVHFREPGGEKKETIETGAKAAGRGGYTTVAAMPNTRPVPDTKEQMEWVQNRIKETSCVRVLPYASITIRQIGDEMTNFEALKEAGAFAFTDDGVGIQTAGMMYEAMKRAAAIDKAIVAHCEDNSLIYGGSVHEGTFSKANGLNGIPSVCESVHIARDVLLL-GANCHYHVCHISTKESVRVVRDAKKAGIRVTAEVSPHHLLLCDEDIPGLDTNYKMNPPLRSPEDRAALIEGLLDGTIDFIATDHAPHTEEEKNTEMKLAPFRNCRLRNSIPASLHTLCQKWQLVTEAADLTYMTIKPCEAFGLPYGTLQTGQAADITLIDLEKEAVIDKETFLSKGKNTPFNGISCTGWPVATIAAGKLAYEEG</Hsp_qseq>
-              <Hsp_hseq>YVLKNGQVLNESGELENKDVLIQNGKVNLIADSIEVTSGEE-FDATGKLIAPGFIDVHVHLREPGGEHKETILTGTKAAARGGYTTICSMPNTKPVPDSKEVMNSLQAKIKETAEVRVLPYASITTSLGTDELVDFEALKEAGAFAFTDDGVGVQLAGTMYEAMKRAAALDMAIVAHCEDNSLIYGGVVHDGIFAEKEGLKGIPNIAESVQIARDVLLAEAAGCHYHVCHISTKESVRVVRDAKRAGIRVTAEVSPHHLILDEEDIPGNDGNWKMNPPLRSKEDRAALLEGLLDGTIDFIATDHAPHAAEEKNVPMEQAAFGIVGLETAFPL-LYTHFVKTNEWTLKQLIDWMTVKPAECFKLPYGKLEEGAVADIVVLDLEKEATIDPATFYSKGKNTPFVGETCIGWPVATFAEGELVYNEG</Hsp_hseq>
-              <Hsp_midline>Y++KNG +LNE+GE    D+ +    +  I   ++ T  E   DA G L++PGF+D+HVH REPGGE KETI TG KAA RGGYTT+ +MPNT+PVPD+KE M  +Q +IKET+ VRVLPYASIT     DE+ +FEALKEAGAFAFTDDGVG+Q AG MYEAMKRAAA+D AIVAHCEDNSLIYGG VH+G F++  GL GIP++ ESV IARDVLL   A CHYHVCHISTKESVRVVRDAK+AGIRVTAEVSPHHL+L +EDIPG D N+KMNPPLRS EDRAAL+EGLLDGTIDFIATDHAPH  EEKN  M+ A F    L  + P  L+T   K    T    + +MT+KP E F LPYG L+ G  ADI ++DLEKEA ID  TF SKGKNTPF G +C GWPVAT A G+L Y EG</Hsp_midline>
-            </Hsp>
-          </Hit_hsps>
-        </Hit>
-        <Hit>
-          <Hit_num>9</Hit_num>
-          <Hit_id>gi|16803877|ref|NP_465362.1|</Hit_id>
-          <Hit_def>dihydroorotase [Listeria monocytogenes EGD-e] >gi|47096558|ref|ZP_00234148.1| dihydroorotase, multifunctional complex type [Listeria monocytogenes str. 1/2a F6854] >gi|21542200|sp|Q8Y663|PYRC_LISMO Dihydroorotase (DHOase) >gi|16411291|emb|CAC99915.1| pyrC [Listeria monocytogenes] >gi|47015090|gb|EAL06033.1| dihydroorotase, multifunctional complex type [Listeria monocytogenes str. 1/2a F6854]</Hit_def>
-          <Hit_accession>NP_465362</Hit_accession>
-          <Hit_len>426</Hit_len>
-          <Hit_hsps>
-            <Hsp>
-              <Hsp_num>1</Hsp_num>
-              <Hsp_bit-score>535.028</Hsp_bit-score>
-              <Hsp_score>1377</Hsp_score>
-              <Hsp_evalue>2.49177e-150</Hsp_evalue>
-              <Hsp_query-from>3</Hsp_query-from>
-              <Hsp_query-to>426</Hsp_query-to>
-              <Hsp_hit-from>2</Hsp_hit-from>
-              <Hsp_hit-to>425</Hsp_hit-to>
-              <Hsp_query-frame>0</Hsp_query-frame>
-              <Hsp_hit-frame>0</Hsp_hit-frame>
-              <Hsp_identity>273</Hsp_identity>
-              <Hsp_positive>320</Hsp_positive>
-              <Hsp_gaps>4</Hsp_gaps>
-              <Hsp_align-len>426</Hsp_align-len>
-              <Hsp_qseq>YLIKNGWILNENGEKTQADIRVTGETITAIG-KLDATDNETVIDAKGLLVSPGFVDLHVHFREPGGEKKETIETGAKAAGRGGYTTVAAMPNTRPVPDTKEQMEWVQNRIKETSCVRVLPYASITIRQIGDEMTNFEALKEAGAFAFTDDGVGIQTAGMMYEAMKRAAAIDKAIVAHCEDNSLIYGGSVHEGTFSKANGLNGIPSVCESVHIARDVLLL-GANCHYHVCHISTKESVRVVRDAKKAGIRVTAEVSPHHLLLCDEDIPGLDTNYKMNPPLRSPEDRAALIEGLLDGTIDFIATDHAPHTEEEKNTEMKLAPFRNCRLRNSIPASLHTLCQKWQLVTEAADLTYMTIKPCEAFGLPYGTLQTGQAADITLIDLEKEAVIDKETFLSKGKNTPFNGISCTGWPVATIAAGKLAYEEGRL</Hsp_qseq>
-              <Hsp_hseq>YVLKNGQVLNASGKLESKDVLIQNGKVNLIADSIEVTSGEE-FDATGKLITPGFIDVHVHLREPGGEHKETILTGTKAAARGGYTTICSMPNTKPVPDSKEVMESIQAKIKETAKVRVLPYASITTSLGTDELVDFEALKEAGAFAFTDDGVGVQLAGTMYEAMKRAAALDMAIVAHCEDNSLIYGGVVHDGIFAEKEGLKGIPNIAESVQIARDVLLAEAAGCHYHVCHISTKESVRVVRDAKRAGIRVTAEVSPHHLILDEEAIPGNDGNWKMNPPLRSKEDRAALLEGLLDGTIDFIATDHAPHAAEEKNVPMEQAAFGIVGLETAFPL-LYTHFVKTNEWTLKQLIDWMTVKPAECFKLPYGKLEEGSVADIVVLDLEKEANIDPDTFYSKGKNTPFVGETCIGWPVATFAEGTLVYNEGEI</Hsp_hseq>
-              <Hsp_midline>Y++KNG +LN +G+    D+ +    +  I   ++ T  E   DA G L++PGF+D+HVH REPGGE KETI TG KAA RGGYTT+ +MPNT+PVPD+KE ME +Q +IKET+ VRVLPYASIT     DE+ +FEALKEAGAFAFTDDGVG+Q AG MYEAMKRAAA+D AIVAHCEDNSLIYGG VH+G F++  GL GIP++ ESV IARDVLL   A CHYHVCHISTKESVRVVRDAK+AGIRVTAEVSPHHL+L +E IPG D N+KMNPPLRS EDRAAL+EGLLDGTIDFIATDHAPH  EEKN  M+ A F    L  + P  L+T   K    T    + +MT+KP E F LPYG L+ G  ADI ++DLEKEA ID +TF SKGKNTPF G +C GWPVAT A G L Y EG +</Hsp_midline>
-            </Hsp>
-          </Hit_hsps>
-        </Hit>
-        <Hit>
-          <Hit_num>10</Hit_num>
-          <Hit_id>gi|46908069|ref|YP_014458.1|</Hit_id>
-          <Hit_def>dihydroorotase [Listeria monocytogenes str. 4b F2365] >gi|47093074|ref|ZP_00230852.1| dihydroorotase, multifunctional complex type [Listeria monocytogenes str. 4b H7858] >gi|67460855|sp|Q71YH9|PYRC_LISMF Dihydroorotase (DHOase) >gi|46881339|gb|AAT04635.1| dihydroorotase, multifunctional complex type [Listeria monocytogenes str. 4b F2365] >gi|47018575|gb|EAL09330.1| dihydroorotase, multifunctional complex type [Listeria monocytogenes str. 4b H7858]</Hit_def>
-          <Hit_accession>YP_014458</Hit_accession>
-          <Hit_len>426</Hit_len>
-          <Hit_hsps>
-            <Hsp>
-              <Hsp_num>1</Hsp_num>
-              <Hsp_bit-score>532.717</Hsp_bit-score>
-              <Hsp_score>1371</Hsp_score>
-              <Hsp_evalue>1.23665e-149</Hsp_evalue>
-              <Hsp_query-from>3</Hsp_query-from>
-              <Hsp_query-to>426</Hsp_query-to>
-              <Hsp_hit-from>2</Hsp_hit-from>
-              <Hsp_hit-to>425</Hsp_hit-to>
-              <Hsp_query-frame>0</Hsp_query-frame>
-              <Hsp_hit-frame>0</Hsp_hit-frame>
-              <Hsp_identity>272</Hsp_identity>
-              <Hsp_positive>319</Hsp_positive>
-              <Hsp_gaps>4</Hsp_gaps>
-              <Hsp_align-len>426</Hsp_align-len>
-              <Hsp_qseq>YLIKNGWILNENGEKTQADIRVTGETITAIG-KLDATDNETVIDAKGLLVSPGFVDLHVHFREPGGEKKETIETGAKAAGRGGYTTVAAMPNTRPVPDTKEQMEWVQNRIKETSCVRVLPYASITIRQIGDEMTNFEALKEAGAFAFTDDGVGIQTAGMMYEAMKRAAAIDKAIVAHCEDNSLIYGGSVHEGTFSKANGLNGIPSVCESVHIARDVLLL-GANCHYHVCHISTKESVRVVRDAKKAGIRVTAEVSPHHLLLCDEDIPGLDTNYKMNPPLRSPEDRAALIEGLLDGTIDFIATDHAPHTEEEKNTEMKLAPFRNCRLRNSIPASLHTLCQKWQLVTEAADLTYMTIKPCEAFGLPYGTLQTGQAADITLIDLEKEAVIDKETFLSKGKNTPFNGISCTGWPVATIAAGKLAYEEGRL</Hsp_qseq>
-              <Hsp_hseq>YVLKNGQVLNASGELENKDVLIQNGKVNLIADSIEVTSGEE-FDATGKLIAPGFIDVHVHLREPGGEHKETILTGTQAAARGGYTTICSMPNTKPVPDSKEVMESLQAKIKETAKVRVLPYASITTSLGTDELVDFEALKEAGAFAFTDDGVGVQLAGTMYEAMKRAAALDMAIVAHCEDNSLIYGGVVHDGIFAEKEGLKGIPNIAESVQIARDVLLAEAAGCHYHVCHISTKESVRVVRDAKRAGIRVTAEVSPHHLILDEEAIPGNDGNWKMNPPLRSKEDRAALLEGLLDGTIDFIATDHAPHAAEEKNVPMEQAAFGIVGLETAFPL-LYTHFVKTNEWTLKQLIDWMTVKPAECFKLPYGKLEEGSVADIVVLDLEKEANIDPATFYSKGKNTPFVGETCIGWPVATFSEGTLVYNEGEI</Hsp_hseq>
-              <Hsp_midline>Y++KNG +LN +GE    D+ +    +  I   ++ T  E   DA G L++PGF+D+HVH REPGGE KETI TG +AA RGGYTT+ +MPNT+PVPD+KE ME +Q +IKET+ VRVLPYASIT     DE+ +FEALKEAGAFAFTDDGVG+Q AG MYEAMKRAAA+D AIVAHCEDNSLIYGG VH+G F++  GL GIP++ ESV IARDVLL   A CHYHVCHISTKESVRVVRDAK+AGIRVTAEVSPHHL+L +E IPG D N+KMNPPLRS EDRAAL+EGLLDGTIDFIATDHAPH  EEKN  M+ A F    L  + P  L+T   K    T    + +MT+KP E F LPYG L+ G  ADI ++DLEKEA ID  TF SKGKNTPF G +C GWPVAT + G L Y EG +</Hsp_midline>
-            </Hsp>
-          </Hit_hsps>
-        </Hit>
-      </Iteration_hits>
-      <Iteration_stat>
-        <Statistics>
-          <Statistics_db-num>4299737</Statistics_db-num>
-          <Statistics_db-len>1479795817</Statistics_db-len>
-          <Statistics_hsp-len>0</Statistics_hsp-len>
-          <Statistics_eff-space>0</Statistics_eff-space>
-          <Statistics_kappa>0.041</Statistics_kappa>
-          <Statistics_lambda>0.267</Statistics_lambda>
-          <Statistics_entropy>0.14</Statistics_entropy>
-        </Statistics>
-      </Iteration_stat>
-    </Iteration>
-  </BlastOutput_iterations>
-</BlastOutput>
-
-
diff --git a/t/data/phmmer.out b/t/data/phmmer.out
new file mode 100644
index 0000000..c07f860
--- /dev/null
+++ b/t/data/phmmer.out
@@ -0,0 +1,183 @@
+# phmmer :: search a protein sequence against a protein database
+# HMMER 3.1b1 (May 2013); http://hmmer.org/
+# Copyright (C) 2013 Howard Hughes Medical Institute.
+# Freely distributed under the GNU General Public License (GPLv3).
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+# query sequence file:             /tmp/task-hmmsearch-TCHn9R/ZRkI2xwebU
+# target sequence database:        /cath/data/v4_0_0/release_data/CathDomainSeqs.COMBS
+# output directed to file:         /tmp/phmmer.out
+# sequence reporting threshold:    E-value <= 0.01
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+Query:       A0R3R7  [L=762]
+Scores for complete sequences (score includes all domains):
+   --- full sequence ---   --- best 1 domain ---    -#dom-
+    E-value  score  bias    E-value  score  bias    exp  N  Sequence                           Description
+    ------- ------ -----    ------- ------ -----   ---- --  --------                           -----------
+    2.1e-55  191.8   3.7    2.3e-55  191.7   3.7    1.0  1  cath|4_0_0|1vs0A03/639-759          
+    2.1e-55  191.8   3.7    2.3e-55  191.7   3.7    1.0  1  cath|4_0_0|1vs0B03/639-759          
+    1.9e-46  162.2   0.2    2.1e-46  162.1   0.2    1.0  1  cath|4_0_0|1vs0A02/484-593          
+    1.9e-46  162.2   0.2    2.1e-46  162.1   0.2    1.0  1  cath|4_0_0|1vs0B02/484-593          
+    5.8e-17   64.7   1.4    7.1e-10   41.3   0.1    2.0  2  cath|4_0_0|1vs0A01/453-483_594-638  
+    5.8e-17   64.7   1.4    7.1e-10   41.3   0.1    2.0  2  cath|4_0_0|1vs0B01/453-483_594-638  
+    6.4e-07   31.5   0.1    8.1e-07   31.2   0.1    1.0  1  cath|4_0_0|2cfmA03/422-561          
+    0.00065   21.6   0.0    0.00069   21.5   0.0    1.0  1  cath|4_0_0|1x9nA03/571-696          
+
+
+Domain annotation for each sequence (and alignments):
+>> cath|4_0_0|1vs0A03/639-759  
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  191.7   3.7   7.9e-60   2.3e-55     642     761 ..       1     120 [.       1     121 [] 0.99
+
+  Alignments for each domain:
+  == domain 1  score: 191.7 bits;  conditional E-value: 7.9e-60
+                      A0R3R7 642 wntqevviggwrqgeggrssgigalvlgipgpeglqfvgrvgtgftekelsklkdmlkplhtdespfnaplpkvdargvtfvr 724
+                                 wntqevviggwr geggrssg+g+l+ gipgp glqf grvgtg++e+el+ lk+ l plhtdespf+ plp  da+g+t+v+
+  cath|4_0_0|1vs0A03/639-759   1 WNTQEVVIGGWRAGEGGRSSGVGSLLXGIPGPGGLQFAGRVGTGLSERELANLKEXLAPLHTDESPFDVPLPARDAKGITYVK 83 
+                                 *********************************************************************************** PP
+
+                      A0R3R7 725 pelvgevrysertsdgrlrqpswrglrpdktpdevvw 761
+                                 p lv+evryse t +grlrq swrglrpdk p evv 
+  cath|4_0_0|1vs0A03/639-759  84 PALVAEVRYSEWTPEGRLRQSSWRGLRPDKKPSEVVR 120
+                                 ***********************************96 PP
+
+>> cath|4_0_0|1vs0B03/639-759  
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  191.7   3.7   7.9e-60   2.3e-55     642     761 ..       1     120 [.       1     121 [] 0.99
+
+  Alignments for each domain:
+  == domain 1  score: 191.7 bits;  conditional E-value: 7.9e-60
+                      A0R3R7 642 wntqevviggwrqgeggrssgigalvlgipgpeglqfvgrvgtgftekelsklkdmlkplhtdespfnaplpkvdargvtfvr 724
+                                 wntqevviggwr geggrssg+g+l+ gipgp glqf grvgtg++e+el+ lk+ l plhtdespf+ plp  da+g+t+v+
+  cath|4_0_0|1vs0B03/639-759   1 WNTQEVVIGGWRAGEGGRSSGVGSLLXGIPGPGGLQFAGRVGTGLSERELANLKEXLAPLHTDESPFDVPLPARDAKGITYVK 83 
+                                 *********************************************************************************** PP
+
+                      A0R3R7 725 pelvgevrysertsdgrlrqpswrglrpdktpdevvw 761
+                                 p lv+evryse t +grlrq swrglrpdk p evv 
+  cath|4_0_0|1vs0B03/639-759  84 PALVAEVRYSEWTPEGRLRQSSWRGLRPDKKPSEVVR 120
+                                 ***********************************96 PP
+
+>> cath|4_0_0|1vs0A02/484-593  
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  162.1   0.2     7e-51   2.1e-46     487     596 ..       1     110 []       1     110 [] 0.99
+
+  Alignments for each domain:
+  == domain 1  score: 162.1 bits;  conditional E-value: 7e-51
+                      A0R3R7 487 gyrviidadhgqlqirsrtgrevtgeypqfkalaadlaehhvvldgeavaldesgvpsfgqmqnrarstrvefwafdilwldg 569
+                                 gyr++++adhg +++rsr+gr+vt+eypq++ala dla+hhvvldgeav ld sgvpsf+q qnr r trvefwafd+l+ldg
+  cath|4_0_0|1vs0A02/484-593   1 GYRLLVEADHGAVRLRSRSGRDVTAEYPQLRALAEDLADHHVVLDGEAVVLDSSGVPSFSQXQNRGRDTRVEFWAFDLLYLDG 83 
+                                 8********************************************************************************** PP
+
+                      A0R3R7 570 rsllrakysdrrkilealadggglivp 596
+                                 r+ll  +y drrk+le la++ +l vp
+  cath|4_0_0|1vs0A02/484-593  84 RALLGTRYQDRRKLLETLANATSLTVP 110
+                                 *********************999998 PP
+
+>> cath|4_0_0|1vs0B02/484-593  
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !  162.1   0.2     7e-51   2.1e-46     487     596 ..       1     110 []       1     110 [] 0.99
+
+  Alignments for each domain:
+  == domain 1  score: 162.1 bits;  conditional E-value: 7e-51
+                      A0R3R7 487 gyrviidadhgqlqirsrtgrevtgeypqfkalaadlaehhvvldgeavaldesgvpsfgqmqnrarstrvefwafdilwldg 569
+                                 gyr++++adhg +++rsr+gr+vt+eypq++ala dla+hhvvldgeav ld sgvpsf+q qnr r trvefwafd+l+ldg
+  cath|4_0_0|1vs0B02/484-593   1 GYRLLVEADHGAVRLRSRSGRDVTAEYPQLRALAEDLADHHVVLDGEAVVLDSSGVPSFSQXQNRGRDTRVEFWAFDLLYLDG 83 
+                                 8********************************************************************************** PP
+
+                      A0R3R7 570 rsllrakysdrrkilealadggglivp 596
+                                 r+ll  +y drrk+le la++ +l vp
+  cath|4_0_0|1vs0B02/484-593  84 RALLGTRYQDRRKLLETLANATSLTVP 110
+                                 *********************999998 PP
+
+>> cath|4_0_0|1vs0A01/453-483_594-638  
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   24.0   0.1   4.2e-09   0.00012     459     487 ..       7      35 ..       4      37 .. 0.93
+   2 !   41.3   0.1   2.4e-14   7.1e-10     598     640 ..      36      78 ..      34      79 .] 0.96
+
+  Alignments for each domain:
+  == domain 1  score: 24.0 bits;  conditional E-value: 4.2e-09
+                              A0R3R7 459 edfapmlategsvakykakqwafegkwdg 487
+                                         +++ap lat g+va  ka qwafeg wd 
+  cath|4_0_0|1vs0A01/453-483_594-638   7 DNLAPXLATHGTVAGLKASQWAFEGXWDE 35 
+                                         578************************95 PP
+
+  == domain 2  score: 41.3 bits;  conditional E-value: 2.4e-14
+                              A0R3R7 598 qlpgdgpeamehvrkkrfegvvakkwdstyqpgrrssswikdk 640
+                                          lpgdg +a+   rk  +egv+ak+ ds yqpgrr +sw+kdk
+  cath|4_0_0|1vs0A01/453-483_594-638  36 LLPGDGAQAFACSRKHGWEGVIAKRRDSRYQPGRRCASWVKDK 78 
+                                         69****************************************8 PP
+
+>> cath|4_0_0|1vs0B01/453-483_594-638  
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   24.0   0.1   4.2e-09   0.00012     459     487 ..       7      35 ..       4      37 .. 0.93
+   2 !   41.3   0.1   2.4e-14   7.1e-10     598     640 ..      36      78 ..      34      79 .] 0.96
+
+  Alignments for each domain:
+  == domain 1  score: 24.0 bits;  conditional E-value: 4.2e-09
+                              A0R3R7 459 edfapmlategsvakykakqwafegkwdg 487
+                                         +++ap lat g+va  ka qwafeg wd 
+  cath|4_0_0|1vs0B01/453-483_594-638   7 DNLAPXLATHGTVAGLKASQWAFEGXWDE 35 
+                                         578************************95 PP
+
+  == domain 2  score: 41.3 bits;  conditional E-value: 2.4e-14
+                              A0R3R7 598 qlpgdgpeamehvrkkrfegvvakkwdstyqpgrrssswikdk 640
+                                          lpgdg +a+   rk  +egv+ak+ ds yqpgrr +sw+kdk
+  cath|4_0_0|1vs0B01/453-483_594-638  36 LLPGDGAQAFACSRKHGWEGVIAKRRDSRYQPGRRCASWVKDK 78 
+                                         69****************************************8 PP
+
+>> cath|4_0_0|2cfmA03/422-561  
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   31.2   0.1   2.7e-11   8.1e-07     646     758 ..       8     117 ..       2     120 .. 0.80
+
+  Alignments for each domain:
+  == domain 1  score: 31.2 bits;  conditional E-value: 2.7e-11
+                      A0R3R7 646 evviggwrqgeggrssgigalvlgipgpeglqf..vgrvgtgftekelsklkdmlkplhtdespfnapl.pkvdargvtfvrp 725
+                                 ++vi g + geg r+  +g+++lg   pe  +f  vg+vg+gft+ +l ++   lkpl   e      l pkv    vt+   
+  cath|4_0_0|2cfmA03/422-561   8 DLVIIGAEWGEGRRAHLFGSFILGAYDPETGEFleVGKVGSGFTDDDLVEFTKXLKPLIIKEEGKRVWLqPKVV-IEVTYQ-- 87 
+                                 456667789********************9888667**********************9988877776636664.446663.. PP
+
+                      A0R3R7 726 elvgevrysertsdgrlrqpswrglrpdktpde 758
+                                 e+    +y    s   lr p + +lr dk p++
+  cath|4_0_0|2cfmA03/422-561  88 EIQKSPKY---RSGFALRFPRFVALRDDKGPED 117
+                                 44444444...355689************9987 PP
+
+>> cath|4_0_0|1x9nA03/571-696  
+   #    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
+ ---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
+   1 !   21.5   0.0   2.3e-08   0.00069     494     585 ..       9     113 ..       1     124 [. 0.74
+
+  Alignments for each domain:
+  == domain 1  score: 21.5 bits;  conditional E-value: 2.3e-08
+                      A0R3R7 494 adhgqlqirsrtgrevtgeypqfkalaadlae...hhvvldgeavalde..sgvpsfgqmqnrars........trvefwafd 563
+                                  + g+++i sr  ++ tg+yp + +    +        +ld eava d     +  f  +  r r          +v ++afd
+  cath|4_0_0|1x9nA03/571-696   9 LEGGEVKIFSRNQEDNTGKYPDIISRIPKIKLpsvTSFILDTEAVAWDRekKQIQPFQVLTTRKRKevdaseiqVQVCLYAFD 91 
+                                 36799*****************98776665430114679*******9962256889998888877422222211345589*** PP
+
+                      A0R3R7 564 ilwldgrsllrakysdrrkile 585
+                                 +++l+g+sl+r   s rr++l 
+  cath|4_0_0|1x9nA03/571-696  92 LIYLNGESLVREPLSRRRQLLR 113
+                                 ******************9985 PP
+
+
+
+Internal pipeline statistics summary:
+-------------------------------------
+Query model(s):                              1  (762 nodes)
+Target sequences:                       235858  (38973128 residues searched)
+Passed MSV filter:                      6997  (0.0296662); expected 4717.2 (0.02)
+Passed bias filter:                     6066  (0.0257189); expected 4717.2 (0.02)
+Passed Vit filter:                       317  (0.00134403); expected 235.9 (0.001)
+Passed Fwd filter:                         9  (3.81586e-05); expected 2.4 (1e-05)
+Initial search space (Z):             235858  [actual number of targets]
+Domain search space  (domZ):               8  [number of targets reported over threshold]
+# CPU time: 4.10u 0.03s 00:00:04.13 Elapsed: 00:00:00.62
+# Mc/sec: 47899.23
+//
+[ok]
diff --git a/t/data/plague_yeast.bls.xml b/t/data/plague_yeast.bls.xml
deleted file mode 100644
index 42d69ca..0000000
--- a/t/data/plague_yeast.bls.xml
+++ /dev/null
@@ -1,383 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE BlastOutput PUBLIC "-//NCBI//NCBI BlastOutput/EN" "NCBI_BlastOutput.dtd"><BlastOutput>
-  <BlastOutput_program>blastp</BlastOutput_program>
-  <BlastOutput_version>blastp 2.1.3 [Apr-11-2001]</BlastOutput_version>
-  <BlastOutput_reference>~Reference: Altschul, Stephen F., Thomas L. Madden, Alejandro A. Schaffer, ~Jinghui Zhang, Zheng Zhang, Webb Miller, and David J. Lipman (1997), ~"Gapped BLAST and PSI-BLAST: a new generation of protein database search~programs",  Nucleic Acids Res. 25:3389-3402.</BlastOutput_reference>
-  <BlastOutput_db>yeast.aa</BlastOutput_db>
-  <BlastOutput_query-ID>lcl|QUERY</BlastOutput_query-ID>
-  <BlastOutput_query-def>gi|5763811|emb|CAB53164.1| putative transposase [Yersinia pestis]</BlastOutput_query-def>
-  <BlastOutput_query-len>340</BlastOutput_query-len>
-  <BlastOutput_param>
-    <Parameters>
-      <Parameters_matrix>BLOSUM62</Parameters_matrix>
-      <Parameters_expect>0.1</Parameters_expect>
-      <Parameters_include>0</Parameters_include>
-      <Parameters_sc-match>0</Parameters_sc-match>
-      <Parameters_sc-mismatch>0</Parameters_sc-mismatch>
-      <Parameters_gap-open>11</Parameters_gap-open>
-      <Parameters_gap-extend>1</Parameters_gap-extend>
-      <Parameters_filter>S</Parameters_filter>
-    </Parameters>
-  </BlastOutput_param>
-  <BlastOutput_iterations>
-    <Iteration>
-      <Iteration_iter-num>1</Iteration_iter-num>
-      <Iteration_stat>
-        <Statistics>
-          <Statistics_db-num>6298</Statistics_db-num>
-          <Statistics_db-len>2974038</Statistics_db-len>
-          <Statistics_hsp-len>0</Statistics_hsp-len>
-          <Statistics_eff-space>8.07438e+08</Statistics_eff-space>
-          <Statistics_kappa>0.041</Statistics_kappa>
-          <Statistics_lambda>0.267</Statistics_lambda>
-          <Statistics_entropy>0.14</Statistics_entropy>
-        </Statistics>
-      </Iteration_stat>
-      <Iteration_message>No hits found</Iteration_message>
-    </Iteration>
-  </BlastOutput_iterations>
-</BlastOutput>
-<?xml version="1.0"?>
-<!DOCTYPE BlastOutput PUBLIC "-//NCBI//NCBI BlastOutput/EN" "NCBI_BlastOutput.dtd"><BlastOutput>
-  <BlastOutput_program>blastp</BlastOutput_program>
-  <BlastOutput_version>blastp 2.1.3 [Apr-11-2001]</BlastOutput_version>
-  <BlastOutput_reference>~Reference: Altschul, Stephen F., Thomas L. Madden, Alejandro A. Schaffer, ~Jinghui Zhang, Zheng Zhang, Webb Miller, and David J. Lipman (1997), ~"Gapped BLAST and PSI-BLAST: a new generation of protein database search~programs",  Nucleic Acids Res. 25:3389-3402.</BlastOutput_reference>
-  <BlastOutput_db>yeast.aa</BlastOutput_db>
-  <BlastOutput_query-ID>lcl|QUERY</BlastOutput_query-ID>
-  <BlastOutput_query-def>gi|5763812|emb|CAB53165.1| putative ATP-binding protein [Yersinia pestis]</BlastOutput_query-def>
-  <BlastOutput_query-len>260</BlastOutput_query-len>
-  <BlastOutput_param>
-    <Parameters>
-      <Parameters_matrix>BLOSUM62</Parameters_matrix>
-      <Parameters_expect>0.1</Parameters_expect>
-      <Parameters_include>0</Parameters_include>
-      <Parameters_sc-match>0</Parameters_sc-match>
-      <Parameters_sc-mismatch>0</Parameters_sc-mismatch>
-      <Parameters_gap-open>11</Parameters_gap-open>
-      <Parameters_gap-extend>1</Parameters_gap-extend>
-      <Parameters_filter>S</Parameters_filter>
-    </Parameters>
-  </BlastOutput_param>
-  <BlastOutput_iterations>
-    <Iteration>
-      <Iteration_iter-num>1</Iteration_iter-num>
-      <Iteration_stat>
-        <Statistics>
-          <Statistics_db-num>6298</Statistics_db-num>
-          <Statistics_db-len>2974038</Statistics_db-len>
-          <Statistics_hsp-len>0</Statistics_hsp-len>
-          <Statistics_eff-space>5.66408e+08</Statistics_eff-space>
-          <Statistics_kappa>0.041</Statistics_kappa>
-          <Statistics_lambda>0.267</Statistics_lambda>
-          <Statistics_entropy>0.14</Statistics_entropy>
-        </Statistics>
-      </Iteration_stat>
-      <Iteration_message>No hits found</Iteration_message>
-    </Iteration>
-  </BlastOutput_iterations>
-</BlastOutput>
-<?xml version="1.0"?>
-<!DOCTYPE BlastOutput PUBLIC "-//NCBI//NCBI BlastOutput/EN" "NCBI_BlastOutput.dtd"><BlastOutput>
-  <BlastOutput_program>blastp</BlastOutput_program>
-  <BlastOutput_version>blastp 2.1.3 [Apr-11-2001]</BlastOutput_version>
-  <BlastOutput_reference>~Reference: Altschul, Stephen F., Thomas L. Madden, Alejandro A. Schaffer, ~Jinghui Zhang, Zheng Zhang, Webb Miller, and David J. Lipman (1997), ~"Gapped BLAST and PSI-BLAST: a new generation of protein database search~programs",  Nucleic Acids Res. 25:3389-3402.</BlastOutput_reference>
-  <BlastOutput_db>yeast.aa</BlastOutput_db>
-  <BlastOutput_query-ID>lcl|QUERY</BlastOutput_query-ID>
-  <BlastOutput_query-def>gi|5763813|emb|CAB53166.1| putative replication regulatory protein [Yersinia pestis]</BlastOutput_query-def>
-  <BlastOutput_query-len>64</BlastOutput_query-len>
-  <BlastOutput_param>
-    <Parameters>
-      <Parameters_matrix>BLOSUM62</Parameters_matrix>
-      <Parameters_expect>0.1</Parameters_expect>
-      <Parameters_include>0</Parameters_include>
-      <Parameters_sc-match>0</Parameters_sc-match>
-      <Parameters_sc-mismatch>0</Parameters_sc-mismatch>
-      <Parameters_gap-open>11</Parameters_gap-open>
-      <Parameters_gap-extend>1</Parameters_gap-extend>
-      <Parameters_filter>S</Parameters_filter>
-    </Parameters>
-  </BlastOutput_param>
-  <BlastOutput_iterations>
-    <Iteration>
-      <Iteration_iter-num>1</Iteration_iter-num>
-      <Iteration_stat>
-        <Statistics>
-          <Statistics_db-num>6298</Statistics_db-num>
-          <Statistics_db-len>2974038</Statistics_db-len>
-          <Statistics_hsp-len>0</Statistics_hsp-len>
-          <Statistics_eff-space>6.53308e+07</Statistics_eff-space>
-          <Statistics_kappa>0.041</Statistics_kappa>
-          <Statistics_lambda>0.267</Statistics_lambda>
-          <Statistics_entropy>0.14</Statistics_entropy>
-        </Statistics>
-      </Iteration_stat>
-      <Iteration_message>No hits found</Iteration_message>
-    </Iteration>
-  </BlastOutput_iterations>
-</BlastOutput>
-<?xml version="1.0"?>
-<!DOCTYPE BlastOutput PUBLIC "-//NCBI//NCBI BlastOutput/EN" "NCBI_BlastOutput.dtd"><BlastOutput>
-  <BlastOutput_program>blastp</BlastOutput_program>
-  <BlastOutput_version>blastp 2.1.3 [Apr-11-2001]</BlastOutput_version>
-  <BlastOutput_reference>~Reference: Altschul, Stephen F., Thomas L. Madden, Alejandro A. Schaffer, ~Jinghui Zhang, Zheng Zhang, Webb Miller, and David J. Lipman (1997), ~"Gapped BLAST and PSI-BLAST: a new generation of protein database search~programs",  Nucleic Acids Res. 25:3389-3402.</BlastOutput_reference>
-  <BlastOutput_db>yeast.aa</BlastOutput_db>
-  <BlastOutput_query-ID>lcl|QUERY</BlastOutput_query-ID>
-  <BlastOutput_query-def>gi|5763814|emb|CAB53167.1| pesticin immunity protein [Yersinia pestis]</BlastOutput_query-def>
-  <BlastOutput_query-len>141</BlastOutput_query-len>
-  <BlastOutput_param>
-    <Parameters>
-      <Parameters_matrix>BLOSUM62</Parameters_matrix>
-      <Parameters_expect>0.1</Parameters_expect>
-      <Parameters_include>0</Parameters_include>
-      <Parameters_sc-match>0</Parameters_sc-match>
-      <Parameters_sc-mismatch>0</Parameters_sc-mismatch>
-      <Parameters_gap-open>11</Parameters_gap-open>
-      <Parameters_gap-extend>1</Parameters_gap-extend>
-      <Parameters_filter>S</Parameters_filter>
-    </Parameters>
-  </BlastOutput_param>
-  <BlastOutput_iterations>
-    <Iteration>
-      <Iteration_iter-num>1</Iteration_iter-num>
-      <Iteration_stat>
-        <Statistics>
-          <Statistics_db-num>6298</Statistics_db-num>
-          <Statistics_db-len>2974038</Statistics_db-len>
-          <Statistics_hsp-len>0</Statistics_hsp-len>
-          <Statistics_eff-space>2.68243e+08</Statistics_eff-space>
-          <Statistics_kappa>0.041</Statistics_kappa>
-          <Statistics_lambda>0.267</Statistics_lambda>
-          <Statistics_entropy>0.14</Statistics_entropy>
-        </Statistics>
-      </Iteration_stat>
-      <Iteration_message>No hits found</Iteration_message>
-    </Iteration>
-  </BlastOutput_iterations>
-</BlastOutput>
-<?xml version="1.0"?>
-<!DOCTYPE BlastOutput PUBLIC "-//NCBI//NCBI BlastOutput/EN" "NCBI_BlastOutput.dtd"><BlastOutput>
-  <BlastOutput_program>blastp</BlastOutput_program>
-  <BlastOutput_version>blastp 2.1.3 [Apr-11-2001]</BlastOutput_version>
-  <BlastOutput_reference>~Reference: Altschul, Stephen F., Thomas L. Madden, Alejandro A. Schaffer, ~Jinghui Zhang, Zheng Zhang, Webb Miller, and David J. Lipman (1997), ~"Gapped BLAST and PSI-BLAST: a new generation of protein database search~programs",  Nucleic Acids Res. 25:3389-3402.</BlastOutput_reference>
-  <BlastOutput_db>yeast.aa</BlastOutput_db>
-  <BlastOutput_query-ID>lcl|QUERY</BlastOutput_query-ID>
-  <BlastOutput_query-def>gi|5763815|emb|CAB53168.1| pesticin [Yersinia pestis]</BlastOutput_query-def>
-  <BlastOutput_query-len>357</BlastOutput_query-len>
-  <BlastOutput_param>
-    <Parameters>
-      <Parameters_matrix>BLOSUM62</Parameters_matrix>
-      <Parameters_expect>0.1</Parameters_expect>
-      <Parameters_include>0</Parameters_include>
-      <Parameters_sc-match>0</Parameters_sc-match>
-      <Parameters_sc-mismatch>0</Parameters_sc-mismatch>
-      <Parameters_gap-open>11</Parameters_gap-open>
-      <Parameters_gap-extend>1</Parameters_gap-extend>
-      <Parameters_filter>S</Parameters_filter>
-    </Parameters>
-  </BlastOutput_param>
-  <BlastOutput_iterations>
-    <Iteration>
-      <Iteration_iter-num>1</Iteration_iter-num>
-      <Iteration_hits>
-        <Hit>
-          <Hit_num>1</Hit_num>
-          <Hit_id>gi|6320063|ref|NP_010143.1|</Hit_id>
-          <Hit_def>glucose permease; Rgt2p</Hit_def>
-          <Hit_accession>NP_010143</Hit_accession>
-          <Hit_len>763</Hit_len>
-          <Hit_hsps>
-            <Hsp>
-              <Hsp_num>1</Hsp_num>
-              <Hsp_bit-score>33.113</Hsp_bit-score>
-              <Hsp_score>74</Hsp_score>
-              <Hsp_evalue>0.0893657</Hsp_evalue>
-              <Hsp_query-from>106</Hsp_query-from>
-              <Hsp_query-to>233</Hsp_query-to>
-              <Hsp_hit-from>573</Hsp_hit-from>
-              <Hsp_hit-to>694</Hsp_hit-to>
-              <Hsp_pattern-from>0</Hsp_pattern-from>
-              <Hsp_pattern-to>0</Hsp_pattern-to>
-              <Hsp_query-frame>1</Hsp_query-frame>
-              <Hsp_hit-frame>1</Hsp_hit-frame>
-              <Hsp_identity>37</Hsp_identity>
-              <Hsp_positive>49</Hsp_positive>
-              <Hsp_gaps>34</Hsp_gaps>
-              <Hsp_align-len>142</Hsp_align-len>
-              <Hsp_density>0</Hsp_density>
-              <Hsp_qseq>KVYRVMVLEGTIAESIEHLDKKENEDILNNNRNRIVLADNTVINFDNISQLKEFLRRSVNIVDHDIFSSNGFEG--------------FNPTSHFPSNPSSDYFNSTGVTFGSGVDLGQRSKQDLLNDGVPQYIADRLDGYY</Hsp_qseq>
-              <Hsp_hseq>KKIRKRCLAFPISQQIEMKTNIKNAGKLDNNNSPIVQDDS-----HNIIDVDGFLENQIQSNDHMIAADKGSGSLVNIIDTAPLTSTEFKPVEHPPVNY---------------VDLGNGLGLNTYNRGPPSIISDSTDEFY</Hsp_hseq>
-              <Hsp_midline>K  R   L   I++ IE     +N   L+NN + IV  D+      NI  +  FL   +   DH I +  G                 F P  H P N                VDLG     +  N G P  I+D  D +Y</Hsp_midline>
-            </Hsp>
-          </Hit_hsps>
-        </Hit>
-      </Iteration_hits>
-      <Iteration_stat>
-        <Statistics>
-          <Statistics_db-num>6298</Statistics_db-num>
-          <Statistics_db-len>2974038</Statistics_db-len>
-          <Statistics_hsp-len>0</Statistics_hsp-len>
-          <Statistics_eff-space>8.3019e+08</Statistics_eff-space>
-          <Statistics_kappa>0.041</Statistics_kappa>
-          <Statistics_lambda>0.267</Statistics_lambda>
-          <Statistics_entropy>0.14</Statistics_entropy>
-        </Statistics>
-      </Iteration_stat>
-    </Iteration>
-  </BlastOutput_iterations>
-</BlastOutput>
-<?xml version="1.0"?>
-<!DOCTYPE BlastOutput PUBLIC "-//NCBI//NCBI BlastOutput/EN" "NCBI_BlastOutput.dtd"><BlastOutput>
-  <BlastOutput_program>blastp</BlastOutput_program>
-  <BlastOutput_version>blastp 2.1.3 [Apr-11-2001]</BlastOutput_version>
-  <BlastOutput_reference>~Reference: Altschul, Stephen F., Thomas L. Madden, Alejandro A. Schaffer, ~Jinghui Zhang, Zheng Zhang, Webb Miller, and David J. Lipman (1997), ~"Gapped BLAST and PSI-BLAST: a new generation of protein database search~programs",  Nucleic Acids Res. 25:3389-3402.</BlastOutput_reference>
-  <BlastOutput_db>yeast.aa</BlastOutput_db>
-  <BlastOutput_query-ID>lcl|QUERY</BlastOutput_query-ID>
-  <BlastOutput_query-def>gi|5763816|emb|CAB53169.1| hypothetical protein [Yersinia pestis]</BlastOutput_query-def>
-  <BlastOutput_query-len>138</BlastOutput_query-len>
-  <BlastOutput_param>
-    <Parameters>
-      <Parameters_matrix>BLOSUM62</Parameters_matrix>
-      <Parameters_expect>0.1</Parameters_expect>
-      <Parameters_include>0</Parameters_include>
-      <Parameters_sc-match>0</Parameters_sc-match>
-      <Parameters_sc-mismatch>0</Parameters_sc-mismatch>
-      <Parameters_gap-open>11</Parameters_gap-open>
-      <Parameters_gap-extend>1</Parameters_gap-extend>
-      <Parameters_filter>S</Parameters_filter>
-    </Parameters>
-  </BlastOutput_param>
-  <BlastOutput_iterations>
-    <Iteration>
-      <Iteration_iter-num>1</Iteration_iter-num>
-      <Iteration_stat>
-        <Statistics>
-          <Statistics_db-num>6298</Statistics_db-num>
-          <Statistics_db-len>2974038</Statistics_db-len>
-          <Statistics_hsp-len>0</Statistics_hsp-len>
-          <Statistics_eff-space>2.46958e+08</Statistics_eff-space>
-          <Statistics_kappa>0.041</Statistics_kappa>
-          <Statistics_lambda>0.267</Statistics_lambda>
-          <Statistics_entropy>0.14</Statistics_entropy>
-        </Statistics>
-      </Iteration_stat>
-      <Iteration_message>No hits found</Iteration_message>
-    </Iteration>
-  </BlastOutput_iterations>
-</BlastOutput>
-<?xml version="1.0"?>
-<!DOCTYPE BlastOutput PUBLIC "-//NCBI//NCBI BlastOutput/EN" "NCBI_BlastOutput.dtd"><BlastOutput>
-  <BlastOutput_program>blastp</BlastOutput_program>
-  <BlastOutput_version>blastp 2.1.3 [Apr-11-2001]</BlastOutput_version>
-  <BlastOutput_reference>~Reference: Altschul, Stephen F., Thomas L. Madden, Alejandro A. Schaffer, ~Jinghui Zhang, Zheng Zhang, Webb Miller, and David J. Lipman (1997), ~"Gapped BLAST and PSI-BLAST: a new generation of protein database search~programs",  Nucleic Acids Res. 25:3389-3402.</BlastOutput_reference>
-  <BlastOutput_db>yeast.aa</BlastOutput_db>
-  <BlastOutput_query-ID>lcl|QUERY</BlastOutput_query-ID>
-  <BlastOutput_query-def>gi|5763817|emb|CAB53170.1| coagulase/fibrinolysin precursor [Yersinia pestis]</BlastOutput_query-def>
-  <BlastOutput_query-len>312</BlastOutput_query-len>
-  <BlastOutput_param>
-    <Parameters>
-      <Parameters_matrix>BLOSUM62</Parameters_matrix>
-      <Parameters_expect>0.1</Parameters_expect>
-      <Parameters_include>0</Parameters_include>
-      <Parameters_sc-match>0</Parameters_sc-match>
-      <Parameters_sc-mismatch>0</Parameters_sc-mismatch>
-      <Parameters_gap-open>11</Parameters_gap-open>
-      <Parameters_gap-extend>1</Parameters_gap-extend>
-      <Parameters_filter>S</Parameters_filter>
-    </Parameters>
-  </BlastOutput_param>
-  <BlastOutput_iterations>
-    <Iteration>
-      <Iteration_iter-num>1</Iteration_iter-num>
-      <Iteration_stat>
-        <Statistics>
-          <Statistics_db-num>6298</Statistics_db-num>
-          <Statistics_db-len>2974038</Statistics_db-len>
-          <Statistics_hsp-len>0</Statistics_hsp-len>
-          <Statistics_eff-space>7.18398e+08</Statistics_eff-space>
-          <Statistics_kappa>0.041</Statistics_kappa>
-          <Statistics_lambda>0.267</Statistics_lambda>
-          <Statistics_entropy>0.14</Statistics_entropy>
-        </Statistics>
-      </Iteration_stat>
-      <Iteration_message>No hits found</Iteration_message>
-    </Iteration>
-  </BlastOutput_iterations>
-</BlastOutput>
-<?xml version="1.0"?>
-<!DOCTYPE BlastOutput PUBLIC "-//NCBI//NCBI BlastOutput/EN" "NCBI_BlastOutput.dtd"><BlastOutput>
-  <BlastOutput_program>blastp</BlastOutput_program>
-  <BlastOutput_version>blastp 2.1.3 [Apr-11-2001]</BlastOutput_version>
-  <BlastOutput_reference>~Reference: Altschul, Stephen F., Thomas L. Madden, Alejandro A. Schaffer, ~Jinghui Zhang, Zheng Zhang, Webb Miller, and David J. Lipman (1997), ~"Gapped BLAST and PSI-BLAST: a new generation of protein database search~programs",  Nucleic Acids Res. 25:3389-3402.</BlastOutput_reference>
-  <BlastOutput_db>yeast.aa</BlastOutput_db>
-  <BlastOutput_query-ID>lcl|QUERY</BlastOutput_query-ID>
-  <BlastOutput_query-def>gi|5763818|emb|CAB53171.1| putative transcriptional regulator [Yersinia pestis]</BlastOutput_query-def>
-  <BlastOutput_query-len>99</BlastOutput_query-len>
-  <BlastOutput_param>
-    <Parameters>
-      <Parameters_matrix>BLOSUM62</Parameters_matrix>
-      <Parameters_expect>0.1</Parameters_expect>
-      <Parameters_include>0</Parameters_include>
-      <Parameters_sc-match>0</Parameters_sc-match>
-      <Parameters_sc-mismatch>0</Parameters_sc-mismatch>
-      <Parameters_gap-open>11</Parameters_gap-open>
-      <Parameters_gap-extend>1</Parameters_gap-extend>
-      <Parameters_filter>S</Parameters_filter>
-    </Parameters>
-  </BlastOutput_param>
-  <BlastOutput_iterations>
-    <Iteration>
-      <Iteration_iter-num>1</Iteration_iter-num>
-      <Iteration_stat>
-        <Statistics>
-          <Statistics_db-num>6298</Statistics_db-num>
-          <Statistics_db-len>2974038</Statistics_db-len>
-          <Statistics_hsp-len>0</Statistics_hsp-len>
-          <Statistics_eff-space>1.39258e+08</Statistics_eff-space>
-          <Statistics_kappa>0.041</Statistics_kappa>
-          <Statistics_lambda>0.267</Statistics_lambda>
-          <Statistics_entropy>0.14</Statistics_entropy>
-        </Statistics>
-      </Iteration_stat>
-      <Iteration_message>No hits found</Iteration_message>
-    </Iteration>
-  </BlastOutput_iterations>
-</BlastOutput>
-<?xml version="1.0"?>
-<!DOCTYPE BlastOutput PUBLIC "-//NCBI//NCBI BlastOutput/EN" "NCBI_BlastOutput.dtd"><BlastOutput>
-  <BlastOutput_program>blastp</BlastOutput_program>
-  <BlastOutput_version>blastp 2.1.3 [Apr-11-2001]</BlastOutput_version>
-  <BlastOutput_reference>~Reference: Altschul, Stephen F., Thomas L. Madden, Alejandro A. Schaffer, ~Jinghui Zhang, Zheng Zhang, Webb Miller, and David J. Lipman (1997), ~"Gapped BLAST and PSI-BLAST: a new generation of protein database search~programs",  Nucleic Acids Res. 25:3389-3402.</BlastOutput_reference>
-  <BlastOutput_db>yeast.aa</BlastOutput_db>
-  <BlastOutput_query-ID>lcl|QUERY</BlastOutput_query-ID>
-  <BlastOutput_query-def>gi|5763819|emb|CAB53172.1| hypothetical protein [Yersinia pestis]</BlastOutput_query-def>
-  <BlastOutput_query-len>115</BlastOutput_query-len>
-  <BlastOutput_param>
-    <Parameters>
-      <Parameters_matrix>BLOSUM62</Parameters_matrix>
-      <Parameters_expect>0.1</Parameters_expect>
-      <Parameters_include>0</Parameters_include>
-      <Parameters_sc-match>0</Parameters_sc-match>
-      <Parameters_sc-mismatch>0</Parameters_sc-mismatch>
-      <Parameters_gap-open>11</Parameters_gap-open>
-      <Parameters_gap-extend>1</Parameters_gap-extend>
-      <Parameters_filter>S</Parameters_filter>
-    </Parameters>
-  </BlastOutput_param>
-  <BlastOutput_iterations>
-    <Iteration>
-      <Iteration_iter-num>1</Iteration_iter-num>
-      <Iteration_stat>
-        <Statistics>
-          <Statistics_db-num>6298</Statistics_db-num>
-          <Statistics_db-len>2974038</Statistics_db-len>
-          <Statistics_hsp-len>0</Statistics_hsp-len>
-          <Statistics_eff-space>2.00971e+08</Statistics_eff-space>
-          <Statistics_kappa>0.041</Statistics_kappa>
-          <Statistics_lambda>0.267</Statistics_lambda>
-          <Statistics_entropy>0.14</Statistics_entropy>
-        </Statistics>
-      </Iteration_stat>
-      <Iteration_message>No hits found</Iteration_message>
-    </Iteration>
-  </BlastOutput_iterations>
-</BlastOutput>
diff --git a/t/data/psiblast.xml b/t/data/psiblast.xml
deleted file mode 100644
index 3ed6ea9..0000000
--- a/t/data/psiblast.xml
+++ /dev/null
@@ -1,1826 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE BlastOutput PUBLIC "-//NCBI//NCBI BlastOutput/EN" "http://www.ncbi.nlm.nih.gov/dtd/NCBI_BlastOutput.dtd">
-<BlastOutput>
-  <BlastOutput_program>blastp</BlastOutput_program>
-  <BlastOutput_version>blastp 2.2.16 [Mar-25-2007]</BlastOutput_version>
-  <BlastOutput_reference>~Reference: Altschul, Stephen F., Thomas L. Madden, Alejandro A. Schaffer, ~Jinghui Zhang, Zheng Zhang, Webb Miller, and David J. Lipman (1997), ~"Gapped BLAST and PSI-BLAST: a new generation of protein database search~programs",  Nucleic Acids Res. 25:3389-3402.</BlastOutput_reference>
-  <BlastOutput_db>AL591824.faa</BlastOutput_db>
-  <BlastOutput_query-ID>lcl|QUERY</BlastOutput_query-ID>
-  <BlastOutput_query-def>gi|1373160|gb|AAB57770.1| PyrR</BlastOutput_query-def>
-  <BlastOutput_query-len>173</BlastOutput_query-len>
-  <BlastOutput_param>
-    <Parameters>
-      <Parameters_matrix>BLOSUM62</Parameters_matrix>
-      <Parameters_expect>10</Parameters_expect>
-      <Parameters_include>0.002</Parameters_include>
-      <Parameters_gap-open>11</Parameters_gap-open>
-      <Parameters_gap-extend>1</Parameters_gap-extend>
-      <Parameters_filter>F</Parameters_filter>
-    </Parameters>
-  </BlastOutput_param>
-  <BlastOutput_iterations>
-    <Iteration>
-      <Iteration_iter-num>1</Iteration_iter-num>
-      <Iteration_hits>
-        <Hit>
-          <Hit_num>1</Hit_num>
-          <Hit_id>gi|16411294|emb|CAC99918.1|</Hit_id>
-          <Hit_def>pyrR [Listeria monocytogenes]</Hit_def>
-          <Hit_accession>CAC99918</Hit_accession>
-          <Hit_len>183</Hit_len>
-          <Hit_hsps>
-            <Hsp>
-              <Hsp_num>1</Hsp_num>
-              <Hsp_bit-score>209.92</Hsp_bit-score>
-              <Hsp_score>533</Hsp_score>
-              <Hsp_evalue>4.5377e-56</Hsp_evalue>
-              <Hsp_query-from>1</Hsp_query-from>
-              <Hsp_query-to>171</Hsp_query-to>
-              <Hsp_hit-from>1</Hsp_hit-from>
-              <Hsp_hit-to>172</Hsp_hit-to>
-              <Hsp_query-frame>1</Hsp_query-frame>
-              <Hsp_hit-frame>1</Hsp_hit-frame>
-              <Hsp_identity>117</Hsp_identity>
-              <Hsp_positive>140</Hsp_positive>
-              <Hsp_gaps>1</Hsp_gaps>
-              <Hsp_align-len>172</Hsp_align-len>
-              <Hsp_qseq>MNQKAVILDEQAIRRALTRIAHEMIERNKGMNNCILVGIKTRGIYLAKRLAERIEQIEGNPVTVGEIDITLYRDDLS-KKTSNDEPLVKGADIPVDITDQKVILVDDVLYTGRTVRAGMDALVDVGRPSSIQLAVLVDRGHRELPIRADYIGKNIPTSKSEKVMVQLDEVDQ</Hsp_qseq>
-              <Hsp_hseq>MQKQVVVMDEAAIKRALTRVSYEIIERNKGTKNLALVGIKTRGIYLAERLHKRILEIEGIDVPVGDIDITLYRDDLSFKDDKTREPAVHGTNIPFDINGKKVVLVDDVLYTGRTVRAAMDALMDVGRPAQIHLAVLADRGHRELPIRADYVGKNIPTSGNERVEVRLTDVDH</Hsp_hseq>
-              <Hsp_midline>M ++ V++DE AI+RALTR+++E+IERNKG  N  LVGIKTRGIYLA+RL +RI +IEG  V VG+IDITLYRDDLS K     EP V G +IP DI  +KV+LVDDVLYTGRTVRA MDAL+DVGRP+ I LAVL DRGHRELPIRADY+GKNIPTS +E+V V+L +VD </Hsp_midline>
-            </Hsp>
-          </Hit_hsps>
-        </Hit>
-        <Hit>
-          <Hit_num>2</Hit_num>
-          <Hit_id>gi|16409584|emb|CAD00746.1|</Hit_id>
-          <Hit_def>fusion protein, N-terminal part similar to B. subtilis YacA protein, C-terminal part similar to hypoxanthine-guanine phosphoribosyltransferase [Listeria monocytogenes]</Hit_def>
-          <Hit_accession>CAD00746</Hit_accession>
-          <Hit_len>648</Hit_len>
-          <Hit_hsps>
-            <Hsp>
-              <Hsp_num>1</Hsp_num>
-              <Hsp_bit-score>37.7354</Hsp_bit-score>
-              <Hsp_score>86</Hsp_score>
-              <Hsp_evalue>0.000286309</Hsp_evalue>
-              <Hsp_query-from>4</Hsp_query-from>
-              <Hsp_query-to>155</Hsp_query-to>
-              <Hsp_hit-from>475</Hsp_hit-from>
-              <Hsp_hit-to>617</Hsp_hit-to>
-              <Hsp_query-frame>1</Hsp_query-frame>
-              <Hsp_hit-frame>1</Hsp_hit-frame>
-              <Hsp_identity>32</Hsp_identity>
-              <Hsp_positive>78</Hsp_positive>
-              <Hsp_gaps>11</Hsp_gaps>
-              <Hsp_align-len>153</Hsp_align-len>
-              <Hsp_qseq>KAVILDEQAIRRALTRIAHEMIERNKGMNNCILVGIKTRGIYLAKRLAERIEQIEGNPVTVGEIDITLYRDDLSKKTSNDEPLVKGADIPVDITDQKVILVDDVLYTGRTVRAGMDALVDVGRPSSIQLAVLVDR-GHRELPIRADYIGKNIP</Hsp_qseq>
-              <Hsp_hseq>QKVLISEDELQEKIRELGRELTTEYEG-RNPLVVGVLKGATPFMTDLLKRVDTY----LEMDFMDVSSYGN--GTVSSGEVKIIK--DLNASVEGRDVLVIEDIIDSGRTLSYLVD-LIKYRKAKSVKLVTLLDKPAGRNVEIEADYVGFVVP</Hsp_hseq>
-              <Hsp_midline>+ V++ E  ++  +  +  E+    +G  N ++VG+          L +R++      + +  +D++ Y +     +S +  ++K  D+   +  + V++++D++ +GRT+   +D L+   +  S++L  L+D+   R + I ADY+G  +P</Hsp_midline>
-            </Hsp>
-          </Hit_hsps>
-        </Hit>
-        <Hit>
-          <Hit_num>3</Hit_num>
-          <Hit_id>gi|16411285|emb|CAC99909.1|</Hit_id>
-          <Hit_def>pyrE [Listeria monocytogenes]</Hit_def>
-          <Hit_accession>CAC99909</Hit_accession>
-          <Hit_len>209</Hit_len>
-          <Hit_hsps>
-            <Hsp>
-              <Hsp_num>1</Hsp_num>
-              <Hsp_bit-score>29.261</Hsp_bit-score>
-              <Hsp_score>64</Hsp_score>
-              <Hsp_evalue>0.107059</Hsp_evalue>
-              <Hsp_query-from>32</Hsp_query-from>
-              <Hsp_query-to>125</Hsp_query-to>
-              <Hsp_hit-from>38</Hsp_hit-from>
-              <Hsp_hit-to>142</Hsp_hit-to>
-              <Hsp_query-frame>1</Hsp_query-frame>
-              <Hsp_hit-frame>1</Hsp_hit-frame>
-              <Hsp_identity>32</Hsp_identity>
-              <Hsp_positive>53</Hsp_positive>
-              <Hsp_gaps>33</Hsp_gaps>
-              <Hsp_align-len>116</Hsp_align-len>
-              <Hsp_qseq>NNCILVGIKTRGIYLAKRLAERIEQIEGNPVTVGEIDITL-----------YRDDLSKKTSNDEPLV----------KGADIPVDITD-QKVILVDDVLYTGRTVRAGMDALVDVG</Hsp_qseq>
-              <Hsp_hseq>DNRLTLGFPKVRQFIAKSLAEKIKQ------TFGEIDVVAGTATAGIPHAAWVSDLL-----DLPMVYVRSKAKEHGKGNQIEGPISKGQKVVVIEDLISTGGSSLKAVEALEEAG</Hsp_hseq>
-              <Hsp_midline>+N + +G      ++AK LAE+I+Q      T GEID+             +  DL      D P+V          KG  I   I+  QKV++++D++ TG +    ++AL + G</Hsp_midline>
-            </Hsp>
-          </Hit_hsps>
-        </Hit>
-        <Hit>
-          <Hit_num>4</Hit_num>
-          <Hit_id>gi|16409989|emb|CAC98678.1|</Hit_id>
-          <Hit_def>lmo0600 [Listeria monocytogenes]</Hit_def>
-          <Hit_accession>CAC98678</Hit_accession>
-          <Hit_len>196</Hit_len>
-          <Hit_hsps>
-            <Hsp>
-              <Hsp_num>1</Hsp_num>
-              <Hsp_bit-score>28.4906</Hsp_bit-score>
-              <Hsp_score>62</Hsp_score>
-              <Hsp_evalue>0.15199</Hsp_evalue>
-              <Hsp_query-from>123</Hsp_query-from>
-              <Hsp_query-to>149</Hsp_query-to>
-              <Hsp_hit-from>49</Hsp_hit-from>
-              <Hsp_hit-to>75</Hsp_hit-to>
-              <Hsp_query-frame>1</Hsp_query-frame>
-              <Hsp_hit-frame>1</Hsp_hit-frame>
-              <Hsp_identity>11</Hsp_identity>
-              <Hsp_positive>16</Hsp_positive>
-              <Hsp_align-len>27</Hsp_align-len>
-              <Hsp_qseq>DVGRPSSIQLAVLVDRGHRELPIRADY</Hsp_qseq>
-              <Hsp_hseq>DLGKPEEIAADIISERGIREEPTEMDY</Hsp_hseq>
-              <Hsp_midline>D+G+P  I   ++ +RG RE P   DY</Hsp_midline>
-            </Hsp>
-          </Hit_hsps>
-        </Hit>
-        <Hit>
-          <Hit_num>5</Hit_num>
-          <Hit_id>gi|16411556|emb|CAD00164.1|</Hit_id>
-          <Hit_def>lmo2086 [Listeria monocytogenes]</Hit_def>
-          <Hit_accession>CAD00164</Hit_accession>
-          <Hit_len>423</Hit_len>
-          <Hit_hsps>
-            <Hsp>
-              <Hsp_num>1</Hsp_num>
-              <Hsp_bit-score>25.7942</Hsp_bit-score>
-              <Hsp_score>55</Hsp_score>
-              <Hsp_evalue>1.0709</Hsp_evalue>
-              <Hsp_query-from>49</Hsp_query-from>
-              <Hsp_query-to>82</Hsp_query-to>
-              <Hsp_hit-from>281</Hsp_hit-from>
-              <Hsp_hit-to>313</Hsp_hit-to>
-              <Hsp_query-frame>1</Hsp_query-frame>
-              <Hsp_hit-frame>1</Hsp_hit-frame>
-              <Hsp_identity>14</Hsp_identity>
-              <Hsp_positive>21</Hsp_positive>
-              <Hsp_gaps>1</Hsp_gaps>
-              <Hsp_align-len>34</Hsp_align-len>
-              <Hsp_qseq>RLAERIEQIEGNPVTVGEIDITLYRDDLSKKTSN</Hsp_qseq>
-              <Hsp_hseq>KMAE-IENIEGNETLFYEKITCLYKEIMAYKTTN</Hsp_hseq>
-              <Hsp_midline>++AE IE IEGN     E    LY++ ++ KT+N</Hsp_midline>
-            </Hsp>
-          </Hit_hsps>
-        </Hit>
-        <Hit>
-          <Hit_num>6</Hit_num>
-          <Hit_id>gi|16412165|emb|CAD00878.1|</Hit_id>
-          <Hit_def>lmo2665 [Listeria monocytogenes]</Hit_def>
-          <Hit_accession>CAD00878</Hit_accession>
-          <Hit_len>423</Hit_len>
-          <Hit_hsps>
-            <Hsp>
-              <Hsp_num>1</Hsp_num>
-              <Hsp_bit-score>25.409</Hsp_bit-score>
-              <Hsp_score>54</Hsp_score>
-              <Hsp_evalue>1.43409</Hsp_evalue>
-              <Hsp_query-from>109</Hsp_query-from>
-              <Hsp_query-to>136</Hsp_query-to>
-              <Hsp_hit-from>289</Hsp_hit-from>
-              <Hsp_hit-to>316</Hsp_hit-to>
-              <Hsp_query-frame>1</Hsp_query-frame>
-              <Hsp_hit-frame>1</Hsp_hit-frame>
-              <Hsp_identity>8</Hsp_identity>
-              <Hsp_positive>18</Hsp_positive>
-              <Hsp_align-len>28</Hsp_align-len>
-              <Hsp_qseq>YTGRTVRAGMDALVDVGRPSSIQLAVLV</Hsp_qseq>
-              <Hsp_hseq>FKGRELYIGLDAALSIGHPANISTGLIL</Hsp_hseq>
-              <Hsp_midline>+ GR +  G+DA + +G P++I   +++</Hsp_midline>
-            </Hsp>
-          </Hit_hsps>
-        </Hit>
-        <Hit>
-          <Hit_num>7</Hit_num>
-          <Hit_id>gi|16412220|emb|CAD00933.1|</Hit_id>
-          <Hit_def>lmo2720 [Listeria monocytogenes]</Hit_def>
-          <Hit_accession>CAD00933</Hit_accession>
-          <Hit_len>525</Hit_len>
-          <Hit_hsps>
-            <Hsp>
-              <Hsp_num>1</Hsp_num>
-              <Hsp_bit-score>25.409</Hsp_bit-score>
-              <Hsp_score>54</Hsp_score>
-              <Hsp_evalue>1.49518</Hsp_evalue>
-              <Hsp_query-from>58</Hsp_query-from>
-              <Hsp_query-to>74</Hsp_query-to>
-              <Hsp_hit-from>355</Hsp_hit-from>
-              <Hsp_hit-to>372</Hsp_hit-to>
-              <Hsp_query-frame>1</Hsp_query-frame>
-              <Hsp_hit-frame>1</Hsp_hit-frame>
-              <Hsp_identity>12</Hsp_identity>
-              <Hsp_positive>14</Hsp_positive>
-              <Hsp_gaps>1</Hsp_gaps>
-              <Hsp_align-len>18</Hsp_align-len>
-              <Hsp_qseq>EGNPVTVGEI-DITLYRD</Hsp_qseq>
-              <Hsp_hseq>DGNPVGVGEIGDIAMRRD</Hsp_hseq>
-              <Hsp_midline>+GNPV VGEI DI + RD</Hsp_midline>
-            </Hsp>
-          </Hit_hsps>
-        </Hit>
-        <Hit>
-          <Hit_num>8</Hit_num>
-          <Hit_id>gi|16411665|emb|CAD00273.1|</Hit_id>
-          <Hit_def>lmo2195 [Listeria monocytogenes]</Hit_def>
-          <Hit_accession>CAD00273</Hit_accession>
-          <Hit_len>309</Hit_len>
-          <Hit_hsps>
-            <Hsp>
-              <Hsp_num>1</Hsp_num>
-              <Hsp_bit-score>25.0238</Hsp_bit-score>
-              <Hsp_score>53</Hsp_score>
-              <Hsp_evalue>2.07022</Hsp_evalue>
-              <Hsp_query-from>76</Hsp_query-from>
-              <Hsp_query-to>109</Hsp_query-to>
-              <Hsp_hit-from>262</Hsp_hit-from>
-              <Hsp_hit-to>295</Hsp_hit-to>
-              <Hsp_query-frame>1</Hsp_query-frame>
-              <Hsp_hit-frame>1</Hsp_hit-frame>
-              <Hsp_identity>13</Hsp_identity>
-              <Hsp_positive>19</Hsp_positive>
-              <Hsp_align-len>34</Hsp_align-len>
-              <Hsp_qseq>LSKKTSNDEPLVKGADIPVDITDQKVILVDDVLY</Hsp_qseq>
-              <Hsp_hseq>VSSIQTNDYPVIMGTTILFAVMLVFVILVVDILY</Hsp_hseq>
-              <Hsp_midline>+S   +ND P++ G  I   +    VILV D+LY</Hsp_midline>
-            </Hsp>
-          </Hit_hsps>
-        </Hit>
-        <Hit>
-          <Hit_num>9</Hit_num>
-          <Hit_id>gi|16412026|emb|CAD00616.1|</Hit_id>
-          <Hit_def>upp [Listeria monocytogenes]</Hit_def>
-          <Hit_accession>CAD00616</Hit_accession>
-          <Hit_len>209</Hit_len>
-          <Hit_hsps>
-            <Hsp>
-              <Hsp_num>1</Hsp_num>
-              <Hsp_bit-score>24.6386</Hsp_bit-score>
-              <Hsp_score>52</Hsp_score>
-              <Hsp_evalue>2.21313</Hsp_evalue>
-              <Hsp_query-from>69</Hsp_query-from>
-              <Hsp_query-to>125</Hsp_query-to>
-              <Hsp_hit-from>100</Hsp_hit-from>
-              <Hsp_hit-to>151</Hsp_hit-to>
-              <Hsp_query-frame>1</Hsp_query-frame>
-              <Hsp_hit-frame>1</Hsp_hit-frame>
-              <Hsp_identity>17</Hsp_identity>
-              <Hsp_positive>27</Hsp_positive>
-              <Hsp_gaps>5</Hsp_gaps>
-              <Hsp_align-len>57</Hsp_align-len>
-              <Hsp_qseq>ITLYRDDLSKKTSNDEPLVKGADIPVDITDQKVILVDDVLYTGRTVRAGMDALVDVG</Hsp_qseq>
-              <Hsp_hseq>VGLYRDH-----DTLEPVEYFVKLPSDVEERLFIVVDPMLATGGSAIMAIDCLKKRG</Hsp_hseq>
-              <Hsp_midline>+ LYRD         EP+     +P D+ ++  I+VD +L TG +    +D L   G</Hsp_midline>
-            </Hsp>
-          </Hit_hsps>
-        </Hit>
-        <Hit>
-          <Hit_num>10</Hit_num>
-          <Hit_id>gi|16410953|emb|CAC99602.1|</Hit_id>
-          <Hit_def>apt [Listeria monocytogenes]</Hit_def>
-          <Hit_accession>CAC99602</Hit_accession>
-          <Hit_len>173</Hit_len>
-          <Hit_hsps>
-            <Hsp>
-              <Hsp_num>1</Hsp_num>
-              <Hsp_bit-score>24.6386</Hsp_bit-score>
-              <Hsp_score>52</Hsp_score>
-              <Hsp_evalue>2.25037</Hsp_evalue>
-              <Hsp_query-from>99</Hsp_query-from>
-              <Hsp_query-to>125</Hsp_query-to>
-              <Hsp_hit-from>115</Hsp_hit-from>
-              <Hsp_hit-to>141</Hsp_hit-to>
-              <Hsp_query-frame>1</Hsp_query-frame>
-              <Hsp_hit-frame>1</Hsp_hit-frame>
-              <Hsp_identity>10</Hsp_identity>
-              <Hsp_positive>19</Hsp_positive>
-              <Hsp_align-len>27</Hsp_align-len>
-              <Hsp_qseq>QKVILVDDVLYTGRTVRAGMDALVDVG</Hsp_qseq>
-              <Hsp_hseq>QRVLITDDLLATGGTIEATIKLVEELG</Hsp_hseq>
-              <Hsp_midline>Q+V++ DD+L TG T+ A +  + ++G</Hsp_midline>
-            </Hsp>
-          </Hit_hsps>
-        </Hit>
-        <Hit>
-          <Hit_num>11</Hit_num>
-          <Hit_id>gi|16410386|emb|CAC99062.1|</Hit_id>
-          <Hit_def>lmo0984 [Listeria monocytogenes]</Hit_def>
-          <Hit_accession>CAC99062</Hit_accession>
-          <Hit_len>151</Hit_len>
-          <Hit_hsps>
-            <Hsp>
-              <Hsp_num>1</Hsp_num>
-              <Hsp_bit-score>24.2534</Hsp_bit-score>
-              <Hsp_score>51</Hsp_score>
-              <Hsp_evalue>2.91465</Hsp_evalue>
-              <Hsp_query-from>58</Hsp_query-from>
-              <Hsp_query-to>95</Hsp_query-to>
-              <Hsp_hit-from>7</Hsp_hit-from>
-              <Hsp_hit-to>40</Hsp_hit-to>
-              <Hsp_query-frame>1</Hsp_query-frame>
-              <Hsp_hit-frame>1</Hsp_hit-frame>
-              <Hsp_identity>12</Hsp_identity>
-              <Hsp_positive>22</Hsp_positive>
-              <Hsp_gaps>4</Hsp_gaps>
-              <Hsp_align-len>38</Hsp_align-len>
-              <Hsp_qseq>EGNPVTVGEIDITLYRDDLSKKTSNDEPLVKGADIPVD</Hsp_qseq>
-              <Hsp_hseq>QNNNLAVGEVDVYCHPDNLEEVTN----IVMGIDEPTE</Hsp_hseq>
-              <Hsp_midline>+ N + VGE+D+  + D+L + T+    +V G D P +</Hsp_midline>
-            </Hsp>
-          </Hit_hsps>
-        </Hit>
-        <Hit>
-          <Hit_num>12</Hit_num>
-          <Hit_id>gi|16409884|emb|CAC98587.1|</Hit_id>
-          <Hit_def>lmo0508 [Listeria monocytogenes]</Hit_def>
-          <Hit_accession>CAC98587</Hit_accession>
-          <Hit_len>423</Hit_len>
-          <Hit_hsps>
-            <Hsp>
-              <Hsp_num>1</Hsp_num>
-              <Hsp_bit-score>23.8682</Hsp_bit-score>
-              <Hsp_score>50</Hsp_score>
-              <Hsp_evalue>3.83855</Hsp_evalue>
-              <Hsp_query-from>109</Hsp_query-from>
-              <Hsp_query-to>136</Hsp_query-to>
-              <Hsp_hit-from>288</Hsp_hit-from>
-              <Hsp_hit-to>315</Hsp_hit-to>
-              <Hsp_query-frame>1</Hsp_query-frame>
-              <Hsp_hit-frame>1</Hsp_hit-frame>
-              <Hsp_identity>9</Hsp_identity>
-              <Hsp_positive>17</Hsp_positive>
-              <Hsp_align-len>28</Hsp_align-len>
-              <Hsp_qseq>YTGRTVRAGMDALVDVGRPSSIQLAVLV</Hsp_qseq>
-              <Hsp_hseq>FPGRELFIGLDSAVGIGHPFVLSLGLLM</Hsp_hseq>
-              <Hsp_midline>+ GR +  G+D+ V +G P  + L +L+</Hsp_midline>
-            </Hsp>
-          </Hit_hsps>
-        </Hit>
-        <Hit>
-          <Hit_num>13</Hit_num>
-          <Hit_id>gi|16409885|emb|CAC98588.1|</Hit_id>
-          <Hit_def>prs [Listeria monocytogenes]</Hit_def>
-          <Hit_accession>CAC98588</Hit_accession>
-          <Hit_len>311</Hit_len>
-          <Hit_hsps>
-            <Hsp>
-              <Hsp_num>1</Hsp_num>
-              <Hsp_bit-score>23.8682</Hsp_bit-score>
-              <Hsp_score>50</Hsp_score>
-              <Hsp_evalue>4.1379</Hsp_evalue>
-              <Hsp_query-from>16</Hsp_query-from>
-              <Hsp_query-to>133</Hsp_query-to>
-              <Hsp_hit-from>148</Hsp_hit-from>
-              <Hsp_hit-to>247</Hsp_hit-to>
-              <Hsp_query-frame>1</Hsp_query-frame>
-              <Hsp_hit-frame>1</Hsp_hit-frame>
-              <Hsp_identity>28</Hsp_identity>
-              <Hsp_positive>51</Hsp_positive>
-              <Hsp_gaps>18</Hsp_gaps>
-              <Hsp_align-len>118</Hsp_align-len>
-              <Hsp_qseq>ALTRIAHEMIERNKGMNNCILVGIKTRGIYLAKRLAERIEQIEGNPVTVGEIDITLYRDDLSKKTSNDEPLVKGADIPVDITDQKVILVDDVLYTGRTVRAGMDALVDVGRPSSIQLA</Hsp_qseq>
-              <Hsp_hseq>AIPLIGDYLIE-NYGEKDVVVVAPDHSGVVRARRIADRLNA----PIAI-----------LNRKPRPHEDEI--MSVIGDVKGKVAIVVDDIIDTGVRATTSADILLEKGAVEVIACA</Hsp_hseq>
-              <Hsp_midline>A+  I   +IE N G  + ++V     G+  A+R+A+R+      P+ +           L++K    E  +    +  D+  +  I+VDD++ TG       D L++ G    I  A</Hsp_midline>
-            </Hsp>
-          </Hit_hsps>
-        </Hit>
-        <Hit>
-          <Hit_num>14</Hit_num>
-          <Hit_id>gi|16411021|emb|CAC99670.1|</Hit_id>
-          <Hit_def>lmo1592 [Listeria monocytogenes]</Hit_def>
-          <Hit_accession>CAC99670</Hit_accession>
-          <Hit_len>403</Hit_len>
-          <Hit_hsps>
-            <Hsp>
-              <Hsp_num>1</Hsp_num>
-              <Hsp_bit-score>23.483</Hsp_bit-score>
-              <Hsp_score>49</Hsp_score>
-              <Hsp_evalue>5.97338</Hsp_evalue>
-              <Hsp_query-from>114</Hsp_query-from>
-              <Hsp_query-to>154</Hsp_query-to>
-              <Hsp_hit-from>88</Hsp_hit-from>
-              <Hsp_hit-to>128</Hsp_hit-to>
-              <Hsp_query-frame>1</Hsp_query-frame>
-              <Hsp_hit-frame>1</Hsp_hit-frame>
-              <Hsp_identity>13</Hsp_identity>
-              <Hsp_positive>19</Hsp_positive>
-              <Hsp_align-len>41</Hsp_align-len>
-              <Hsp_qseq>VRAGMDALVDVGRPSSIQLAVLVDRGHRELPIRADYIGKNI</Hsp_qseq>
-              <Hsp_hseq>VKAAALALVQDAHEENGTFKVAARRSHREFPLDSNEINQEI</Hsp_hseq>
-              <Hsp_midline>V+A   ALV      +    V   R HRE P+ ++ I + I</Hsp_midline>
-            </Hsp>
-          </Hit_hsps>
-        </Hit>
-        <Hit>
-          <Hit_num>15</Hit_num>
-          <Hit_id>gi|16409435|emb|CAC98291.1|</Hit_id>
-          <Hit_def>lmo0076 [Listeria monocytogenes]</Hit_def>
-          <Hit_accession>CAC98291</Hit_accession>
-          <Hit_len>350</Hit_len>
-          <Hit_hsps>
-            <Hsp>
-              <Hsp_num>1</Hsp_num>
-              <Hsp_bit-score>22.7126</Hsp_bit-score>
-              <Hsp_score>47</Hsp_score>
-              <Hsp_evalue>8.62304</Hsp_evalue>
-              <Hsp_query-from>14</Hsp_query-from>
-              <Hsp_query-to>44</Hsp_query-to>
-              <Hsp_hit-from>5</Hsp_hit-from>
-              <Hsp_hit-to>35</Hsp_hit-to>
-              <Hsp_query-frame>1</Hsp_query-frame>
-              <Hsp_hit-frame>1</Hsp_hit-frame>
-              <Hsp_identity>9</Hsp_identity>
-              <Hsp_positive>16</Hsp_positive>
-              <Hsp_align-len>31</Hsp_align-len>
-              <Hsp_qseq>RRALTRIAHEMIERNKGMNNCILVGIKTRGI</Hsp_qseq>
-              <Hsp_hseq>QRDIDKYYDMLVEKNSNYEGVFFVGVKTTGI</Hsp_hseq>
-              <Hsp_midline>+R + +    ++E+N        VG+KT GI</Hsp_midline>
-            </Hsp>
-          </Hit_hsps>
-        </Hit>
-        <Hit>
-          <Hit_num>16</Hit_num>
-          <Hit_id>gi|16410603|emb|CAC99265.1|</Hit_id>
-          <Hit_def>lmo1187 [Listeria monocytogenes]</Hit_def>
-          <Hit_accession>CAC99265</Hit_accession>
-          <Hit_len>147</Hit_len>
-          <Hit_hsps>
-            <Hsp>
-              <Hsp_num>1</Hsp_num>
-              <Hsp_bit-score>22.7126</Hsp_bit-score>
-              <Hsp_score>47</Hsp_score>
-              <Hsp_evalue>9.06572</Hsp_evalue>
-              <Hsp_query-from>106</Hsp_query-from>
-              <Hsp_query-to>134</Hsp_query-to>
-              <Hsp_hit-from>102</Hsp_hit-from>
-              <Hsp_hit-to>130</Hsp_hit-to>
-              <Hsp_query-frame>1</Hsp_query-frame>
-              <Hsp_hit-frame>1</Hsp_hit-frame>
-              <Hsp_identity>11</Hsp_identity>
-              <Hsp_positive>18</Hsp_positive>
-              <Hsp_align-len>29</Hsp_align-len>
-              <Hsp_qseq>DVLYTGRTVRAGMDALVDVGRPSSIQLAV</Hsp_qseq>
-              <Hsp_hseq>DVVIDGRTVSAGPGEIIFIPKGSQIKFSV</Hsp_hseq>
-              <Hsp_midline>DV+  GRTV AG   ++ + + S I+ +V</Hsp_midline>
-            </Hsp>
-          </Hit_hsps>
-        </Hit>
-      </Iteration_hits>
-      <Iteration_stat>
-        <Statistics>
-          <Statistics_db-num>2846</Statistics_db-num>
-          <Statistics_db-len>870878</Statistics_db-len>
-          <Statistics_hsp-len>75</Statistics_hsp-len>
-          <Statistics_eff-space>6.44279e+07</Statistics_eff-space>
-          <Statistics_kappa>0.041</Statistics_kappa>
-          <Statistics_lambda>0.267</Statistics_lambda>
-          <Statistics_entropy>0.14</Statistics_entropy>
-        </Statistics>
-      </Iteration_stat>
-    </Iteration>
-    <Iteration>
-      <Iteration_iter-num>2</Iteration_iter-num>
-      <Iteration_hits>
-        <Hit>
-          <Hit_num>1</Hit_num>
-          <Hit_id>gi|16411294|emb|CAC99918.1|</Hit_id>
-          <Hit_def>pyrR [Listeria monocytogenes]</Hit_def>
-          <Hit_accession>CAC99918</Hit_accession>
-          <Hit_len>183</Hit_len>
-          <Hit_hsps>
-            <Hsp>
-              <Hsp_num>1</Hsp_num>
-              <Hsp_bit-score>260.954</Hsp_bit-score>
-              <Hsp_score>666</Hsp_score>
-              <Hsp_evalue>1.96714e-71</Hsp_evalue>
-              <Hsp_query-from>1</Hsp_query-from>
-              <Hsp_query-to>171</Hsp_query-to>
-              <Hsp_hit-from>1</Hsp_hit-from>
-              <Hsp_hit-to>172</Hsp_hit-to>
-              <Hsp_query-frame>1</Hsp_query-frame>
-              <Hsp_hit-frame>1</Hsp_hit-frame>
-              <Hsp_identity>117</Hsp_identity>
-              <Hsp_positive>140</Hsp_positive>
-              <Hsp_gaps>1</Hsp_gaps>
-              <Hsp_align-len>172</Hsp_align-len>
-              <Hsp_qseq>MNQKAVILDEQAIRRALTRIAHEMIERNKGMNNCILVGIKTRGIYLAKRLAERIEQIEGNPVTVGEIDITLYRDDLS-KKTSNDEPLVKGADIPVDITDQKVILVDDVLYTGRTVRAGMDALVDVGRPSSIQLAVLVDRGHRELPIRADYIGKNIPTSKSEKVMVQLDEVDQ</Hsp_qseq>
-              <Hsp_hseq>MQKQVVVMDEAAIKRALTRVSYEIIERNKGTKNLALVGIKTRGIYLAERLHKRILEIEGIDVPVGDIDITLYRDDLSFKDDKTREPAVHGTNIPFDINGKKVVLVDDVLYTGRTVRAAMDALMDVGRPAQIHLAVLADRGHRELPIRADYVGKNIPTSGNERVEVRLTDVDH</Hsp_hseq>
-              <Hsp_midline>M ++ V++DE AI+RALTR+++E+IERNKG  N  LVGIKTRGIYLA+RL +RI +IEG  V VG+IDITLYRDDLS K     EP V G +IP DI  +KV+LVDDVLYTGRTVRA MDAL+DVGRP+ I LAVL DRGHRELPIRADY+GKNIPTS +E+V V+L +VD </Hsp_midline>
-            </Hsp>
-          </Hit_hsps>
-        </Hit>
-        <Hit>
-          <Hit_num>2</Hit_num>
-          <Hit_id>gi|16409584|emb|CAD00746.1|</Hit_id>
-          <Hit_def>fusion protein, N-terminal part similar to B. subtilis YacA protein, C-terminal part similar to hypoxanthine-guanine phosphoribosyltransferase [Listeria monocytogenes]</Hit_def>
-          <Hit_accession>CAD00746</Hit_accession>
-          <Hit_len>648</Hit_len>
-          <Hit_hsps>
-            <Hsp>
-              <Hsp_num>1</Hsp_num>
-              <Hsp_bit-score>196.241</Hsp_bit-score>
-              <Hsp_score>498</Hsp_score>
-              <Hsp_evalue>5.16352e-52</Hsp_evalue>
-              <Hsp_query-from>4</Hsp_query-from>
-              <Hsp_query-to>155</Hsp_query-to>
-              <Hsp_hit-from>475</Hsp_hit-from>
-              <Hsp_hit-to>617</Hsp_hit-to>
-              <Hsp_query-frame>1</Hsp_query-frame>
-              <Hsp_hit-frame>1</Hsp_hit-frame>
-              <Hsp_identity>32</Hsp_identity>
-              <Hsp_positive>78</Hsp_positive>
-              <Hsp_gaps>11</Hsp_gaps>
-              <Hsp_align-len>153</Hsp_align-len>
-              <Hsp_qseq>KAVILDEQAIRRALTRIAHEMIERNKGMNNCILVGIKTRGIYLAKRLAERIEQIEGNPVTVGEIDITLYRDDLSKKTSNDEPLVKGADIPVDITDQKVILVDDVLYTGRTVRAGMDALVDVGRPSSIQLAVLVDR-GHRELPIRADYIGKNIP</Hsp_qseq>
-              <Hsp_hseq>QKVLISEDELQEKIRELGRELTTEYEG-RNPLVVGVLKGATPFMTDLLKRVDTY----LEMDFMDVSSYGN--GTVSSGEVKIIK--DLNASVEGRDVLVIEDIIDSGRTLSYLVD-LIKYRKAKSVKLVTLLDKPAGRNVEIEADYVGFVVP</Hsp_hseq>
-              <Hsp_midline>+ V++ E  ++  +  +  E+    +G  N ++VG+          L +R++      + +  +D++ Y +     +S +  ++K  D+   +  + V++++D++ +GRT+   +D L+   +  S++L  L+D+   R + I ADY+G  +P</Hsp_midline>
-            </Hsp>
-          </Hit_hsps>
-        </Hit>
-        <Hit>
-          <Hit_num>3</Hit_num>
-          <Hit_id>gi|16411285|emb|CAC99909.1|</Hit_id>
-          <Hit_def>pyrE [Listeria monocytogenes]</Hit_def>
-          <Hit_accession>CAC99909</Hit_accession>
-          <Hit_len>209</Hit_len>
-          <Hit_hsps>
-            <Hsp>
-              <Hsp_num>1</Hsp_num>
-              <Hsp_bit-score>30.2198</Hsp_bit-score>
-              <Hsp_score>67</Hsp_score>
-              <Hsp_evalue>0.0528281</Hsp_evalue>
-              <Hsp_query-from>33</Hsp_query-from>
-              <Hsp_query-to>125</Hsp_query-to>
-              <Hsp_hit-from>39</Hsp_hit-from>
-              <Hsp_hit-to>142</Hsp_hit-to>
-              <Hsp_query-frame>1</Hsp_query-frame>
-              <Hsp_hit-frame>1</Hsp_hit-frame>
-              <Hsp_identity>31</Hsp_identity>
-              <Hsp_positive>51</Hsp_positive>
-              <Hsp_gaps>33</Hsp_gaps>
-              <Hsp_align-len>115</Hsp_align-len>
-              <Hsp_qseq>NCILVGIKTRGIYLAKRLAERIEQIEGNPVTVGEIDITLYRDDLSKKTSN-----------DEPLV----------KGADIPVDIT-DQKVILVDDVLYTGRTVRAGMDALVDVG</Hsp_qseq>
-              <Hsp_hseq>NRLTLGFPKVRQFIAKSLAEKIKQ------TFGEIDVVA-----GTATAGIPHAAWVSDLLDLPMVYVRSKAKEHGKGNQIEGPISKGQKVVVIEDLISTGGSSLKAVEALEEAG</Hsp_hseq>
-              <Hsp_midline>N + +G      ++AK LAE+I+Q      T GEID+          T+            D P+V          KG  I   I+  QKV++++D++ TG +    ++AL + G</Hsp_midline>
-            </Hsp>
-          </Hit_hsps>
-        </Hit>
-        <Hit>
-          <Hit_num>4</Hit_num>
-          <Hit_id>gi|16412026|emb|CAD00616.1|</Hit_id>
-          <Hit_def>upp [Listeria monocytogenes]</Hit_def>
-          <Hit_accession>CAD00616</Hit_accession>
-          <Hit_len>209</Hit_len>
-          <Hit_hsps>
-            <Hsp>
-              <Hsp_num>1</Hsp_num>
-              <Hsp_bit-score>29.0642</Hsp_bit-score>
-              <Hsp_score>64</Hsp_score>
-              <Hsp_evalue>0.115741</Hsp_evalue>
-              <Hsp_query-from>69</Hsp_query-from>
-              <Hsp_query-to>136</Hsp_query-to>
-              <Hsp_hit-from>100</Hsp_hit-from>
-              <Hsp_hit-to>161</Hsp_hit-to>
-              <Hsp_query-frame>1</Hsp_query-frame>
-              <Hsp_hit-frame>1</Hsp_hit-frame>
-              <Hsp_identity>19</Hsp_identity>
-              <Hsp_positive>32</Hsp_positive>
-              <Hsp_gaps>6</Hsp_gaps>
-              <Hsp_align-len>68</Hsp_align-len>
-              <Hsp_qseq>ITLYRDDLSKKTSNDEPLVKGADIPVDITDQKVILVDDVLYTGRTVRAGMDALVDVGRPSSIQLAVLV</Hsp_qseq>
-              <Hsp_hseq>VGLYRDH-----DTLEPVEYFVKLPSDVEERLFIVVDPMLATGGSAIMAIDCLKKRG-ARNMKFMCLV</Hsp_hseq>
-              <Hsp_midline>+ LYRD         EP+     +P D+ ++  I+VD +L TG +    +D L   G   +++   LV</Hsp_midline>
-            </Hsp>
-          </Hit_hsps>
-        </Hit>
-        <Hit>
-          <Hit_num>5</Hit_num>
-          <Hit_id>gi|16409885|emb|CAC98588.1|</Hit_id>
-          <Hit_def>prs [Listeria monocytogenes]</Hit_def>
-          <Hit_accession>CAC98588</Hit_accession>
-          <Hit_len>311</Hit_len>
-          <Hit_hsps>
-            <Hsp>
-              <Hsp_num>1</Hsp_num>
-              <Hsp_bit-score>29.0642</Hsp_bit-score>
-              <Hsp_score>64</Hsp_score>
-              <Hsp_evalue>0.126867</Hsp_evalue>
-              <Hsp_query-from>95</Hsp_query-from>
-              <Hsp_query-to>134</Hsp_query-to>
-              <Hsp_hit-from>209</Hsp_hit-from>
-              <Hsp_hit-to>248</Hsp_hit-to>
-              <Hsp_query-frame>1</Hsp_query-frame>
-              <Hsp_hit-frame>1</Hsp_hit-frame>
-              <Hsp_identity>12</Hsp_identity>
-              <Hsp_positive>19</Hsp_positive>
-              <Hsp_align-len>40</Hsp_align-len>
-              <Hsp_qseq>DITDQKVILVDDVLYTGRTVRAGMDALVDVGRPSSIQLAV</Hsp_qseq>
-              <Hsp_hseq>DVKGKVAIVVDDIIDTGVRATTSADILLEKGAVEVIACAT</Hsp_hseq>
-              <Hsp_midline>D+  +  I+VDD++ TG       D L++ G    I  A </Hsp_midline>
-            </Hsp>
-          </Hit_hsps>
-        </Hit>
-        <Hit>
-          <Hit_num>6</Hit_num>
-          <Hit_id>gi|16409989|emb|CAC98678.1|</Hit_id>
-          <Hit_def>lmo0600 [Listeria monocytogenes]</Hit_def>
-          <Hit_accession>CAC98678</Hit_accession>
-          <Hit_len>196</Hit_len>
-          <Hit_hsps>
-            <Hsp>
-              <Hsp_num>1</Hsp_num>
-              <Hsp_bit-score>26.7531</Hsp_bit-score>
-              <Hsp_score>58</Hsp_score>
-              <Hsp_evalue>0.555562</Hsp_evalue>
-              <Hsp_query-from>123</Hsp_query-from>
-              <Hsp_query-to>149</Hsp_query-to>
-              <Hsp_hit-from>49</Hsp_hit-from>
-              <Hsp_hit-to>75</Hsp_hit-to>
-              <Hsp_query-frame>1</Hsp_query-frame>
-              <Hsp_hit-frame>1</Hsp_hit-frame>
-              <Hsp_identity>11</Hsp_identity>
-              <Hsp_positive>16</Hsp_positive>
-              <Hsp_align-len>27</Hsp_align-len>
-              <Hsp_qseq>DVGRPSSIQLAVLVDRGHRELPIRADY</Hsp_qseq>
-              <Hsp_hseq>DLGKPEEIAADIISERGIREEPTEMDY</Hsp_hseq>
-              <Hsp_midline>D+G+P  I   ++ +RG RE P   DY</Hsp_midline>
-            </Hsp>
-          </Hit_hsps>
-        </Hit>
-        <Hit>
-          <Hit_num>7</Hit_num>
-          <Hit_id>gi|16411222|emb|CAC99846.1|</Hit_id>
-          <Hit_def>glutamine phosphoribosylpyrophosphate amidotransferase [Listeria monocytogenes]</Hit_def>
-          <Hit_accession>CAC99846</Hit_accession>
-          <Hit_len>475</Hit_len>
-          <Hit_hsps>
-            <Hsp>
-              <Hsp_num>1</Hsp_num>
-              <Hsp_bit-score>26.3679</Hsp_bit-score>
-              <Hsp_score>57</Hsp_score>
-              <Hsp_evalue>0.678735</Hsp_evalue>
-              <Hsp_query-from>96</Hsp_query-from>
-              <Hsp_query-to>132</Hsp_query-to>
-              <Hsp_hit-from>346</Hsp_hit-from>
-              <Hsp_hit-to>381</Hsp_hit-to>
-              <Hsp_query-frame>1</Hsp_query-frame>
-              <Hsp_hit-frame>1</Hsp_hit-frame>
-              <Hsp_identity>7</Hsp_identity>
-              <Hsp_positive>20</Hsp_positive>
-              <Hsp_gaps>1</Hsp_gaps>
-              <Hsp_align-len>37</Hsp_align-len>
-              <Hsp_qseq>ITDQKVILVDDVLYTGRTVRAGMDALVDVGRPSSIQL</Hsp_qseq>
-              <Hsp_hseq>VEGKRVVMIDDSIVRGTTSKRIVQLLREAG-AAEVHV</Hsp_hseq>
-              <Hsp_midline>+  ++V+++DD +  G T +  +  L + G  + + +</Hsp_midline>
-            </Hsp>
-          </Hit_hsps>
-        </Hit>
-        <Hit>
-          <Hit_num>8</Hit_num>
-          <Hit_id>gi|16409865|emb|CAC98568.1|</Hit_id>
-          <Hit_def>lmo0489 [Listeria monocytogenes]</Hit_def>
-          <Hit_accession>CAC98568</Hit_accession>
-          <Hit_len>664</Hit_len>
-          <Hit_hsps>
-            <Hsp>
-              <Hsp_num>1</Hsp_num>
-              <Hsp_bit-score>25.5975</Hsp_bit-score>
-              <Hsp_score>55</Hsp_score>
-              <Hsp_evalue>1.22738</Hsp_evalue>
-              <Hsp_query-from>112</Hsp_query-from>
-              <Hsp_query-to>157</Hsp_query-to>
-              <Hsp_hit-from>612</Hsp_hit-from>
-              <Hsp_hit-to>657</Hsp_hit-to>
-              <Hsp_query-frame>1</Hsp_query-frame>
-              <Hsp_hit-frame>1</Hsp_hit-frame>
-              <Hsp_identity>11</Hsp_identity>
-              <Hsp_positive>19</Hsp_positive>
-              <Hsp_align-len>46</Hsp_align-len>
-              <Hsp_qseq>RTVRAGMDALVDVGRPSSIQLAVLVDRGHRELPIRADYIGKNIPTS</Hsp_qseq>
-              <Hsp_hseq>RPERPLMEELAAYGKEKQIEIVNIGDSAATRKILEGVREGRNILTT</Hsp_hseq>
-              <Hsp_midline>R  R  M+ L   G+   I++  + D       +     G+NI T+</Hsp_midline>
-            </Hsp>
-          </Hit_hsps>
-        </Hit>
-        <Hit>
-          <Hit_num>9</Hit_num>
-          <Hit_id>gi|16411665|emb|CAD00273.1|</Hit_id>
-          <Hit_def>lmo2195 [Listeria monocytogenes]</Hit_def>
-          <Hit_accession>CAD00273</Hit_accession>
-          <Hit_len>309</Hit_len>
-          <Hit_hsps>
-            <Hsp>
-              <Hsp_num>1</Hsp_num>
-              <Hsp_bit-score>25.5975</Hsp_bit-score>
-              <Hsp_score>55</Hsp_score>
-              <Hsp_evalue>1.25849</Hsp_evalue>
-              <Hsp_query-from>76</Hsp_query-from>
-              <Hsp_query-to>109</Hsp_query-to>
-              <Hsp_hit-from>262</Hsp_hit-from>
-              <Hsp_hit-to>295</Hsp_hit-to>
-              <Hsp_query-frame>1</Hsp_query-frame>
-              <Hsp_hit-frame>1</Hsp_hit-frame>
-              <Hsp_identity>13</Hsp_identity>
-              <Hsp_positive>19</Hsp_positive>
-              <Hsp_align-len>34</Hsp_align-len>
-              <Hsp_qseq>LSKKTSNDEPLVKGADIPVDITDQKVILVDDVLY</Hsp_qseq>
-              <Hsp_hseq>VSSIQTNDYPVIMGTTILFAVMLVFVILVVDILY</Hsp_hseq>
-              <Hsp_midline>+S   +ND P++ G  I   +    VILV D+LY</Hsp_midline>
-            </Hsp>
-          </Hit_hsps>
-        </Hit>
-        <Hit>
-          <Hit_num>10</Hit_num>
-          <Hit_id>gi|16409905|emb|CAC98608.1|</Hit_id>
-          <Hit_def>lmo0529 [Listeria monocytogenes]</Hit_def>
-          <Hit_accession>CAC98608</Hit_accession>
-          <Hit_len>416</Hit_len>
-          <Hit_hsps>
-            <Hsp>
-              <Hsp_num>1</Hsp_num>
-              <Hsp_bit-score>24.8271</Hsp_bit-score>
-              <Hsp_score>53</Hsp_score>
-              <Hsp_evalue>2.18278</Hsp_evalue>
-              <Hsp_query-from>36</Hsp_query-from>
-              <Hsp_query-to>106</Hsp_query-to>
-              <Hsp_hit-from>23</Hsp_hit-from>
-              <Hsp_hit-to>88</Hsp_hit-to>
-              <Hsp_query-frame>1</Hsp_query-frame>
-              <Hsp_hit-frame>1</Hsp_hit-frame>
-              <Hsp_identity>16</Hsp_identity>
-              <Hsp_positive>31</Hsp_positive>
-              <Hsp_gaps>5</Hsp_gaps>
-              <Hsp_align-len>71</Hsp_align-len>
-              <Hsp_qseq>LVGIKTRGIYLAKRLAERIEQIEGNPVTVGEIDITLYRDDLSKKTSNDEPLVKGADIPVDITDQKVILVDD</Hsp_qseq>
-              <Hsp_hseq>IVLIVAGYVYYLKNEARKVPEI---PVEVPFVSVMVPAHNEGKVIVKTVESLLAFDYPVD--RYEIIVIND</Hsp_hseq>
-              <Hsp_midline>+V I    +Y  K  A ++ +I   PV V  + + +   +  K        +   D PVD    ++I+++D</Hsp_midline>
-            </Hsp>
-          </Hit_hsps>
-        </Hit>
-        <Hit>
-          <Hit_num>11</Hit_num>
-          <Hit_id>gi|16410603|emb|CAC99265.1|</Hit_id>
-          <Hit_def>lmo1187 [Listeria monocytogenes]</Hit_def>
-          <Hit_accession>CAC99265</Hit_accession>
-          <Hit_len>147</Hit_len>
-          <Hit_hsps>
-            <Hsp>
-              <Hsp_num>1</Hsp_num>
-              <Hsp_bit-score>24.4419</Hsp_bit-score>
-              <Hsp_score>52</Hsp_score>
-              <Hsp_evalue>3.07312</Hsp_evalue>
-              <Hsp_query-from>96</Hsp_query-from>
-              <Hsp_query-to>134</Hsp_query-to>
-              <Hsp_hit-from>97</Hsp_hit-from>
-              <Hsp_hit-to>130</Hsp_hit-to>
-              <Hsp_query-frame>1</Hsp_query-frame>
-              <Hsp_hit-frame>1</Hsp_hit-frame>
-              <Hsp_identity>11</Hsp_identity>
-              <Hsp_positive>21</Hsp_positive>
-              <Hsp_gaps>5</Hsp_gaps>
-              <Hsp_align-len>39</Hsp_align-len>
-              <Hsp_qseq>ITDQKVILVDDVLYTGRTVRAGMDALVDVGRPSSIQLAV</Hsp_qseq>
-              <Hsp_hseq>IEGRLDVVID-----GRTVSAGPGEIIFIPKGSQIKFSV</Hsp_hseq>
-              <Hsp_midline>I  +  +++D     GRTV AG   ++ + + S I+ +V</Hsp_midline>
-            </Hsp>
-          </Hit_hsps>
-        </Hit>
-        <Hit>
-          <Hit_num>12</Hit_num>
-          <Hit_id>gi|16410224|emb|CAC98913.1|</Hit_id>
-          <Hit_def>putative peptidoglycan bound protein (LPXTG motif) [Listeria monocytogenes]</Hit_def>
-          <Hit_accession>CAC98913</Hit_accession>
-          <Hit_len>334</Hit_len>
-          <Hit_hsps>
-            <Hsp>
-              <Hsp_num>1</Hsp_num>
-              <Hsp_bit-score>24.4419</Hsp_bit-score>
-              <Hsp_score>52</Hsp_score>
-              <Hsp_evalue>3.17742</Hsp_evalue>
-              <Hsp_query-from>80</Hsp_query-from>
-              <Hsp_query-to>125</Hsp_query-to>
-              <Hsp_hit-from>66</Hsp_hit-from>
-              <Hsp_hit-to>104</Hsp_hit-to>
-              <Hsp_query-frame>1</Hsp_query-frame>
-              <Hsp_hit-frame>1</Hsp_hit-frame>
-              <Hsp_identity>14</Hsp_identity>
-              <Hsp_positive>19</Hsp_positive>
-              <Hsp_gaps>7</Hsp_gaps>
-              <Hsp_align-len>46</Hsp_align-len>
-              <Hsp_qseq>TSNDEPLVKGADIPVDITDQKVILVDDVLYTGRTVRAGMDALVDVG</Hsp_qseq>
-              <Hsp_hseq>TPKDIPGYKLREIPHNATG-------NITDTGIIVRYIYDKTIDVR</Hsp_hseq>
-              <Hsp_midline>T  D P  K  +IP + T        ++  TG  VR   D  +DV </Hsp_midline>
-            </Hsp>
-          </Hit_hsps>
-        </Hit>
-        <Hit>
-          <Hit_num>13</Hit_num>
-          <Hit_id>gi|16412154|emb|CAD00867.1|</Hit_id>
-          <Hit_def>fus [Listeria monocytogenes]</Hit_def>
-          <Hit_accession>CAD00867</Hit_accession>
-          <Hit_len>695</Hit_len>
-          <Hit_hsps>
-            <Hsp>
-              <Hsp_num>1</Hsp_num>
-              <Hsp_bit-score>24.0567</Hsp_bit-score>
-              <Hsp_score>51</Hsp_score>
-              <Hsp_evalue>3.42521</Hsp_evalue>
-              <Hsp_query-from>110</Hsp_query-from>
-              <Hsp_query-to>148</Hsp_query-to>
-              <Hsp_hit-from>443</Hsp_hit-from>
-              <Hsp_hit-to>472</Hsp_hit-to>
-              <Hsp_query-frame>1</Hsp_query-frame>
-              <Hsp_hit-frame>1</Hsp_hit-frame>
-              <Hsp_identity>14</Hsp_identity>
-              <Hsp_positive>20</Hsp_positive>
-              <Hsp_gaps>9</Hsp_gaps>
-              <Hsp_align-len>39</Hsp_align-len>
-              <Hsp_qseq>TGRTVRAGMDALVDVGRPSSIQLAVLVDRGHRELPIRAD</Hsp_qseq>
-              <Hsp_hseq>TGQTLISGMGEL---------HLDILVDRMRREFRVEAN</Hsp_hseq>
-              <Hsp_midline>TG+T+ +GM  L          L +LVDR  RE  + A+</Hsp_midline>
-            </Hsp>
-          </Hit_hsps>
-        </Hit>
-        <Hit>
-          <Hit_num>14</Hit_num>
-          <Hit_id>gi|16409857|emb|CAC98560.1|</Hit_id>
-          <Hit_def>lmo0481 [Listeria monocytogenes]</Hit_def>
-          <Hit_accession>CAC98560</Hit_accession>
-          <Hit_len>566</Hit_len>
-          <Hit_hsps>
-            <Hsp>
-              <Hsp_num>1</Hsp_num>
-              <Hsp_bit-score>24.0567</Hsp_bit-score>
-              <Hsp_score>51</Hsp_score>
-              <Hsp_evalue>3.84962</Hsp_evalue>
-              <Hsp_query-from>8</Hsp_query-from>
-              <Hsp_query-to>68</Hsp_query-to>
-              <Hsp_hit-from>25</Hsp_hit-from>
-              <Hsp_hit-to>92</Hsp_hit-to>
-              <Hsp_query-frame>1</Hsp_query-frame>
-              <Hsp_hit-frame>1</Hsp_hit-frame>
-              <Hsp_identity>14</Hsp_identity>
-              <Hsp_positive>21</Hsp_positive>
-              <Hsp_gaps>7</Hsp_gaps>
-              <Hsp_align-len>68</Hsp_align-len>
-              <Hsp_qseq>LDEQAIRRALTRIAHEMIERNKGMNNCILVG----IKTRGIYLAKRLA---ERIEQIEGNPVTVGEID</Hsp_qseq>
-              <Hsp_hseq>ISEQKAAEKERAVDEAIKARYYGDKQVYFVGGGIASLAGAVYLIRDANFDGKNIHIIEGMHILGGSND</Hsp_hseq>
-              <Hsp_midline>+ EQ        +   +  R  G      VG         +YL +      + I  IEG  +  G  D</Hsp_midline>
-            </Hsp>
-          </Hit_hsps>
-        </Hit>
-        <Hit>
-          <Hit_num>15</Hit_num>
-          <Hit_id>gi|16411180|emb|CAC99804.1|</Hit_id>
-          <Hit_def>lmo1726 [Listeria monocytogenes]</Hit_def>
-          <Hit_accession>CAC99804</Hit_accession>
-          <Hit_len>327</Hit_len>
-          <Hit_hsps>
-            <Hsp>
-              <Hsp_num>1</Hsp_num>
-              <Hsp_bit-score>23.6715</Hsp_bit-score>
-              <Hsp_score>50</Hsp_score>
-              <Hsp_evalue>4.74252</Hsp_evalue>
-              <Hsp_query-from>36</Hsp_query-from>
-              <Hsp_query-to>108</Hsp_query-to>
-              <Hsp_hit-from>190</Hsp_hit-from>
-              <Hsp_hit-to>251</Hsp_hit-to>
-              <Hsp_query-frame>1</Hsp_query-frame>
-              <Hsp_hit-frame>1</Hsp_hit-frame>
-              <Hsp_identity>15</Hsp_identity>
-              <Hsp_positive>29</Hsp_positive>
-              <Hsp_gaps>19</Hsp_gaps>
-              <Hsp_align-len>77</Hsp_align-len>
-              <Hsp_qseq>LVGIKTRGIYLAKRLAERIEQIEGNPVTVGEIDITLYRDDLSKKTSNDEPLVKGAD----IPVDITDQKVILVDDVL</Hsp_qseq>
-              <Hsp_hseq>LFGEPVKATYFATKLPTGVDGLGPIILEYPTFNIT---------------IIQGKNSQSFLPSEIYGQKGTLIVDPL</Hsp_hseq>
-              <Hsp_midline>L G   +  Y A +L   ++ +    +     +IT               +++G +    +P +I  QK  L+ D L</Hsp_midline>
-            </Hsp>
-          </Hit_hsps>
-        </Hit>
-        <Hit>
-          <Hit_num>16</Hit_num>
-          <Hit_id>gi|16411460|emb|CAD00085.1|</Hit_id>
-          <Hit_def>lmo2007 [Listeria monocytogenes]</Hit_def>
-          <Hit_accession>CAD00085</Hit_accession>
-          <Hit_len>485</Hit_len>
-          <Hit_hsps>
-            <Hsp>
-              <Hsp_num>1</Hsp_num>
-              <Hsp_bit-score>22.9011</Hsp_bit-score>
-              <Hsp_score>48</Hsp_score>
-              <Hsp_evalue>7.56717</Hsp_evalue>
-              <Hsp_query-from>47</Hsp_query-from>
-              <Hsp_query-to>114</Hsp_query-to>
-              <Hsp_hit-from>51</Hsp_hit-from>
-              <Hsp_hit-to>137</Hsp_hit-to>
-              <Hsp_query-frame>1</Hsp_query-frame>
-              <Hsp_hit-frame>1</Hsp_hit-frame>
-              <Hsp_identity>19</Hsp_identity>
-              <Hsp_positive>35</Hsp_positive>
-              <Hsp_gaps>19</Hsp_gaps>
-              <Hsp_align-len>87</Hsp_align-len>
-              <Hsp_qseq>AKRLAERIEQIEGNPVTVGEIDITLYRDDLSKK-TSNDEPLV-------------KGADIP----VDITDQKVIL-VDDVLYTGRTV</Hsp_qseq>
-              <Hsp_hseq>MKEVNKYTEEKIGVKVEMTQIDWGDYGKRMQTVINSGENFDIAYSAAGEFVSYSQKGAFLPLNKYLDKEGKKMKAELNDVLWEGATI</Hsp_hseq>
-              <Hsp_midline> K + +  E+  G  V + +ID   Y   +     S +   +             KGA +P    +D   +K+   ++DVL+ G T+</Hsp_midline>
-            </Hsp>
-          </Hit_hsps>
-        </Hit>
-      </Iteration_hits>
-      <Iteration_stat>
-        <Statistics>
-          <Statistics_db-num>2846</Statistics_db-num>
-          <Statistics_db-len>870878</Statistics_db-len>
-          <Statistics_hsp-len>75</Statistics_hsp-len>
-          <Statistics_eff-space>6.44279e+07</Statistics_eff-space>
-          <Statistics_kappa>0.0475563</Statistics_kappa>
-          <Statistics_lambda>0.267</Statistics_lambda>
-          <Statistics_entropy>0.14</Statistics_entropy>
-        </Statistics>
-      </Iteration_stat>
-      <Iteration_message>CONVERGED</Iteration_message>
-    </Iteration>
-  </BlastOutput_iterations>
-</BlastOutput>
-<?xml version="1.0"?>
-<!DOCTYPE BlastOutput PUBLIC "-//NCBI//NCBI BlastOutput/EN" "http://www.ncbi.nlm.nih.gov/dtd/NCBI_BlastOutput.dtd">
-<BlastOutput>
-  <BlastOutput_program>blastp</BlastOutput_program>
-  <BlastOutput_version>blastp 2.2.16 [Mar-25-2007]</BlastOutput_version>
-  <BlastOutput_reference>~Reference: Altschul, Stephen F., Thomas L. Madden, Alejandro A. Schaffer, ~Jinghui Zhang, Zheng Zhang, Webb Miller, and David J. Lipman (1997), ~"Gapped BLAST and PSI-BLAST: a new generation of protein database search~programs",  Nucleic Acids Res. 25:3389-3402.</BlastOutput_reference>
-  <BlastOutput_db>AL591824.faa</BlastOutput_db>
-  <BlastOutput_query-ID>lcl|QUERY</BlastOutput_query-ID>
-  <BlastOutput_query-def>gi|154350371|gb|ABS72450.1| DnaN [Bacillus amyloliquefaciens FZB42]</BlastOutput_query-def>
-  <BlastOutput_query-len>378</BlastOutput_query-len>
-  <BlastOutput_param>
-    <Parameters>
-      <Parameters_matrix>BLOSUM62</Parameters_matrix>
-      <Parameters_expect>10</Parameters_expect>
-      <Parameters_include>0.002</Parameters_include>
-      <Parameters_gap-open>11</Parameters_gap-open>
-      <Parameters_gap-extend>1</Parameters_gap-extend>
-      <Parameters_filter>F</Parameters_filter>
-    </Parameters>
-  </BlastOutput_param>
-  <BlastOutput_iterations>
-    <Iteration>
-      <Iteration_iter-num>1</Iteration_iter-num>
-      <Iteration_hits>
-        <Hit>
-          <Hit_num>1</Hit_num>
-          <Hit_id>gi|16409361|emb|CAC98217.1|</Hit_id>
-          <Hit_def>DNA polymerase III, beta chain [Listeria monocytogenes]</Hit_def>
-          <Hit_accession>CAC98217</Hit_accession>
-          <Hit_len>381</Hit_len>
-          <Hit_hsps>
-            <Hsp>
-              <Hsp_num>1</Hsp_num>
-              <Hsp_bit-score>420.239</Hsp_bit-score>
-              <Hsp_score>1079</Hsp_score>
-              <Hsp_evalue>5.57178e-119</Hsp_evalue>
-              <Hsp_query-from>1</Hsp_query-from>
-              <Hsp_query-to>378</Hsp_query-to>
-              <Hsp_hit-from>1</Hsp_hit-from>
-              <Hsp_hit-to>381</Hsp_hit-to>
-              <Hsp_query-frame>1</Hsp_query-frame>
-              <Hsp_hit-frame>1</Hsp_hit-frame>
-              <Hsp_identity>221</Hsp_identity>
-              <Hsp_positive>293</Hsp_positive>
-              <Hsp_gaps>3</Hsp_gaps>
-              <Hsp_align-len>381</Hsp_align-len>
-              <Hsp_qseq>MKFTIQKDRLVESVQDVLKAVSSRTTIPILTGIKIVASDEGVSFTGSDSDISIESFIPKEDDDKEIVTIDQPGSIVLQARFFSEIVKKLPMATVEIEVQNQYLTIIRSGKAEFNLNGLDADEYPHLPQIEEHHAIQIPTDLLKNLIRQTVFAVSASETRPILTGVNWKVENGELLCTATDSHRLALRKAKLDIPEDSSYNVVIPGKSLTELSKILDDNQELVDIVITETQVLFKAKNVLFFSRLLDGNYPDTTSLIPQESKTEIVVNTKEFLQAIDRASLLAREGRNNVVKLSAKPADSLEISSNSPEIGKVVEAVLADQIDGEELNISFSPKYMMDALKVLEGADIRISFTGAMRPFLIR---TPNDETIVQLILPVRTY</Hsp_qseq>
-              <Hsp_hseq>MKFVIERDRLVQAVNEVTRAISARTTIPILTGIKIVVNDEGVTLTGSDSDISIEAFIPLIENDEVIVEVESFGGIVLQSKYFGDIVRRLPEENVEIEVTSNYQTNISSGQASFTLNGLDPMEYPKLPEVTDGKTIKIPINVLKNIVRQTVFAVSAIEVRPVLTGVNWIIKENKLSAVATDSHRLALREIPLETDIDEEYNIVIPGKSLSELNKLLDDASESIEMTLANNQILFKLKDLLFYSRLLEGSYPDTSRLIPTDTKSELVINSKAFLQAIDRASLLARENRNNVIKLMTLENGQVEVSSNSPEVGNVSENVFSQSFTGEEIKISFNGKYMMDALRAFEGDDIQISFSGTMRPFVLRPKDAANPNEILQLITPVRTY</Hsp_hseq>
-              <Hsp_midline>MKF I++DRLV++V +V +A+S+RTTIPILTGIKIV +DEGV+ TGSDSDISIE+FIP  ++D+ IV ++  G IVLQ+++F +IV++LP   VEIEV + Y T I SG+A F LNGLD  EYP LP++ +   I+IP ++LKN++RQTVFAVSA E RP+LTGVNW ++  +L   ATDSHRLALR+  L+   D  YN+VIPGKSL+EL+K+LDD  E +++ +   Q+LFK K++LF+SRLL+G+YPDT+ LIP ++K+E+V+N+K FLQAIDRASLLARE RNNV+KL       +E+SSNSPE+G V E V +    GEE+ ISF+ KYMMDAL+  EG DI+ISF+G MRPF++R     N   I+QLI PVRTY</Hsp_midline>
-            </Hsp>
-          </Hit_hsps>
-        </Hit>
-        <Hit>
-          <Hit_num>2</Hit_num>
-          <Hit_id>gi|16409959|emb|CAC98662.1|</Hit_id>
-          <Hit_def>lmo0583 [Listeria monocytogenes]</Hit_def>
-          <Hit_accession>CAC98662</Hit_accession>
-          <Hit_len>776</Hit_len>
-          <Hit_hsps>
-            <Hsp>
-              <Hsp_num>1</Hsp_num>
-              <Hsp_bit-score>32.7278</Hsp_bit-score>
-              <Hsp_score>73</Hsp_score>
-              <Hsp_evalue>0.0242028</Hsp_evalue>
-              <Hsp_query-from>63</Hsp_query-from>
-              <Hsp_query-to>181</Hsp_query-to>
-              <Hsp_hit-from>304</Hsp_hit-from>
-              <Hsp_hit-to>432</Hsp_hit-to>
-              <Hsp_query-frame>1</Hsp_query-frame>
-              <Hsp_hit-frame>1</Hsp_hit-frame>
-              <Hsp_identity>31</Hsp_identity>
-              <Hsp_positive>52</Hsp_positive>
-              <Hsp_gaps>10</Hsp_gaps>
-              <Hsp_align-len>129</Hsp_align-len>
-              <Hsp_qseq>DKEIVTIDQPGSIVLQARFFSEIVKKLPMATVEIEVQNQYLTI--------IRSGKAEFNLNGLDADEYPHLPQIEEHHAIQIPTDLLKNL--IRQTVFAVSASETRPILTGVNWKVENGELLCTATDS</Hsp_qseq>
-              <Hsp_hseq>DDEVLIIDPHTGRALPGRRFNDGLHQAIEAKEGVEVKEESRTLATITIQNYFRMYKKISGMTGTAKTEEEEFRQIYNMDVVVIPTNLRVNREDMQDDIFYTKKEKGRAIVYEVSWRYEKGQPTLIGTSS</Hsp_hseq>
-              <Hsp_midline>D E++ ID      L  R F++ + +   A   +EV+ +  T+         R  K    + G    E     QI     + IPT+L  N   ++  +F     + R I+  V+W+ E G+     T S</Hsp_midline>
-            </Hsp>
-          </Hit_hsps>
-        </Hit>
-        <Hit>
-          <Hit_num>3</Hit_num>
-          <Hit_id>gi|16410942|emb|CAC99591.1|</Hit_id>
-          <Hit_def>lmo1513 [Listeria monocytogenes]</Hit_def>
-          <Hit_accession>CAC99591</Hit_accession>
-          <Hit_len>382</Hit_len>
-          <Hit_hsps>
-            <Hsp>
-              <Hsp_num>1</Hsp_num>
-              <Hsp_bit-score>28.8758</Hsp_bit-score>
-              <Hsp_score>63</Hsp_score>
-              <Hsp_evalue>0.340848</Hsp_evalue>
-              <Hsp_query-from>96</Hsp_query-from>
-              <Hsp_query-to>126</Hsp_query-to>
-              <Hsp_hit-from>266</Hsp_hit-from>
-              <Hsp_hit-to>296</Hsp_hit-to>
-              <Hsp_query-frame>1</Hsp_query-frame>
-              <Hsp_hit-frame>1</Hsp_hit-frame>
-              <Hsp_identity>12</Hsp_identity>
-              <Hsp_positive>19</Hsp_positive>
-              <Hsp_align-len>31</Hsp_align-len>
-              <Hsp_qseq>IEVQNQYLTIIRSGKAEFNLNGLDADEYPHL</Hsp_qseq>
-              <Hsp_hseq>ISFKKRMAEIWRSAELDFEVNGLEADTLPHV</Hsp_hseq>
-              <Hsp_midline>I  + +   I RS + +F +NGL+AD  PH+</Hsp_midline>
-            </Hsp>
-          </Hit_hsps>
-        </Hit>
-        <Hit>
-          <Hit_num>4</Hit_num>
-          <Hit_id>gi|16409922|emb|CAC98625.1|</Hit_id>
-          <Hit_def>lmo0546 [Listeria monocytogenes]</Hit_def>
-          <Hit_accession>CAC98625</Hit_accession>
-          <Hit_len>416</Hit_len>
-          <Hit_hsps>
-            <Hsp>
-              <Hsp_num>1</Hsp_num>
-              <Hsp_bit-score>28.4906</Hsp_bit-score>
-              <Hsp_score>62</Hsp_score>
-              <Hsp_evalue>0.513003</Hsp_evalue>
-              <Hsp_query-from>270</Hsp_query-from>
-              <Hsp_query-to>319</Hsp_query-to>
-              <Hsp_hit-from>155</Hsp_hit-from>
-              <Hsp_hit-to>203</Hsp_hit-to>
-              <Hsp_query-frame>1</Hsp_query-frame>
-              <Hsp_hit-frame>1</Hsp_hit-frame>
-              <Hsp_identity>15</Hsp_identity>
-              <Hsp_positive>29</Hsp_positive>
-              <Hsp_gaps>1</Hsp_gaps>
-              <Hsp_align-len>50</Hsp_align-len>
-              <Hsp_qseq>EFLQAIDRASLLAREGRNNVVKLSAKPADSLEISSNSPEIGKVVEAVLAD</Hsp_qseq>
-              <Hsp_hseq>EFSKSMGMEVLVAGKGKNNKLKISANP-DSCQVEADGKNMASHMLAAFQD</Hsp_hseq>
-              <Hsp_midline>EF +++    L+A +G+NN +K+SA P DS ++ ++   +   + A   D</Hsp_midline>
-            </Hsp>
-          </Hit_hsps>
-        </Hit>
-        <Hit>
-          <Hit_num>5</Hit_num>
-          <Hit_id>gi|16411998|emb|CAD00588.1|</Hit_id>
-          <Hit_def>translocase binding subunit (ATPase) [Listeria monocytogenes]</Hit_def>
-          <Hit_accession>CAD00588</Hit_accession>
-          <Hit_len>837</Hit_len>
-          <Hit_hsps>
-            <Hsp>
-              <Hsp_num>1</Hsp_num>
-              <Hsp_bit-score>26.5646</Hsp_bit-score>
-              <Hsp_score>57</Hsp_score>
-              <Hsp_evalue>1.85422</Hsp_evalue>
-              <Hsp_query-from>63</Hsp_query-from>
-              <Hsp_query-to>140</Hsp_query-to>
-              <Hsp_hit-from>310</Hsp_hit-from>
-              <Hsp_hit-to>395</Hsp_hit-to>
-              <Hsp_query-frame>1</Hsp_query-frame>
-              <Hsp_hit-frame>1</Hsp_hit-frame>
-              <Hsp_identity>21</Hsp_identity>
-              <Hsp_positive>36</Hsp_positive>
-              <Hsp_gaps>8</Hsp_gaps>
-              <Hsp_align-len>86</Hsp_align-len>
-              <Hsp_qseq>DKEIVTIDQPGSIVLQARFFSEIVKKLPMATVEIEVQNQYLTI--------IRSGKAEFNLNGLDADEYPHLPQIEEHHAIQIPTD</Hsp_qseq>
-              <Hsp_hseq>DDEVLIVDQFTGRIMKGRRFSEGLHQALEAKEGVTIQNESKTMATITFQNYFRMYKKLAGMTGTAKTEEEEFRDIYNMRVIEIPTN</Hsp_hseq>
-              <Hsp_midline>D E++ +DQ    +++ R FSE + +   A   + +QN+  T+         R  K    + G    E      I     I+IPT+</Hsp_midline>
-            </Hsp>
-          </Hit_hsps>
-        </Hit>
-        <Hit>
-          <Hit_num>6</Hit_num>
-          <Hit_id>gi|16411204|emb|CAC99828.1|</Hit_id>
-          <Hit_def>lmo1750 [Listeria monocytogenes]</Hit_def>
-          <Hit_accession>CAC99828</Hit_accession>
-          <Hit_len>184</Hit_len>
-          <Hit_hsps>
-            <Hsp>
-              <Hsp_num>1</Hsp_num>
-              <Hsp_bit-score>26.5646</Hsp_bit-score>
-              <Hsp_score>57</Hsp_score>
-              <Hsp_evalue>2.11904</Hsp_evalue>
-              <Hsp_query-from>308</Hsp_query-from>
-              <Hsp_query-to>340</Hsp_query-to>
-              <Hsp_hit-from>49</Hsp_hit-from>
-              <Hsp_hit-to>80</Hsp_hit-to>
-              <Hsp_query-frame>1</Hsp_query-frame>
-              <Hsp_hit-frame>1</Hsp_hit-frame>
-              <Hsp_identity>13</Hsp_identity>
-              <Hsp_positive>22</Hsp_positive>
-              <Hsp_gaps>1</Hsp_gaps>
-              <Hsp_align-len>33</Hsp_align-len>
-              <Hsp_qseq>EIGKVVEAVLADQIDGEELNISFSPKYMMDALK</Hsp_qseq>
-              <Hsp_hseq>EVLRRLEEYFSDKSD-QGLNLSSFPKYMMETVK</Hsp_hseq>
-              <Hsp_midline>E+ + +E   +D+ D + LN+S  PKYMM+ +K</Hsp_midline>
-            </Hsp>
-          </Hit_hsps>
-        </Hit>
-        <Hit>
-          <Hit_num>7</Hit_num>
-          <Hit_id>gi|16410207|emb|CAC98896.1|</Hit_id>
-          <Hit_def>lmo0818 [Listeria monocytogenes]</Hit_def>
-          <Hit_accession>CAC98896</Hit_accession>
-          <Hit_len>876</Hit_len>
-          <Hit_hsps>
-            <Hsp>
-              <Hsp_num>1</Hsp_num>
-              <Hsp_bit-score>25.7942</Hsp_bit-score>
-              <Hsp_score>55</Hsp_score>
-              <Hsp_evalue>2.98338</Hsp_evalue>
-              <Hsp_query-from>106</Hsp_query-from>
-              <Hsp_query-to>167</Hsp_query-to>
-              <Hsp_hit-from>28</Hsp_hit-from>
-              <Hsp_hit-to>82</Hsp_hit-to>
-              <Hsp_query-frame>1</Hsp_query-frame>
-              <Hsp_hit-frame>1</Hsp_hit-frame>
-              <Hsp_identity>18</Hsp_identity>
-              <Hsp_positive>27</Hsp_positive>
-              <Hsp_gaps>7</Hsp_gaps>
-              <Hsp_align-len>62</Hsp_align-len>
-              <Hsp_qseq>IRSGKAEFNLNGLDADEYPHLPQIEEHHAIQIPTDLLKNLIRQTVFAVSASETRPILTGVNW</Hsp_qseq>
-              <Hsp_hseq>VKQKHAEFGTNEFEEGKKESLLQKIGHHLVEITTIVL-------LFAAAISAYLAITTGYGW</Hsp_hseq>
-              <Hsp_midline>++   AEF  N  +  +   L Q   HH ++I T +L       +FA + S    I TG  W</Hsp_midline>
-            </Hsp>
-          </Hit_hsps>
-        </Hit>
-        <Hit>
-          <Hit_num>8</Hit_num>
-          <Hit_id>gi|16411261|emb|CAC99885.1|</Hit_id>
-          <Hit_def>fabG [Listeria monocytogenes]</Hit_def>
-          <Hit_accession>CAC99885</Hit_accession>
-          <Hit_len>247</Hit_len>
-          <Hit_hsps>
-            <Hsp>
-              <Hsp_num>1</Hsp_num>
-              <Hsp_bit-score>25.7942</Hsp_bit-score>
-              <Hsp_score>55</Hsp_score>
-              <Hsp_evalue>3.27016</Hsp_evalue>
-              <Hsp_query-from>276</Hsp_query-from>
-              <Hsp_query-to>366</Hsp_query-to>
-              <Hsp_hit-from>20</Hsp_hit-from>
-              <Hsp_hit-to>106</Hsp_hit-to>
-              <Hsp_query-frame>1</Hsp_query-frame>
-              <Hsp_hit-frame>1</Hsp_hit-frame>
-              <Hsp_identity>26</Hsp_identity>
-              <Hsp_positive>40</Hsp_positive>
-              <Hsp_gaps>6</Hsp_gaps>
-              <Hsp_align-len>92</Hsp_align-len>
-              <Hsp_qseq>DRASLLAREGRNNVVKLSAKPADSLEISSNSPEIGKVVEAVLADQIDGEELNISFSPKYMMDALKVLEGADIRISFTGAMRP-FLIRTPNDE</Hsp_qseq>
-              <Hsp_hseq>DIAINLAKEGANIFFNYNGSPEAAEETAKLVAEHGVEVEAMKANVAIAEDVDAFFK-----QAIERFGRVDILVNNAGITRDNLLMRMKEDE</Hsp_hseq>
-              <Hsp_midline>D A  LA+EG N     +  P  + E +    E G  VEA+ A+    E+++  F       A++     DI ++  G  R   L+R   DE</Hsp_midline>
-            </Hsp>
-          </Hit_hsps>
-        </Hit>
-        <Hit>
-          <Hit_num>9</Hit_num>
-          <Hit_id>gi|16410081|emb|CAC98770.1|</Hit_id>
-          <Hit_def>two-component sensor histidine kinase CheA [Listeria monocytogenes]</Hit_def>
-          <Hit_accession>CAC98770</Hit_accession>
-          <Hit_len>618</Hit_len>
-          <Hit_hsps>
-            <Hsp>
-              <Hsp_num>1</Hsp_num>
-              <Hsp_bit-score>25.7942</Hsp_bit-score>
-              <Hsp_score>55</Hsp_score>
-              <Hsp_evalue>3.61454</Hsp_evalue>
-              <Hsp_query-from>267</Hsp_query-from>
-              <Hsp_query-to>322</Hsp_query-to>
-              <Hsp_hit-from>275</Hsp_hit-from>
-              <Hsp_hit-to>328</Hsp_hit-to>
-              <Hsp_query-frame>1</Hsp_query-frame>
-              <Hsp_hit-frame>1</Hsp_hit-frame>
-              <Hsp_identity>14</Hsp_identity>
-              <Hsp_positive>31</Hsp_positive>
-              <Hsp_gaps>2</Hsp_gaps>
-              <Hsp_align-len>56</Hsp_align-len>
-              <Hsp_qseq>NTKEFLQAIDRASLLAREGRNNVVKLSAKPADSLEISSNSPEIGKVVEAVLADQID</Hsp_qseq>
-              <Hsp_hseq>NNKELMEHLGRFSSISKEIQNGLLNMRMVPVDS--VFNRFPKMVRTLAKELGKKID</Hsp_hseq>
-              <Hsp_midline>N KE ++ + R S +++E +N ++ +   P DS  + +  P++ + +   L  +ID</Hsp_midline>
-            </Hsp>
-          </Hit_hsps>
-        </Hit>
-        <Hit>
-          <Hit_num>10</Hit_num>
-          <Hit_id>gi|16410572|emb|CAC99234.1|</Hit_id>
-          <Hit_def>lmo1156 [Listeria monocytogenes]</Hit_def>
-          <Hit_accession>CAC99234</Hit_accession>
-          <Hit_len>606</Hit_len>
-          <Hit_hsps>
-            <Hsp>
-              <Hsp_num>1</Hsp_num>
-              <Hsp_bit-score>25.409</Hsp_bit-score>
-              <Hsp_score>54</Hsp_score>
-              <Hsp_evalue>4.41591</Hsp_evalue>
-              <Hsp_query-from>65</Hsp_query-from>
-              <Hsp_query-to>95</Hsp_query-to>
-              <Hsp_hit-from>440</Hsp_hit-from>
-              <Hsp_hit-to>470</Hsp_hit-to>
-              <Hsp_query-frame>1</Hsp_query-frame>
-              <Hsp_hit-frame>1</Hsp_hit-frame>
-              <Hsp_identity>12</Hsp_identity>
-              <Hsp_positive>20</Hsp_positive>
-              <Hsp_align-len>31</Hsp_align-len>
-              <Hsp_qseq>EIVTIDQPGSIVLQARFFSEIVKKLPMATVE</Hsp_qseq>
-              <Hsp_hseq>DMVTMIIQSEIGLEDRYLAEDIKKYPLAKVE</Hsp_hseq>
-              <Hsp_midline>++VT+     I L+ R+ +E +KK P+A VE</Hsp_midline>
-            </Hsp>
-          </Hit_hsps>
-        </Hit>
-        <Hit>
-          <Hit_num>11</Hit_num>
-          <Hit_id>gi|16411268|emb|CAC99892.1|</Hit_id>
-          <Hit_def>lmo1814 [Listeria monocytogenes]</Hit_def>
-          <Hit_accession>CAC99892</Hit_accession>
-          <Hit_len>552</Hit_len>
-          <Hit_hsps>
-            <Hsp>
-              <Hsp_num>1</Hsp_num>
-              <Hsp_bit-score>24.2534</Hsp_bit-score>
-              <Hsp_score>51</Hsp_score>
-              <Hsp_evalue>9.43565</Hsp_evalue>
-              <Hsp_query-from>211</Hsp_query-from>
-              <Hsp_query-to>238</Hsp_query-to>
-              <Hsp_hit-from>495</Hsp_hit-from>
-              <Hsp_hit-to>522</Hsp_hit-to>
-              <Hsp_query-frame>1</Hsp_query-frame>
-              <Hsp_hit-frame>1</Hsp_hit-frame>
-              <Hsp_identity>11</Hsp_identity>
-              <Hsp_positive>18</Hsp_positive>
-              <Hsp_align-len>28</Hsp_align-len>
-              <Hsp_qseq>LSKILDDNQELVDIVITETQVLFKAKNV</Hsp_qseq>
-              <Hsp_hseq>LEKLLDDDSEIVTIIVGEDSDTTKAETL</Hsp_hseq>
-              <Hsp_midline>L K+LDD+ E+V I++ E     KA+ +</Hsp_midline>
-            </Hsp>
-          </Hit_hsps>
-        </Hit>
-      </Iteration_hits>
-      <Iteration_stat>
-        <Statistics>
-          <Statistics_db-num>2846</Statistics_db-num>
-          <Statistics_db-len>870878</Statistics_db-len>
-          <Statistics_hsp-len>82</Statistics_hsp-len>
-          <Statistics_eff-space>1.88702e+08</Statistics_eff-space>
-          <Statistics_kappa>0.041</Statistics_kappa>
-          <Statistics_lambda>0.267</Statistics_lambda>
-          <Statistics_entropy>0.14</Statistics_entropy>
-        </Statistics>
-      </Iteration_stat>
-    </Iteration>
-    <Iteration>
-      <Iteration_iter-num>2</Iteration_iter-num>
-      <Iteration_hits>
-        <Hit>
-          <Hit_num>1</Hit_num>
-          <Hit_id>gi|16409361|emb|CAC98217.1|</Hit_id>
-          <Hit_def>DNA polymerase III, beta chain [Listeria monocytogenes]</Hit_def>
-          <Hit_accession>CAC98217</Hit_accession>
-          <Hit_len>381</Hit_len>
-          <Hit_hsps>
-            <Hsp>
-              <Hsp_num>1</Hsp_num>
-              <Hsp_bit-score>700.95</Hsp_bit-score>
-              <Hsp_score>1808</Hsp_score>
-              <Hsp_evalue>0</Hsp_evalue>
-              <Hsp_query-from>1</Hsp_query-from>
-              <Hsp_query-to>378</Hsp_query-to>
-              <Hsp_hit-from>1</Hsp_hit-from>
-              <Hsp_hit-to>381</Hsp_hit-to>
-              <Hsp_query-frame>1</Hsp_query-frame>
-              <Hsp_hit-frame>1</Hsp_hit-frame>
-              <Hsp_identity>221</Hsp_identity>
-              <Hsp_positive>293</Hsp_positive>
-              <Hsp_gaps>3</Hsp_gaps>
-              <Hsp_align-len>381</Hsp_align-len>
-              <Hsp_qseq>MKFTIQKDRLVESVQDVLKAVSSRTTIPILTGIKIVASDEGVSFTGSDSDISIESFIPKEDDDKEIVTIDQPGSIVLQARFFSEIVKKLPMATVEIEVQNQYLTIIRSGKAEFNLNGLDADEYPHLPQIEEHHAIQIPTDLLKNLIRQTVFAVSASETRPILTGVNWKVENGELLCTATDSHRLALRKAKLDIPEDSSYNVVIPGKSLTELSKILDDNQELVDIVITETQVLFKAKNVLFFSRLLDGNYPDTTSLIPQESKTEIVVNTKEFLQAIDRASLLAREGRNNVVKLSAKPADSLEISSNSPEIGKVVEAVLADQIDGEELNISFSPKYMMDALKVLEGADIRISFTGAMRPFLIR---TPNDETIVQLILPVRTY</Hsp_qseq>
-              <Hsp_hseq>MKFVIERDRLVQAVNEVTRAISARTTIPILTGIKIVVNDEGVTLTGSDSDISIEAFIPLIENDEVIVEVESFGGIVLQSKYFGDIVRRLPEENVEIEVTSNYQTNISSGQASFTLNGLDPMEYPKLPEVTDGKTIKIPINVLKNIVRQTVFAVSAIEVRPVLTGVNWIIKENKLSAVATDSHRLALREIPLETDIDEEYNIVIPGKSLSELNKLLDDASESIEMTLANNQILFKLKDLLFYSRLLEGSYPDTSRLIPTDTKSELVINSKAFLQAIDRASLLARENRNNVIKLMTLENGQVEVSSNSPEVGNVSENVFSQSFTGEEIKISFNGKYMMDALRAFEGDDIQISFSGTMRPFVLRPKDAANPNEILQLITPVRTY</Hsp_hseq>
-              <Hsp_midline>MKF I++DRLV++V +V +A+S+RTTIPILTGIKIV +DEGV+ TGSDSDISIE+FIP  ++D+ IV ++  G IVLQ+++F +IV++LP   VEIEV + Y T I SG+A F LNGLD  EYP LP++ +   I+IP ++LKN++RQTVFAVSA E RP+LTGVNW ++  +L   ATDSHRLALR+  L+   D  YN+VIPGKSL+EL+K+LDD  E +++ +   Q+LFK K++LF+SRLL+G+YPDT+ LIP ++K+E+V+N+K FLQAIDRASLLARE RNNV+KL       +E+SSNSPE+G V E V +    GEE+ ISF+ KYMMDAL+  EG DI+ISF+G MRPF++R     N   I+QLI PVRTY</Hsp_midline>
-            </Hsp>
-          </Hit_hsps>
-        </Hit>
-        <Hit>
-          <Hit_num>2</Hit_num>
-          <Hit_id>gi|16409959|emb|CAC98662.1|</Hit_id>
-          <Hit_def>lmo0583 [Listeria monocytogenes]</Hit_def>
-          <Hit_accession>CAC98662</Hit_accession>
-          <Hit_len>776</Hit_len>
-          <Hit_hsps>
-            <Hsp>
-              <Hsp_num>1</Hsp_num>
-              <Hsp_bit-score>34.9402</Hsp_bit-score>
-              <Hsp_score>79</Hsp_score>
-              <Hsp_evalue>0.00513589</Hsp_evalue>
-              <Hsp_query-from>63</Hsp_query-from>
-              <Hsp_query-to>181</Hsp_query-to>
-              <Hsp_hit-from>304</Hsp_hit-from>
-              <Hsp_hit-to>432</Hsp_hit-to>
-              <Hsp_query-frame>1</Hsp_query-frame>
-              <Hsp_hit-frame>1</Hsp_hit-frame>
-              <Hsp_identity>31</Hsp_identity>
-              <Hsp_positive>52</Hsp_positive>
-              <Hsp_gaps>10</Hsp_gaps>
-              <Hsp_align-len>129</Hsp_align-len>
-              <Hsp_qseq>DKEIVTIDQPGSIVLQARFFSEIVKKLPMATVEIEVQNQYLTI--------IRSGKAEFNLNGLDADEYPHLPQIEEHHAIQIPTDLLKNL--IRQTVFAVSASETRPILTGVNWKVENGELLCTATDS</Hsp_qseq>
-              <Hsp_hseq>DDEVLIIDPHTGRALPGRRFNDGLHQAIEAKEGVEVKEESRTLATITIQNYFRMYKKISGMTGTAKTEEEEFRQIYNMDVVVIPTNLRVNREDMQDDIFYTKKEKGRAIVYEVSWRYEKGQPTLIGTSS</Hsp_hseq>
-              <Hsp_midline>D E++ ID      L  R F++ + +   A   +EV+ +  T+         R  K    + G    E     QI     + IPT+L  N   ++  +F     + R I+  V+W+ E G+     T S</Hsp_midline>
-            </Hsp>
-          </Hit_hsps>
-        </Hit>
-        <Hit>
-          <Hit_num>3</Hit_num>
-          <Hit_id>gi|16411998|emb|CAD00588.1|</Hit_id>
-          <Hit_def>translocase binding subunit (ATPase) [Listeria monocytogenes]</Hit_def>
-          <Hit_accession>CAD00588</Hit_accession>
-          <Hit_len>837</Hit_len>
-          <Hit_hsps>
-            <Hsp>
-              <Hsp_num>1</Hsp_num>
-              <Hsp_bit-score>34.555</Hsp_bit-score>
-              <Hsp_score>78</Hsp_score>
-              <Hsp_evalue>0.00819482</Hsp_evalue>
-              <Hsp_query-from>60</Hsp_query-from>
-              <Hsp_query-to>147</Hsp_query-to>
-              <Hsp_hit-from>308</Hsp_hit-from>
-              <Hsp_hit-to>400</Hsp_hit-to>
-              <Hsp_query-frame>1</Hsp_query-frame>
-              <Hsp_hit-frame>1</Hsp_hit-frame>
-              <Hsp_identity>23</Hsp_identity>
-              <Hsp_positive>40</Hsp_positive>
-              <Hsp_gaps>11</Hsp_gaps>
-              <Hsp_align-len>96</Hsp_align-len>
-              <Hsp_qseq>EDDDKEIVTIDQPGSIVLQARFFSEIVKKLPMATVEIEVQNQ--------YLTIIRSGKAEFNLNGLDADEYPHLPQIEEHHAIQIPTDLLKNLIR</Hsp_qseq>
-              <Hsp_hseq>VQDDEVLI-VDQFTGRIMKGRRFSEGLHQALEAKEGVTIQNESKTMATITFQNYFRMYKKLAGMTGTAKTEEEEFRDIYNMRVIEIPTN--KVIIR</Hsp_hseq>
-              <Hsp_midline>  DD+ ++ +DQ    +++ R FSE + +   A   + +QN+        +    R  K    + G    E      I     I+IPT+  K +IR</Hsp_midline>
-            </Hsp>
-          </Hit_hsps>
-        </Hit>
-        <Hit>
-          <Hit_num>4</Hit_num>
-          <Hit_id>gi|16410192|emb|CAC98881.1|</Hit_id>
-          <Hit_def>lmo0803 [Listeria monocytogenes]</Hit_def>
-          <Hit_accession>CAC98881</Hit_accession>
-          <Hit_len>682</Hit_len>
-          <Hit_hsps>
-            <Hsp>
-              <Hsp_num>1</Hsp_num>
-              <Hsp_bit-score>27.2362</Hsp_bit-score>
-              <Hsp_score>59</Hsp_score>
-              <Hsp_evalue>1.14482</Hsp_evalue>
-              <Hsp_query-from>53</Hsp_query-from>
-              <Hsp_query-to>129</Hsp_query-to>
-              <Hsp_hit-from>406</Hsp_hit-from>
-              <Hsp_hit-to>490</Hsp_hit-to>
-              <Hsp_query-frame>1</Hsp_query-frame>
-              <Hsp_hit-frame>1</Hsp_hit-frame>
-              <Hsp_identity>20</Hsp_identity>
-              <Hsp_positive>34</Hsp_positive>
-              <Hsp_gaps>8</Hsp_gaps>
-              <Hsp_align-len>85</Hsp_align-len>
-              <Hsp_qseq>IESFI-PKEDDDKEIVTIDQPGSIVLQARFFSEIVKKLPMATV------EIEVQNQYLTIIRSGKAEFNLN-GLDADEYPHLPQI</Hsp_qseq>
-              <Hsp_hseq>IATFILPLLAKSEEVTTEDERAEIATRIRILRNVIRELKEQTLPETKAATDEVIEDYRKRIYDLQQNNSSNRGMDERERAKRLEI</Hsp_hseq>
-              <Hsp_midline>I +FI P     +E+ T D+   I  + R    ++++L   T+        EV   Y   I   +   + N G+D  E     +I</Hsp_midline>
-            </Hsp>
-          </Hit_hsps>
-        </Hit>
-        <Hit>
-          <Hit_num>5</Hit_num>
-          <Hit_id>gi|16411204|emb|CAC99828.1|</Hit_id>
-          <Hit_def>lmo1750 [Listeria monocytogenes]</Hit_def>
-          <Hit_accession>CAC99828</Hit_accession>
-          <Hit_len>184</Hit_len>
-          <Hit_hsps>
-            <Hsp>
-              <Hsp_num>1</Hsp_num>
-              <Hsp_bit-score>27.2362</Hsp_bit-score>
-              <Hsp_score>59</Hsp_score>
-              <Hsp_evalue>1.15441</Hsp_evalue>
-              <Hsp_query-from>308</Hsp_query-from>
-              <Hsp_query-to>340</Hsp_query-to>
-              <Hsp_hit-from>49</Hsp_hit-from>
-              <Hsp_hit-to>80</Hsp_hit-to>
-              <Hsp_query-frame>1</Hsp_query-frame>
-              <Hsp_hit-frame>1</Hsp_hit-frame>
-              <Hsp_identity>13</Hsp_identity>
-              <Hsp_positive>22</Hsp_positive>
-              <Hsp_gaps>1</Hsp_gaps>
-              <Hsp_align-len>33</Hsp_align-len>
-              <Hsp_qseq>EIGKVVEAVLADQIDGEELNISFSPKYMMDALK</Hsp_qseq>
-              <Hsp_hseq>EVLRRLEEYFSDKSD-QGLNLSSFPKYMMETVK</Hsp_hseq>
-              <Hsp_midline>E+ + +E   +D+ D + LN+S  PKYMM+ +K</Hsp_midline>
-            </Hsp>
-          </Hit_hsps>
-        </Hit>
-        <Hit>
-          <Hit_num>6</Hit_num>
-          <Hit_id>gi|16410635|emb|CAC99297.1|</Hit_id>
-          <Hit_def>lmo1219 [Listeria monocytogenes]</Hit_def>
-          <Hit_accession>CAC99297</Hit_accession>
-          <Hit_len>119</Hit_len>
-          <Hit_hsps>
-            <Hsp>
-              <Hsp_num>1</Hsp_num>
-              <Hsp_bit-score>27.2362</Hsp_bit-score>
-              <Hsp_score>59</Hsp_score>
-              <Hsp_evalue>1.18367</Hsp_evalue>
-              <Hsp_query-from>150</Hsp_query-from>
-              <Hsp_query-to>196</Hsp_query-to>
-              <Hsp_hit-from>72</Hsp_hit-from>
-              <Hsp_hit-to>118</Hsp_hit-to>
-              <Hsp_query-frame>1</Hsp_query-frame>
-              <Hsp_hit-frame>1</Hsp_hit-frame>
-              <Hsp_identity>10</Hsp_identity>
-              <Hsp_positive>21</Hsp_positive>
-              <Hsp_align-len>47</Hsp_align-len>
-              <Hsp_qseq>VFAVSASETRPILTGVNWKVENGELLCTATDSHRLALRKAKLDIPED</Hsp_qseq>
-              <Hsp_hseq>VTIISTGSSNGFFTGIDWGAAFDYMHSVVADLKRVAIREVAIEKQEE</Hsp_hseq>
-              <Hsp_midline>V  +S   +    TG++W      +     D  R+A+R+  ++  E+</Hsp_midline>
-            </Hsp>
-          </Hit_hsps>
-        </Hit>
-        <Hit>
-          <Hit_num>7</Hit_num>
-          <Hit_id>gi|16409423|emb|CAC98279.1|</Hit_id>
-          <Hit_def>lmo0064 [Listeria monocytogenes]</Hit_def>
-          <Hit_accession>CAC98279</Hit_accession>
-          <Hit_len>233</Hit_len>
-          <Hit_hsps>
-            <Hsp>
-              <Hsp_num>1</Hsp_num>
-              <Hsp_bit-score>26.851</Hsp_bit-score>
-              <Hsp_score>58</Hsp_score>
-              <Hsp_evalue>1.37549</Hsp_evalue>
-              <Hsp_query-from>314</Hsp_query-from>
-              <Hsp_query-to>378</Hsp_query-to>
-              <Hsp_hit-from>40</Hsp_hit-from>
-              <Hsp_hit-to>112</Hsp_hit-to>
-              <Hsp_query-frame>1</Hsp_query-frame>
-              <Hsp_hit-frame>1</Hsp_hit-frame>
-              <Hsp_identity>16</Hsp_identity>
-              <Hsp_positive>30</Hsp_positive>
-              <Hsp_gaps>8</Hsp_gaps>
-              <Hsp_align-len>73</Hsp_align-len>
-              <Hsp_qseq>EAVLADQID--------GEELNISFSPKYMMDALKVLEGADIRISFTGAMRPFLIRTPNDETIVQLILPVRTY</Hsp_qseq>
-              <Hsp_hseq>EDVFAEGFDRLKSKGILNEAGELTDGGGFLIDSLIEYYQSKKYVRMNQLMFAFLEKTPNELLVMIEITPQKEY</Hsp_hseq>
-              <Hsp_midline>E V A+  D         E   ++    +++D+L     +   +     M  FL +TPN+  ++  I P + Y</Hsp_midline>
-            </Hsp>
-          </Hit_hsps>
-        </Hit>
-        <Hit>
-          <Hit_num>8</Hit_num>
-          <Hit_id>gi|16410481|emb|CAC99157.1|</Hit_id>
-          <Hit_def>lmo1079 [Listeria monocytogenes]</Hit_def>
-          <Hit_accession>CAC99157</Hit_accession>
-          <Hit_len>952</Hit_len>
-          <Hit_hsps>
-            <Hsp>
-              <Hsp_num>1</Hsp_num>
-              <Hsp_bit-score>26.851</Hsp_bit-score>
-              <Hsp_score>58</Hsp_score>
-              <Hsp_evalue>1.45822</Hsp_evalue>
-              <Hsp_query-from>170</Hsp_query-from>
-              <Hsp_query-to>237</Hsp_query-to>
-              <Hsp_hit-from>646</Hsp_hit-from>
-              <Hsp_hit-to>710</Hsp_hit-to>
-              <Hsp_query-frame>1</Hsp_query-frame>
-              <Hsp_hit-frame>1</Hsp_hit-frame>
-              <Hsp_identity>18</Hsp_identity>
-              <Hsp_positive>32</Hsp_positive>
-              <Hsp_gaps>11</Hsp_gaps>
-              <Hsp_align-len>72</Hsp_align-len>
-              <Hsp_qseq>ENGELLCTAT-DSHRLALRKAKLDIPEDSSYNVVIP---GKSLTELSKILDDNQELVDIVITETQVLFKAKN</Hsp_qseq>
-              <Hsp_hseq>KEEALSYNAIIDNKDTSKREYKSNIKE-LEFETSIPKVNGKAPAKLTK------DKIEVSNAENSIQFKLKN</Hsp_hseq>
-              <Hsp_midline>+   L   A  D+   + R+ K +I E   +   IP   GK+  +L+K      + +++   E  + FK KN</Hsp_midline>
-            </Hsp>
-          </Hit_hsps>
-        </Hit>
-        <Hit>
-          <Hit_num>9</Hit_num>
-          <Hit_id>gi|16409922|emb|CAC98625.1|</Hit_id>
-          <Hit_def>lmo0546 [Listeria monocytogenes]</Hit_def>
-          <Hit_accession>CAC98625</Hit_accession>
-          <Hit_len>416</Hit_len>
-          <Hit_hsps>
-            <Hsp>
-              <Hsp_num>1</Hsp_num>
-              <Hsp_bit-score>26.851</Hsp_bit-score>
-              <Hsp_score>58</Hsp_score>
-              <Hsp_evalue>1.47044</Hsp_evalue>
-              <Hsp_query-from>280</Hsp_query-from>
-              <Hsp_query-to>300</Hsp_query-to>
-              <Hsp_hit-from>7</Hsp_hit-from>
-              <Hsp_hit-to>27</Hsp_hit-to>
-              <Hsp_query-frame>1</Hsp_query-frame>
-              <Hsp_hit-frame>1</Hsp_hit-frame>
-              <Hsp_identity>8</Hsp_identity>
-              <Hsp_positive>12</Hsp_positive>
-              <Hsp_align-len>21</Hsp_align-len>
-              <Hsp_qseq>LLAREGRNNVVKLSAKPADSL</Hsp_qseq>
-              <Hsp_hseq>LLARENENNPIRVGVIGAGQM</Hsp_hseq>
-              <Hsp_midline>LLARE  NN +++    A  +</Hsp_midline>
-            </Hsp>
-          </Hit_hsps>
-        </Hit>
-        <Hit>
-          <Hit_num>10</Hit_num>
-          <Hit_id>gi|16410942|emb|CAC99591.1|</Hit_id>
-          <Hit_def>lmo1513 [Listeria monocytogenes]</Hit_def>
-          <Hit_accession>CAC99591</Hit_accession>
-          <Hit_len>382</Hit_len>
-          <Hit_hsps>
-            <Hsp>
-              <Hsp_num>1</Hsp_num>
-              <Hsp_bit-score>26.851</Hsp_bit-score>
-              <Hsp_score>58</Hsp_score>
-              <Hsp_evalue>1.59839</Hsp_evalue>
-              <Hsp_query-from>107</Hsp_query-from>
-              <Hsp_query-to>126</Hsp_query-to>
-              <Hsp_hit-from>277</Hsp_hit-from>
-              <Hsp_hit-to>296</Hsp_hit-to>
-              <Hsp_query-frame>1</Hsp_query-frame>
-              <Hsp_hit-frame>1</Hsp_hit-frame>
-              <Hsp_identity>10</Hsp_identity>
-              <Hsp_positive>15</Hsp_positive>
-              <Hsp_align-len>20</Hsp_align-len>
-              <Hsp_qseq>RSGKAEFNLNGLDADEYPHL</Hsp_qseq>
-              <Hsp_hseq>RSAELDFEVNGLEADTLPHV</Hsp_hseq>
-              <Hsp_midline>RS + +F +NGL+AD  PH+</Hsp_midline>
-            </Hsp>
-          </Hit_hsps>
-        </Hit>
-        <Hit>
-          <Hit_num>11</Hit_num>
-          <Hit_id>gi|16412324|emb|CAD01037.1|</Hit_id>
-          <Hit_def>lmo2824 [Listeria monocytogenes]</Hit_def>
-          <Hit_accession>CAD01037</Hit_accession>
-          <Hit_len>395</Hit_len>
-          <Hit_hsps>
-            <Hsp>
-              <Hsp_num>1</Hsp_num>
-              <Hsp_bit-score>26.851</Hsp_bit-score>
-              <Hsp_score>58</Hsp_score>
-              <Hsp_evalue>1.72304</Hsp_evalue>
-              <Hsp_query-from>144</Hsp_query-from>
-              <Hsp_query-to>170</Hsp_query-to>
-              <Hsp_hit-from>84</Hsp_hit-from>
-              <Hsp_hit-to>110</Hsp_hit-to>
-              <Hsp_query-frame>1</Hsp_query-frame>
-              <Hsp_hit-frame>1</Hsp_hit-frame>
-              <Hsp_identity>10</Hsp_identity>
-              <Hsp_positive>13</Hsp_positive>
-              <Hsp_align-len>27</Hsp_align-len>
-              <Hsp_qseq>NLIRQTVFAVSASETRPILTGVNWKVE</Hsp_qseq>
-              <Hsp_hseq>NAVKELVLASLFVSARPILEGTEWVKE</Hsp_hseq>
-              <Hsp_midline>N +++ V A      RPIL G  W  E</Hsp_midline>
-            </Hsp>
-          </Hit_hsps>
-        </Hit>
-        <Hit>
-          <Hit_num>12</Hit_num>
-          <Hit_id>gi|16410572|emb|CAC99234.1|</Hit_id>
-          <Hit_def>lmo1156 [Listeria monocytogenes]</Hit_def>
-          <Hit_accession>CAC99234</Hit_accession>
-          <Hit_len>606</Hit_len>
-          <Hit_hsps>
-            <Hsp>
-              <Hsp_num>1</Hsp_num>
-              <Hsp_bit-score>26.4658</Hsp_bit-score>
-              <Hsp_score>57</Hsp_score>
-              <Hsp_evalue>2.25036</Hsp_evalue>
-              <Hsp_query-from>75</Hsp_query-from>
-              <Hsp_query-to>141</Hsp_query-to>
-              <Hsp_hit-from>450</Hsp_hit-from>
-              <Hsp_hit-to>512</Hsp_hit-to>
-              <Hsp_query-frame>1</Hsp_query-frame>
-              <Hsp_hit-frame>1</Hsp_hit-frame>
-              <Hsp_identity>16</Hsp_identity>
-              <Hsp_positive>30</Hsp_positive>
-              <Hsp_gaps>4</Hsp_gaps>
-              <Hsp_align-len>67</Hsp_align-len>
-              <Hsp_qseq>IVLQARFFSEIVKKLPMATVEIEVQNQYLTIIRSGKAEFNLNGLDADEYPHLPQIEEHHAIQIPTDL</Hsp_qseq>
-              <Hsp_hseq>IGLEDRYLAEDIKKYPLAKVE----SIFHIRHEDGTVQFFDTPLSPTVFAKVVIVKPDGFVPIPGDV</Hsp_hseq>
-              <Hsp_midline>I L+ R+ +E +KK P+A VE    + +      G  +F    L    +  +  ++    + IP D+</Hsp_midline>
-            </Hsp>
-          </Hit_hsps>
-        </Hit>
-        <Hit>
-          <Hit_num>13</Hit_num>
-          <Hit_id>gi|16411268|emb|CAC99892.1|</Hit_id>
-          <Hit_def>lmo1814 [Listeria monocytogenes]</Hit_def>
-          <Hit_accession>CAC99892</Hit_accession>
-          <Hit_len>552</Hit_len>
-          <Hit_hsps>
-            <Hsp>
-              <Hsp_num>1</Hsp_num>
-              <Hsp_bit-score>26.4658</Hsp_bit-score>
-              <Hsp_score>57</Hsp_score>
-              <Hsp_evalue>2.28823</Hsp_evalue>
-              <Hsp_query-from>211</Hsp_query-from>
-              <Hsp_query-to>238</Hsp_query-to>
-              <Hsp_hit-from>495</Hsp_hit-from>
-              <Hsp_hit-to>522</Hsp_hit-to>
-              <Hsp_query-frame>1</Hsp_query-frame>
-              <Hsp_hit-frame>1</Hsp_hit-frame>
-              <Hsp_identity>11</Hsp_identity>
-              <Hsp_positive>18</Hsp_positive>
-              <Hsp_align-len>28</Hsp_align-len>
-              <Hsp_qseq>LSKILDDNQELVDIVITETQVLFKAKNV</Hsp_qseq>
-              <Hsp_hseq>LEKLLDDDSEIVTIIVGEDSDTTKAETL</Hsp_hseq>
-              <Hsp_midline>L K+LDD+ E+V I++ E     KA+ +</Hsp_midline>
-            </Hsp>
-          </Hit_hsps>
-        </Hit>
-        <Hit>
-          <Hit_num>14</Hit_num>
-          <Hit_id>gi|16412064|emb|CAD00654.1|</Hit_id>
-          <Hit_def>peptidoglycan anchored protein (LPXTG motif) [Listeria monocytogenes]</Hit_def>
-          <Hit_accession>CAD00654</Hit_accession>
-          <Hit_len>1530</Hit_len>
-          <Hit_hsps>
-            <Hsp>
-              <Hsp_num>1</Hsp_num>
-              <Hsp_bit-score>26.0806</Hsp_bit-score>
-              <Hsp_score>56</Hsp_score>
-              <Hsp_evalue>2.68132</Hsp_evalue>
-              <Hsp_query-from>250</Hsp_query-from>
-              <Hsp_query-to>307</Hsp_query-to>
-              <Hsp_hit-from>1270</Hsp_hit-from>
-              <Hsp_hit-to>1322</Hsp_hit-to>
-              <Hsp_query-frame>1</Hsp_query-frame>
-              <Hsp_hit-frame>1</Hsp_hit-frame>
-              <Hsp_identity>17</Hsp_identity>
-              <Hsp_positive>27</Hsp_positive>
-              <Hsp_gaps>9</Hsp_gaps>
-              <Hsp_align-len>60</Hsp_align-len>
-              <Hsp_qseq>PDTTS--LIPQESKTEIVVNTKEFLQAIDRASLLAREGRNNVVKLSAKPADSLEISSNSP</Hsp_qseq>
-              <Hsp_hseq>PDAGSVKIIKQDSENGVRLAGAEF-------SLIAENGETLQTNLKTDEAGELEVNNLAP</Hsp_hseq>
-              <Hsp_midline>PD  S  +I Q+S+  + +   EF       SL+A  G      L    A  LE+++ +P</Hsp_midline>
-            </Hsp>
-          </Hit_hsps>
-        </Hit>
-        <Hit>
-          <Hit_num>15</Hit_num>
-          <Hit_id>gi|16411702|emb|CAD00310.1|</Hit_id>
-          <Hit_def>lmo2232 [Listeria monocytogenes]</Hit_def>
-          <Hit_accession>CAD00310</Hit_accession>
-          <Hit_len>434</Hit_len>
-          <Hit_hsps>
-            <Hsp>
-              <Hsp_num>1</Hsp_num>
-              <Hsp_bit-score>26.0806</Hsp_bit-score>
-              <Hsp_score>56</Hsp_score>
-              <Hsp_evalue>2.86641</Hsp_evalue>
-              <Hsp_query-from>118</Hsp_query-from>
-              <Hsp_query-to>146</Hsp_query-to>
-              <Hsp_hit-from>346</Hsp_hit-from>
-              <Hsp_hit-to>377</Hsp_hit-to>
-              <Hsp_query-frame>1</Hsp_query-frame>
-              <Hsp_hit-frame>1</Hsp_hit-frame>
-              <Hsp_identity>10</Hsp_identity>
-              <Hsp_positive>19</Hsp_positive>
-              <Hsp_gaps>3</Hsp_gaps>
-              <Hsp_align-len>32</Hsp_align-len>
-              <Hsp_qseq>LDADEYPHLPQIEEHHAI---QIPTDLLKNLI</Hsp_qseq>
-              <Hsp_hseq>FDADEIPEIRKIKDGHYIVDAKLLIDEVNNIL</Hsp_hseq>
-              <Hsp_midline> DADE P + +I++ H I   ++  D + N++</Hsp_midline>
-            </Hsp>
-          </Hit_hsps>
-        </Hit>
-        <Hit>
-          <Hit_num>16</Hit_num>
-          <Hit_id>gi|16410089|emb|CAC98778.1|</Hit_id>
-          <Hit_def>lmo0700 [Listeria monocytogenes]</Hit_def>
-          <Hit_accession>CAC98778</Hit_accession>
-          <Hit_len>515</Hit_len>
-          <Hit_hsps>
-            <Hsp>
-              <Hsp_num>1</Hsp_num>
-              <Hsp_bit-score>26.0806</Hsp_bit-score>
-              <Hsp_score>56</Hsp_score>
-              <Hsp_evalue>2.91464</Hsp_evalue>
-              <Hsp_query-from>129</Hsp_query-from>
-              <Hsp_query-to>231</Hsp_query-to>
-              <Hsp_hit-from>360</Hsp_hit-from>
-              <Hsp_hit-to>461</Hsp_hit-to>
-              <Hsp_query-frame>1</Hsp_query-frame>
-              <Hsp_hit-frame>1</Hsp_hit-frame>
-              <Hsp_identity>24</Hsp_identity>
-              <Hsp_positive>49</Hsp_positive>
-              <Hsp_gaps>13</Hsp_gaps>
-              <Hsp_align-len>109</Hsp_align-len>
-              <Hsp_qseq>IEEHHAIQI--PTDL---LKNLIRQTVFAVSASETRPILTGVNWK-VENGELLCTATDSHRLALRKAKLDIPEDSSYNVVIPGKSLTELSKILDDNQELVDIVITETQV</Hsp_qseq>
-              <Hsp_hseq>IEEGKTVEVIFPLEVDGLLKTPMYQIFNPAAAKEMAQLMLGIQAKEVAEKE----ATTPAEIIEPEKPAE-PI--KHTVIEEKETLSEMEQILEDIPVTLEVVFGTAKV</Hsp_hseq>
-              <Hsp_midline>IEE   +++  P ++   LK  + Q     +A E   ++ G+  K V   E    AT    +   +   + P    + V+   ++L+E+ +IL+D    +++V    +V</Hsp_midline>
-            </Hsp>
-          </Hit_hsps>
-        </Hit>
-        <Hit>
-          <Hit_num>17</Hit_num>
-          <Hit_id>gi|16409997|emb|CAC98686.1|</Hit_id>
-          <Hit_def>lmo0608 [Listeria monocytogenes]</Hit_def>
-          <Hit_accession>CAC98686</Hit_accession>
-          <Hit_len>605</Hit_len>
-          <Hit_hsps>
-            <Hsp>
-              <Hsp_num>1</Hsp_num>
-              <Hsp_bit-score>25.6954</Hsp_bit-score>
-              <Hsp_score>55</Hsp_score>
-              <Hsp_evalue>3.68169</Hsp_evalue>
-              <Hsp_query-from>66</Hsp_query-from>
-              <Hsp_query-to>119</Hsp_query-to>
-              <Hsp_hit-from>188</Hsp_hit-from>
-              <Hsp_hit-to>249</Hsp_hit-to>
-              <Hsp_query-frame>1</Hsp_query-frame>
-              <Hsp_hit-frame>1</Hsp_hit-frame>
-              <Hsp_identity>17</Hsp_identity>
-              <Hsp_positive>27</Hsp_positive>
-              <Hsp_gaps>8</Hsp_gaps>
-              <Hsp_align-len>62</Hsp_align-len>
-              <Hsp_qseq>IVTIDQPGSIVLQA-------RFFSEIVKKLPMATVEIEVQNQYLTIIRS-GKAEFNLNGLD</Hsp_qseq>
-              <Hsp_hseq>IVLVTVPISIILVAIIAGRSQRYFGAQQRNLGILNDTVEETYGGQTIIKAFGQEKKTLVKFD</Hsp_hseq>
-              <Hsp_midline>IV +  P SI+L A       R+F    + L +    +E      TII++ G+ +  L   D</Hsp_midline>
-            </Hsp>
-          </Hit_hsps>
-        </Hit>
-        <Hit>
-          <Hit_num>18</Hit_num>
-          <Hit_id>gi|16410039|emb|CAC98728.1|</Hit_id>
-          <Hit_def>lmo0650 [Listeria monocytogenes]</Hit_def>
-          <Hit_accession>CAC98728</Hit_accession>
-          <Hit_len>896</Hit_len>
-          <Hit_hsps>
-            <Hsp>
-              <Hsp_num>1</Hsp_num>
-              <Hsp_bit-score>25.3102</Hsp_bit-score>
-              <Hsp_score>54</Hsp_score>
-              <Hsp_evalue>4.53564</Hsp_evalue>
-              <Hsp_query-from>291</Hsp_query-from>
-              <Hsp_query-to>317</Hsp_query-to>
-              <Hsp_hit-from>228</Hsp_hit-from>
-              <Hsp_hit-to>254</Hsp_hit-to>
-              <Hsp_query-frame>1</Hsp_query-frame>
-              <Hsp_hit-frame>1</Hsp_hit-frame>
-              <Hsp_identity>10</Hsp_identity>
-              <Hsp_positive>15</Hsp_positive>
-              <Hsp_align-len>27</Hsp_align-len>
-              <Hsp_qseq>KLSAKPADSLEISSNSPEIGKVVEAVL</Hsp_qseq>
-              <Hsp_hseq>ELKAKANQVVELNEKIPELNKATENVL</Hsp_hseq>
-              <Hsp_midline>+L AK    +E++   PE+ K  E VL</Hsp_midline>
-            </Hsp>
-          </Hit_hsps>
-        </Hit>
-        <Hit>
-          <Hit_num>19</Hit_num>
-          <Hit_id>gi|16411502|emb|CAD00110.1|</Hit_id>
-          <Hit_def>ftsZ [Listeria monocytogenes]</Hit_def>
-          <Hit_accession>CAD00110</Hit_accession>
-          <Hit_len>391</Hit_len>
-          <Hit_hsps>
-            <Hsp>
-              <Hsp_num>1</Hsp_num>
-              <Hsp_bit-score>24.925</Hsp_bit-score>
-              <Hsp_score>53</Hsp_score>
-              <Hsp_evalue>6.28001</Hsp_evalue>
-              <Hsp_query-from>251</Hsp_query-from>
-              <Hsp_query-to>296</Hsp_query-to>
-              <Hsp_hit-from>159</Hsp_hit-from>
-              <Hsp_hit-to>204</Hsp_hit-to>
-              <Hsp_query-frame>1</Hsp_query-frame>
-              <Hsp_hit-frame>1</Hsp_hit-frame>
-              <Hsp_identity>14</Hsp_identity>
-              <Hsp_positive>21</Hsp_positive>
-              <Hsp_align-len>46</Hsp_align-len>
-              <Hsp_qseq>DTTSLIPQESKTEIVVNTKEFLQAIDRASLLAREGRNNVVKLSAKP</Hsp_qseq>
-              <Hsp_hseq>DTLIVIPNDRLLQIVDKNTPMLEAFREADNVLRQGVQGISDLIAVP</Hsp_hseq>
-              <Hsp_midline>DT  +IP +   +IV      L+A   A  + R+G   +  L A P</Hsp_midline>
-            </Hsp>
-          </Hit_hsps>
-        </Hit>
-      </Iteration_hits>
-      <Iteration_stat>
-        <Statistics>
-          <Statistics_db-num>2846</Statistics_db-num>
-          <Statistics_db-len>870878</Statistics_db-len>
-          <Statistics_hsp-len>82</Statistics_hsp-len>
-          <Statistics_eff-space>1.88702e+08</Statistics_eff-space>
-          <Statistics_kappa>0.0450367</Statistics_kappa>
-          <Statistics_lambda>0.267</Statistics_lambda>
-          <Statistics_entropy>0.14</Statistics_entropy>
-        </Statistics>
-      </Iteration_stat>
-      <Iteration_message>CONVERGED</Iteration_message>
-    </Iteration>
-  </BlastOutput_iterations>
-</BlastOutput>
diff --git a/t/data/test-1.tab b/t/data/test-1.tab
new file mode 100644
index 0000000..2830d33
--- /dev/null
+++ b/t/data/test-1.tab
@@ -0,0 +1,3 @@
+N	D	S
+n1	d1	aaaa
+n2	d2	tttt
diff --git a/t/data/test-1.tab.gb b/t/data/test-1.tab.gb
new file mode 100644
index 0000000..aa2bfcf
--- /dev/null
+++ b/t/data/test-1.tab.gb
@@ -0,0 +1,16 @@
+LOCUS       n1                         4 bp    dna     linear   UNK 
+DEFINITION  d1
+ACCESSION   n1
+KEYWORDS    .
+FEATURES             Location/Qualifiers
+ORIGIN      
+        1 aaaa
+//
+LOCUS       n2                         4 bp    dna     linear   UNK 
+DEFINITION  d2
+ACCESSION   n2
+KEYWORDS    .
+FEATURES             Location/Qualifiers
+ORIGIN      
+        1 tttt
+//
diff --git a/t/data/test_space.embl b/t/data/test_space.embl
new file mode 100644
index 0000000..48d17ca
--- /dev/null
+++ b/t/data/test_space.embl
@@ -0,0 +1,19 @@
+ID   TEST standard; DNA; 10 BP.
+XX
+AC   TEST;
+XX
+DT   09-APR-2015
+XX
+DE   Test of space before quoted qualifier.
+XX
+XX
+FH   Key             Location/Qualifiers
+FT   CDS             1..10
+FT                   /*tag= x
+FT                   /gene= "someT"
+FT                   /product= "somewordandt extthatisquite lon
+FT                   gandthereforewraps"
+XX
+SQ   Sequence 10 BP; 10 A; 0 C; 0 G; 9 T; 0 U; 0 Other;
+     aaaaaaaaaa       10
+//
diff --git a/travis_scripts/dependency_installs b/travis_scripts/dependency_installs
index 93443d7..b11b14a 100755
--- a/travis_scripts/dependency_installs
+++ b/travis_scripts/dependency_installs
@@ -13,8 +13,8 @@ make 2>&1 | tail -n 1
 cd ..
 
 # push Bio-Root to front
-git clone https://github.com/bioperl/Bio-Root.git
-export PERL5LIB=$( pwd )/Bio-Root/lib:$( pwd ):$PERL5LIB
+# git clone https://github.com/bioperl/Bio-Root.git
+# export PERL5LIB=$( pwd )/Bio-Root/lib:$( pwd ):$PERL5LIB
 
 export SAMTOOLS=$( pwd )/samtools
 

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/debian-med/bioperl.git



More information about the debian-med-commit mailing list