added work for perform()