Implement PageProtector

Fixes #2