There are a lot of extensions to be written here. Therefore, it would be best to split this up into separate issues before we begin working on this.