Index: src/Parser/DeclarationNode.cc
===================================================================
--- src/Parser/DeclarationNode.cc	(revision 3d56d15b9146a2c5c4e8c499865778a6ec81a378)
+++ src/Parser/DeclarationNode.cc	(revision b21c77a0e211d9361763565a2eb5ef4330f2957b)
@@ -94,5 +94,4 @@
 
 	delete assert.condition;
-	delete assert.message;
 }
 
@@ -1002,5 +1001,4 @@
 					obj->location = cur->location;
 					* out++ = obj;
-					delete agg;
 				} else if ( UnionDecl * agg = dynamic_cast< UnionDecl * >( decl ) ) {
 					UnionInstType * inst = new UnionInstType( Type::Qualifiers(), agg->get_name() );
Index: src/Parser/ExpressionNode.cc
===================================================================
--- src/Parser/ExpressionNode.cc	(revision 3d56d15b9146a2c5c4e8c499865778a6ec81a378)
+++ src/Parser/ExpressionNode.cc	(revision b21c77a0e211d9361763565a2eb5ef4330f2957b)
@@ -408,5 +408,4 @@
 	Type * targetType = maybeMoveBuildType( decl_node );
 	if ( dynamic_cast< VoidType * >( targetType ) ) {
-		delete targetType;
 		return new CastExpr( maybeMoveBuild< Expression >(expr_node), false );
 	} else {
@@ -436,7 +435,5 @@
 
 Expression * build_offsetOf( DeclarationNode * decl_node, NameExpr * member ) {
-	Expression * ret = new UntypedOffsetofExpr( maybeMoveBuildType( decl_node ), member->get_name() );
-	delete member;
-	return ret;
+	return new UntypedOffsetofExpr{ maybeMoveBuildType( decl_node ), member->get_name() };
 } // build_offsetOf
 
Index: src/Parser/ParseNode.h
===================================================================
--- src/Parser/ParseNode.h	(revision 3d56d15b9146a2c5c4e8c499865778a6ec81a378)
+++ src/Parser/ParseNode.h	(revision b21c77a0e211d9361763565a2eb5ef4330f2957b)
@@ -128,15 +128,15 @@
 
 	virtual void print( std::ostream &os, __attribute__((unused)) int indent = 0 ) const override {
-		os << expr.get() << std::endl;
+		os << expr << std::endl;
 	}
 	void printOneLine( __attribute__((unused)) std::ostream &os, __attribute__((unused)) int indent = 0 ) const {}
 
 	template<typename T>
-	bool isExpressionType() const {	return nullptr != dynamic_cast<T>(expr.get()); }
-
-	Expression * build() const { return const_cast<ExpressionNode *>(this)->expr.release(); }
+	bool isExpressionType() const {	return nullptr != dynamic_cast<T>(expr); }
+
+	Expression * build() const { return expr; }
   private:
 	bool extension = false;
-	std::unique_ptr<Expression> expr;
+	Expression* expr;
 }; // ExpressionNode
 
@@ -364,5 +364,5 @@
 
 	virtual StatementNode * clone() const final { assert( false ); return nullptr; }
-	Statement * build() const { return const_cast<StatementNode *>(this)->stmt.release(); }
+	Statement * build() const { return stmt; }
 
 	virtual StatementNode * add_label( const std::string * name, DeclarationNode * attr = nullptr ) {
@@ -376,8 +376,8 @@
 
 	virtual void print( std::ostream &os, __attribute__((unused)) int indent = 0 ) const override {
-		os << stmt.get() << std::endl;
+		os << stmt << std::endl;
 	}
   private:
-	std::unique_ptr<Statement> stmt;
+	Statement* stmt;
 }; // StatementNode
 
Index: src/Parser/StatementNode.cc
===================================================================
--- src/Parser/StatementNode.cc	(revision 3d56d15b9146a2c5c4e8c499865778a6ec81a378)
+++ src/Parser/StatementNode.cc	(revision b21c77a0e211d9361763565a2eb5ef4330f2957b)
@@ -50,5 +50,5 @@
 		agg = decl;
 	} // if
-	stmt.reset( new DeclStmt( maybeMoveBuild< Declaration >(agg) ) );
+	stmt = new DeclStmt{ maybeMoveBuild< Declaration >(agg) };
 } // StatementNode::StatementNode
 
@@ -58,5 +58,5 @@
 	for ( StatementNode * curr = prev; curr != nullptr; curr = (StatementNode *)curr->get_next() ) {
 		StatementNode * node = strict_dynamic_cast< StatementNode * >(curr);
-		assert( dynamic_cast< CaseStmt * >(node->stmt.get()) );
+		assert( dynamic_cast< CaseStmt * >(node->stmt) );
 		prev = curr;
 	} // for
@@ -66,5 +66,5 @@
 	buildMoveList( stmt, stmts );
 	// splice any new Statements to end of current Statements
-	CaseStmt * caseStmt = dynamic_cast< CaseStmt * >(node->stmt.get());
+	CaseStmt * caseStmt = dynamic_cast< CaseStmt * >(node->stmt);
 	caseStmt->get_statements().splice( caseStmt->get_statements().end(), stmts );
 	return this;
