diff --git a/DDCore/python/dd4hepFactories.py b/DDCore/python/dd4hepFactories.py
index 4a77012e9b16e0dbf856523cb016f533e341caed..aa970431ca3ded77cef5fc8d1b031a053f3265e2 100755
--- a/DDCore/python/dd4hepFactories.py
+++ b/DDCore/python/dd4hepFactories.py
@@ -27,7 +27,8 @@ class ComponentDumper:
     self.all_components = []
 
   def scanPath(self):
-    ldp = os.environ['LD_LIBRARY_PATH'].split(':')
+    ldp = os.getenv("LD_LIBRARY_PATH",
+                    "/usr/lib64:/usr/lib/:/usr/local/lib:/usr/lib64/root:/usr/lib/root:/usr/local/lib/root").split(':')
     for p in ldp:
       if len(p):
         logger.info('+== Search component directory: ' + p)
diff --git a/DDCore/python/dd4hep_base.py b/DDCore/python/dd4hep_base.py
index 64328ef2825caa81ff646cb21a442de8bac5ef38..5176a95bcc02f6cd1ab2526c7f9fd204b428332f 100644
--- a/DDCore/python/dd4hep_base.py
+++ b/DDCore/python/dd4hep_base.py
@@ -25,13 +25,15 @@ def compileAClick(dictionary, g4=True):
   """
   from ROOT import gInterpreter, gSystem
   import os.path
-  dd4hep = os.environ['DD4hepINSTALL']
-  inc = ' -I' + os.environ['ROOTSYS'] + '/include -I' + dd4hep + '/include '
-  lib = ' -L' + dd4hep + '/lib -lDDCore -lDDG4 -lDDSegmentation '
+  dd4hep = os.getenv("DD4hepINSTALL", "/usr")
+  rootsys = os.getenv("ROOTSYS", "/usr")
+
+  inc = ' -I' + rootsys + '/include -I' + dd4hep + '/include '
+  lib = ' -L' + dd4hep + '/lib64 ' + ' -L' + dd4hep + '/lib -lDDCore -lDDG4 -lDDSegmentation '
   if g4:
-    geant4 = os.environ['G4INSTALL']
+    geant4 = os.getenv('G4INSTALL', "/usr")
     inc = inc + ' -I' + geant4 + '/include/Geant4 -Wno-shadow -g -O0 '
-    lib = lib + ' -L' + geant4 + '/lib  -L' + geant4 + '/lib64 -lG4event -lG4tracking -lG4particles '
+    lib = lib + ' -L' + geant4 + '/lib64  -L' + geant4 + '/lib -lG4event -lG4tracking -lG4particles '
 
   gSystem.AddIncludePath(inc)
   gSystem.AddLinkedLibs(lib)
@@ -50,7 +52,11 @@ def loaddd4hep():
   import os
   import sys
   # Add ROOT to the python path in case it is not yet there....
-  sys.path.append(os.environ['ROOTSYS'] + os.sep + 'lib')
+  rootsys = os.getenv("ROOTSYS", "/usr")
+  sys.path.append(os.path.join(rootsys, 'lib'))
+  sys.path.append(os.path.join(rootsys, 'lib64'))
+  sys.path.append(os.path.join(rootsys, 'lib', 'root'))
+  sys.path.append(os.path.join(rootsys, 'lib64', 'root'))
   from ROOT import gSystem
 
   import platform
diff --git a/GaudiPluginService/src/PluginServiceV1.cpp b/GaudiPluginService/src/PluginServiceV1.cpp
index d0f741bb73c818ed5d179d3800c3908f2deac56d..2ec602b7bcd5779e9ac8ee9316b63d9fc20bcc39 100644
--- a/GaudiPluginService/src/PluginServiceV1.cpp
+++ b/GaudiPluginService/src/PluginServiceV1.cpp
@@ -156,84 +156,82 @@ namespace Gaudi {
           const char  sep    = ':';
 #endif
           char* search_path = ::getenv( envVar );
-          if ( search_path ) {
-            logger().debug( std::string( "searching factories in " ) + envVar );
-            std::string            path( search_path );
-            std::string::size_type pos    = 0;
-            std::string::size_type newpos = 0;
-            while ( pos != std::string::npos ) {
-              std::string dirName;
-              // get the next entry in the path
-              newpos = path.find( sep, pos );
-              if ( newpos != std::string::npos ) {
-                dirName = path.substr( pos, newpos - pos );
-                pos     = newpos + 1;
-              } else {
-                dirName = path.substr( pos );
-                pos     = newpos;
-              }
-              logger().debug( std::string( " looking into " ) + dirName );
-              // look for files called "*.components" in the directory
-              DIR* dir = opendir( dirName.c_str() );
-              if ( dir ) {
-                struct dirent* entry;
-                while ( ( entry = readdir( dir ) ) ) {
-                  std::string name( entry->d_name );
-                  // check if the file name ends with ".components"
-                  std::string::size_type extpos = name.find( ".components" );
-                  if ( ( extpos != std::string::npos ) && ( ( extpos + 11 ) == name.size() ) ) {
-                    std::string fullPath = ( dirName + '/' + name );
-                    { // check if it is a regular file
-                      struct stat buf;
-                      if ( 0 != ::stat( fullPath.c_str(), &buf ) )
-			continue;
-                      else if ( !S_ISREG( buf.st_mode ) )
-			continue;
+          logger().debug( std::string( "searching factories in " ) + envVar );
+          std::string path = search_path ? std::string(search_path) : "/usr/lib64:/usr/lib:/usr/local/lib";
+          std::string::size_type pos    = 0;
+          std::string::size_type newpos = 0;
+          while ( pos != std::string::npos ) {
+            std::string dirName;
+            // get the next entry in the path
+            newpos = path.find( sep, pos );
+            if ( newpos != std::string::npos ) {
+              dirName = path.substr( pos, newpos - pos );
+              pos     = newpos + 1;
+            } else {
+              dirName = path.substr( pos );
+              pos     = newpos;
+            }
+            logger().debug( std::string( " looking into " ) + dirName );
+            // look for files called "*.components" in the directory
+            DIR* dir = opendir( dirName.c_str() );
+            if ( dir ) {
+              struct dirent* entry;
+              while ( ( entry = readdir( dir ) ) ) {
+                std::string name( entry->d_name );
+                // check if the file name ends with ".components"
+                std::string::size_type extpos = name.find( ".components" );
+                if ( ( extpos != std::string::npos ) && ( ( extpos + 11 ) == name.size() ) ) {
+                  std::string fullPath = ( dirName + '/' + name );
+                  { // check if it is a regular file
+                    struct stat buf;
+                    if ( 0 != ::stat( fullPath.c_str(), &buf ) )
+                      continue;
+                    else if ( !S_ISREG( buf.st_mode ) )
+                      continue;
+                  }
+                  // read the file
+                  logger().debug( std::string( "  reading " ) + name );
+                  std::ifstream factories{fullPath};
+                  std::string   line;
+                  int           factoriesCount = 0;
+                  int           lineCount      = 0;
+                  while ( !factories.eof() ) {
+                    ++lineCount;
+                    std::getline( factories, line );
+                    trim( line );
+                    // skip empty lines and lines starting with '#'
+                    if ( line.empty() || line[0] == '#' ) continue;
+                    // only accept "v1" factories
+                    if ( line.substr( 0, 4 ) == "v1::" )
+                      line = line.substr( 4 );
+                    else
+                      continue;
+                    // look for the separator
+                    auto pos = line.find( ':' );
+                    if ( pos == std::string::npos ) {
+                      logger().warning( "failed to parse line " + fullPath + ':' + std::to_string( lineCount ) );
+                      continue;
                     }
-                    // read the file
-                    logger().debug( std::string( "  reading " ) + name );
-                    std::ifstream factories{fullPath};
-                    std::string   line;
-                    int           factoriesCount = 0;
-                    int           lineCount      = 0;
-                    while ( !factories.eof() ) {
-                      ++lineCount;
-                      std::getline( factories, line );
-                      trim( line );
-                      // skip empty lines and lines starting with '#'
-                      if ( line.empty() || line[0] == '#' ) continue;
-                      // only accept "v1" factories
-                      if ( line.substr( 0, 4 ) == "v1::" )
-                        line = line.substr( 4 );
-                      else
-                        continue;
-                      // look for the separator
-                      auto pos = line.find( ':' );
-                      if ( pos == std::string::npos ) {
-                        logger().warning( "failed to parse line " + fullPath + ':' + std::to_string( lineCount ) );
-                        continue;
-                      }
-                      const std::string lib( line, 0, pos );
-                      const std::string fact( line, pos + 1 );
-                      m_factories.emplace( fact, FactoryInfo( lib ) );
+                    const std::string lib( line, 0, pos );
+                    const std::string fact( line, pos + 1 );
+                    m_factories.emplace( fact, FactoryInfo( lib ) );
 #ifdef GAUDI_REFLEX_COMPONENT_ALIASES
-                      // add an alias for the factory using the Reflex convention
-                      std::string old_name = old_style_name( fact );
-                      if ( fact != old_name ) {
-                        FactoryInfo old_info( lib );
-                        old_info.properties["ReflexName"] = "true";
-                        m_factories.emplace( old_name, old_info );
-                      }
-#endif
-                      ++factoriesCount;
-                    }
-                    if ( logger().level() <= Logger::Debug ) {
-                      logger().debug( "  found " + std::to_string( factoriesCount ) + " factories" );
+                    // add an alias for the factory using the Reflex convention
+                    std::string old_name = old_style_name( fact );
+                    if ( fact != old_name ) {
+                      FactoryInfo old_info( lib );
+                      old_info.properties["ReflexName"] = "true";
+                      m_factories.emplace( old_name, old_info );
                     }
+#endif
+                    ++factoriesCount;
+                  }
+                  if ( logger().level() <= Logger::Debug ) {
+                    logger().debug( "  found " + std::to_string( factoriesCount ) + " factories" );
                   }
                 }
-                closedir( dir );
               }
+              closedir( dir );
             }
           }
         }
diff --git a/GaudiPluginService/src/PluginServiceV2.cpp b/GaudiPluginService/src/PluginServiceV2.cpp
index 7b520e75fb4733d92b03679bb064907f6bf34daf..4afd1187db4f3f285fea50a171ec408cdaa7e886 100644
--- a/GaudiPluginService/src/PluginServiceV2.cpp
+++ b/GaudiPluginService/src/PluginServiceV2.cpp
@@ -158,7 +158,7 @@ namespace Gaudi {
 
           std::string search_path;
           const char* envPtr = std::getenv( envVar.c_str() );
-          if ( envPtr ) search_path = envPtr;
+          search_path = envPtr ? envPtr : "/usr/lib64:/usr/lib:/usr/local/lib";
           if ( search_path.empty() ) {
             return;
           }