diff --git a/common/utils/Regex.cpp b/common/utils/Regex.cpp
index d064158292088972001f5acba442fef435295b5b..60a91ce24e797c9e28c5b71f79978db0d3a4a7b3 100644
--- a/common/utils/Regex.cpp
+++ b/common/utils/Regex.cpp
@@ -27,10 +27,10 @@
 
 namespace cta { namespace utils {
 
-Regex::Regex(const char * re_str) : m_set(false) {
-  if (int rc = ::regcomp(&m_re, re_str, REG_EXTENDED)) {
+Regex::Regex(const std::string & re_str) : m_reStr(re_str), m_set(false) {
+  if (int rc = ::regcomp(&m_re, m_reStr.c_str(), REG_EXTENDED)) {
     std::string error("Could not compile regular expression: \"");
-    error += re_str;
+    error += m_reStr;
     error += "\"";
     char re_err[1024];
     if (::regerror(rc, &m_re, re_err, sizeof (re_err))) {
@@ -42,6 +42,10 @@ Regex::Regex(const char * re_str) : m_set(false) {
   m_set = true;
 }
 
+Regex::Regex(const Regex& o) {
+  Regex(o.m_reStr);
+}
+
 Regex::~Regex() {
   if (m_set)
     ::regfree(&m_re);
diff --git a/common/utils/Regex.hpp b/common/utils/Regex.hpp
index 6a8cab971738017ed5d7740adef079b5f9f01d30..5b5bf259d72a88d159f9c253345a7a8fdff418aa 100644
--- a/common/utils/Regex.hpp
+++ b/common/utils/Regex.hpp
@@ -29,7 +29,8 @@ namespace cta { namespace utils {
 
 class Regex {
   public:
-    Regex(const char * re_str);
+    Regex(const std::string & re_str);
+    Regex(const Regex & o);
     virtual ~Regex();
 
     /*!
@@ -45,6 +46,8 @@ class Regex {
     }
 
   private:
+    // We keep around the string from which the RE was compiled to allow copying.
+    std::string m_reStr;
     regex_t m_re;
     bool m_set;
 };