Index: src/Common/SemanticError.cc
===================================================================
--- src/Common/SemanticError.cc	(revision 294647bb36b8887ef83cb50ce4390321fab6d613)
+++ src/Common/SemanticError.cc	(revision 138e29ecafd7b7c16c01bc5bf07aa51231168aa0)
@@ -22,19 +22,24 @@
 #include "SemanticError.h"
 
+#include <unistd.h>
+
+inline const std::string& error_str() {
+	static std::string str = isatty( fileno(stderr) ) ? "\e[31merror:\e[39m " : "error: ";
+	return str;
+}
+
 SemanticError::SemanticError() {
 }
 
 SemanticError::SemanticError( std::string error ) {
-  append( error );
+	append( error );
 }
 
 void SemanticError::append( SemanticError &other ) {
-  errors.splice( errors.end(), other.errors );
+	errors.splice( errors.end(), other.errors );
 }
 
 void SemanticError::append( const std::string & msg ) {
-  using std::to_string;
-  const std::string loc = location.linenumber >= 0 ? "At \"" + to_string(location) + "\" " : "";
-  errors.push_back( loc + "Error: " + msg );
+	errors.emplace_back( error_str() + msg );
 }
 
@@ -44,13 +49,12 @@
 
 void SemanticError::print( std::ostream &os ) {
-	std::copy( errors.begin(), errors.end(), std::ostream_iterator< std::string >( os, "\n" ) );
+	using std::to_string;
+	for(auto err : errors) {
+		os << to_string( err.location ) << err.description << '\n';
+	}
 }
 
 void SemanticError::set_location( const CodeLocation& location ) {
-  this->location = location;
-  using std::to_string;
-  const std::string loc = location.linenumber >= 0 ? "At \"" + to_string(location) + "\" " : "";
-  auto& error = *errors.begin();
-  error.insert( 0, loc.c_str());
+	errors.begin()->maybeSet( location );
 }
 
Index: src/Common/SemanticError.h
===================================================================
--- src/Common/SemanticError.h	(revision 294647bb36b8887ef83cb50ce4390321fab6d613)
+++ src/Common/SemanticError.h	(revision 138e29ecafd7b7c16c01bc5bf07aa51231168aa0)
@@ -25,4 +25,18 @@
 #include "utility.h"
 
+struct error {
+	std::string description;
+	CodeLocation location;
+
+	error() = default;
+	error( const std::string& str ) : description( str ) {}
+
+	void maybeSet( const CodeLocation& location ) {
+		if( this->location.linenumber < 0 ) {
+			this->location = location;
+		}
+	}
+};
+
 class SemanticError : public std::exception {
   public:
@@ -41,6 +55,5 @@
 	// representation of the obj (T must have a print method)
   private:
-	std::list< std::string > errors;
-	CodeLocation location;
+	std::list< error > errors;
 };
 
Index: src/Common/utility.h
===================================================================
--- src/Common/utility.h	(revision 294647bb36b8887ef83cb50ce4390321fab6d613)
+++ src/Common/utility.h	(revision 138e29ecafd7b7c16c01bc5bf07aa51231168aa0)
@@ -320,5 +320,5 @@
 
 inline std::string to_string( const CodeLocation& location ) {
-	return location.filename + ":" + std::to_string(location.linenumber);
+	return location.linenumber >= 0 ? location.filename + ":" + std::to_string(location.linenumber) + " " : "";
 }
 #endif // _UTILITY_H
Index: src/GenPoly/Box.cc
===================================================================
--- src/GenPoly/Box.cc	(revision 294647bb36b8887ef83cb50ce4390321fab6d613)
+++ src/GenPoly/Box.cc	(revision 138e29ecafd7b7c16c01bc5bf07aa51231168aa0)
@@ -236,4 +236,5 @@
 				} // if
 			} catch( SemanticError &e ) {
+				e.set_location( (*i)->location );
 				errors.append( e );
 			} // try
Index: src/InitTweak/FixInit.cc
===================================================================
--- src/InitTweak/FixInit.cc	(revision 294647bb36b8887ef83cb50ce4390321fab6d613)
+++ src/InitTweak/FixInit.cc	(revision 138e29ecafd7b7c16c01bc5bf07aa51231168aa0)
@@ -313,4 +313,5 @@
 					translationUnit.splice( i, fixer.staticDtorDecls );
 				} catch( SemanticError &e ) {
+					e.set_location( (*i)->location );
 					errors.append( e );
 				} // try
Index: src/Parser/DeclarationNode.cc
===================================================================
--- src/Parser/DeclarationNode.cc	(revision 294647bb36b8887ef83cb50ce4390321fab6d613)
+++ src/Parser/DeclarationNode.cc	(revision 138e29ecafd7b7c16c01bc5bf07aa51231168aa0)
@@ -988,4 +988,5 @@
 			* out++ = cur->buildType();
 		} catch( SemanticError &e ) {
+			e.set_location( cur->location );
 			errors.append( e );
 		} // try
Index: src/ResolvExpr/Resolver.cc
===================================================================
--- src/ResolvExpr/Resolver.cc	(revision 294647bb36b8887ef83cb50ce4390321fab6d613)
+++ src/ResolvExpr/Resolver.cc	(revision 138e29ecafd7b7c16c01bc5bf07aa51231168aa0)
@@ -86,11 +86,4 @@
 		Resolver resolver;
 		acceptAll( translationUnit, resolver );
-#if 0
-		resolver.print( cerr );
-		for ( std::list< Declaration * >::iterator i = translationUnit.begin(); i != translationUnit.end(); ++i ) {
-			(*i)->print( std::cerr );
-			(*i)->accept( resolver );
-		} // for
-#endif
 	}
 
Index: src/SynTree/Mutator.h
===================================================================
--- src/SynTree/Mutator.h	(revision 294647bb36b8887ef83cb50ce4390321fab6d613)
+++ src/SynTree/Mutator.h	(revision 138e29ecafd7b7c16c01bc5bf07aa51231168aa0)
@@ -139,4 +139,5 @@
 			} // if
 		} catch( SemanticError &e ) {
+			e.set_location( (*i)->location );
 			errors.append( e );
 		} // try
Index: src/SynTree/Type.h
===================================================================
--- src/SynTree/Type.h	(revision 294647bb36b8887ef83cb50ce4390321fab6d613)
+++ src/SynTree/Type.h	(revision 138e29ecafd7b7c16c01bc5bf07aa51231168aa0)
@@ -17,10 +17,11 @@
 #define TYPE_H
 
+#include "BaseSyntaxNode.h"
+#include "Mutator.h"
 #include "SynTree.h"
 #include "Visitor.h"
-#include "Mutator.h"
 #include "Common/utility.h"
 
-class Type {
+class Type : public BaseSyntaxNode {
   public:
 	struct Qualifiers {
Index: src/SynTree/Visitor.h
===================================================================
--- src/SynTree/Visitor.h	(revision 294647bb36b8887ef83cb50ce4390321fab6d613)
+++ src/SynTree/Visitor.h	(revision 138e29ecafd7b7c16c01bc5bf07aa51231168aa0)
@@ -133,4 +133,5 @@
 			}
 		} catch( SemanticError &e ) {
+			e.set_location( (*i)->location );
 			errors.append( e );
 		}
@@ -159,4 +160,5 @@
 			} // if
 		} catch( SemanticError &e ) {
+			e.set_location( (*i)->location );			
 			errors.append( e );
 		} // try
