Merge big changes (mostly Controllable) from trunk