diff --git a/corsika/modules/epos/Random.hpp b/corsika/modules/epos/Random.hpp
index c3fec35ab64265175b1de024fdfa8320771cab94..4f0099ac3a9e033d9573a9aade1dac3fb9ea4a9b 100644
--- a/corsika/modules/epos/Random.hpp
+++ b/corsika/modules/epos/Random.hpp
@@ -28,4 +28,11 @@ namespace epos {
     return dist(rng);
   }
 
+  double double_rndm_interface() {
+    static corsika::default_prng_type& rng =
+        corsika::RNGManager::getInstance().getRandomStream("epos");
+    std::uniform_real_distribution<double> dist;
+    return dist(rng);
+  }
+
 } // namespace epos
diff --git a/modules/epos/epos.cpp b/modules/epos/epos.cpp
index 1836776c70770a18e10419e2b03123a9e47da685..bbfe7e20f9805d97c9ad78e39f16823e0f9277b6 100644
--- a/modules/epos/epos.cpp
+++ b/modules/epos/epos.cpp
@@ -9,7 +9,8 @@ namespace epos {
   // this is needed as linker object, but it is not needed to do anything
   void ranfcv_(double&) {}
 
-  float rangen_() { return  ::epos::rndm_interface(); }
+  float rangen_() { return ::epos::rndm_interface(); }
+  double drangen_() { return ::epos::double_rndm_interface(); }
 
   datadir::datadir(const std::string& dir) {
     if (dir.length() > 500) {
diff --git a/modules/epos/epos.hpp b/modules/epos/epos.hpp
index be5aa8269f6bc2edb8de18dd9687082303cdef9c..a454c4a6e954f5f9a2732dd0bd35402c2eba9e41 100644
--- a/modules/epos/epos.hpp
+++ b/modules/epos/epos.hpp
@@ -27,6 +27,16 @@ namespace epos {
    **/
   extern float rndm_interface();
 
+  /**
+   * \function epos::double_rndm_interface
+   *
+   * this is the random number hook to external packages.
+   *
+   * CORSIKA8, for example, has to provide an implementation of this.
+   **/
+
+  extern double double_rndm_interface();
+
   extern "C" {
 
   void aaset_(int&);
@@ -76,6 +86,7 @@ namespace epos {
   void ranfcv_(double&);
   // void ranfgt(int&);
   float rangen_();
+  double drangen_();
   // common blocks as
   // defined in epos.inc