functionality working throughout