reorganization
rewritten spec