Commit two: worked many things, need recover features by testing.