Index: src/ResolvExpr/AlternativeFinder.cc
===================================================================
--- src/ResolvExpr/AlternativeFinder.cc	(revision 85d340d705347aaa4d73e025cc209e2cd45a5329)
+++ src/ResolvExpr/AlternativeFinder.cc	(revision df626ebafe6de5b4ec1e48c73cde07ba2d8dd86a)
@@ -632,7 +632,6 @@
 					std::cerr << std::endl;
 				)
-				ApplicationExpr *appExpr = static_cast< ApplicationExpr* >( newerAlt.expr );
 				// follow the current assertion's ID chain to find the correct set of inferred parameters to add the candidate to (i.e. the set of inferred parameters belonging to the entity which requested the assertion parameter).
-				InferredParams * inferParameters = &appExpr->get_inferParams();
+				InferredParams * inferParameters = &newerAlt.expr->get_inferParams();
 				for ( UniqueId id : cur->second.idChain ) {
 					inferParameters = (*inferParameters)[ id ].inferParams.get();
Index: src/SynTree/ApplicationExpr.cc
===================================================================
--- src/SynTree/ApplicationExpr.cc	(revision 85d340d705347aaa4d73e025cc209e2cd45a5329)
+++ src/SynTree/ApplicationExpr.cc	(revision df626ebafe6de5b4ec1e48c73cde07ba2d8dd86a)
@@ -59,5 +59,5 @@
 
 ApplicationExpr::ApplicationExpr( const ApplicationExpr &other ) :
-		Expression( other ), function( maybeClone( other.function ) ), inferParams( other.inferParams ) {
+		Expression( other ), function( maybeClone( other.function ) ) {
 	cloneAll( other.args, args );
 }
Index: src/SynTree/Expression.cc
===================================================================
--- src/SynTree/Expression.cc	(revision 85d340d705347aaa4d73e025cc209e2cd45a5329)
+++ src/SynTree/Expression.cc	(revision df626ebafe6de5b4ec1e48c73cde07ba2d8dd86a)
@@ -35,5 +35,5 @@
 Expression::Expression() : result( 0 ), env( 0 ) {}
 
-Expression::Expression( const Expression &other ) : BaseSyntaxNode( other ), result( maybeClone( other.result ) ), env( maybeClone( other.env ) ), extension( other.extension ) {
+Expression::Expression( const Expression &other ) : BaseSyntaxNode( other ), result( maybeClone( other.result ) ), env( maybeClone( other.env ) ), extension( other.extension ), inferParams( other.inferParams ) {
 }
 
Index: src/SynTree/Expression.h
===================================================================
--- src/SynTree/Expression.h	(revision 85d340d705347aaa4d73e025cc209e2cd45a5329)
+++ src/SynTree/Expression.h	(revision df626ebafe6de5b4ec1e48c73cde07ba2d8dd86a)
@@ -31,30 +31,4 @@
 
 
-/// Expression is the root type for all expressions
-class Expression : public BaseSyntaxNode{
-  public:
-	Type * result;
-	TypeSubstitution * env;
-	bool extension = false;
-
-	Expression();
-	Expression( const Expression & other );
-	virtual ~Expression();
-
-	Type *& get_result() { return result; }
-	const Type * get_result() const { return result; }
-	void set_result( Type * newValue ) { result = newValue; }
-
-	TypeSubstitution * get_env() const { return env; }
-	void set_env( TypeSubstitution * newValue ) { env = newValue; }
-	bool get_extension() const { return extension; }
-	Expression * set_extension( bool exten ) { extension = exten; return this; }
-
-	virtual Expression * clone() const override = 0;
-	virtual void accept( Visitor & v ) override = 0;
-	virtual Expression * acceptMutator( Mutator & m ) override = 0;
-	virtual void print( std::ostream & os, Indenter indent = {} ) const override;
-};
-
 struct ParamEntry;
 
@@ -73,6 +47,35 @@
 	Type * actualType;
 	Type * formalType;
-	Expression* expr;
+	Expression * expr;
 	std::unique_ptr< InferredParams > inferParams;
+};
+
+/// Expression is the root type for all expressions
+class Expression : public BaseSyntaxNode {
+  public:
+	Type * result;
+	TypeSubstitution * env;
+	bool extension = false;
+	InferredParams inferParams;
+
+	Expression();
+	Expression( const Expression & other );
+	virtual ~Expression();
+
+	Type *& get_result() { return result; }
+	const Type * get_result() const { return result; }
+	void set_result( Type * newValue ) { result = newValue; }
+
+	TypeSubstitution * get_env() const { return env; }
+	void set_env( TypeSubstitution * newValue ) { env = newValue; }
+	bool get_extension() const { return extension; }
+	Expression * set_extension( bool exten ) { extension = exten; return this; }
+
+	InferredParams & get_inferParams() { return inferParams; }
+
+	virtual Expression * clone() const override = 0;
+	virtual void accept( Visitor & v ) override = 0;
+	virtual Expression * acceptMutator( Mutator & m ) override = 0;
+	virtual void print( std::ostream & os, Indenter indent = {} ) const override;
 };
 
@@ -83,5 +86,4 @@
 	Expression * function;
 	std::list<Expression *> args;
-	InferredParams inferParams;
 
 	ApplicationExpr( Expression * function, const std::list<Expression *> & args = std::list< Expression * >() );
@@ -92,5 +94,4 @@
 	void set_function( Expression * newValue ) { function = newValue; }
 	std::list<Expression *>& get_args() { return args; }
-	InferredParams & get_inferParams() { return inferParams; }
 
 	virtual ApplicationExpr * clone() const { return new ApplicationExpr( * this ); }
