diff --git a/src/treeopt.in b/src/treeopt.in
index eaa4131e7e712ac59544247ba66c6703a70df06c..1e2496661783edf08f084f159babeaac714f212e 100644
--- a/src/treeopt.in
+++ b/src/treeopt.in
@@ -1,6 +1,6 @@
 // -*- c -*-
 //
-// $Id: treeopt.in,v 1.43 2000/09/25 15:26:16 grubba Exp $
+// $Id: treeopt.in,v 1.44 2000/09/30 23:50:12 per Exp $
 //
 // The tree optimizer
 //
@@ -70,7 +70,9 @@ F_APPLY(0 = F_CONSTANT
     node *old_apply = $3;
     ADD_NODE_REF2($1, _CAR(arglist) = $1);
 #ifdef SHARED_NODES
+    sub_node( arglist );
     arglist->hash = hash_node(arglist);
+    add_node( arglist );
     arglist->node_info |= OPT_DEFROSTED;
 #endif /* SHARED_NODES */
     free_node(old_apply);
@@ -99,7 +101,9 @@ F_APPLY(0 = F_CONSTANT
     node *old_apply = $3;
     ADD_NODE_REF2($1, _CAR(arglist) = $1);
 #ifdef SHARED_NODES
+    sub_node( arglist );
     arglist->hash = hash_node(arglist);
+    add_node( arglist );
     arglist->node_info |= OPT_DEFROSTED;
 #endif /* SHARED_NODES */
     free_node(old_apply);