Index: src/Common/SemanticError.cc
===================================================================
--- src/Common/SemanticError.cc	(revision 44bca7f23e3aeeef424982f0cb5995957e13f44c)
+++ src/Common/SemanticError.cc	(revision 68e9ace1ce267a16e6490d178a053859919e1241)
@@ -16,12 +16,58 @@
 #include <cstdarg>
 #include <cstdio>										// for fileno, stderr
+#include <cstring>
 #include <unistd.h>										// for isatty
 #include <iostream>										// for basic_ostream, operator<<, ostream
 #include <list>											// for list, _List_iterator
 #include <string>										// for string, operator<<, operator+, to_string
+#include <vector>
 
 #include "Common/utility.h"								// for to_string, CodeLocation (ptr only)
 #include "SemanticError.h"
 
+//-----------------------------------------------------------------------------
+// Severity Handling
+std::vector<Severity> & get_severities() {
+	static std::vector<Severity> severities;
+	if(severities.empty()) {
+		severities.reserve((size_t)Warning::NUMBER_OF_WARNINGS);
+		for ( const auto w : WarningFormats ) {
+			severities.push_back( w.default_severity );
+		} // for
+	}
+	return severities;
+}
+
+void SemanticWarning_SuppressAll() {
+	for( auto & s : get_severities() ) {
+		s = Severity::Suppress;
+	}
+}
+
+void SemanticWarning_EnableAll() {
+	for( auto & s : get_severities() ) {
+		s = Severity::Warn;
+	}
+}
+
+void SemanticWarning_WarningAsError() {
+	for( auto & s : get_severities() ) {
+		if(s == Severity::Warn) s = Severity::Error;
+	}
+}
+
+void SemanticWarning_Set(const char * const name, Severity s) {
+	size_t idx = 0;
+	for ( auto  & w : WarningFormats ) {
+		if ( std::strcmp( name, w.name ) == 0 ) {
+			get_severities()[idx] = s;
+			break;
+		}
+		idx++;
+	}
+}
+
+//-----------------------------------------------------------------------------
+// Semantic Error
 SemanticErrorException::SemanticErrorException( CodeLocation location, std::string error ) {
 	append( location, error );
@@ -69,5 +115,5 @@
 
 void SemanticWarningImpl( CodeLocation location, Warning warning, const char * const fmt, ... ) {
-	Severity severity = WarningFormats[(int)warning].severity;
+	Severity severity = get_severities()[(int)warning];
 	switch(severity) {
 	case Severity::Suppress :
Index: src/Common/SemanticError.h
===================================================================
--- src/Common/SemanticError.h	(revision 44bca7f23e3aeeef424982f0cb5995957e13f44c)
+++ src/Common/SemanticError.h	(revision 68e9ace1ce267a16e6490d178a053859919e1241)
@@ -46,10 +46,10 @@
 	const char * const name;
 	const char * const message;
-	mutable Severity severity;
+	const Severity default_severity;
 };
 
 constexpr WarningData WarningFormats[] = {
-	{"self-assign"         , "self assignment of expression: %s"           , Severity::Warn},
-	{"reference-conversion", "rvalue to reference conversion of rvalue: %s", Severity::Warn},
+	{"self-assign"            , "self assignment of expression: %s"            , Severity::Warn},
+	{"reference-conversion"   , "rvalue to reference conversion of rvalue: %s" , Severity::Warn},
 	{"qualifiers-zero_t-one_t", "questionable use of type qualifier %s with %s", Severity::Warn},
 };
@@ -71,4 +71,8 @@
 void SemanticWarningImpl (CodeLocation loc, Warning warn, const char * const fmt, ...) __attribute__((format(printf, 3, 4)));
 
+void SemanticWarning_SuppressAll   ();
+void SemanticWarning_EnableAll     ();
+void SemanticWarning_WarningAsError();
+void SemanticWarning_Set           (const char * const name, Severity s);
 
 //-----------------------------------------------------------------------------
