core function update