diff --git a/tool_conf.xml.sample b/tool_conf.xml.sample
index 5151d04bb2e..42b08403f85 100644
--- a/tool_conf.xml.sample
+++ b/tool_conf.xml.sample
@@ -343,4 +343,7 @@
+
diff --git a/tools/hyphy/hyphy_branch_lengths_wrapper.py b/tools/hyphy/hyphy_branch_lengths_wrapper.py
new file mode 100644
index 00000000000..dd17ec8257e
--- /dev/null
+++ b/tools/hyphy/hyphy_branch_lengths_wrapper.py
@@ -0,0 +1,53 @@
+#Dan Blankenberg
+#takes commandline tree def and input multiple fasta alignment file and runs the branch length ananlysis
+import os, sys
+import hyphy_util
+
+#Retrieve hard coded hyphy path, this will need to be the same across the cluster
+HYPHY_PATH = hyphy_util.HYPHY_PATH
+HYPHY_EXECUTABLE = hyphy_util.HYPHY_EXECUTABLE
+
+#Read command line arguments
+input_filename = os.path.abspath(sys.argv[1].strip())
+output_filename = os.path.abspath(sys.argv[2].strip())
+tree_contents = sys.argv[3].strip()
+nuc_model = sys.argv[4].strip()
+base_freq = sys.argv[5].strip()
+model_options = sys.argv[6].strip()
+
+#Set up Temporary files for hyphy run
+#set up tree file
+tree_filename = hyphy_util.get_filled_temp_filename(tree_contents)
+
+#Guess if this is a single or multiple FASTA input file
+found_blank = False
+is_multiple = False
+for line in open(input_filename):
+ line = line.strip()
+ if line == "": found_blank = True
+ elif line.startswith(">") and found_blank:
+ is_multiple = True
+ break
+ else: found_blank = False
+
+#set up BranchLengths file
+BranchLengths_filename = hyphy_util.get_filled_temp_filename(hyphy_util.BranchLengths)
+if is_multiple:
+ os.unlink(BranchLengths_filename)
+ BranchLengths_filename = hyphy_util.get_filled_temp_filename(hyphy_util.BranchLengthsMF)
+ print "Multiple Alignment Analyses"
+else: print "Single Alignment Analyses"
+
+#setup Config file
+config_filename = hyphy_util.get_branch_lengths_config_filename(input_filename, nuc_model, model_options, base_freq, tree_filename, output_filename, BranchLengths_filename)
+
+#Run Hyphy
+hyphy_cmd = "%s BASEPATH=%s USEPATH=/dev/null %s" % (HYPHY_EXECUTABLE, HYPHY_PATH, config_filename)
+hyphy = os.popen(hyphy_cmd, 'r')
+#print hyphy.read()
+hyphy.close()
+
+#remove temporary files
+os.unlink(BranchLengths_filename)
+os.unlink(tree_filename)
+os.unlink(config_filename)
diff --git a/tools/hyphy/hyphy_branch_lengths_wrapper.xml b/tools/hyphy/hyphy_branch_lengths_wrapper.xml
new file mode 100644
index 00000000000..9e2789cf51f
--- /dev/null
+++ b/tools/hyphy/hyphy_branch_lengths_wrapper.xml
@@ -0,0 +1,93 @@
+
+
+
+ Estimation
+
+ hyphy_branch_lengths_wrapper.py $input1 $out_file1 "$tree" "$model" "$base_freq" "Global"
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+This tool takes a single or multiple FASTA alignment file and estimates branch lengths using HYPHY_, a maximum likelihood analyses package.
+
+For the tree definition, you only need to specify the species build names. For example, you could use the tree *((hg17,panTro1),(mm5,rn3),canFam1)*, if your FASTA file looks like this::
+
+ >hg17.chr7(+):26907301-26907310|hg17_0
+ GTGGGAGGT
+ >panTro1.chr6(+):28037319-28037328|panTro1_0
+ GTGGGAGGT
+ >mm5.chr6(+):52104022-52104031|mm5_0
+ GTGGGAGGT
+ >rn3.chr4(+):80734395-80734404|rn3_0
+ GTGGGAGGT
+ >canFam1.chr14(+):42826409-42826418|canFam1_0
+ GTGGGAGGT
+
+ >hg17.chr7(+):26907310-26907326|hg17_1
+ AGTCAGAGTGTCTGAG
+ >panTro1.chr6(+):28037328-28037344|panTro1_1
+ AGTCAGAGTGTCTGAG
+ >mm5.chr6(+):52104031-52104047|mm5_1
+ AGTCAGAGTGTCTGAG
+ >rn3.chr4(+):80734404-80734420|rn3_1
+ AGTCAGAGTATCTGAG
+ >canFam1.chr14(+):42826418-42826434|canFam1_1
+ AGTCAGAGTGTCTGAG
+
+ >hg17.chr7(+):26907326-26907338|hg17_2
+ GTAGAAGACCCC
+ >panTro1.chr6(+):28037344-28037356|panTro1_2
+ GTAGAAGACCCC
+ >mm5.chr6(+):52104047-52104059|mm5_2
+ GTAGACGATGCC
+ >rn3.chr4(+):80734420-80734432|rn3_2
+ GTAGATGATGCG
+ >canFam1.chr14(+):42826434-42826446|canFam1_2
+ GTAGAAGACCCC
+
+ >hg17.chr7(+):26907338-26907654|hg17_3
+ GGGGAAGGAACGCAGGGCGAAGAGCTGGACTTCTCTGAGGAT---TCCTCGGCCTTCTCGT-----CGTTTCCTGG----CGGGGTGGCCGGAGAGATGGGCAAGAGACCCTCCTTCTCACGTTTCTTTTGCTTCATTCGGCGGTTCTGGAACCAGATCTTCACTTGGGTCTCGTTGAGCTGCAGGGATGCAGCGATCTCCACCCTGCGGGCGCGCGTCAGGTACTTGTTGAAGTGGAACTCCTTCTCCAGTTCCGTGAGCTGCTTGGTAGTGAAGTTGGTGCGCACCGCGTTGGGTTGACCCAGGTAGCCGTACTCTCCAACTTTCC
+ >panTro1.chr6(+):28037356-28037672|panTro1_3
+ GGGGAAGGAACGCAGGGCGAAGAGCTGGACTTCTCTGAGGAT---TCCTCGGCCTTCTCGT-----CGTTTCCTGG----CGGGGTGGCCGGAGAGATGGGCAAGAGACCCTCCTTCTCACGTTTCTTTTGCTTCATTCGGCGGTTCTGGAACCAGATCTTCACTTGGGTCTCGTTGAGCTGCAGGGATGCAGCGATCTCCACCCTGCGGGCGCGCGTCAGGTACTTGTTGAAGTGGAACTCCTTCTCCAGTTCCGTGAGCTGCTTGGTAGTGAAGTTGGTGCGCACCGCGTTGGGTTGACCCAGGTAGCCGTACTCTCCAACTTTCC
+ >mm5.chr6(+):52104059-52104375|mm5_3
+ GGAGAAGGGGCACTGGGCGAGGGGCTAGATTTCTCAGATGAT---TCTTCCGTTTTCTCAT-----CGCTGCCAGG----AGGAGTGGCAGGGGAGATGGGCAGGAGCCCCTCCTTCTCACGCTTCTTCTGCTTCATGCGGCGATTCTGGAACCAGATCTTCACCTGGGTCTCATTGAGCTGTAGGGACGCGGCAATCTCCACCCTGCGCGCTCGTGTAAGGTACTTGTTGAAGTGGAACTCCTTCTCCAGCTCTGTGAGCTGCTTGGTGGTGAAATTGGTGCGCACTGCGTTGGGTTGACCCACGTAGCCGTACTCTCCAACTTTCC
+ >rn3.chr4(+):80734432-80734748|rn3_3
+ GGAGAAGGGGCGCTGGGCGAGGAGCTGGATTTCTCAGATGAT---TCTTCAGTTTTCTCAT-----CGCTTCCAGG----AGGGGTGGCGGGTGAAATGGGCAAGAGCCCCTCTTTCTCGCGCTTCTTCTGCTTCATGCGGCGATTCTGGAACCAGATCTTCACCTGGGTCTCATTGAGTTGCAGGGACGCGGCTATCTCCACCCTGCGGGCTCTTGTTAGGTACTTGTTGAAGTGGAACTCCTTCTCCAGCTCTGTGAGCTGCTTGGTGGTGAAGTTGGTGCGCACTGCGTTGGGTTGACCCACGTAGCCATACTCTCCAACTTTCC
+ >canFam1.chr14(+):42826446-42826762|canFam1_3
+ GGAGACGGAATGCAGGGCGAGGAGCTGGATTTCTCTGAAGAT---TCCTCCGCCTTCTCCT-----CACTTCCTGG----CGGGGTGGCAGGGGAGATGGGCAAAAGGCCCTCTTTCTCTCGTTTCTTCTGCTTCATCCGGCGGTTCTGGAACCAGATCTTCACCTGGGTCTCGTTGAGCTGCAGGGATGCTGCGATCTCCACCCTGCGGGCGCGGGTCAGATACTTATTGAAGTGGAACTCCTTTTCCAGCTCGGTGAGCTGCTTGGTGGTGAAGTTGGTACGCACTGCATTCGGTTGACCCACGTAGCCGTACTCTCCAACTTTCC
+
+
+
+.. _HYPHY: http://www.hyphy.org
+
+
+
diff --git a/tools/hyphy/hyphy_util.py b/tools/hyphy/hyphy_util.py
new file mode 100644
index 00000000000..01e4a4ac5ba
--- /dev/null
+++ b/tools/hyphy/hyphy_util.py
@@ -0,0 +1,516 @@
+#Dan Blankenberg
+#Contains file contents and helper methods for HYPHY configurations
+import tempfile, os
+
+def get_filled_temp_filename(contents):
+ fh = tempfile.NamedTemporaryFile('w')
+ filename = fh.name
+ fh.close()
+ fh = open(filename, 'w')
+ fh.write(contents)
+ fh.close()
+ return filename
+
+#Hard Coded hyphy path, this will need to be the same across the cluster
+HYPHY_PATH = "/home/universe/linux-i686/HYPHY"
+HYPHY_EXECUTABLE = os.path.join(HYPHY_PATH,"HYPHY")
+
+BranchLengthsMF = """
+VERBOSITY_LEVEL = -1;
+fscanf (PROMPT_FOR_FILE, "Lines", inLines);
+
+_linesIn = Columns (inLines);
+
+/*---------------------------------------------------------*/
+
+_currentGene = 1;
+_currentState = 0;
+geneSeqs = "";
+geneSeqs * 128;
+
+for (l=0; l<_linesIn; l=l+1)
+{
+ if (Abs(inLines[l]) == 0)
+ {
+ if (_currentState == 1)
+ {
+ geneSeqs * 0;
+ DataSet ds = ReadFromString (geneSeqs);
+ _processAGene (_currentGene);
+ geneSeqs * 128;
+ _currentGene = _currentGene + 1;
+ }
+ }
+ else
+ {
+ if (_currentState == 0)
+ {
+ _currentState = 1;
+ }
+ geneSeqs * inLines[l];
+ geneSeqs * "\\n";
+ }
+}
+
+if (_currentState == 1)
+{
+ geneSeqs * 0;
+ if (Abs(geneSeqs))
+ {
+ DataSet ds = ReadFromString (geneSeqs);
+ _processAGene (_currentGene);
+ }
+}
+
+fprintf (resultFile,CLOSE_FILE);
+
+/*---------------------------------------------------------*/
+
+function _processAGene (_geneID)
+{
+ DataSetFilter filteredData = CreateFilter (ds,1);
+ if (_currentGene == 1)
+ {
+ SelectTemplateModel (filteredData);
+
+ SetDialogPrompt ("Tree file");
+ fscanf (PROMPT_FOR_FILE, "Tree", givenTree);
+ fscanf (stdin, "String", resultFile);
+
+ /* do sequence to branch map */
+
+ validNames = {};
+ taxonNameMap = {};
+
+ for (k=0; k