diff --git a/Trigger/TrigAlgorithms/TrigTauDiscriminant/TrigTauDiscriminant/TrigTauDiscriBuilder.h b/Trigger/TrigAlgorithms/TrigTauDiscriminant/TrigTauDiscriminant/TrigTauDiscriBuilder.h
new file mode 100755
index 0000000000000000000000000000000000000000..763ddcaa3eaaf25a563433de8b8c5ee727c0cb61
--- /dev/null
+++ b/Trigger/TrigAlgorithms/TrigTauDiscriminant/TrigTauDiscriminant/TrigTauDiscriBuilder.h
@@ -0,0 +1,66 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+//
+/********************************************************************
+ *
+ * NAME:     TrigTauRecDiscriminant.h
+ * PACKAGE:  Trigger/TrigAlgorithms/TrigTauDiscriminant
+ *
+ * AUTHOR:   M. Morgenstern (based on tauDiscriBuilder)
+ * CREATED:  
+  *********************************************************************/
+
+#ifndef TRIGTAUDISCRIBUILDER_H
+#define TRIGTAUDISCRIBUILDER_H
+
+#include "TrigInterfaces/FexAlgo.h"
+#include "TrigTimeAlgs/TrigTimerSvc.h"
+#include "GaudiKernel/Algorithm.h"
+#include "GaudiKernel/ToolHandle.h"
+#include "TauDiscriminant/TauDiscriToolBase.h"
+#include <vector>
+
+namespace HLT {
+  class TriggerElement;
+}
+
+using namespace std;
+
+class TrigTauDiscriBuilder: public HLT::FexAlgo {
+ public:
+  /**  constructor */
+  TrigTauDiscriBuilder(const std::string& name, ISvcLocator* pSvcLocator);
+
+  /** destructor */
+  ~TrigTauDiscriBuilder();
+  // Gaudi algorithm hooks
+
+  /** HLT method to initialize */
+  HLT::ErrorCode  hltInitialize();
+
+  /** HLT method to finalize */
+  HLT::ErrorCode hltFinalize();
+
+  /** HLT method to execute FEX algo on a given TE.
+   input is last TE from EF ID, output is TE for EF tauRec hypo execution */
+  HLT::ErrorCode hltExecute(const HLT::TriggerElement* inputTE, HLT::TriggerElement* outputTE);
+
+ private:
+  /** internal tool store */
+  ToolHandleArray<TauDiscriToolBase>  tools;
+
+  TauDetailsManager*                  manager;
+
+  /** vector of Timers */
+  std::vector<TrigTimer* > m_mytimers;
+
+  /** Monitoring : m_LLHScore obtained */
+  double  m_LLHScore; 
+
+  /** Monitoring : m_BDTScore obtained */
+  double  m_BDTScore; 
+
+};
+#endif
diff --git a/Trigger/TrigAlgorithms/TrigTauDiscriminant/cmt/requirements b/Trigger/TrigAlgorithms/TrigTauDiscriminant/cmt/requirements
new file mode 100755
index 0000000000000000000000000000000000000000..ca7cb5f57a61678e1c0b8f067dbad8fb462eb0f3
--- /dev/null
+++ b/Trigger/TrigAlgorithms/TrigTauDiscriminant/cmt/requirements
@@ -0,0 +1,30 @@
+package TrigTauDiscriminant
+
+# =====================================================================
+#
+# This is the Trigger EF tau ID algorithm package.
+#
+# =====================================================================
+
+author Marcus Morgenstern <marcus.matthias.morgenstern@cern.ch>
+
+# =====================================================================
+
+public
+use AtlasPolicy             AtlasPolicy-*
+use GaudiInterface          GaudiInterface-*             External
+use TauDiscriminant         TauDiscriminant-*       	 PhysicsAnalysis/TauID
+use TrigInterfaces          TrigInterfaces-*             Trigger/TrigSteer
+use TrigTimeAlgs            TrigTimeAlgs-*               Trigger/TrigTools
+
+private
+use TrigSteeringEvent       TrigSteeringEvent-*          Trigger/TrigEvent
+use TrigT1Interfaces        TrigT1Interfaces-*           Trigger/TrigT1
+use xAODTau                 xAODTau-*                    Event/xAOD
+use TrigParticle	    TrigParticle-*		 Trigger/TrigEvent 
+
+# =====================================================================
+apply_pattern dual_use_library files="*.cxx"
+apply_pattern declare_runtime files="../share/*.root ../share/*.bin ../share/*.txt"
+apply_pattern declare_joboptions files="*.txt *.py"
+apply_pattern declare_python_modules files="*.py"
diff --git a/Trigger/TrigAlgorithms/TrigTauDiscriminant/python/TrigTauDiscriGetter.py b/Trigger/TrigAlgorithms/TrigTauDiscriminant/python/TrigTauDiscriGetter.py
new file mode 100644
index 0000000000000000000000000000000000000000..9f318e42b3a11a46bc55e6baa2a84173502ed466
--- /dev/null
+++ b/Trigger/TrigAlgorithms/TrigTauDiscriminant/python/TrigTauDiscriGetter.py
@@ -0,0 +1,96 @@
+# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+
+# AUTHOR:   Marcin.Wolter@cern.ch
+# CREATED:  20 March 2008
+# 
+# 23 Nov 2010: cleaning up (Noel Dawe)
+
+from AthenaCommon.Logging import logging
+from AthenaCommon.AlgSequence import AlgSequence
+from AthenaCommon.SystemOfUnits import *
+from AthenaCommon.Constants import *
+
+from AthenaCommon.AppMgr import ToolSvc
+
+import traceback
+
+from TrigTauDiscriminant.TrigTauDiscriminantConf import TrigTauDiscriBuilder
+
+def singleton(cls):
+
+    log = logging.getLogger('%s::__init__'% cls.__name__) 
+    instances = {}
+    def getinstance(*args, **kwargs):
+        if cls in instances:
+            log.warning("Attempting to construct more than one %s. Returning the singleton."% cls.__name__)
+            return instances[cls]
+        obj = cls(*args, **kwargs)
+        instances[cls] = obj
+        return obj
+    return getinstance
+
+#@singleton
+
+class TrigTauDiscriGetter(TrigTauDiscriBuilder):
+    __slots__ = [ '_mytools']
+    def __init__(self, name = "TrigTauDiscriminant"):
+         super( TrigTauDiscriGetter , self ).__init__( name )
+
+         #monitoring part. To switch off do in topOption TriggerFlags.enableMonitoring = []
+         from TrigTauDiscriminant.TrigTauDiscriminantMonitoring import TrigTauDiscriminantValidationMonitoring, TrigTauDiscriminantOnlineMonitoring 
+         validation = TrigTauDiscriminantValidationMonitoring()        
+         online     = TrigTauDiscriminantOnlineMonitoring()
+         
+         from TrigTimeMonitor.TrigTimeHistToolConfig import TrigTimeHistToolConfig
+         time = TrigTimeHistToolConfig("Time")
+         
+         self.AthenaMonTools = [ time, validation, online ]
+         
+         self.Tools = [self.LLHtoolset(), self.BDTtoolset()]
+    
+    def LLHtoolset(self):
+        tools = []
+        mlog = logging.getLogger('TrigTauDiscriGetter::configure LLH:')
+        from TauDiscriminant.TauDiscriminantConf import TauLLH
+        tauLLH = TauLLH()
+        tauLLH.FileNameTauPDF = "pdfs_tau_trigger.root"
+        tauLLH.FileNameJetPDF = "pdfs_jet_trigger.root"
+        return tauLLH
+
+
+    def BDTtoolset(self):
+        from TauDiscriminant.TauDiscriminantConf import TauJetBDT
+        return TauJetBDT(jetBDT = "trigger.jet.BDT.bin",
+                         jetSigBits = "trigger.sig.bits.jet.BDT.txt")
+
+class TrigTauDiscriGetter2015(TrigTauDiscriBuilder):
+    __slots__ = [ '_mytools']
+    def __init__(self, name = "TrigTauDiscriminant2015"):
+         super( TrigTauDiscriGetter2015 , self ).__init__( name )
+
+         #monitoring part. To switch off do in topOption TriggerFlags.enableMonitoring = []
+         from TrigTauDiscriminant.TrigTauDiscriminantMonitoring import TrigTauDiscriminantValidationMonitoring, TrigTauDiscriminantOnlineMonitoring 
+         validation = TrigTauDiscriminantValidationMonitoring()        
+         online     = TrigTauDiscriminantOnlineMonitoring()
+         
+         from TrigTimeMonitor.TrigTimeHistToolConfig import TrigTimeHistToolConfig
+         time = TrigTimeHistToolConfig("Time")
+         
+         self.AthenaMonTools = [ time, validation, online ]
+         
+         self.Tools = [self.LLHtoolset(), self.BDTtoolset()]
+    
+    def LLHtoolset(self):
+        tools = []
+        mlog = logging.getLogger('TrigTauDiscriGetter2015::configure LLH:')
+        from TauDiscriminant.TauDiscriminantConf import TauLLH
+        tauLLH = TauLLH()
+        tauLLH.FileNameTauPDF = "pdfs_tau_trigger.root"
+        tauLLH.FileNameJetPDF = "pdfs_jet_trigger.root"
+        return tauLLH
+
+
+    def BDTtoolset(self):
+        from TauDiscriminant.TauDiscriminantConf import TauJetBDT
+        return TauJetBDT(jetBDT = "trigger.jet.BDT.DC14.ver1.bin",
+                         jetSigBits = "trigger.sig.bits.jet.BDT.DC14.ver1.txt")
diff --git a/Trigger/TrigAlgorithms/TrigTauDiscriminant/python/TrigTauDiscriminantMonitoring.py b/Trigger/TrigAlgorithms/TrigTauDiscriminant/python/TrigTauDiscriminantMonitoring.py
new file mode 100644
index 0000000000000000000000000000000000000000..3fcd48b4400ed5fefbe206dc0e012f2e19745205
--- /dev/null
+++ b/Trigger/TrigAlgorithms/TrigTauDiscriminant/python/TrigTauDiscriminantMonitoring.py
@@ -0,0 +1,24 @@
+# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+
+################# Validation, DQ checks
+from TrigMonitorBase.TrigGenericMonitoringToolConfig import defineHistogram, TrigGenericMonitoringToolConfig 
+
+class TrigTauDiscriminantOnlineMonitoring(TrigGenericMonitoringToolConfig):
+    def __init__ (self, name="TrigTauDiscriminantOnlineMonitoring"):
+        super(TrigTauDiscriminantOnlineMonitoring, self).__init__(name)
+        self.defineTarget("Online")
+        
+        self.Histograms += [ defineHistogram('EF_LLHScore', type='TH1F', title="EF LLHScore; LLH score; a.u.", xbins=100, xmin=-30., xmax=30.) ]
+        self.Histograms += [ defineHistogram('EF_BDTScore', type='TH1F', title="EF BDTScore; BDT score; a.u.", xbins=50, xmin=-0.1, xmax=1.) ]
+        
+########## add validation specific histograms 
+class TrigTauDiscriminantValidationMonitoring(TrigTauDiscriminantOnlineMonitoring):
+    def __init__ (self, name="TrigTauDiscriminantValidationMonitoring"):
+        super(TrigTauDiscriminantValidationMonitoring, self).__init__(name)
+        self.defineTarget("Validation")
+
+        
+
+
+
+
diff --git a/Trigger/TrigAlgorithms/TrigTauDiscriminant/share/LMTCutsLLHTrigger.root b/Trigger/TrigAlgorithms/TrigTauDiscriminant/share/LMTCutsLLHTrigger.root
new file mode 100644
index 0000000000000000000000000000000000000000..98cdd83fbdbaeab72816ff488643c72f437c61ba
Binary files /dev/null and b/Trigger/TrigAlgorithms/TrigTauDiscriminant/share/LMTCutsLLHTrigger.root differ
diff --git a/Trigger/TrigAlgorithms/TrigTauDiscriminant/share/TrigTauDiscri_jobOptions.py b/Trigger/TrigAlgorithms/TrigTauDiscriminant/share/TrigTauDiscri_jobOptions.py
new file mode 100755
index 0000000000000000000000000000000000000000..55b19d97eff46fd7abe641409b409955337ce438
--- /dev/null
+++ b/Trigger/TrigAlgorithms/TrigTauDiscriminant/share/TrigTauDiscri_jobOptions.py
@@ -0,0 +1,2 @@
+from TrigTauDiscriminant.TrigTauDiscriGetter import TrigTauDiscriGetter
+TrigTauDiscriGetter()
diff --git a/Trigger/TrigAlgorithms/TrigTauDiscriminant/share/pdfs_jet_trigger.root b/Trigger/TrigAlgorithms/TrigTauDiscriminant/share/pdfs_jet_trigger.root
new file mode 100644
index 0000000000000000000000000000000000000000..eea3238b0f15f2420170329c8341e92db514fe22
Binary files /dev/null and b/Trigger/TrigAlgorithms/TrigTauDiscriminant/share/pdfs_jet_trigger.root differ
diff --git a/Trigger/TrigAlgorithms/TrigTauDiscriminant/share/pdfs_tau_trigger.root b/Trigger/TrigAlgorithms/TrigTauDiscriminant/share/pdfs_tau_trigger.root
new file mode 100644
index 0000000000000000000000000000000000000000..448f625e6764443e851db6d8216bc26796b580f0
Binary files /dev/null and b/Trigger/TrigAlgorithms/TrigTauDiscriminant/share/pdfs_tau_trigger.root differ
diff --git a/Trigger/TrigAlgorithms/TrigTauDiscriminant/share/trigger.jet.BDT.DC14.ver1.bin b/Trigger/TrigAlgorithms/TrigTauDiscriminant/share/trigger.jet.BDT.DC14.ver1.bin
new file mode 100644
index 0000000000000000000000000000000000000000..acb0a3eab2157bdc5c1187450505b9171ff10d9f
Binary files /dev/null and b/Trigger/TrigAlgorithms/TrigTauDiscriminant/share/trigger.jet.BDT.DC14.ver1.bin differ
diff --git a/Trigger/TrigAlgorithms/TrigTauDiscriminant/share/trigger.sig.bits.jet.BDT.DC14.ver1.txt b/Trigger/TrigAlgorithms/TrigTauDiscriminant/share/trigger.sig.bits.jet.BDT.DC14.ver1.txt
new file mode 100644
index 0000000000000000000000000000000000000000..e002535875aff1b71a05df49651c0103a495f440
--- /dev/null
+++ b/Trigger/TrigAlgorithms/TrigTauDiscriminant/share/trigger.sig.bits.jet.BDT.DC14.ver1.txt
@@ -0,0 +1,167 @@
+1
+NUMTRACK I
+0	1
+-3
+-3
+-1
+2
+BDT F
+ET F
+3
+1.000000E+00
+-4	20
+1	0
+0.000000	0.548691
+21656.333923	0.548691
+22926.343918	0.548691
+24593.296051	0.548691
+26306.161880	0.548691
+28070.671082	0.548691
+30043.027878	0.548691
+32125.659943	0.548691
+34487.464905	0.548691
+37277.324677	0.548691
+40839.645386	0.548691
+46339.218140	0.548691
+60690.322876	0.548691
+98979.080200	0.548691
+149154.571533	0.548691
+200771.240234	0.548691
+255304.763794	0.548691
+321777.038574	0.548691
+426951.782227	0.548691
+1000000.000000	0.548691
+-2	0.000000E+00
+-2	1.000000E+00
+-1
+1.000000E+00
+-4	20
+1	0
+0.000000	0.548691
+21656.333923	0.548691
+22926.343918	0.548691
+24593.296051	0.548691
+26306.161880	0.548691
+28070.671082	0.548691
+30043.027878	0.548691
+32125.659943	0.548691
+34487.464905	0.548691
+37277.324677	0.548691
+40839.645386	0.548691
+46339.218140	0.548691
+60690.322876	0.548691
+98979.080200	0.548691
+149154.571533	0.548691
+200771.240234	0.548691
+255304.763794	0.548691
+321777.038574	0.548691
+426951.782227	0.548691
+1000000.000000	0.548691
+-2	0.000000E+00
+-2	1.000000E+00
+-1
+1.000000E+00
+-4	20
+1	0
+0.000000	0.548691
+21656.333923	0.548691
+22926.343918	0.548691
+24593.296051	0.548691
+26306.161880	0.548691
+28070.671082	0.548691
+30043.027878	0.548691
+32125.659943	0.548691
+34487.464905	0.548691
+37277.324677	0.548691
+40839.645386	0.548691
+46339.218140	0.548691
+60690.322876	0.548691
+98979.080200	0.548691
+149154.571533	0.548691
+200771.240234	0.548691
+255304.763794	0.548691
+321777.038574	0.548691
+426951.782227	0.548691
+1000000.000000	0.548691
+-2	0.000000E+00
+-2	1.000000E+00
+-1
+3
+1.000000E+00
+-4	20
+1	0
+0.000000	0.637151
+22682.210922	0.637151
+24791.942596	0.637151
+26799.808502	0.637151
+28804.681778	0.637151
+30424.184799	0.637151
+32293.365479	0.637151
+34302.516937	0.637151
+36481.178284	0.637151
+39073.657990	0.637151
+42224.178314	0.637151
+47190.910339	0.637151
+61415.950775	0.637151
+115868.278503	0.637151
+178576.110840	0.637151
+230849.807739	0.637151
+284403.106689	0.637151
+346304.779053	0.637151
+443284.576416	0.637151
+1000000.000000	0.637151
+-2	0.000000E+00
+-2	1.000000E+00
+-1
+1.000000E+00
+-4	20
+1	0
+0.000000	0.637151
+22682.210922	0.637151
+24791.942596	0.637151
+26799.808502	0.637151
+28804.681778	0.637151
+30424.184799	0.637151
+32293.365479	0.637151
+34302.516937	0.637151
+36481.178284	0.637151
+39073.657990	0.637151
+42224.178314	0.637151
+47190.910339	0.637151
+61415.950775	0.637151
+115868.278503	0.637151
+178576.110840	0.637151
+230849.807739	0.637151
+284403.106689	0.637151
+346304.779053	0.637151
+443284.576416	0.637151
+1000000.000000	0.637151
+-2	0.000000E+00
+-2	1.000000E+00
+-1
+1.000000E+00
+-4	20
+1	0
+0.000000	0.637151
+22682.210922	0.637151
+24791.942596	0.637151
+26799.808502	0.637151
+28804.681778	0.637151
+30424.184799	0.637151
+32293.365479	0.637151
+34302.516937	0.637151
+36481.178284	0.637151
+39073.657990	0.637151
+42224.178314	0.637151
+47190.910339	0.637151
+61415.950775	0.637151
+115868.278503	0.637151
+178576.110840	0.637151
+230849.807739	0.637151
+284403.106689	0.637151
+346304.779053	0.637151
+443284.576416	0.637151
+1000000.000000	0.637151
+-2	0.000000E+00
+-2	1.000000E+00
+-1
diff --git a/Trigger/TrigAlgorithms/TrigTauDiscriminant/share/trigger.sig.bits.jet.BDT.txt b/Trigger/TrigAlgorithms/TrigTauDiscriminant/share/trigger.sig.bits.jet.BDT.txt
new file mode 100644
index 0000000000000000000000000000000000000000..1a5cc293e3d307cb98426e775e51ef84cef9dcae
--- /dev/null
+++ b/Trigger/TrigAlgorithms/TrigTauDiscriminant/share/trigger.sig.bits.jet.BDT.txt
@@ -0,0 +1,167 @@
+1
+NUMTRACK I
+0	1
+-3
+-3
+-1
+2
+BDT F
+ET F
+3
+1.000000E+00
+-4	20
+1	0
+0.000000	0.460962
+21656.333923	0.460962
+22926.343918	0.475361
+24593.296051	0.482205
+26306.161880	0.489278
+28070.671082	0.490478
+30043.027878	0.495068
+32125.659943	0.495966
+34487.464905	0.500836
+37277.324677	0.502799
+40839.645386	0.505320
+46339.218140	0.511377
+60690.322876	0.523181
+98979.080200	0.558646
+149154.571533	0.571698
+200771.240234	0.572958
+255304.763794	0.574896
+321777.038574	0.578565
+426951.782227	0.579559
+1000000.000000	0.579559
+-2	0.000000E+00
+-2	1.000000E+00
+-1
+1.000000E+00
+-4	20
+1	0
+0.000000	0.481426
+21656.333923	0.481426
+22926.343918	0.493074
+24593.296051	0.496705
+26306.161880	0.500792
+28070.671082	0.502677
+30043.027878	0.505702
+32125.659943	0.507152
+34487.464905	0.510871
+37277.324677	0.513498
+40839.645386	0.517145
+46339.218140	0.524921
+60690.322876	0.538352
+98979.080200	0.577657
+149154.571533	0.588020
+200771.240234	0.590350
+255304.763794	0.592971
+321777.038574	0.595311
+426951.782227	0.595627
+1000000.000000	0.595627
+-2	0.000000E+00
+-2	1.000000E+00
+-1
+1.000000E+00
+-4	20
+1	0
+0.000000	0.495644
+21656.333923	0.495644
+22926.343918	0.503231
+24593.296051	0.506629
+26306.161880	0.510270
+28070.671082	0.511804
+30043.027878	0.515213
+32125.659943	0.517773
+34487.464905	0.521487
+37277.324677	0.523384
+40839.645386	0.529536
+46339.218140	0.536197
+60690.322876	0.550337
+98979.080200	0.591893
+149154.571533	0.600343
+200771.240234	0.603642
+255304.763794	0.605938
+321777.038574	0.606170
+426951.782227	0.607602
+1000000.000000	0.607602
+-2	0.000000E+00
+-2	1.000000E+00
+-1
+3
+1.000000E+00
+-4	20
+1	0
+0.000000	0.466324
+22682.210922	0.466324
+24791.942596	0.479020
+26799.808502	0.482824
+28804.681778	0.484509
+30424.184799	0.485687
+32293.365479	0.491166
+34302.516937	0.490368
+36481.178284	0.490207
+39073.657990	0.490703
+42224.178314	0.494530
+47190.910339	0.496902
+61415.950775	0.498161
+115868.278503	0.510038
+178576.110840	0.499222
+230849.807739	0.499147
+284403.106689	0.485451
+346304.779053	0.482073
+443284.576416	0.469679
+1000000.000000	0.469679
+-2	0.000000E+00
+-2	1.000000E+00
+-1
+1.000000E+00
+-4	20
+1	0
+0.000000	0.476452
+22682.210922	0.476452
+24791.942596	0.487989
+26799.808502	0.490991
+28804.681778	0.492825
+30424.184799	0.492600
+32293.365479	0.498917
+34302.516937	0.497358
+36481.178284	0.498247
+39073.657990	0.499069
+42224.178314	0.502665
+47190.910339	0.503869
+61415.950775	0.505014
+115868.278503	0.519243
+178576.110840	0.509743
+230849.807739	0.509525
+284403.106689	0.501346
+346304.779053	0.496038
+443284.576416	0.483801
+1000000.000000	0.483801
+-2	0.000000E+00
+-2	1.000000E+00
+-1
+1.000000E+00
+-4	20
+1	0
+0.000000	0.485142
+22682.210922	0.485142
+24791.942596	0.495053
+26799.808502	0.497982
+28804.681778	0.497967
+30424.184799	0.498625
+32293.365479	0.504418
+34302.516937	0.504108
+36481.178284	0.504522
+39073.657990	0.505752
+42224.178314	0.508298
+47190.910339	0.510756
+61415.950775	0.511699
+115868.278503	0.526592
+178576.110840	0.519114
+230849.807739	0.519139
+284403.106689	0.512130
+346304.779053	0.507713
+443284.576416	0.497771
+1000000.000000	0.497771
+-2	0.000000E+00
+-2	1.000000E+00
+-1
diff --git a/Trigger/TrigAlgorithms/TrigTauDiscriminant/src/TrigTauDiscriBuilder.cxx b/Trigger/TrigAlgorithms/TrigTauDiscriminant/src/TrigTauDiscriBuilder.cxx
new file mode 100644
index 0000000000000000000000000000000000000000..bb33f1437488427f802bdd0df1337ebcbabe026c
--- /dev/null
+++ b/Trigger/TrigAlgorithms/TrigTauDiscriminant/src/TrigTauDiscriBuilder.cxx
@@ -0,0 +1,171 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+/********************************************************************
+ *
+ * NAME:     TrigTauDiscriBuilder.cxx
+ * PACKAGE:  Trigger/TrigAlgorithms/TrigTauDiscriminant
+ *
+ * AUTHOR:   M. Morgenstern
+ *  *   
+ *           Run a subset of the offline TauDiscriminant routines in the EF 
+ *********************************************************************/
+
+#include "TrigT1Interfaces/TrigT1Interfaces_ClassDEF.h"
+#include "TrigSteeringEvent/TrigRoiDescriptor.h"
+#include "xAODTau/TauJetContainer.h"
+#include "xAODTau/TauJetAuxContainer.h"
+#include "xAODTau/TauDefs.h"
+#include "TauDiscriminant/TauDiscriToolBase.h"
+#include "TauDiscriminant/FakeTauBits.h"
+#include "TrigTauDiscriminant/TrigTauDiscriBuilder.h"
+
+using namespace std;
+
+/////////////////////////////////////////////////////////////////
+// Invokes base class constructor.
+TrigTauDiscriBuilder::TrigTauDiscriBuilder(const std::string& name,ISvcLocator* pSvcLocator):
+		  HLT::FexAlgo(name, pSvcLocator),
+		  tools(this),
+		  manager(0)
+{
+	declareProperty("Tools", tools, "List of TrigTauDiscriminantTools");
+
+	declareMonitoredVariable("EF_LLHScore",m_LLHScore);
+	declareMonitoredVariable("EF_BDTScore",m_BDTScore);
+}
+
+/////////////////////////////////////////////////////////////////
+TrigTauDiscriBuilder::~TrigTauDiscriBuilder()
+{ }
+
+/////////////////////////////////////////////////////////////////
+HLT::ErrorCode TrigTauDiscriBuilder::hltInitialize()
+{
+
+	msg() << MSG::INFO << "TrigTauDiscriBuilder::initialize()" << endreq;
+
+	this->manager = new TauDetailsManager(&*evtStore(), true);
+
+	///////////////////
+	// Allocate Tools //
+	////////////////////
+
+	// check tool names
+	if ( tools.begin() == tools.end() ) {
+		msg() << MSG::ERROR << " no tools given for this algorithm." << endreq;
+		return HLT::BAD_JOB_SETUP;
+	}
+
+	// find tools
+	//-------------------------------------------------------------------------
+	ToolHandleArray<TauDiscriToolBase> ::iterator p_itT = tools.begin();
+	ToolHandleArray<TauDiscriToolBase> ::iterator p_itTE = tools.end();
+	msg() << MSG::INFO << "List of tools in execution sequence:" << endreq;
+	msg() << MSG::INFO << "------------------------------------" << endreq;
+
+	for(; p_itT != p_itTE; ++p_itT ) {
+		StatusCode p_sc = p_itT->retrieve();
+		if( p_sc.isFailure() ) {
+			msg() << MSG::WARNING << "Cannot find tool named <";
+			msg() << *p_itT << ">" << endreq;
+			return HLT::BAD_JOB_SETUP;
+		}
+		else {
+			//add to manager
+			if( (*p_itT)->prepare(*this->manager).isFailure() ) {
+				msg() << MSG::FATAL << "Initialization failed in tool " << p_itT->name() << endreq;
+				return HLT::BAD_JOB_SETUP;
+			}
+			//add to timer
+			else {
+				msg() << MSG::INFO << "REGTEST ";
+				msg() <<" add timer for tool "<< ( *p_itT )->type() <<" "<< ( *p_itT )->name() << endreq;
+				if(  doTiming() ) m_mytimers.push_back(addTimer((*p_itT)->name())) ;
+			}
+		}
+	}
+	msg() << MSG::INFO << " " << endreq;
+	msg() << MSG::INFO << "------------------------------------" << endreq;
+
+	return HLT::OK;
+}
+
+/////////////////////////////////////////////////////////////////
+HLT::ErrorCode TrigTauDiscriBuilder::hltFinalize()
+{
+	msg() << MSG::DEBUG << "Finalizing TrigTauDiscriBuilder" << endreq;
+	if(this->manager) delete this->manager;
+	return HLT::OK;
+}
+
+/////////////////////////////////////////////////////////////////
+// ATHENA EXECUTE METHOD:
+HLT::ErrorCode TrigTauDiscriBuilder::hltExecute(const HLT::TriggerElement* /*inputTE*/, HLT::TriggerElement* outputTE){
+
+	msg() << MSG::DEBUG << "Executing TrigTauDiscriBuilder" << endreq;
+
+	xAOD::TauJetContainer* tau_container = 0;
+	const xAOD::TauJetContainer* const_tau_container(0);
+	HLT::ErrorCode hltStatus = getFeature(outputTE, const_tau_container, "TrigTauRecMerged");
+	tau_container = const_cast<xAOD::TauJetContainer*>(const_tau_container);
+
+	if (hltStatus!=HLT::OK || ! tau_container) {
+		msg() << MSG::DEBUG << "No input tau container found!" << endreq;
+		return HLT::OK;
+	}
+
+	FakeTauBits* fakeBits(0);
+	FakeTauScores* fakeScores(0);
+
+	// Update event-based variables
+	if (!this->manager->updateEvent()) {
+		msg() << MSG::WARNING << "Updating event-based variables in TauDetailsManager failed! Do not trust discriminant outputs!" << endreq;
+		return HLT::OK;
+	}
+
+	xAOD::TauJetContainer::iterator tau_it(tau_container->begin());
+	xAOD::TauJetContainer::iterator tau_end(tau_container->end());
+	// Loop over tau's:
+	for (; tau_it != tau_end; ++tau_it) {
+		if (!this->manager->update(**tau_it)) {
+			msg() << MSG::WARNING << "Updating tau-based variables in TauDetailsManager failed! Do not trust discriminant outputs!" << endreq;
+			return HLT::OK;
+		}
+		msg() << MSG::VERBOSE << *this->manager << endreq;
+
+		//-----------------------------------------------------------------
+		// Process the candidate
+		//-----------------------------------------------------------------
+		ToolHandleArray<TauDiscriToolBase>::iterator tool_it(this->tools.begin());
+		ToolHandleArray<TauDiscriToolBase>::iterator tool_end(this->tools.end());
+
+		//-----------------------------------------------------------------
+		// Loop stops when Failure indicated by one of the tools
+		//-----------------------------------------------------------------
+		std::vector<TrigTimer* >::iterator itimer =  m_mytimers.begin();
+		for(; tool_it != tool_end; ++tool_it ) {
+			msg() << MSG::VERBOSE << "Invoking tool " << tool_it->name() << endreq;
+			if ( doTiming() && itimer != m_mytimers.end() ) {  (*itimer)->start();}
+
+			StatusCode sc = (*tool_it)->execute( *tau_it, fakeBits, fakeScores);
+			if( sc.isFailure() ) {
+				msg() << MSG::FATAL << "Execute failed in tool " << tool_it->name() << endreq;
+				return HLT::ERROR;
+			}
+			itimer++;
+			if ( doTiming() && itimer != m_mytimers.end() ) (*itimer)->stop();
+
+		}
+		m_LLHScore = (*tau_it)->discriminant(xAOD::TauJetParameters::Likelihood);
+		m_BDTScore = (*tau_it)->discriminant(xAOD::TauJetParameters::BDTJetScore);
+	}
+
+	return HLT::OK;
+}
+
+
+
+
+
diff --git a/Trigger/TrigAlgorithms/TrigTauDiscriminant/src/components/TrigTauDiscriminant_entries.cxx b/Trigger/TrigAlgorithms/TrigTauDiscriminant/src/components/TrigTauDiscriminant_entries.cxx
new file mode 100755
index 0000000000000000000000000000000000000000..13780e0f7379c7d871a07c7d5ee902d8e7d35e28
--- /dev/null
+++ b/Trigger/TrigAlgorithms/TrigTauDiscriminant/src/components/TrigTauDiscriminant_entries.cxx
@@ -0,0 +1,11 @@
+#include "TrigTauDiscriminant/TrigTauDiscriBuilder.h"
+#include "GaudiKernel/DeclareFactoryEntries.h"
+
+
+DECLARE_ALGORITHM_FACTORY( TrigTauDiscriBuilder )
+
+DECLARE_FACTORY_ENTRIES(TrigTauDiscriminant)
+{
+  DECLARE_ALGORITHM( TrigTauDiscriBuilder )
+}
+
diff --git a/Trigger/TrigAlgorithms/TrigTauDiscriminant/src/components/TrigTauDiscriminant_load.cxx b/Trigger/TrigAlgorithms/TrigTauDiscriminant/src/components/TrigTauDiscriminant_load.cxx
new file mode 100755
index 0000000000000000000000000000000000000000..08472b06107c94e562fc46e4dc2d2d0dcf5c687d
--- /dev/null
+++ b/Trigger/TrigAlgorithms/TrigTauDiscriminant/src/components/TrigTauDiscriminant_load.cxx
@@ -0,0 +1,4 @@
+#include "GaudiKernel/LoadFactoryEntries.h"
+
+LOAD_FACTORY_ENTRIES(TrigTauDiscriminant)
+