Add Context module

Fix #437
Fix #291