initial version with user preference (option)