Index: src/ControlStruct/ExceptDeclNew.cpp
===================================================================
--- src/ControlStruct/ExceptDeclNew.cpp	(revision 17c13b987df0a596c41c7dad0b2e54d0437b7063)
+++ src/ControlStruct/ExceptDeclNew.cpp	(revision 7156c4625396b8f213fc70c1542b6f431cc7ceb4)
@@ -242,5 +242,5 @@
 }
 
-ast::ObjectDecl const * createExternVTable(
+static ast::ObjectDecl * createExternVTable(
 		CodeLocation const & location,
 		std::string const & exceptionName,
@@ -356,5 +356,5 @@
 }
 
-ast::ObjectDecl const * createVirtualTable(
+ast::ObjectDecl * createVirtualTable(
 		CodeLocation const & location,
 		std::string const & exceptionName,
@@ -451,4 +451,5 @@
 	std::string const & tableName = decl->name;
 
+    ast::ObjectDecl * retDecl;
 	if ( decl->storage.is_extern ) {
 		// Unique type-ids are only needed for polymorphic instances.
@@ -457,5 +458,5 @@
 				createExternTypeId( location, exceptionName, params ) );
 		}
-		return createExternVTable( location, exceptionName, params, tableName );
+		retDecl = createExternVTable( location, exceptionName, params, tableName );
 	} else {
 		// Unique type-ids are only needed for polymorphic instances.
@@ -468,7 +469,13 @@
 		declsToAddBefore.push_back(
 			createMsg( location, exceptionName, params ) );
-		return createVirtualTable(
+		retDecl = createVirtualTable(
 			location, exceptionName, params, tableName );
 	}
+
+    for ( ast::ptr<ast::Attribute> const & attr : decl->attributes ) {
+        retDecl->attributes.push_back( attr );
+    }
+
+    return retDecl;
 }
 
@@ -476,6 +483,7 @@
 	ast::StructInstType const * postvisit( ast::VTableType const * type ) {
 		auto inst = type->base.as<ast::BaseInstType>();
-
+        
 		std::string vtableName = Virtual::vtableTypeName( inst->name );
+
 		auto newType = new ast::StructInstType( vtableName );
 		for ( ast::ptr<ast::Expr> const & param : inst->params ) {
