Index: src/AST/CVQualifiers.hpp
===================================================================
--- src/AST/CVQualifiers.hpp	(revision cf32116a7c8c54e0d0839465e3e60ca0be290dbc)
+++ src/AST/CVQualifiers.hpp	(revision 3f3bfe5a8343901bfbae18ba2a227bf47060ed62)
@@ -27,12 +27,11 @@
 		Restrict = 1 << 1,
 		Volatile = 1 << 2,
-		Lvalue   = 1 << 3,
-		Mutex    = 1 << 4,
-		Atomic   = 1 << 5,
-		NumQualifiers = 6
+		Mutex    = 1 << 3,
+		Atomic   = 1 << 4,
+		NumQualifiers = 5
 	};
 
 	/// Mask for equivalence-preserving qualfiers
-	enum { EquivQualifiers = ~(Restrict | Lvalue) };
+	enum { EquivQualifiers = ~Restrict };
 
 	/// Underlying data for qualifiers
@@ -44,5 +43,4 @@
 				bool is_restrict : 1;
 				bool is_volatile : 1;
-				bool is_lvalue   : 1;
 				bool is_mutex    : 1;
 				bool is_atomic   : 1;
Index: src/AST/Expr.cpp
===================================================================
--- src/AST/Expr.cpp	(revision cf32116a7c8c54e0d0839465e3e60ca0be290dbc)
+++ src/AST/Expr.cpp	(revision 3f3bfe5a8343901bfbae18ba2a227bf47060ed62)
@@ -10,6 +10,6 @@
 // Created On       : Wed May 15 17:00:00 2019
 // Last Modified By : Andrew Beach
-// Created On       : Thr Jun 26 12:12:00 2019
-// Update Count     : 3
+// Created On       : Fri Oct  4 15:34:00 2019
+// Update Count     : 4
 //
 
@@ -82,5 +82,4 @@
 			// base type
 			ret->result = base;
-			add_qualifiers( ret->result, CV::Lvalue );
 		}
 	}
@@ -131,5 +130,4 @@
 			// lvalue, retains all levels of reference, and gains a pointer inside the references
 			Type * res = addrType( arg->result );
-			res->set_lvalue( false ); // result of & is never an lvalue
 			result = res;
 		} else {
@@ -138,5 +136,4 @@
 					dynamic_cast< const ReferenceType * >( arg->result.get() ) ) {
 				Type * res = addrType( refType->base );
-				res->set_lvalue( false ); // result of & is never an lvalue
 				result = res;
 			} else {
@@ -230,6 +227,6 @@
 	// substitute aggregate generic parameters into member type
 	genericSubstitution( aggregate->result ).apply( result );
-	// ensure lvalue and appropriate restrictions from aggregate type
-	add_qualifiers( result, aggregate->result->qualifiers | CV::Lvalue );
+	// ensure appropriate restrictions from aggregate type
+	add_qualifiers( result, aggregate->result->qualifiers );
 }
 
@@ -257,7 +254,5 @@
 	assert( var );
 	assert( var->get_type() );
-	auto r = shallowCopy( var->get_type() );
-	r->qualifiers |= CV::Lvalue;
-	result = r;
+	result = shallowCopy( var->get_type() );
 }
 
@@ -376,5 +371,4 @@
 	assert( t && i );
 	result = t;
-	add_qualifiers( result, CV::Lvalue );
 }
 
@@ -397,5 +391,4 @@
 	// like MemberExpr, TupleIndexExpr is always an lvalue
 	result = type->types[ index ];
-	add_qualifiers( result, CV::Lvalue );
 }
 
Index: src/AST/Type.hpp
===================================================================
--- src/AST/Type.hpp	(revision cf32116a7c8c54e0d0839465e3e60ca0be290dbc)
+++ src/AST/Type.hpp	(revision 3f3bfe5a8343901bfbae18ba2a227bf47060ed62)
@@ -51,5 +51,4 @@
 	bool is_volatile() const { return qualifiers.is_volatile; }
 	bool is_restrict() const { return qualifiers.is_restrict; }
-	bool is_lvalue() const { return qualifiers.is_lvalue; }
 	bool is_mutex() const { return qualifiers.is_mutex; }
 	bool is_atomic() const { return qualifiers.is_atomic; }
@@ -58,5 +57,4 @@
 	Type * set_volatile( bool v ) { qualifiers.is_volatile = v; return this; }
 	Type * set_restrict( bool v ) { qualifiers.is_restrict = v; return this; }
-	Type * set_lvalue( bool v ) { qualifiers.is_lvalue = v; return this; }
 	Type * set_mutex( bool v ) { qualifiers.is_mutex = v; return this; }
 	Type * set_atomic( bool v ) { qualifiers.is_atomic = v; return this; }
