While more can always be written, you may be interested in this previous answer of mine which addresses both parts of your question.
This sub's FAQ also has a shorter answer of mine which addresses the first question alone.