diff --git a/loopy/program.py b/loopy/program.py
index 510f9ec8662430c1d9bee65836a967d5eb6fdd22..4428e9823ac48a9dd3743001b933b49aabcc578c 100644
--- a/loopy/program.py
+++ b/loopy/program.py
@@ -563,7 +563,7 @@ class ProgramCallablesInfo(ImmutableRecord):
 
         num_times_callables_called[func_id] -= instances
 
-        if num_times_callables_called == 0:
+        if num_times_callables_called[func_id] == 0:
             num_times_callables_called.pop(func_id)
             history.pop(func_id)
             resolved_functions.pop(func_id)
diff --git a/loopy/transform/callable.py b/loopy/transform/callable.py
index 0edf5697a4cac50609803379c188877c43d8ea31..3549d1b757bf1cb64a339468e8a576cf76a43193 100644
--- a/loopy/transform/callable.py
+++ b/loopy/transform/callable.py
@@ -570,11 +570,12 @@ def inline_callable_kernel(program, function_name):
     from loopy.preprocess import infer_arg_descr
     program = infer_arg_descr(program)
     program_callables_info = program.program_callables_info
+    old_program_callables_info = program_callables_info.copy()
 
     edited_callable_kernels = {}
 
-    for func_id, in_knl_callable in program.program_callables_info.items():
-        if function_name not in program_callables_info.history[func_id] and (
+    for func_id, in_knl_callable in old_program_callables_info.items():
+        if function_name not in old_program_callables_info.history[func_id] and (
                 isinstance(in_knl_callable, CallableKernel)):
             caller_kernel = in_knl_callable.subkernel
             caller_kernel, program_callables_info = (
@@ -594,6 +595,8 @@ def inline_callable_kernel(program, function_name):
     program_callables_info = program_callables_info.copy(
             resolved_functions=new_resolved_functions)
 
+    return program.copy(program_callables_info=program_callables_info)
+
 # }}}