Index: src/AST/Convert.cpp
===================================================================
--- src/AST/Convert.cpp	(revision 82f791f1d2c7e5f856d24903cbf18c05302e9ccb)
+++ src/AST/Convert.cpp	(revision 685810eab99efa1ca6722cdfb886809c21cff3c4)
@@ -25,4 +25,5 @@
 #include "AST/Init.hpp"
 #include "AST/Stmt.hpp"
+#include "AST/TranslationUnit.hpp"
 #include "AST/TypeSubstitution.hpp"
 
@@ -1404,8 +1405,8 @@
 };
 
-std::list< Declaration * > convert( const std::list< ast::ptr< ast::Decl > > && translationUnit ) {
+std::list< Declaration * > convert( const ast::TranslationUnit && translationUnit ) {
 	ConverterNewToOld c;
 	std::list< Declaration * > decls;
-	for(auto d : translationUnit) {
+	for(auto d : translationUnit.decls) {
 		decls.emplace_back( c.decl( d ) );
 	}
@@ -2803,12 +2804,12 @@
 #undef GET_ACCEPT_1
 
-std::list< ast::ptr< ast::Decl > > convert( const std::list< Declaration * > && translationUnit ) {
+ast::TranslationUnit convert( const std::list< Declaration * > && translationUnit ) {
 	ConverterOldToNew c;
-	std::list< ast::ptr< ast::Decl > > decls;
+	ast::TranslationUnit unit;
 	for(auto d : translationUnit) {
 		d->accept( c );
-		decls.emplace_back( c.decl() );
+		unit.decls.emplace_back( c.decl() );
 	}
 	deleteAll(translationUnit);
-	return decls;
+	return unit;
 }
Index: src/AST/Convert.hpp
===================================================================
--- src/AST/Convert.hpp	(revision 82f791f1d2c7e5f856d24903cbf18c05302e9ccb)
+++ src/AST/Convert.hpp	(revision 685810eab99efa1ca6722cdfb886809c21cff3c4)
@@ -18,11 +18,9 @@
 #include <list>
 
-#include "AST/Node.hpp"
-
 class Declaration;
 namespace ast {
-	class Decl;
+	class TranslationUnit;
 };
 
-std::list< Declaration * > convert( const std::list< ast::ptr< ast::Decl > > && translationUnit );
-std::list< ast::ptr< ast::Decl > > convert( const std::list< Declaration * > && translationUnit );
+std::list< Declaration * > convert( const ast::TranslationUnit && translationUnit );
+ast::TranslationUnit convert( const std::list< Declaration * > && translationUnit );
Index: src/AST/Fwd.hpp
===================================================================
--- src/AST/Fwd.hpp	(revision 82f791f1d2c7e5f856d24903cbf18c05302e9ccb)
+++ src/AST/Fwd.hpp	(revision 685810eab99efa1ca6722cdfb886809c21cff3c4)
@@ -137,4 +137,6 @@
 typedef unsigned int UniqueId;
 
+class TranslationUnit;
+// TODO: Get from the TranslationUnit:
 extern Type * sizeType;
 extern FunctionDecl * dereferenceOperator;
Index: src/AST/Pass.hpp
===================================================================
--- src/AST/Pass.hpp	(revision 82f791f1d2c7e5f856d24903cbf18c05302e9ccb)
+++ src/AST/Pass.hpp	(revision 685810eab99efa1ca6722cdfb886809c21cff3c4)
@@ -103,5 +103,5 @@
 	/// Construct and run a pass on a translation unit.
 	template< typename... Args >
-	static void run( std::list< ptr<Decl> > & decls, Args &&... args ) {
+	static void run( TranslationUnit & decls, Args &&... args ) {
 		Pass<core_t> visitor( std::forward<Args>( args )... );
 		accept_all( decls, visitor );
@@ -119,5 +119,5 @@
 	// Versions of the above for older compilers.
 	template< typename... Args >
-	static void run( std::list< ptr<Decl> > & decls ) {
+	static void run( TranslationUnit & decls ) {
 		Pass<core_t> visitor;
 		accept_all( decls, visitor );
@@ -303,4 +303,7 @@
 void accept_all( std::list< ast::ptr<ast::Decl> > &, ast::Pass<core_t> & visitor );
 
+template<typename core_t>
+void accept_all( ast::TranslationUnit &, ast::Pass<core_t> & visitor );
+
 //-------------------------------------------------------------------------------------------------
 // PASS ACCESSORIES
Index: src/AST/Pass.impl.hpp
===================================================================
--- src/AST/Pass.impl.hpp	(revision 82f791f1d2c7e5f856d24903cbf18c05302e9ccb)
+++ src/AST/Pass.impl.hpp	(revision 685810eab99efa1ca6722cdfb886809c21cff3c4)
@@ -20,4 +20,5 @@
 #include <unordered_map>
 
+#include "AST/TranslationUnit.hpp"
 #include "AST/TypeSubstitution.hpp"
 
@@ -430,4 +431,9 @@
 	pass_visitor_stats.depth--;
 	if ( !errors.isEmpty() ) { throw errors; }
+}
+
+template< typename core_t >
+inline void ast::accept_all( ast::TranslationUnit & unit, ast::Pass< core_t > & visitor ) {
+	return ast::accept_all( unit.decls, visitor );
 }
 
Index: src/AST/Pass.proto.hpp
===================================================================
--- src/AST/Pass.proto.hpp	(revision 82f791f1d2c7e5f856d24903cbf18c05302e9ccb)
+++ src/AST/Pass.proto.hpp	(revision 685810eab99efa1ca6722cdfb886809c21cff3c4)
@@ -22,4 +22,6 @@
 template<typename core_t>
 class Pass;
+
+class TranslationUnit;
 
 struct PureVisitor;
