diff --git a/CHANGES/v2.3.md b/CHANGES/v2.3.md
index e079126cff7024ad79980069c64b18562ade2ec4..d6e37d2177247d90f202d4348601c9b91849549e 100644
--- a/CHANGES/v2.3.md
+++ b/CHANGES/v2.3.md
@@ -265,6 +265,7 @@ For users:
 For developers:
 - Small fix in LDFLAGS when enabling coverage.
 - Fixed order of flags in tests for static linking done by configure (see \issue{407}).
+- Fixed the way paths are hardcoded so as to facilitate conda packaging (see \issue{416}).
 
 
 */
diff --git a/src/config/Config.inc.in b/src/config/Config.inc.in
index 6ffce32155c2a9f1d8a9851ae7095d8a2ee22d6b..91cac0d3ffe4422466dbdfa15520890276ebbbf5 100644
--- a/src/config/Config.inc.in
+++ b/src/config/Config.inc.in
@@ -28,8 +28,16 @@
 namespace PLMD {
 namespace config {
 
+// This is a fix to allow conda to correctly replace paths in binary files.
+// These functions should not be static or they will be optimized away!
+const char* plumed_root(){return "@PLUMED_ROOT@";}
+const char* plumed_soext(){return "@SOEXT@";}
+const char* plumed_htmldir(){return "@htmldir@";}
+const char* plumed_includedir(){return "@includedir@";}
+const char* plumed_program_name(){return "@program_name@";}
+
 std::string getSoExt() {
-  return "@SOEXT@";
+  return plumed_soext();
 }
 
 bool isInstalled() {
@@ -40,7 +48,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 +60,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 +72,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 +84,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 );
   }