Index: src/AST/Chain.hpp
===================================================================
--- src/AST/Chain.hpp	(revision ebadb5d3a26909b035a30d99d421a3d4ff318bf0)
+++ src/AST/Chain.hpp	(revision dc80280a30ad172511ba6bf3a2cd16da277abe17)
@@ -33,14 +33,11 @@
 	template<typename actual_node_t, typename child_t>
 	auto operator()( child_t actual_node_t::*child ) {
-		auto n = mutate(base.get());
+		node_t * n = base.get_and_mutate();
 		actual_node_t * node = strict_dynamic_cast<actual_node_t *>(n);
-		base = node;
 		return _chain_mutator< typename std::remove_reference< decltype(node->*child) >::type >{node->*child};
 	}
 
 	node_t * operator->() {
-		auto n = mutate(base.get());
-		base = n;
-		return n;
+		return base.get_and_mutate();
 	}
 };
Index: src/ResolvExpr/Resolver.cc
===================================================================
--- src/ResolvExpr/Resolver.cc	(revision ebadb5d3a26909b035a30d99d421a3d4ff318bf0)
+++ src/ResolvExpr/Resolver.cc	(revision dc80280a30ad172511ba6bf3a2cd16da277abe17)
@@ -29,5 +29,4 @@
 #include "Unify.h"                       // for unify
 #include "CompilationState.h"
-#include "AST/Chain.hpp"
 #include "AST/Decl.hpp"
 #include "AST/Init.hpp"
@@ -104,6 +103,6 @@
 								}
 							}
-						} 
-					} 
+						}
+					}
 					visit_children = false;
 				}
@@ -607,6 +606,6 @@
 				( objectDecl->get_type() )->base->base ) {
 				objectDecl = fixObjectType( objectDecl, context );
-				currentObject = ast::CurrentObject{ 
-					objectDecl->location, 
+				currentObject = ast::CurrentObject{
+					objectDecl->location,
 					enumBase
 				};
