Initial version with iOS port