diff --git a/CMakeLists.txt b/CMakeLists.txt
index afa6f8d043bc91b34583734d4c4eabcccf7b0ae2..cd30de52f2dbd92ad5c785d7c36e3dddfde88775 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,6 +1,17 @@
 CMAKE_MINIMUM_REQUIRED(VERSION 3.0.0)
 
+find_package(ROOT COMPONENTS RIO Tree)
+
 find_package(GaudiProject)
 
-gaudi_project(CEPCSW HEAD
-              USE Gaudi v29r2 )
\ No newline at end of file
+# Set up C++ Standard
+# ``-DCMAKE_CXX_STANDARD=<standard>`` when invoking CMake
+set(CMAKE_CXX_STANDARD 17 CACHE STRING "")
+
+if(NOT CMAKE_CXX_STANDARD MATCHES "14|17")
+  message(FATAL_ERROR "Unsupported C++ standard: ${CMAKE_CXX_STANDARD}")
+endif()
+
+
+gaudi_project(CEPCSW v0r1
+              USE Gaudi v33r1 )
\ No newline at end of file
diff --git a/FWCore/CMakeLists.txt b/FWCore/CMakeLists.txt
index 3cc5478bb80f00bc90fa56717ebb8331131dab3e..5ddac21d7a011994871cbc5e43fdb535dd2afb1f 100644
--- a/FWCore/CMakeLists.txt
+++ b/FWCore/CMakeLists.txt
@@ -6,7 +6,6 @@ gaudi_subdir(FWCore v0r1)
 find_package(podio REQUIRED)
 find_package(plcio REQUIRED)
 find_package(LCIO REQUIRED)
-find_package(ROOT COMPONENTS RIO Tree)
 
 # this declaration will not be needed in the future
 gaudi_depends_on_subdirs(GaudiAlg GaudiKernel)
@@ -15,8 +14,8 @@ gaudi_install_python_modules()
 
 gaudi_add_library(FWCore
 		  src/*.cpp
-                  INCLUDE_DIRS ${podio_INCLUDE_DIRS} ${LCIO_INCLUDE_DIRS} ${plcio_INCLUDE_DIRS} ROOT
-                  LINK_LIBRARIES GaudiAlgLib GaudiKernel ${podio_LIBRARIES} ${LCIO_LIBRARIES} ${plcio_LIBRARIES} ROOT
+                  INCLUDE_DIRS podio ${LCIO_INCLUDE_DIRS} ${plcio_INCLUDE_DIRS} ROOT
+                  LINK_LIBRARIES GaudiAlgLib GaudiKernel podio::podioRootIO ${LCIO_LIBRARIES} ${plcio_LIBRARIES} ROOT
                   PUBLIC_HEADERS FWCore)
 
 gaudi_add_module(FWCorePlugins
diff --git a/FWCore/FWCore/LCIODataSvc.h b/FWCore/FWCore/LCIODataSvc.h
index 8bfa3261f7d4e6da0da9e4dc860aaa9a282f8f58..74bf958bf2987b048192bb1031bbb40987ad4bf0 100644
--- a/FWCore/FWCore/LCIODataSvc.h
+++ b/FWCore/FWCore/LCIODataSvc.h
@@ -29,8 +29,6 @@
 class LCIODataSvc : public DataSvc {
 public:
 
-  friend class SvcFactory<LCIODataSvc>;
-
   typedef std::vector<std::pair<std::string, podio::CollectionBase*>> CollRegistry;
 
   virtual StatusCode initialize();
diff --git a/FWCore/src/components/CEPCDataSvc.cpp b/FWCore/src/components/CEPCDataSvc.cpp
index fa870478432eaf570360b8bceb73406cf2e66692..0325578c04befbdc4f25235749a85c6f94883814 100644
--- a/FWCore/src/components/CEPCDataSvc.cpp
+++ b/FWCore/src/components/CEPCDataSvc.cpp
@@ -6,7 +6,7 @@
 
 // Instantiation of a static factory class used by clients to create
 // instances of this service
-DECLARE_SERVICE_FACTORY(CEPCDataSvc)
+DECLARE_COMPONENT(CEPCDataSvc)
 
 /// Standard Constructor
 CEPCDataSvc::CEPCDataSvc(const std::string& name, ISvcLocator* svc)
diff --git a/FWCore/src/components/CEPCDataSvc.h b/FWCore/src/components/CEPCDataSvc.h
index 4953799c435618413978cb309abbda04ae78e83d..ff3878d76ac3f2d5d4dab236eb26ceab22149fd4 100644
--- a/FWCore/src/components/CEPCDataSvc.h
+++ b/FWCore/src/components/CEPCDataSvc.h
@@ -5,7 +5,6 @@
 
 class CEPCDataSvc : public PodioDataSvc
 {
-  friend class SvcFactory<CEPCDataSvc>;
 
 public:
   /// Standard Constructor
diff --git a/FWCore/src/components/LCIODataSvc.cpp b/FWCore/src/components/LCIODataSvc.cpp
index 3656f3ffc0770552333da606856a02209242921f..a807be847902c81973c872851edb2d9785241e6d 100644
--- a/FWCore/src/components/LCIODataSvc.cpp
+++ b/FWCore/src/components/LCIODataSvc.cpp
@@ -16,7 +16,7 @@
 
 typedef std::vector<lcio::MCParticle*> MCParticleVec ;  
 
-DECLARE_SERVICE_FACTORY(LCIODataSvc)
+DECLARE_COMPONENT(LCIODataSvc)
 /// Service initialisation
 StatusCode LCIODataSvc::initialize() {
   // Nothing to do: just call base class initialisation
diff --git a/FWCore/src/components/LCIOInput.h b/FWCore/src/components/LCIOInput.h
index 1ede535f1bd62a54e565a20e9abf005d85825603..252a504c657af62a40fd4adf3f92a1244572c852 100644
--- a/FWCore/src/components/LCIOInput.h
+++ b/FWCore/src/components/LCIOInput.h
@@ -19,7 +19,6 @@ class LCIODataSvc;
  */
 
 class LCIOInput : public GaudiAlgorithm {
-  friend class AlgFactory<LCIOInput>;
 
 public:
   /// Constructor.
diff --git a/FWCore/src/components/PodioInput.h b/FWCore/src/components/PodioInput.h
index 0319d78f63a715edd5bd42d5e08823328ed759f2..42b2157f8bad865a61e333e2a858276de61090fa 100644
--- a/FWCore/src/components/PodioInput.h
+++ b/FWCore/src/components/PodioInput.h
@@ -19,7 +19,6 @@ class PodioDataSvc;
  */
 
 class PodioInput : public GaudiAlgorithm {
-  friend class AlgFactory<PodioInput>;
 
 public:
   /// Constructor.
diff --git a/FWCore/src/components/PodioOutput.h b/FWCore/src/components/PodioOutput.h
index f1c93beabd1436202330011ffe741bcdfa5d2dab..2a7de0c06c7a0e54dad03bc641691bf90261d979 100644
--- a/FWCore/src/components/PodioOutput.h
+++ b/FWCore/src/components/PodioOutput.h
@@ -14,7 +14,6 @@ class TFile;
 class PodioDataSvc;
 
 class PodioOutput : public GaudiAlgorithm {
-  friend class AlgFactory<PodioOutput>;
 
 public:
   /// Constructor.