add :force option for not using cache and refactor some stuff