Now the caller is responsible of threading