diff --git a/Reconstruction/MuonIdentification/MuidCaloIsolationTools/CMakeLists.txt b/Reconstruction/MuonIdentification/MuidCaloIsolationTools/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..3707630a69a66d4e18dafeb792b68e6bd02b889e
--- /dev/null
+++ b/Reconstruction/MuonIdentification/MuidCaloIsolationTools/CMakeLists.txt
@@ -0,0 +1,28 @@
+################################################################################
+# Package: MuidCaloIsolationTools
+################################################################################
+
+# Declare the package name:
+atlas_subdir( MuidCaloIsolationTools )
+
+# Declare the package's dependencies:
+atlas_depends_on_subdirs( PUBLIC
+                          Control/AthenaBaseComps
+                          GaudiKernel
+                          Reconstruction/MuonIdentification/MuidInterfaces
+                          Tracking/TrkEvent/TrkTrack
+                          PRIVATE
+                          Tracking/TrkDetDescr/TrkSurfaces
+                          Tracking/TrkEvent/TrkParameters
+                          Tracking/TrkExtrapolation/TrkExInterfaces
+                          Tracking/TrkExtrapolation/TrkExUtils )
+
+# Component(s) in the package:
+atlas_add_component( MuidCaloIsolationTools
+                     src/MuidTrackIsolation.cxx
+                     src/components/*.cxx
+                     LINK_LIBRARIES AthenaBaseComps GaudiKernel MuidInterfaces TrkTrack TrkSurfaces TrkParameters TrkExInterfaces TrkExUtils )
+
+# Install files from the package:
+atlas_install_headers( MuidCaloIsolationTools )
+
diff --git a/Reconstruction/MuonIdentification/MuidCaloIsolationTools/MuidCaloIsolationTools/MuidTrackIsolation.h b/Reconstruction/MuonIdentification/MuidCaloIsolationTools/MuidCaloIsolationTools/MuidTrackIsolation.h
new file mode 100755
index 0000000000000000000000000000000000000000..456f383783eaa6b75e5ffd583ec9d29b355ddcac
--- /dev/null
+++ b/Reconstruction/MuonIdentification/MuidCaloIsolationTools/MuidCaloIsolationTools/MuidTrackIsolation.h
@@ -0,0 +1,93 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+//////////////////////////////////////////////////////////////////////////////
+/**@class MuidTrackIsolation
+ AlgTool for estimating the number, total charged momentum and most
+ energetic inner detector tracks in a cone surrounding a muon
+ 
+  @author Konstantinos.Nikolopoulos@cern.ch, Alan.Poppleton@cern.ch
+ (c) ATLAS Combined Muon software
+*/
+//////////////////////////////////////////////////////////////////////////////
+
+#ifndef MUIDCALOISOLATIONTOOLS_MUIDTRACKISOLATION_H
+#define MUIDCALOISOLATIONTOOLS_MUIDTRACKISOLATION_H
+
+//<<<<<< INCLUDES                                                       >>>>>>
+
+#include "AthenaBaseComps/AthAlgTool.h"
+#include "GaudiKernel/ToolHandle.h"
+#include "MuidInterfaces/IMuidTrackIsolation.h"
+#include "TrkTrack/TrackCollection.h"
+
+//<<<<<< CLASS DECLARATIONS                                             >>>>>>
+
+namespace Trk
+{
+    class IIntersector;
+    class Surface;
+}
+
+namespace Rec
+{
+
+class MuidTrackIsolation: public AthAlgTool,
+			  virtual public IMuidTrackIsolation
+{
+
+public:
+    MuidTrackIsolation(const std::string& type, 
+		       const std::string& name,
+		       const IInterface* parent);
+    ~MuidTrackIsolation(void); // destructor
+  
+    StatusCode initialize();
+    StatusCode finalize();
+
+    /**IMuidTrackIsolation interface:
+       get the number of tracks and summed momentum
+       in a cone at the production vertex or around the muon calo intersect*/
+    std::pair<int,double>		trackIsolation(double eta, double phi) const;
+
+    /**IMuidTrackIsolation interface:
+       get the momentum of the most energetic track in the cone*/
+    double				maxP(void) const;
+  
+private:
+    // isolation without extrapolation to calo
+    std::pair<int,double>		trackVertex(const TrackCollection* indetTracks,
+						    double eta,
+						    double phi) const;
+
+    // isolation performing extrapolation to calo
+    std::pair<int,double>		trackExtrapolated(const TrackCollection* indetTracks,
+							  double eta,
+							  double phi) const;
+
+    double				m_barrelCotTheta;
+    const Trk::Surface*			m_caloBackwardDisc;
+    const Trk::Surface*			m_caloCylinder;
+    const Trk::Surface*			m_caloForwardDisc;
+    double				m_etaSafetyFactor;
+    std::string				m_inDetTracksLocation;
+    ToolHandle<Trk::IIntersector>	m_intersector;
+    mutable double			m_maxP;
+    double				m_minPt;
+    double				m_trackCone;
+    bool				m_trackExtrapolation;
+    
+};
+
+//<<<<<< INLINE PUBLIC MEMBER FUNCTIONS                                 >>>>>>
+
+inline double
+MuidTrackIsolation::maxP(void) const
+{ return m_maxP; }
+
+}	// end of namespace
+
+#endif // MUIDCALOISOLATIONTOOLS_MUIDTRACKISOLATION_H
+
+
diff --git a/Reconstruction/MuonIdentification/MuidCaloIsolationTools/cmt/requirements b/Reconstruction/MuonIdentification/MuidCaloIsolationTools/cmt/requirements
new file mode 100755
index 0000000000000000000000000000000000000000..5f3c809b67431bbbf78da50b3a297801bc1388c5
--- /dev/null
+++ b/Reconstruction/MuonIdentification/MuidCaloIsolationTools/cmt/requirements
@@ -0,0 +1,23 @@
+package MuidCaloIsolationTools
+
+author			Kostas Nikolopoulos <Konstantinos.Nikolopoulos@cern.ch>
+author			Alan Poppleton <Alan.Poppleton@cern.ch>
+
+private
+use TrkExInterfaces		TrkExInterfaces-*		Tracking/TrkExtrapolation
+use TrkExUtils			TrkExUtils-*			Tracking/TrkExtrapolation
+use TrkParameters		TrkParameters-*			Tracking/TrkEvent
+use TrkSurfaces			TrkSurfaces-*			Tracking/TrkDetDescr
+
+public
+use AtlasPolicy			AtlasPolicy-*
+use AthenaBaseComps		AthenaBaseComps-*		Control
+use GaudiInterface		GaudiInterface-*		External
+use MuidInterfaces		MuidInterfaces-*		Reconstruction/MuonIdentification
+use TrkTrack			TrkTrack-*			Tracking/TrkEvent
+
+library MuidCaloIsolationTools	MuidTrackIsolation.cxx		\
+				components/*.cxx
+
+apply_pattern component_library								
+
diff --git a/Reconstruction/MuonIdentification/MuidCaloIsolationTools/doc/Doxyfile b/Reconstruction/MuonIdentification/MuidCaloIsolationTools/doc/Doxyfile
new file mode 100644
index 0000000000000000000000000000000000000000..36264e4a1c2a93aee3f630543edee9e0d9a9f9e8
--- /dev/null
+++ b/Reconstruction/MuonIdentification/MuidCaloIsolationTools/doc/Doxyfile
@@ -0,0 +1,231 @@
+# Doxyfile 1.5.3
+
+#---------------------------------------------------------------------------
+#Project related configuration options
+#---------------------------------------------------------------------------
+DOXYFILE_ENCODING      = UTF-8
+PROJECT_NAME           = MuidCaloIsolationTools
+PROJECT_NUMBER         = MuidCaloIsolationTools-00-00-07
+OUTPUT_DIRECTORY = /afs/cern.ch/user/p/pop/w0/TestMuid6/InstallArea/doc/MuidCaloIsolationTools
+CREATE_SUBDIRS         = NO
+OUTPUT_LANGUAGE        = English
+BRIEF_MEMBER_DESC      = YES
+REPEAT_BRIEF           = YES
+ABBREVIATE_BRIEF       = 
+ALWAYS_DETAILED_SEC    = NO
+INLINE_INHERITED_MEMB  = YES
+FULL_PATH_NAMES        = YES
+STRIP_FROM_PATH        = 
+STRIP_FROM_INC_PATH    = 
+SHORT_NAMES            = NO
+JAVADOC_AUTOBRIEF      = YES
+QT_AUTOBRIEF           = YES
+MULTILINE_CPP_IS_BRIEF = NO
+DETAILS_AT_TOP         = NO
+INHERIT_DOCS           = YES
+SEPARATE_MEMBER_PAGES  = NO
+TAB_SIZE               = 8
+ALIASES                = 
+OPTIMIZE_OUTPUT_FOR_C  = NO
+OPTIMIZE_OUTPUT_JAVA   = NO
+BUILTIN_STL_SUPPORT    = NO
+CPP_CLI_SUPPORT        = NO
+DISTRIBUTE_GROUP_DOC   = NO
+SUBGROUPING            = YES
+#---------------------------------------------------------------------------
+#Build related configuration options
+#---------------------------------------------------------------------------
+EXTRACT_ALL            = YES
+EXTRACT_PRIVATE        = YES
+EXTRACT_STATIC         = YES
+EXTRACT_LOCAL_CLASSES  = YES
+EXTRACT_LOCAL_METHODS  = NO
+EXTRACT_ANON_NSPACES   = NO
+HIDE_UNDOC_MEMBERS     = NO
+HIDE_UNDOC_CLASSES     = NO
+HIDE_FRIEND_COMPOUNDS  = NO
+HIDE_IN_BODY_DOCS      = NO
+INTERNAL_DOCS          = NO
+CASE_SENSE_NAMES       = YES
+HIDE_SCOPE_NAMES       = NO
+SHOW_INCLUDE_FILES     = YES
+INLINE_INFO            = YES
+SORT_MEMBER_DOCS       = NO
+SORT_BRIEF_DOCS        = NO
+SORT_BY_SCOPE_NAME     = NO
+GENERATE_TODOLIST      = YES
+GENERATE_TESTLIST      = YES
+GENERATE_BUGLIST       = YES
+GENERATE_DEPRECATEDLIST= YES
+ENABLED_SECTIONS       = 
+MAX_INITIALIZER_LINES  = 30
+SHOW_USED_FILES        = YES
+SHOW_DIRECTORIES       = YES
+FILE_VERSION_FILTER    = 
+#---------------------------------------------------------------------------
+#configuration options related to warning and progress messages
+#---------------------------------------------------------------------------
+QUIET                  = NO
+WARNINGS               = YES
+WARN_IF_UNDOCUMENTED   = YES
+WARN_IF_DOC_ERROR      = YES
+WARN_NO_PARAMDOC       = NO
+WARN_FORMAT            = "$file:$line: $text "
+WARN_LOGFILE           = 
+#---------------------------------------------------------------------------
+#configuration options related to the input files
+#---------------------------------------------------------------------------
+INPUT =  ../src ../MuidCaloIsolationTools ../doc
+INPUT_ENCODING         = UTF-8
+FILE_PATTERNS          = *.cxx *.h *.py *.mk *.icc
+RECURSIVE              = YES
+EXCLUDE                = 
+EXCLUDE_SYMLINKS       = NO
+EXCLUDE_PATTERNS       = 
+EXCLUDE_SYMBOLS        = 
+EXAMPLE_PATH           = ../doc ../cmt ../share
+EXAMPLE_PATTERNS       = *.cxx *.html requirements *.py
+EXAMPLE_RECURSIVE      = YES
+IMAGE_PATH             = 
+INPUT_FILTER           = 
+FILTER_PATTERNS        = 
+FILTER_SOURCE_FILES    = NO
+#---------------------------------------------------------------------------
+#configuration options related to source browsing
+#---------------------------------------------------------------------------
+SOURCE_BROWSER         = YES
+INLINE_SOURCES         = YES
+STRIP_CODE_COMMENTS    = YES
+REFERENCED_BY_RELATION = NO
+REFERENCES_RELATION    = NO
+REFERENCES_LINK_SOURCE = YES
+USE_HTAGS              = NO
+VERBATIM_HEADERS       = NO
+#---------------------------------------------------------------------------
+#configuration options related to the alphabetical class index
+#---------------------------------------------------------------------------
+ALPHABETICAL_INDEX     = NO
+COLS_IN_ALPHA_INDEX    = 5
+IGNORE_PREFIX          = 
+#---------------------------------------------------------------------------
+#configuration options related to the HTML output
+#---------------------------------------------------------------------------
+GENERATE_HTML          = YES
+HTML_OUTPUT            = html
+HTML_FILE_EXTENSION    = .html
+HTML_HEADER            = 
+HTML_FOOTER            = 
+HTML_STYLESHEET        = 
+HTML_ALIGN_MEMBERS     = YES
+GENERATE_HTMLHELP      = NO
+HTML_DYNAMIC_SECTIONS  = NO
+CHM_FILE               = 
+HHC_LOCATION           = 
+GENERATE_CHI           = NO
+BINARY_TOC             = NO
+TOC_EXPAND             = NO
+DISABLE_INDEX          = NO
+ENUM_VALUES_PER_LINE   = 4
+GENERATE_TREEVIEW      = NO
+TREEVIEW_WIDTH         = 250
+#---------------------------------------------------------------------------
+#configuration options related to the LaTeX output
+#---------------------------------------------------------------------------
+GENERATE_LATEX         = NO
+LATEX_OUTPUT           = latex
+LATEX_CMD_NAME         = latex
+MAKEINDEX_CMD_NAME     = makeindex
+COMPACT_LATEX          = NO
+PAPER_TYPE             = a4wide
+EXTRA_PACKAGES         = 
+LATEX_HEADER           = 
+PDF_HYPERLINKS         = NO
+USE_PDFLATEX           = NO
+LATEX_BATCHMODE        = YES
+LATEX_HIDE_INDICES     = NO
+#---------------------------------------------------------------------------
+#configuration options related to the RTF output
+#---------------------------------------------------------------------------
+GENERATE_RTF           = NO
+RTF_OUTPUT             = rtf
+COMPACT_RTF            = NO
+RTF_HYPERLINKS         = NO
+RTF_STYLESHEET_FILE    = 
+RTF_EXTENSIONS_FILE    = 
+#---------------------------------------------------------------------------
+#configuration options related to the man page output
+#---------------------------------------------------------------------------
+GENERATE_MAN           = NO
+MAN_OUTPUT             = man
+MAN_EXTENSION          = .3
+MAN_LINKS              = NO
+#---------------------------------------------------------------------------
+#configuration options related to the XML output
+#---------------------------------------------------------------------------
+GENERATE_XML           = NO
+XML_OUTPUT             = xml
+XML_SCHEMA             = 
+XML_DTD                = 
+XML_PROGRAMLISTING     = YES
+#---------------------------------------------------------------------------
+#configuration options for the AutoGen Definitions output
+#---------------------------------------------------------------------------
+GENERATE_AUTOGEN_DEF   = NO
+#---------------------------------------------------------------------------
+#configuration options related to the Perl module output
+#---------------------------------------------------------------------------
+GENERATE_PERLMOD       = NO
+PERLMOD_LATEX          = NO
+PERLMOD_PRETTY         = YES
+PERLMOD_MAKEVAR_PREFIX = 
+#---------------------------------------------------------------------------
+#Configuration options related to the preprocessor   
+#---------------------------------------------------------------------------
+ENABLE_PREPROCESSING   = YES
+MACRO_EXPANSION        = NO
+EXPAND_ONLY_PREDEF     = NO
+SEARCH_INCLUDES        = YES
+INCLUDE_PATH           = 
+INCLUDE_FILE_PATTERNS  = 
+PREDEFINED             = 
+EXPAND_AS_DEFINED      = 
+SKIP_FUNCTION_MACROS   = YES
+#---------------------------------------------------------------------------
+#Configuration::additions related to external references   
+#---------------------------------------------------------------------------
+TAGFILES = 
+GENERATE_TAGFILE = /afs/cern.ch/user/p/pop/w0/TestMuid6/InstallArea/doc/MuidCaloIsolationTools.tag
+ALLEXTERNALS           = NO
+EXTERNAL_GROUPS        = YES
+PERL_PATH              = /usr/bin/perl
+#---------------------------------------------------------------------------
+#Configuration options related to the dot tool   
+#---------------------------------------------------------------------------
+CLASS_DIAGRAMS         = YES
+MSCGEN_PATH            = 
+HIDE_UNDOC_RELATIONS   = YES
+HAVE_DOT               = YES
+CLASS_GRAPH            = YES
+COLLABORATION_GRAPH    = YES
+GROUP_GRAPHS           = YES
+UML_LOOK               = YES
+TEMPLATE_RELATIONS     = YES
+INCLUDE_GRAPH          = YES
+INCLUDED_BY_GRAPH      = YES
+CALL_GRAPH             = NO
+CALLER_GRAPH           = NO
+GRAPHICAL_HIERARCHY    = YES
+DIRECTORY_GRAPH        = YES
+DOT_IMAGE_FORMAT       = gif
+DOT_PATH               = 
+DOTFILE_DIRS           = 
+DOT_GRAPH_MAX_NODES    = 50
+MAX_DOT_GRAPH_DEPTH    = 0
+DOT_TRANSPARENT        = NO
+DOT_MULTI_TARGETS      = NO
+GENERATE_LEGEND        = YES
+DOT_CLEANUP            = YES
+#---------------------------------------------------------------------------
+#Configuration::additions related to the search engine   
+#---------------------------------------------------------------------------
+SEARCHENGINE           = YES
diff --git a/Reconstruction/MuonIdentification/MuidCaloIsolationTools/doc/mainpage.h b/Reconstruction/MuonIdentification/MuidCaloIsolationTools/doc/mainpage.h
new file mode 100755
index 0000000000000000000000000000000000000000..5488ef2fbfa7e70487915785f5457f3c160a368f
--- /dev/null
+++ b/Reconstruction/MuonIdentification/MuidCaloIsolationTools/doc/mainpage.h
@@ -0,0 +1,31 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+/**
+@mainpage MuidCaloIsolationTools Package
+
+contains the @ref Rec::MuidTrackIsolation tool for estimating the number and summed momentum of inner detector tracks in a given cone around the muon track i.e. the track isolation of the muon. The isolation can be evaluated either at the production vertex or around the muon intersection with the calorimeter.
+
+Track isolation is used by the @ref MuidCaloEnergyTool (MuidCaloEnergyTools package) to determine the reliability of the calorimeter measurement of the muon energy loss. Simulation results indicate that production vertex isolation is the better choice - possibly through better accounting of any neutral particle contribution.
+
+@author Alan.Poppleton@cern.ch
+@author Konstantinos.Nikolopoulos@cern.ch
+
+ - @ref UsedMuidCaloIsolationTools
+ - @ref RequirementsMuidCaloIsolationTools
+
+ @namespace Rec namespace for combined reconstruction tools and interfaces
+ @namespace Trk namespace for general tracking tools and interfaces
+
+*/
+
+/**
+@page UsedMuidCaloIsolationTools Used Packages
+@htmlinclude used_packages.html
+*/
+
+/**
+@page RequirementsMuidCaloIsolationTools Requirements
+@include requirements
+*/
diff --git a/Reconstruction/MuonIdentification/MuidCaloIsolationTools/doc/used_packages.html b/Reconstruction/MuonIdentification/MuidCaloIsolationTools/doc/used_packages.html
new file mode 100644
index 0000000000000000000000000000000000000000..1b7e1ecc8be037203056e0dc58cbf26766e51178
--- /dev/null
+++ b/Reconstruction/MuonIdentification/MuidCaloIsolationTools/doc/used_packages.html
@@ -0,0 +1,15 @@
+<center><table border="1"><tr><td><center><i>Used packages</i></center></td></tr>
+<tr><td><a href="/afs/cern.ch/atlas/offline/external/GAUDI/v19r5p1/InstallArea/doc/GaudiKernel/html/index.html">GaudiKernel</a></td></tr>
+<tr><td><a href="/afs/cern.ch/atlas/offline/external/GAUDI/v19r5p1/InstallArea/doc/GaudiSvc/html/index.html">GaudiSvc</a></td></tr>
+<tr><td><a href="http://cern.ch/atlas-computing/links/buildDirectory/nightlies/devmig3/AtlasCore/rel_0/InstallArea/doc/GaudiInterface/html/index.html">External/GaudiInterface</a></td></tr>
+<tr><td><a href="http://cern.ch/atlas-computing/links/buildDirectory/nightlies/devmig3/AtlasCore/rel_0/InstallArea/doc/AtlasCLHEP/html/index.html">External/AtlasCLHEP</a></td></tr>
+<tr><td><a href="http://cern.ch/atlas-computing/links/buildDirectory/nightlies/devmig3/AtlasCore/rel_0/InstallArea/doc/AtlasPolicy/html/index.html">AtlasPolicy</a></td></tr>
+<tr><td><a href="http://cern.ch/atlas-computing/links/buildDirectory/nightlies/devmig3/AtlasCore/rel_0/InstallArea/doc/CLIDComps/html/index.html">Control/CLIDComps</a></td></tr>
+<tr><td><a href="http://cern.ch/atlas-computing/links/buildDirectory/nightlies/devmig3/AtlasCore/rel_0/InstallArea/doc/StoreGate/html/index.html">Control/StoreGate</a></td></tr>
+<tr><td><a href="http://cern.ch/atlas-computing/links/buildDirectory/nightlies/devmig3/AtlasConditions/rel_0/InstallArea/doc/TrkSurfaces/html/index.html">Tracking/TrkDetDescr/TrkSurfaces</a></td></tr>
+<tr><td><a href="http://cern.ch/atlas-computing/links/buildDirectory/nightlies/devmig3/AtlasConditions/rel_0/InstallArea/doc/TrkParameters/html/index.html">Tracking/TrkEvent/TrkParameters</a></td></tr>
+<tr><td><a href="http://cern.ch/atlas-computing/links/buildDirectory/nightlies/devmig3/AtlasConditions/rel_0/InstallArea/doc/TrkExUtils/html/index.html">Tracking/TrkExtrapolation/TrkExUtils</a></td></tr>
+<tr><td><a href="http://cern.ch/atlas-computing/links/buildDirectory/nightlies/devmig3/AtlasReconstruction/rel_0/InstallArea/doc/TrkExInterfaces/html/index.html">Tracking/TrkExtrapolation/TrkExInterfaces</a></td></tr>
+<tr><td><a href="http://cern.ch/atlas-computing/links/buildDirectory/nightlies/devmig3/AtlasEvent/rel_0/InstallArea/doc/TrkTrack/html/index.html">Tracking/TrkEvent/TrkTrack</a></td></tr>
+<tr><td><a href="http://cern.ch/atlas-computing/links/buildDirectory/nightlies/devmig3/AtlasReconstruction/rel_0/InstallArea/doc/MuidInterfaces/html/index.html">Reconstruction/MuonIdentification/MuidInterfaces</a></td></tr>
+</table></center>
diff --git a/Reconstruction/MuonIdentification/MuidCaloIsolationTools/src/MuidTrackIsolation.cxx b/Reconstruction/MuonIdentification/MuidCaloIsolationTools/src/MuidTrackIsolation.cxx
new file mode 100755
index 0000000000000000000000000000000000000000..42ed47fa635d68cffed95827c79eedb6d048b35d
--- /dev/null
+++ b/Reconstruction/MuonIdentification/MuidCaloIsolationTools/src/MuidTrackIsolation.cxx
@@ -0,0 +1,313 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+//////////////////////////////////////////////////////////////////////////////
+// MuidTrackIsolation
+//  AlgTool for estimating the number, total charged momentum and most
+//  energetic inner detector tracks in a cone surrounding a muon
+//
+//  (c) ATLAS Combined Muon software
+//////////////////////////////////////////////////////////////////////////////
+
+//<<<<<< INCLUDES                                                       >>>>>>
+
+#include <cmath>
+#include <iomanip>
+#include "GaudiKernel/SystemOfUnits.h"
+#include "MuidCaloIsolationTools/MuidTrackIsolation.h"
+#include "TrkExInterfaces/IIntersector.h"
+#include "TrkExUtils/TrackSurfaceIntersection.h"
+#include "TrkParameters/TrackParameters.h"
+#include "TrkSurfaces/CylinderSurface.h"
+#include "TrkSurfaces/DiscSurface.h"
+#include "TrkSurfaces/Surface.h"
+#include "TrkTrack/Track.h"
+#include "TrkTrack/TrackCollection.h"
+
+//<<<<<< CLASS STRUCTURE INITIALIZATION                                 >>>>>>
+
+namespace Rec
+{
+
+MuidTrackIsolation::MuidTrackIsolation (const std::string&type,
+					const std::string&name, 
+					const IInterface*parent)
+    :	AthAlgTool		(type, name, parent),
+	m_etaSafetyFactor	(0.1),
+	m_inDetTracksLocation	("Tracks"),
+	m_intersector		("Trk::RungeKuttaIntersector/RungeKuttaIntersector"),
+	m_minPt			(1.0*Gaudi::Units::GeV),
+	m_trackCone		(0.2),
+	m_trackExtrapolation	(false)
+{
+    declareInterface<IMuidTrackIsolation>(this);
+    declareProperty("MinPt",			m_minPt);
+    declareProperty("RungeKuttaIntersector",	m_intersector);
+    declareProperty("InDetTracksLocation",     	m_inDetTracksLocation);
+    declareProperty("TrackCone",		m_trackCone);
+    declareProperty("TrackExtrapolation",	m_trackExtrapolation);
+}
+
+MuidTrackIsolation::~MuidTrackIsolation (void) 
+{}
+
+//<<<<<< PUBLIC MEMBER FUNCTION DEFINITIONS                             >>>>>>
+
+StatusCode
+MuidTrackIsolation::initialize()
+{
+    ATH_MSG_INFO( "MuidTrackIsolation::initialize() - package version " << PACKAGE_VERSION );
+
+    // get the Tools
+    if (m_intersector.retrieve().isFailure())
+    {
+	ATH_MSG_FATAL( "Failed to retrieve tool " << m_intersector );
+        return StatusCode::FAILURE;
+    }
+    else
+    {
+	ATH_MSG_INFO( "Retrieved tool " << m_intersector );
+    }
+
+    // create the calo barrel surfaces (cylinder) and 2 endcap discs)
+    double radius	= 2.0*Gaudi::Units::meter;
+    double halfLength	= 4.0*Gaudi::Units::meter;
+    m_caloCylinder	= new Trk::CylinderSurface(new Amg::Transform3D, radius, halfLength);
+
+    // the corresponding max barrel cotTheta
+    m_barrelCotTheta	= halfLength/radius;
+
+    // and the forward/backward endcap disks
+    Amg::Transform3D discRotation;
+    Amg::Transform3D* transform;
+    Amg::Vector3D forwardDiscPosition(0.,0.,halfLength);
+    transform		= new Amg::Transform3D(discRotation);
+    *transform          *= Amg::Translation3D(forwardDiscPosition);
+    m_caloForwardDisc	= new Trk::DiscSurface(transform, 0., radius);
+    Amg::Vector3D backwardDiscPosition(0.,0.,-halfLength);
+    transform		= new Amg::Transform3D(discRotation);
+    *transform          *= Amg::Translation3D(backwardDiscPosition);
+    m_caloBackwardDisc	= new Trk::DiscSurface(transform, 0., radius);
+
+    return StatusCode::SUCCESS;
+}
+
+StatusCode
+MuidTrackIsolation::finalize()
+{
+    ATH_MSG_INFO( "Finalizing MuidTrackIsolation" );
+
+    delete m_caloBackwardDisc;
+    delete m_caloCylinder;
+    delete m_caloForwardDisc;
+
+    return StatusCode::SUCCESS;
+}
+
+std::pair<int,double>
+MuidTrackIsolation::trackIsolation(double eta, double phi) const
+{
+    // debug input quantities
+    if (msgLvl(MSG::DEBUG))
+    {
+	msg(MSG::DEBUG) << " MuidTrackIsolation:: " << std::setiosflags(std::ios::fixed);
+	if (m_trackExtrapolation)
+	{
+	    msg() << "applied after extrapolation to calo, ";
+	}
+	else
+	{
+	    msg() << "applied at perigee, ";
+	}
+	msg() << " for muon at calo with eta,phi "
+	      << std::setw(8) << std::setprecision(3) << eta
+	      << std::setw(8) << std::setprecision(3) << phi;
+	if (msgLvl(MSG::VERBOSE)) msg() << endreq << MSG::VERBOSE;
+    }
+
+    // set initial state
+    m_maxP = 0.;
+    std::pair<int,double> isolation = std::make_pair(0,0.);
+
+    // retrieve track collection
+    const TrackCollection* inDetTracks = 0;
+    if (! evtStore()->contains<TrackCollection>(m_inDetTracksLocation))
+    {
+	ATH_MSG_DEBUG( " no ID Track container at location  " << m_inDetTracksLocation );
+	return isolation;
+    }
+
+    if (StatusCode::SUCCESS != evtStore()->retrieve(inDetTracks,m_inDetTracksLocation))
+    {
+	ATH_MSG_WARNING( " Could not retrieve ID Track container from "	<< m_inDetTracksLocation );
+	return isolation;
+    }
+
+    // evaluate isolation according to configuration
+    if (m_trackExtrapolation)
+    {
+	isolation = trackExtrapolated(inDetTracks,eta,phi);
+    }
+    else
+    {
+	isolation = trackVertex(inDetTracks,eta,phi);
+    }
+
+    // debug result
+    if (msgLvl(MSG::DEBUG))
+    {
+	msg() << std::endl << " Found "<< isolation.first
+	      << std::setiosflags(std::ios::fixed)
+	      << " InDet tracks with total momentum "
+	      << std::setw(8) << std::setprecision(1) << isolation.second/Gaudi::Units::GeV <<" Gaudi::Units::GeV "
+	      << "and maximum momentum "
+	      << std::setw(8) << std::setprecision(1) << m_maxP/Gaudi::Units::GeV
+	      << endreq;
+    }
+    
+    return isolation;
+}
+
+std::pair<int,double>
+MuidTrackIsolation::trackVertex(const TrackCollection* inDetTracks, double eta, double phi) const
+{
+    // set initial state
+    m_maxP		= 0.;
+    double sumP		= 0.;
+    int numberTracks	= 0;
+
+    // choose tracks in cone
+    for (TrackCollection::const_iterator id = inDetTracks->begin() ;
+         id != inDetTracks->end();
+         ++id)
+    { 
+	const Trk::Perigee& perigee = *(**id).perigeeParameters();
+	if ((**id).info().trackProperties(Trk::TrackInfo::StraightTrack)
+	    || perigee.pT() < m_minPt)						continue;
+	
+	double inDetPhi	= perigee.parameters()[Trk::phi];
+	double inDetEta	= perigee.eta();
+
+	double diffEta = fabs(eta-inDetEta);
+	double diffPhi = fabs(phi-inDetPhi);
+	if (diffPhi > M_PI) diffPhi = 2.*M_PI - diffPhi;
+
+	if (msgLvl(MSG::VERBOSE)) 
+	    msg(MSG::VERBOSE) << std::endl << std::setiosflags(std::ios::fixed)
+			      << " Id track: momentum "
+			      << std::setw(8) << std::setprecision(1)
+			      << perigee.momentum().mag()/Gaudi::Units::GeV
+			      << "  with perigee eta and difference "
+			      << std::setw(8) << std::setprecision(3) << perigee.eta()
+			      << std::setw(8) << std::setprecision(3) << diffEta
+			      << "  and same for phi "
+			      << std::setw(8) << std::setprecision(3) << perigee.parameters()[Trk::phi]
+			      << std::setw(8) << std::setprecision(3) << diffPhi;
+    
+	if ((diffPhi*diffPhi + diffEta*diffEta) > m_trackCone*m_trackCone)	continue;
+	++numberTracks;
+	double p = perigee.momentum().mag();
+	if (p > m_maxP) m_maxP = p;
+	sumP += p;
+
+	if (msgLvl(MSG::VERBOSE)) msg() << "  inside cone, track#" << std::setw(3) << numberTracks;
+    }
+
+    return std::make_pair(numberTracks,sumP);
+}
+
+std::pair<int,double>
+MuidTrackIsolation::trackExtrapolated(const TrackCollection* inDetTracks, double eta, double phi) const
+{
+    // set initial state
+    m_maxP		= 0.;
+    double sumP		= 0.;
+    int numberTracks	= 0;
+
+    // extrapolate close in eta tracks to calorimeter surface
+    for (TrackCollection::const_iterator id = inDetTracks->begin() ;
+         id != inDetTracks->end();
+         ++id)
+    { 
+	const Trk::Perigee& perigee = *(**id).perigeeParameters();
+	if ((**id).info().trackProperties(Trk::TrackInfo::StraightTrack)
+	    || perigee.pT() < m_minPt)					continue;
+	
+	double inDetEta	= perigee.eta();
+	if (fabs(eta-inDetEta) > m_trackCone + m_etaSafetyFactor)	continue;
+
+	// track has sufficient momentum and is close in eta:
+	// find intersection at calo surface
+	double qOverP	= perigee.parameters()[Trk::qOverP];
+	double cotTheta	= 1/tan(perigee.parameters()[Trk::theta]);
+	Amg::Vector3D direction(cos(perigee.parameters()[Trk::phi]),sin(perigee.parameters()[Trk::phi]),cotTheta);
+	direction /= direction.mag();
+	const Trk::TrackSurfaceIntersection* idIntersection   =
+	    new Trk::TrackSurfaceIntersection(perigee.position(),direction,0.);
+	const Trk::Surface* surface = m_caloCylinder;
+	if (cotTheta > m_barrelCotTheta)
+	{
+	    surface = m_caloForwardDisc;
+	}
+	else if (cotTheta < -m_barrelCotTheta)
+	{
+	    surface = m_caloBackwardDisc;
+	}	
+	const Trk::TrackSurfaceIntersection* caloIntersection =
+	    m_intersector->intersectSurface(*surface,idIntersection,qOverP);
+
+	// no intersection - should never happen !
+	if (! caloIntersection)
+	{
+	    ATH_MSG_DEBUG( " track didn't find intersection !!! "
+			   << std::setiosflags(std::ios::fixed)
+			   << " Id track: momentum "	<< std::setw(8) << std::setprecision(1)
+			   << perigee.momentum().mag()/Gaudi::Units::GeV
+			   << "  with initial eta "	<< std::setw(8) << std::setprecision(3)
+			   << perigee.eta()
+			   << "  and phi "		<< std::setw(8) << std::setprecision(3)
+			   << perigee.parameters()[Trk::phi] );
+
+	    delete idIntersection;
+	    continue;
+	}
+
+	double diffEta = eta - caloIntersection->position().eta();
+	double diffPhi = fabs(phi-caloIntersection->position().phi());
+	if (diffPhi > M_PI) diffPhi = 2.*M_PI - diffPhi;
+
+	if (msgLvl(MSG::VERBOSE))
+	{
+	    msg() << std::endl << std::setiosflags(std::ios::fixed)
+		  << " Id track: momentum "
+		  << std::setw(8) << std::setprecision(1)<< perigee.momentum().mag()/Gaudi::Units::GeV
+		  << "  with initial,extrapolated and calo difference for eta "
+		  << std::setw(8) << std::setprecision(3) << perigee.eta()
+		  << std::setw(8) << std::setprecision(3) << caloIntersection->position().eta()
+		  << std::setw(8) << std::setprecision(3) << diffEta
+		  << "  and phi "
+		  << std::setw(8) << std::setprecision(3) << perigee.parameters()[Trk::phi]
+		  << std::setw(8) << std::setprecision(3) << caloIntersection->position().phi()
+		  << std::setw(8) << std::setprecision(3) << diffPhi;
+	}
+
+	// check if inside cone
+	if ((diffPhi*diffPhi + diffEta*diffEta) < m_trackCone*m_trackCone)
+	{
+	    ++numberTracks;
+	    double p = perigee.momentum().mag();
+	    if (p > m_maxP) m_maxP = p;
+	    sumP += p;
+	    
+	    if (msgLvl(MSG::VERBOSE)) msg() << "  inside cone, track#" << std::setw(3) << numberTracks;
+	}
+	delete caloIntersection;
+	delete idIntersection;
+    }
+    if (msgLvl(MSG::VERBOSE)) msg() << endreq;
+
+    return std::make_pair(numberTracks,sumP);
+}
+
+}	// end of namespace
diff --git a/Reconstruction/MuonIdentification/MuidCaloIsolationTools/src/components/MuidCaloIsolationTools_entries.cxx b/Reconstruction/MuonIdentification/MuidCaloIsolationTools/src/components/MuidCaloIsolationTools_entries.cxx
new file mode 100755
index 0000000000000000000000000000000000000000..85a9954723e08d41d79684cbb6d4535f7e0b67b7
--- /dev/null
+++ b/Reconstruction/MuonIdentification/MuidCaloIsolationTools/src/components/MuidCaloIsolationTools_entries.cxx
@@ -0,0 +1,9 @@
+#include "GaudiKernel/DeclareFactoryEntries.h"
+#include "MuidCaloIsolationTools/MuidTrackIsolation.h"
+
+DECLARE_NAMESPACE_TOOL_FACTORY( Rec, MuidTrackIsolation )
+DECLARE_FACTORY_ENTRIES( MuidCaloIsolationTools )
+{
+    DECLARE_NAMESPACE_TOOL( Rec, MuidTrackIsolation )
+}
+
diff --git a/Reconstruction/MuonIdentification/MuidCaloIsolationTools/src/components/MuidCaloIsolationTools_load.cxx b/Reconstruction/MuonIdentification/MuidCaloIsolationTools/src/components/MuidCaloIsolationTools_load.cxx
new file mode 100755
index 0000000000000000000000000000000000000000..efb3842c5f7174b7068093be68401a84122fdb96
--- /dev/null
+++ b/Reconstruction/MuonIdentification/MuidCaloIsolationTools/src/components/MuidCaloIsolationTools_load.cxx
@@ -0,0 +1,3 @@
+#include "GaudiKernel/LoadFactoryEntries.h"
+
+LOAD_FACTORY_ENTRIES( MuidCaloIsolationTools )