diff --git a/DataFormats/HcalRecHit/BuildFile.xml b/DataFormats/HcalRecHit/BuildFile.xml
index 45f262e49d64a..2bfe480b54a5d 100644
--- a/DataFormats/HcalRecHit/BuildFile.xml
+++ b/DataFormats/HcalRecHit/BuildFile.xml
@@ -2,6 +2,10 @@
+
+
+
+
diff --git a/DataFormats/HcalRecHit/interface/HcalRecHitHostCollection.h b/DataFormats/HcalRecHit/interface/HcalRecHitHostCollection.h
new file mode 100644
index 0000000000000..97f21a41a8c1b
--- /dev/null
+++ b/DataFormats/HcalRecHit/interface/HcalRecHitHostCollection.h
@@ -0,0 +1,13 @@
+#ifndef DataFormats_HcalRecHit_HcalRecHitHostCollection_h
+#define DataFormats_HcalRecHit_HcalRecHitHostCollection_h
+
+#include "DataFormats/Portable/interface/PortableHostCollection.h"
+#include "DataFormats/HcalRecHit/interface/HcalRecHitSoA.h"
+
+namespace hcal {
+
+ // HcalRecHitSoA in host memory
+ using RecHitHostCollection = PortableHostCollection;
+} // namespace hcal
+
+#endif
diff --git a/DataFormats/HcalRecHit/interface/HcalRecHitSoA.h b/DataFormats/HcalRecHit/interface/HcalRecHitSoA.h
new file mode 100644
index 0000000000000..cf76c86907da9
--- /dev/null
+++ b/DataFormats/HcalRecHit/interface/HcalRecHitSoA.h
@@ -0,0 +1,19 @@
+#ifndef DataFormats_HcalRecHit_HcalRecHitSoA_h
+#define DataFormats_HcalRecHit_HcalRecHitSoA_h
+
+#include "DataFormats/SoATemplate/interface/SoALayout.h"
+
+namespace hcal {
+
+ GENERATE_SOA_LAYOUT(HcalRecHitSoALayout,
+ SOA_SCALAR(uint32_t, size),
+ SOA_COLUMN(uint32_t, detId),
+ SOA_COLUMN(float, energy),
+ SOA_COLUMN(float, chi2),
+ SOA_COLUMN(float, energyM0),
+ SOA_COLUMN(float, timeM0))
+
+ using HcalRecHitSoA = HcalRecHitSoALayout<>;
+} // namespace hcal
+
+#endif
diff --git a/DataFormats/HcalRecHit/interface/alpaka/HcalRecHitDeviceCollection.h b/DataFormats/HcalRecHit/interface/alpaka/HcalRecHitDeviceCollection.h
new file mode 100644
index 0000000000000..36794c9d105ca
--- /dev/null
+++ b/DataFormats/HcalRecHit/interface/alpaka/HcalRecHitDeviceCollection.h
@@ -0,0 +1,22 @@
+#ifndef DataFormats_HcalRecHit_alpaka_HcalRecHitDeviceCollection_h
+#define DataFormats_HcalRecHit_alpaka_HcalRecHitDeviceCollection_h
+
+#include "DataFormats/Portable/interface/alpaka/PortableCollection.h"
+#include "DataFormats/HcalRecHit/interface/HcalRecHitSoA.h"
+#include "HeterogeneousCore/AlpakaInterface/interface/config.h"
+
+namespace ALPAKA_ACCELERATOR_NAMESPACE {
+
+ namespace hcal {
+
+ // make the names from the top-level hcal namespace visible for unqualified lookup
+ // inside the ALPAKA_ACCELERATOR_NAMESPACE::hcal namespace
+ using namespace ::hcal;
+
+ // HcalRecHitSoA in device global memory
+ using RecHitDeviceCollection = PortableCollection;
+ } // namespace hcal
+
+} // namespace ALPAKA_ACCELERATOR_NAMESPACE
+
+#endif
diff --git a/DataFormats/HcalRecHit/src/alpaka/classes_cuda.h b/DataFormats/HcalRecHit/src/alpaka/classes_cuda.h
new file mode 100644
index 0000000000000..96db359827566
--- /dev/null
+++ b/DataFormats/HcalRecHit/src/alpaka/classes_cuda.h
@@ -0,0 +1,4 @@
+#include "DataFormats/Common/interface/DeviceProduct.h"
+#include "DataFormats/Common/interface/Wrapper.h"
+#include "DataFormats/HcalRecHit/interface/HcalRecHitSoA.h"
+#include "DataFormats/HcalRecHit/interface/alpaka/HcalRecHitDeviceCollection.h"
diff --git a/DataFormats/HcalRecHit/src/alpaka/classes_cuda_def.xml b/DataFormats/HcalRecHit/src/alpaka/classes_cuda_def.xml
new file mode 100644
index 0000000000000..3524097077655
--- /dev/null
+++ b/DataFormats/HcalRecHit/src/alpaka/classes_cuda_def.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/DataFormats/HcalRecHit/src/alpaka/classes_rocm.h b/DataFormats/HcalRecHit/src/alpaka/classes_rocm.h
new file mode 100644
index 0000000000000..96db359827566
--- /dev/null
+++ b/DataFormats/HcalRecHit/src/alpaka/classes_rocm.h
@@ -0,0 +1,4 @@
+#include "DataFormats/Common/interface/DeviceProduct.h"
+#include "DataFormats/Common/interface/Wrapper.h"
+#include "DataFormats/HcalRecHit/interface/HcalRecHitSoA.h"
+#include "DataFormats/HcalRecHit/interface/alpaka/HcalRecHitDeviceCollection.h"
diff --git a/DataFormats/HcalRecHit/src/alpaka/classes_rocm_def.xml b/DataFormats/HcalRecHit/src/alpaka/classes_rocm_def.xml
new file mode 100644
index 0000000000000..e27485e956bc4
--- /dev/null
+++ b/DataFormats/HcalRecHit/src/alpaka/classes_rocm_def.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/DataFormats/HcalRecHit/src/classes.cc b/DataFormats/HcalRecHit/src/classes.cc
new file mode 100644
index 0000000000000..95b7fc0c2d6b7
--- /dev/null
+++ b/DataFormats/HcalRecHit/src/classes.cc
@@ -0,0 +1,4 @@
+#include "DataFormats/HcalRecHit/interface/HcalRecHitHostCollection.h"
+#include "DataFormats/Portable/interface/PortableHostCollectionReadRules.h"
+
+SET_PORTABLEHOSTCOLLECTION_READ_RULES(hcal::RecHitHostCollection);
diff --git a/DataFormats/HcalRecHit/src/classes.h b/DataFormats/HcalRecHit/src/classes.h
index 88681c514a26d..02678084bb071 100644
--- a/DataFormats/HcalRecHit/src/classes.h
+++ b/DataFormats/HcalRecHit/src/classes.h
@@ -10,6 +10,8 @@
#include "DataFormats/HcalRecHit/interface/HcalSourcePositionData.h"
#include "DataFormats/HcalDetId/interface/HcalDetId.h"
#include "DataFormats/HcalRecHit/interface/HcalRecHitCollections.h"
+#include "DataFormats/HcalRecHit/interface/HcalRecHitSoA.h"
+#include "DataFormats/HcalRecHit/interface/HcalRecHitHostCollection.h"
#include "DataFormats/Common/interface/Wrapper.h"
#include "DataFormats/Common/interface/Ref.h"
#include "DataFormats/Common/interface/RefProd.h"
diff --git a/DataFormats/HcalRecHit/src/classes_def.xml b/DataFormats/HcalRecHit/src/classes_def.xml
index c6d35a85cd6ec..4cfb4c2be84a6 100644
--- a/DataFormats/HcalRecHit/src/classes_def.xml
+++ b/DataFormats/HcalRecHit/src/classes_def.xml
@@ -118,4 +118,9 @@
-
+
+
+
+
+
+