regenerate = true;
 }
 
-const string& LDAPUrl::getURLString()
+const string& LDAPUrl::getURLString() const
 {
     if (regenerate){
         this->components2Url();
 }
 
 
-void LDAPUrl::components2Url()
+void LDAPUrl::components2Url() const
 {
     std::ostringstream url; 
     std::string encoded = "";
 
 void LDAPUrl::percentEncode( const std::string &src, 
         std::string &dest, 
-        int flags)
+        int flags) const
 {
     std::ostringstream o;
     o.setf(std::ios::hex, std::ios::basefield);
 
         /**
          * @return The complete URL as a string
          */
-        const std::string& getURLString();
+        const std::string& getURLString() const;
 
         /**
          * Set the URL member attribute
          */
         void percentEncode( const std::string& src, 
                     std::string& dest, 
-                    int flags=0 );
+                    int flags=0 ) const;
    
     protected : 
         /**
          * (this function is mostly for internal use and gets called 
          * automatically whenever necessary)
          */
-        void components2Url();
+        void components2Url() const;
         
         void string2list(const std::string &src, StringList& sl,
                 bool percentDecode=false);
 
     protected :
-        bool regenerate;
+        mutable bool regenerate;
         int m_Port;
         int m_Scope;
         std::string m_Host;
         std::string m_Filter;
         StringList m_Attrs;
         StringList m_Extensions;
-        std::string m_urlString;
+        mutable std::string m_urlString;
         std::string m_Scheme;
         enum mode { base, attrs, scope, filter, extensions };
 };