initial commit. experimental, not yet exception safe