diff --git a/AtlasGeometryCommon/GeoModelEnvelopes/CMakeLists.txt b/AtlasGeometryCommon/GeoModelEnvelopes/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..c8279c12189013ef560a82a9ebe57fe859c655a1
--- /dev/null
+++ b/AtlasGeometryCommon/GeoModelEnvelopes/CMakeLists.txt
@@ -0,0 +1,27 @@
+################################################################################
+# Package: GeoModelEnvelopes
+################################################################################
+
+# Declare the package name:
+atlas_subdir( GeoModelEnvelopes )
+
+# Declare the package's dependencies:
+atlas_depends_on_subdirs( PUBLIC
+                          Control/CLIDSvc
+                          DetectorDescription/GeoModel/GeoModelKernel
+                          DetectorDescription/GeoModel/GeoModelUtilities
+                          PRIVATE
+                          Control/SGTools
+                          Control/StoreGate
+                          DetectorDescription/GeoModel/GeoModelInterfaces
+                          GaudiKernel )
+
+# Component(s) in the package:
+atlas_add_component( GeoModelEnvelopes
+                     src/*.cxx
+                     src/components/*.cxx
+                     LINK_LIBRARIES GeoModelKernel GeoModelUtilities SGTools StoreGateLib SGtests GaudiKernel )
+
+# Install files from the package:
+atlas_install_headers( GeoModelEnvelopes )
+
diff --git a/AtlasGeometryCommon/GeoModelEnvelopes/GeoModelEnvelopes/ForDetEnvelopeFactory.h b/AtlasGeometryCommon/GeoModelEnvelopes/GeoModelEnvelopes/ForDetEnvelopeFactory.h
new file mode 100755
index 0000000000000000000000000000000000000000..8d9c207098e9d6bbdbd964b0fe60fd6a4c2e927a
--- /dev/null
+++ b/AtlasGeometryCommon/GeoModelEnvelopes/GeoModelEnvelopes/ForDetEnvelopeFactory.h
@@ -0,0 +1,47 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+#ifndef ForDetEnvelopeFactory_h
+#define ForDetEnvelopeFactory_h 1
+
+#include "GeoModelKernel/GeoVDetectorFactory.h"
+#include "GeoModelEnvelopes/ForDetEnvelopeManager.h"
+
+class StoreGateSvc;
+class AbsMaterialManager;
+class GeoShape;
+
+class ForDetEnvelopeFactory : public GeoVDetectorFactory  
+{
+ public:
+  
+  // Constructor:
+  ForDetEnvelopeFactory(StoreGateSvc *pDetStore);
+  
+  // Destructor:
+  ~ForDetEnvelopeFactory();
+  
+  // Creation of geometry:
+  virtual void create(GeoPhysVol *world);
+  
+  // Access to the results:
+  virtual const ForDetEnvelopeManager * getDetectorManager() const;
+  
+ private:  
+
+  // Illegal operations:
+  const ForDetEnvelopeFactory & operator=(const ForDetEnvelopeFactory &right);
+  ForDetEnvelopeFactory(const ForDetEnvelopeFactory &right);
+  
+  // The manager:
+  ForDetEnvelopeManager*   m_detectorManager;
+   
+  const AbsMaterialManager* m_materialManager;
+  StoreGateSvc*             m_detectorStore;
+};
+
+// Class ForDetEnvelopeFactory 
+#endif
+
+
diff --git a/AtlasGeometryCommon/GeoModelEnvelopes/GeoModelEnvelopes/ForDetEnvelopeManager.h b/AtlasGeometryCommon/GeoModelEnvelopes/GeoModelEnvelopes/ForDetEnvelopeManager.h
new file mode 100755
index 0000000000000000000000000000000000000000..07360c412126a9f293adc48fb6bbab32d88f9706
--- /dev/null
+++ b/AtlasGeometryCommon/GeoModelEnvelopes/GeoModelEnvelopes/ForDetEnvelopeManager.h
@@ -0,0 +1,48 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+#ifndef ForDetEnvelopeManager_h
+#define ForDetEnvelopeManager_h 1
+
+#include "GeoModelKernel/GeoVPhysVol.h"
+#include "GeoModelKernel/GeoVDetectorManager.h"
+
+#include <vector>
+
+class ForDetEnvelopeManager : public GeoVDetectorManager  
+{
+ public:
+
+  // Constructor
+  ForDetEnvelopeManager();
+
+  // Destructor
+  ~ForDetEnvelopeManager();
+
+  // Access to raw geometry:
+  virtual unsigned int getNumTreeTops() const;
+  
+  // Access to raw geometry:
+  virtual PVConstLink getTreeTop(unsigned int i) const;
+
+  // Add a Tree top:
+  void addTreeTop(PVLink);
+
+ private:  
+
+  const ForDetEnvelopeManager & operator=(const ForDetEnvelopeManager &right);
+  ForDetEnvelopeManager(const ForDetEnvelopeManager &right);
+  
+  std::vector<PVLink> m_volume;  
+
+};
+
+#ifndef GAUDI_NEUTRAL
+#include "CLIDSvc/CLASS_DEF.h"
+CLASS_DEF(ForDetEnvelopeManager, 238515740, 1)
+#endif
+
+#endif
+
+
diff --git a/AtlasGeometryCommon/GeoModelEnvelopes/GeoModelEnvelopes/ForDetEnvelopeTool.h b/AtlasGeometryCommon/GeoModelEnvelopes/GeoModelEnvelopes/ForDetEnvelopeTool.h
new file mode 100755
index 0000000000000000000000000000000000000000..3dbf177a52a588567b6c33540b711babb353a31e
--- /dev/null
+++ b/AtlasGeometryCommon/GeoModelEnvelopes/GeoModelEnvelopes/ForDetEnvelopeTool.h
@@ -0,0 +1,27 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+#ifndef ForDetEnvelopeTool_h 
+#define ForDetEnvelopeTool_h 1
+
+#include "GeoModelUtilities/GeoModelTool.h"
+class ForDetEnvelopeManager;
+
+class ForDetEnvelopeTool : public GeoModelTool 
+{
+ public:
+
+  // Standard Constructor
+  ForDetEnvelopeTool( const std::string& type, const std::string& name, const IInterface* parent );
+
+  // Standard Destructor
+  virtual ~ForDetEnvelopeTool();
+
+  virtual StatusCode create( StoreGateSvc* detStore );
+  virtual StatusCode clear(StoreGateSvc* detStore);
+ private:
+  const ForDetEnvelopeManager* m_manager;
+};
+
+#endif 
diff --git a/AtlasGeometryCommon/GeoModelEnvelopes/cmt/requirements b/AtlasGeometryCommon/GeoModelEnvelopes/cmt/requirements
new file mode 100755
index 0000000000000000000000000000000000000000..fe6473895bcafc8e537430008d4207af3858898b
--- /dev/null
+++ b/AtlasGeometryCommon/GeoModelEnvelopes/cmt/requirements
@@ -0,0 +1,15 @@
+package GeoModelEnvelopes
+
+use AtlasPolicy       AtlasPolicy-*
+use GeoModelKernel    GeoModelKernel-*    DetectorDescription/GeoModel
+use GeoModelUtilities GeoModelUtilities-* DetectorDescription/GeoModel
+use CLIDSvc           CLIDSvc-*           Control
+
+library GeoModelEnvelopes ../src/*.cxx ../src/components/*.cxx
+apply_pattern component_library 
+
+private
+use SGTools              SGTools-*           Control
+use StoreGate            StoreGate-*         Control
+use GaudiInterface       GaudiInterface-*    External
+use GeoModelInterfaces   GeoModelInterfaces-* DetectorDescription/GeoModel
\ No newline at end of file
diff --git a/AtlasGeometryCommon/GeoModelEnvelopes/src/ForDetEnvelopeFactory.cxx b/AtlasGeometryCommon/GeoModelEnvelopes/src/ForDetEnvelopeFactory.cxx
new file mode 100755
index 0000000000000000000000000000000000000000..fe8583c592186e76679dd848cf29935e487b0dfe
--- /dev/null
+++ b/AtlasGeometryCommon/GeoModelEnvelopes/src/ForDetEnvelopeFactory.cxx
@@ -0,0 +1,72 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+#include "GeoModelEnvelopes/ForDetEnvelopeFactory.h"
+
+
+#include "GeoModelInterfaces/AbsMaterialManager.h"
+#include "GeoModelKernel/GeoMaterial.h"  
+#include "GeoModelKernel/GeoTube.h"  
+#include "GeoModelKernel/GeoLogVol.h"  
+#include "GeoModelKernel/GeoNameTag.h"  
+#include "GeoModelKernel/GeoPhysVol.h"  
+#include "GeoModelKernel/GeoTransform.h"
+#include "GeoModelKernel/GeoShapeShift.h"  
+#include "GeoModelKernel/GeoShapeUnion.h"
+
+#include "StoreGate/StoreGateSvc.h"
+
+#include "GeoModelInterfaces/StoredMaterialManager.h"
+
+#include <vector>
+
+
+ForDetEnvelopeFactory::ForDetEnvelopeFactory(StoreGateSvc *detStore)
+  : m_detectorManager(0),
+    m_materialManager(0),
+    m_detectorStore(detStore)
+{
+}
+
+ForDetEnvelopeFactory::~ForDetEnvelopeFactory()
+{
+}
+
+void ForDetEnvelopeFactory::create(GeoPhysVol *world)
+{
+  const StoredMaterialManager * materialManagerTmp = 0;
+  if (StatusCode::SUCCESS != m_detectorStore->retrieve(materialManagerTmp, std::string("MATERIALS"))) {
+    return; 
+  } 
+  m_materialManager = materialManagerTmp;
+  
+  // Get the materials  
+  const GeoMaterial* air = m_materialManager->getMaterial("std::Air");
+
+  // Build boolean shape: union of two tubes
+  const GeoTube* tube1 = new GeoTube(0.,2000.*CLHEP::mm,188750.*CLHEP::mm);
+  GeoTube* tube2 = new GeoTube(0.,2000.*CLHEP::mm,188750.*CLHEP::mm);
+  HepGeom::TranslateZ3D xfRelativeA(211250.*CLHEP::mm);
+  HepGeom::TranslateZ3D xfRelativeC(-211250.*CLHEP::mm);
+
+  const GeoShapeShift& envShape1 = (*tube1)<<xfRelativeA;
+  const GeoShapeUnion& envShape = envShape1.add((*tube2)<<xfRelativeC);
+  
+  GeoLogVol* lvEnv = new GeoLogVol("ForDetEnvelope",&envShape,air);
+  GeoPhysVol* pvEnv = new GeoPhysVol(lvEnv);
+
+  GeoNameTag *tag = new GeoNameTag("ForDetEnvelope");
+  world->add(tag);
+  world->add(pvEnv);
+
+  m_detectorManager=new ForDetEnvelopeManager();
+  m_detectorManager->addTreeTop(pvEnv);
+}
+
+
+const ForDetEnvelopeManager * ForDetEnvelopeFactory::getDetectorManager() const
+{
+  return m_detectorManager;
+}
+
diff --git a/AtlasGeometryCommon/GeoModelEnvelopes/src/ForDetEnvelopeManager.cxx b/AtlasGeometryCommon/GeoModelEnvelopes/src/ForDetEnvelopeManager.cxx
new file mode 100755
index 0000000000000000000000000000000000000000..24d362bb47eb63d16f3303aaa44b0f6ab6b00787
--- /dev/null
+++ b/AtlasGeometryCommon/GeoModelEnvelopes/src/ForDetEnvelopeManager.cxx
@@ -0,0 +1,38 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+#include "GeoModelEnvelopes/ForDetEnvelopeManager.h"
+
+ForDetEnvelopeManager::ForDetEnvelopeManager()
+{
+  setName("ForDetEnvelope");
+}
+
+
+ForDetEnvelopeManager::~ForDetEnvelopeManager()
+{
+  for (unsigned int i = 0; i < m_volume.size(); i++) {
+    m_volume[i]->unref();
+  }
+}
+
+
+unsigned int ForDetEnvelopeManager::getNumTreeTops() const
+{
+  return m_volume.size();
+}
+
+PVConstLink ForDetEnvelopeManager::getTreeTop(unsigned int i) const
+{
+  return m_volume[i];
+}
+
+void  ForDetEnvelopeManager::addTreeTop(PVLink vol)
+{
+  vol->ref();
+  m_volume.push_back(vol);
+}
+
+
+
diff --git a/AtlasGeometryCommon/GeoModelEnvelopes/src/ForDetEnvelopeTool.cxx b/AtlasGeometryCommon/GeoModelEnvelopes/src/ForDetEnvelopeTool.cxx
new file mode 100755
index 0000000000000000000000000000000000000000..3ec7b37462e6b090ddda8dfe248e71911a59ce19
--- /dev/null
+++ b/AtlasGeometryCommon/GeoModelEnvelopes/src/ForDetEnvelopeTool.cxx
@@ -0,0 +1,82 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+#include "GeoModelEnvelopes/ForDetEnvelopeTool.h"
+#include "GeoModelEnvelopes/ForDetEnvelopeFactory.h" 
+#include "GeoModelEnvelopes/ForDetEnvelopeManager.h" 
+
+#include "GeoModelInterfaces/IGeoModelSvc.h"
+#include "GeoModelUtilities/GeoModelExperiment.h"
+#include "GaudiKernel/IService.h"
+#include "GaudiKernel/ISvcLocator.h"
+#include "GaudiKernel/MsgStream.h"
+
+#include "StoreGate/StoreGateSvc.h"
+
+#include "CLIDSvc/tools/ClassID_traits.h"
+#include "SGTools/DataProxy.h"
+
+ForDetEnvelopeTool::ForDetEnvelopeTool(const std::string& type, 
+				       const std::string& name, 
+				       const IInterface* parent): 
+  GeoModelTool(type,name,parent),
+  m_manager(0)
+{
+}
+
+ForDetEnvelopeTool::~ForDetEnvelopeTool()
+{
+}
+
+
+StatusCode ForDetEnvelopeTool::create(StoreGateSvc* detStore)
+{ 
+  MsgStream log(msgSvc(), name()); 
+
+  log << MSG::INFO << "Building Forward Detectors Envelope" << endreq;
+
+  IGeoModelSvc *geoModel;
+  StatusCode sc = service ("GeoModelSvc",geoModel);
+  if (sc.isFailure()) {
+    log << MSG::FATAL << "Could not locate GeoModelSvc" << endreq;
+    return StatusCode::FAILURE;
+  }
+
+  GeoModelExperiment* theExpt; 
+  if (StatusCode::SUCCESS != detStore->retrieve(theExpt,"ATLAS")) { 
+    log << MSG::ERROR 
+	<< "Could not find GeoModelExperiment ATLAS" 
+	<< endreq; 
+    return StatusCode::FAILURE; 
+  } 
+
+  if(0==m_manager) {
+    GeoPhysVol *world=&*theExpt->getPhysVol();
+
+    ForDetEnvelopeFactory theFactory(detStore);
+    theFactory.create(world);
+
+    m_manager = theFactory.getDetectorManager();
+    theExpt->addManager(m_manager);
+    sc = detStore->record(m_manager,
+			  m_manager->getName());
+    
+    if (sc.isFailure()) {
+      log << MSG::ERROR << "Could not register ForDetEnvelope detector manager" << endreq;
+      return (StatusCode::FAILURE); 
+    }
+    return StatusCode::SUCCESS;
+  }
+  return StatusCode::FAILURE;
+}
+
+StatusCode ForDetEnvelopeTool::clear(StoreGateSvc* detStore)
+{
+  SG::DataProxy* _proxy = detStore->proxy(ClassID_traits<ForDetEnvelopeManager>::ID(),m_manager->getName());
+  if(_proxy) {
+    _proxy->reset();
+    m_manager = 0;
+  }
+  return StatusCode::SUCCESS;
+}
diff --git a/AtlasGeometryCommon/GeoModelEnvelopes/src/components/GeoModelEnvelopes_entries.cxx b/AtlasGeometryCommon/GeoModelEnvelopes/src/components/GeoModelEnvelopes_entries.cxx
new file mode 100755
index 0000000000000000000000000000000000000000..ecefe75b64fc6f11fb87dc8e2a9e07685bd7bca6
--- /dev/null
+++ b/AtlasGeometryCommon/GeoModelEnvelopes/src/components/GeoModelEnvelopes_entries.cxx
@@ -0,0 +1,8 @@
+#include "GeoModelEnvelopes/ForDetEnvelopeTool.h"
+#include "GaudiKernel/DeclareFactoryEntries.h"
+
+DECLARE_TOOL_FACTORY(ForDetEnvelopeTool)
+
+DECLARE_FACTORY_ENTRIES(GeoModelEnvelopes) {
+    DECLARE_ALGTOOL  ( ForDetEnvelopeTool )
+}
diff --git a/AtlasGeometryCommon/GeoModelEnvelopes/src/components/GeoModelEnvelopes_load.cxx b/AtlasGeometryCommon/GeoModelEnvelopes/src/components/GeoModelEnvelopes_load.cxx
new file mode 100755
index 0000000000000000000000000000000000000000..bbd8388f64c0504a91dba7ccd6868da0190b68b9
--- /dev/null
+++ b/AtlasGeometryCommon/GeoModelEnvelopes/src/components/GeoModelEnvelopes_load.cxx
@@ -0,0 +1,4 @@
+#include "GaudiKernel/LoadFactoryEntries.h"
+
+LOAD_FACTORY_ENTRIES(GeoModelEnvelopes)
+