change run() to return {ok, Data}