table: separate dirty and non-dirty hooks