Index: src/SymTab/Mangler.cc
===================================================================
--- src/SymTab/Mangler.cc	(revision 4753415975c6f56302c712e83f72751cbf46c6ad)
+++ src/SymTab/Mangler.cc	(revision 387e0056b56ae6406914c18492815f3deea34666)
@@ -30,11 +30,7 @@
 
 namespace SymTab {
-	Mangler::Mangler( bool mangleOverridable ) : nextVarNum( 0 ), isTopLevel( true ), mangleOverridable( mangleOverridable ) {
-	}
-
-//Mangler::Mangler( const Mangler & )
-//  : mangleName(), varNums( varNums ), nextVarNum( nextVarNum ), isTopLevel( isTopLevel )
-//{
-//}
+	Mangler::Mangler( bool mangleOverridable, bool includeQualifiers )
+		: nextVarNum( 0 ), isTopLevel( true ), mangleOverridable( mangleOverridable ), includeQualifiers(includeQualifiers) {}
+		
 	Mangler::Mangler( const Mangler &rhs ) : mangleName() {
 		varNums = rhs.varNums;
@@ -42,4 +38,5 @@
 		isTopLevel = rhs.isTopLevel;
 		mangleOverridable = rhs.mangleOverridable;
+		includeQualifiers = rhs.includeQualifiers;
 	}
 
@@ -209,4 +206,7 @@
 
 	void Mangler::printQualifiers( Type *type ) {
+		// skip if not including qualifiers
+		if ( ! includeQualifiers ) return;
+		
 		if ( ! type->get_forall().empty() ) {
 			std::list< std::string > assertionNames;
@@ -227,5 +227,5 @@
 				varNums[ (*i )->get_name() ] = std::pair< int, int >( nextVarNum++, (int )(*i )->get_kind() );
 				for ( std::list< DeclarationWithType* >::iterator assert = (*i )->get_assertions().begin(); assert != (*i )->get_assertions().end(); ++assert ) {
-					Mangler sub_mangler( mangleOverridable );
+					Mangler sub_mangler( mangleOverridable, includeQualifiers );
 					sub_mangler.nextVarNum = nextVarNum;
 					sub_mangler.isTopLevel = false;
Index: src/SymTab/Mangler.h
===================================================================
--- src/SymTab/Mangler.h	(revision 4753415975c6f56302c712e83f72751cbf46c6ad)
+++ src/SymTab/Mangler.h	(revision 387e0056b56ae6406914c18492815f3deea34666)
@@ -22,10 +22,10 @@
 
 namespace SymTab {
+	/// Mangles names to a unique C identifier
 	class Mangler : public Visitor {
 	  public:
 		template< typename SynTreeClass >
-	    static std::string mangle( SynTreeClass *decl, bool mangleOverridable = true ); // interface to clients
+	    static std::string mangle( SynTreeClass *decl, bool mangleOverridable = true, bool includeQualifiers = true ); // interface to clients
 
-///   using Visitor::visit;
 		virtual void visit( ObjectDecl *declaration );
 		virtual void visit( FunctionDecl *declaration );
@@ -45,12 +45,13 @@
 		std::string get_mangleName() { return mangleName.str(); }
 	  private:
-		std::ostringstream mangleName;
+		std::ostringstream mangleName;  ///< Mangled name being constructed
 		typedef std::map< std::string, std::pair< int, int > > VarMapType;
-		VarMapType varNums;
-		int nextVarNum;
-		bool isTopLevel;
-		bool mangleOverridable;
+		VarMapType varNums;             ///< Map of type variables to indices
+		int nextVarNum;                 ///< Next type variable index
+		bool isTopLevel;                ///< Is the Mangler at the top level
+		bool mangleOverridable;         ///< Specially mangle overridable built-in methods
+		bool includeQualifiers;         ///< Include type qualifiers in mangled name
   
-		Mangler( bool mangleOverridable );
+		Mangler( bool mangleOverridable, bool includeQualifiers );
 		Mangler( const Mangler & );
   
@@ -62,6 +63,6 @@
 
 	template< typename SynTreeClass >
-	std::string Mangler::mangle( SynTreeClass *decl, bool mangleOverridable ) {
-		Mangler mangler( mangleOverridable );
+	std::string Mangler::mangle( SynTreeClass *decl, bool mangleOverridable, bool includeQualifiers ) {
+		Mangler mangler( mangleOverridable, includeQualifiers );
 		maybeAccept( decl, mangler );
 		return mangler.get_mangleName();
