spec4: implemented
spec4: implemented
spec5: implemented