diff --git a/src/config/Config.inc.in b/src/config/Config.inc.in
index 6ffce32155c2a9f1d8a9851ae7095d8a2ee22d6b..b4739b647b5290b3392ad69361a83f84e6c0d87e 100644
--- a/src/config/Config.inc.in
+++ b/src/config/Config.inc.in
@@ -28,8 +28,18 @@
 namespace PLMD {
 namespace config {
 
+// This is a fix to allow conda to correctly replace paths in binary files.
+// These variables should not be static or they will be optimized away!
+// I guess the compiler thinks that they could be replaced from outside
+// (even though they are const) and thus cannot optimize them.
+const char* plumed_root="@PLUMED_ROOT@";
+const char* plumed_soext="@SOEXT@";
+const char* plumed_htmldir="@htmldir@";
+const char* plumed_includedir="@includedir@";
+const char* plumed_program_name="@program_name@";
+
 std::string getSoExt() {
-  return "@SOEXT@";
+  return plumed_soext;
 }
 
 bool isInstalled() {
@@ -40,7 +50,7 @@ std::string getPlumedRoot() {
   char *env = std::getenv("PLUMED_ROOT");
   std::string ss;
   if( env == NULL) {
-    ss="@PLUMED_ROOT@";
+    ss=plumed_root;
   } else {
     ss=std::string( env );
   }
@@ -52,7 +62,7 @@ std::string getPlumedHtmldir() {
   char *env = std::getenv("PLUMED_HTMLDIR");
   std::string ss;
   if( env == NULL) {
-    ss="@htmldir@";
+    ss=plumed_htmldir;
   } else {
     ss=std::string( env );
   }
@@ -64,7 +74,7 @@ std::string getPlumedIncludedir() {
   char *env = std::getenv("PLUMED_INCLUDEDIR");
   std::string ss;
   if( env == NULL) {
-    ss="@includedir@";
+    ss=plumed_includedir;
   } else {
     ss=std::string( env );
   }
@@ -76,7 +86,7 @@ std::string getPlumedProgramName() {
   char *env = std::getenv("PLUMED_PROGRAM_NAME");
   std::string ss;
   if( env == NULL) {
-    ss="@program_name@";
+    ss=plumed_program_name;
   } else {
     ss=std::string( env );
   }