Should probably record in the signature that this function causes failure in addition to returning a boolean.