Partially solves #946 Partially solves #999
Partially solves #1835 Partially solves #1517 Solves #1507