               {:expr, expr, assigns_in_expr} = Drab.Live.Cache.get(hash)
 
               if has_common?(assigns_in_expr, assigns_to_update_keys) do
-                {safe, _assigns} = expr_with_imports(expr, view, router_helpers, error_helpers, gettext)
-                  |> Code.eval_quoted([assigns: assigns_for_expr(assigns_to_update, assigns_in_expr, current_assigns)])
+                safe = eval_expr(expr, modules, assigns_to_update, assigns_in_expr, current_assigns)
                 new_value = safe_to_string(safe)
 
                 {hash, new_value}

          # change only if poked assign exist in this ampere
          #TODO: stay DRY
          if has_common?(assigns_in_expr, assigns_to_update_keys) do
            {safe, _assigns} = expr_with_imports(expr, view, router_helpers, error_helpers, gettext)
              |> Code.eval_quoted([assigns: assigns_for_expr(assigns_to_update, assigns_in_expr, current_assigns)])

            new_value = safe_to_encoded_js(safe)

            "Drab.update_drab_span(#{encode_js(selector)}, #{new_value})"

          hash_and_value = Enum.map(exprs, fn hash ->
            {:expr, expr, assigns_in_expr} = Drab.Live.Cache.get(hash)
            if has_common?(assigns_in_expr, assigns_to_update_keys) do
              safe = eval_expr(expr, modules, assigns_to_update, assigns_in_expr, current_assigns)
              new_value = safe_to_string(safe)

              {hash, new_value}
            else
              nil
