Index: src/SynTree/Expression.cc
===================================================================
--- src/SynTree/Expression.cc	(revision 7756647eaf7d18e5f8c8c4841b9279a5f4e4f8dc)
+++ src/SynTree/Expression.cc	(revision bf32bb8a6509388bf221983b0b4c4c8620ff76b9)
@@ -580,11 +580,15 @@
 
 
-UniqueExpr::UniqueExpr( Expression *expr ) : expr( new Expression* ) {
+long long UniqueExpr::count = 0;
+UniqueExpr::UniqueExpr( Expression *expr, long long idVal ) : expr( new Expression* ), id( idVal ) {
+	assert( count != -1 );
+	if ( id == -1 ) id = count++;
 	set_expr( expr );
 	assert( expr );
-	assert( expr->has_result() );
-	set_result( expr->get_result()->clone() );
-}
-UniqueExpr::UniqueExpr( const UniqueExpr &other ) : Expression( other ), expr( other.expr ) {
+	if ( expr->get_result() ) {
+		set_result( expr->get_result()->clone() );
+	}
+}
+UniqueExpr::UniqueExpr( const UniqueExpr &other ) : Expression( other ), expr( other.expr ), id( other.id ) {
 }
 UniqueExpr::~UniqueExpr() {
@@ -594,5 +598,5 @@
 }
 void UniqueExpr::print( std::ostream &os, int indent ) const {
-	os << "Unique Expression: " << std::endl << std::string( indent+2, ' ' );
+	os << "Unique Expression with id:" << id << std::endl << std::string( indent+2, ' ' );
 	get_expr()->print( os, indent+2 );
 }
Index: src/SynTree/Expression.h
===================================================================
--- src/SynTree/Expression.h	(revision 7756647eaf7d18e5f8c8c4841b9279a5f4e4f8dc)
+++ src/SynTree/Expression.h	(revision bf32bb8a6509388bf221983b0b4c4c8620ff76b9)
@@ -735,5 +735,5 @@
 class UniqueExpr : public Expression {
 public:
-	UniqueExpr( Expression * expr );
+	UniqueExpr( Expression * expr, long long idVal = -1 );
 	UniqueExpr( const UniqueExpr & other );
 	~UniqueExpr();
@@ -742,4 +742,6 @@
 	UniqueExpr * set_expr( Expression * newValue ) { *expr = newValue; return this; }
 
+	int get_id() const { return id; }
+
 	virtual UniqueExpr *clone() const { return new UniqueExpr( *this ); }
 	virtual void accept( Visitor &v ) { v.visit( this ); }
@@ -748,4 +750,6 @@
 private:
 	std::shared_ptr< Expression * > expr;
+	int id;
+	static long long count;
 };
 
