               {: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}

    if Enum.find(lista, fn xa -> Enum.find(listb, fn xb -> xa == xb end) end), do: true, else: false
  end

  defp expr_with_imports(expr, view, router_helpers, error_helpers, gettext) do
    #TODO: find it in the web.ex
    # Find corresponding View
    quote do 
      import unquote(view)
      import Phoenix.Controller, only: [get_csrf_token: 0, get_flash: 2, view_module: 1]


            if Regex.match?(~r/{{{{@drab-ampere:[^@}]+@drab-expr-hash:[^@}]+}}}}/, attribute) do
              #TODO: special form, without atribute name
              # ignored for now, let's think if it needs to be covered
              nil
            else
              "Drab.update_attribute(#{encode_js(selector)}, #{encode_js(attribute)}, #{new_value_of_attribute})"
