with minor updates
psr2