the return type should be S and not Object, otherwise I don't see the added value