diff --git a/Control/CxxUtils/CxxUtils/get_unaligned.h b/Control/CxxUtils/CxxUtils/get_unaligned.h
index 9adf4f757ab4354b253a6eb6a5ccb3f34c2856f5..48a2df6faa82f4ab879cb833e8e012923db3aeaa 100644
--- a/Control/CxxUtils/CxxUtils/get_unaligned.h
+++ b/Control/CxxUtils/CxxUtils/get_unaligned.h
@@ -147,6 +147,93 @@ double get_unaligned_double (const uint8_t* ATH_RESTRICT &  p)
 }
 
 
+/// Define templated versions of the above functions.
+
+
+template <class T>
+T get_unaligned (const uint8_t* ATH_RESTRICT &  p);
+
+
+template <>
+inline
+uint8_t get_unaligned<uint8_t> (const uint8_t* ATH_RESTRICT &  p)
+{
+  return *p++;
+}
+
+
+template <>
+inline
+uint16_t get_unaligned<uint16_t> (const uint8_t* ATH_RESTRICT &  p)
+{
+  return get_unaligned16 (p);
+}
+
+
+template <>
+inline
+uint32_t get_unaligned<uint32_t> (const uint8_t* ATH_RESTRICT &  p)
+{
+  return get_unaligned32 (p);
+}
+
+
+template <>
+inline
+uint64_t get_unaligned<uint64_t> (const uint8_t* ATH_RESTRICT &  p)
+{
+  return get_unaligned64 (p);
+}
+
+
+template <>
+inline
+float get_unaligned<float> (const uint8_t* ATH_RESTRICT &  p)
+{
+  return get_unaligned_float (p);
+}
+
+
+template <>
+inline
+double get_unaligned<double> (const uint8_t* ATH_RESTRICT &  p)
+{
+  return get_unaligned_double (p);
+}
+
+
+template <>
+inline
+int8_t get_unaligned<int8_t> (const uint8_t* ATH_RESTRICT &  p)
+{
+  return get_unaligned<uint8_t> (p);
+}
+
+
+template <>
+inline
+int16_t get_unaligned<int16_t> (const uint8_t* ATH_RESTRICT &  p)
+{
+  return get_unaligned<uint16_t> (p);
+}
+
+
+template <>
+inline
+int32_t get_unaligned<int32_t> (const uint8_t* ATH_RESTRICT &  p)
+{
+  return get_unaligned<uint32_t> (p);
+}
+
+
+template <>
+inline
+int64_t get_unaligned<int64_t> (const uint8_t* ATH_RESTRICT &  p)
+{
+  return get_unaligned<uint64_t> (p);
+}
+
+
 } // namespace CxxUtils
 
 
diff --git a/Control/CxxUtils/test/get_unaligned_test.cxx b/Control/CxxUtils/test/get_unaligned_test.cxx
index 93a93e8636074dab6367a0b159404c81d0a615c5..b7db1dce12680b66ee8ee0fa4ef1961bbdd306c2 100644
--- a/Control/CxxUtils/test/get_unaligned_test.cxx
+++ b/Control/CxxUtils/test/get_unaligned_test.cxx
@@ -21,25 +21,56 @@ void test1()
   std::cout << "test1\n";
   uint8_t arr[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
   const uint8_t* p = arr+1;
+  assert (CxxUtils::get_unaligned<uint8_t> (p) == 1);
+  assert (p == arr+2);
+  p = arr+1;
+  assert (CxxUtils::get_unaligned<int8_t> (p) == 1);
+  assert (p == arr+2);
+
+  p = arr+1;
   assert (CxxUtils::get_unaligned16 (p) == 0x201);
   assert (p == arr+3);
+  p = arr+1;
+  assert (CxxUtils::get_unaligned<uint16_t> (p) == 0x201);
+  assert (p == arr+3);
+  p = arr+1;
+  assert (CxxUtils::get_unaligned<int16_t> (p) == 0x201);
+  assert (p == arr+3);
 
   assert (CxxUtils::get_unaligned32 (p) == 0x6050403);
   assert (p == arr+7);
+  p = arr+3;
+  assert (CxxUtils::get_unaligned<uint32_t> (p) == 0x6050403);
+  assert (p == arr+7);
+  p = arr+3;
+  assert (CxxUtils::get_unaligned<int32_t> (p) == 0x6050403);
+  assert (p == arr+7);
 
   const uint8_t* ATH_RESTRICT q = arr+1;
   assert (CxxUtils::get_unaligned64 (q) == 0x807060504030201);
   assert (q == arr+9);
+  q = arr+1;
+  assert (CxxUtils::get_unaligned<uint64_t> (q) == 0x807060504030201);
+  assert (q == arr+9);
+  q = arr+1;
+  assert (CxxUtils::get_unaligned<int64_t> (q) == 0x807060504030201);
+  assert (q == arr+9);
 
   uint8_t arr_f[] = { 0, 0, 0, 72, 64 };
   const uint8_t* pf = arr_f+1;
   assert (CxxUtils::get_unaligned_float (pf) == 3.125);
   assert (pf == arr_f+5);
+  pf = arr_f+1;
+  assert (CxxUtils::get_unaligned<float> (pf) == 3.125);
+  assert (pf == arr_f+5);
 
   uint8_t arr_d[] = { 0, 0, 0, 0, 0, 0, 0, 9, 64 };
   const uint8_t* pd = arr_d+1;
   assert (CxxUtils::get_unaligned_double (pd) == 3.125);
   assert (pd == arr_d+9);
+  pd = arr_d+1;
+  assert (CxxUtils::get_unaligned<double> (pd) == 3.125);
+  assert (pd == arr_d+9);
 }