--- a/src/conftree.h
+++ b/src/conftree.h
@@ -121,7 +121,8 @@
      * @param readonly if true open readonly, else rw
      * @param tildexp  try tilde (home dir) expansion for subkey values
      */
-    ConfSimple(const char *fname, int readonly = 0, bool tildexp = false);
+    ConfSimple(const char *fname, int readonly = 0, bool tildexp = false,
+               bool trimvalues = true);
 
     /**
      * Build the object by reading content from a string
@@ -129,14 +130,16 @@
      * @param readonly if true open readonly, else rw
      * @param tildexp  try tilde (home dir) expansion for subsection names
      */
-    ConfSimple(const string& data, int readonly = 0, bool tildexp = false);
+    ConfSimple(const string& data, int readonly = 0, bool tildexp = false,
+               bool trimvalues = true);
 
     /**
      * Build an empty object. This will be memory only, with no backing store.
      * @param readonly if true open read only, else rw
      * @param tildexp  try tilde (home dir) expansion for subsection names
      */
-    ConfSimple(int readonly = 0, bool tildexp = false);
+    ConfSimple(int readonly = 0, bool tildexp = false,
+               bool trimvalues = true);
 
     virtual ~ConfSimple() {};
 
@@ -281,6 +284,8 @@
      */
     ConfSimple& operator=(const ConfSimple& rhs) {
         if (this != &rhs && (status = rhs.status) != STATUS_ERROR) {
+            dotildexpand = rhs.dotildexpand;
+            trimvalues = rhs.trimvalues;
             m_filename = rhs.m_filename;
             m_submaps = rhs.m_submaps;
         }
@@ -299,6 +304,7 @@
     
 protected:
     bool dotildexpand;
+    bool trimvalues;
     StatusCode status;
 private:
     // Set if we're working with a file
@@ -345,12 +351,12 @@
 public:
     /* The constructors just call ConfSimple's, asking for key tilde
      * expansion */
-    ConfTree(const char *fname, int readonly = 0)
-        : ConfSimple(fname, readonly, true) {}
-    ConfTree(const string& data, int readonly = 0)
-        : ConfSimple(data, readonly, true) {}
-    ConfTree(int readonly = 0)
-        : ConfSimple(readonly, true) {}
+    ConfTree(const char *fname, int readonly = 0, bool trimvalues=true)
+        : ConfSimple(fname, readonly, true, trimvalues) {}
+    ConfTree(const string& data, int readonly = 0, bool trimvalues=true)
+        : ConfSimple(data, readonly, true, trimvalues) {}
+    ConfTree(int readonly = 0, bool trimvalues=true)
+        : ConfSimple(readonly, true, trimvalues) {}
     virtual ~ConfTree() {};
     ConfTree(const ConfTree& r) : ConfSimple(r) {};
     ConfTree& operator=(const ConfTree& r) {