Currently it only returns booleans - error codes detailing the reason for the failure would be preferable