never throw strings. always throw error objects