Reimplement using record
Remove n
Updated