Looks good but needs testing.