Changed abstract interfaces to be more file like
Added functional requirements