throw exception instead?