Need more polishing before being used everywhere. --HG-- extra : rebase_source : 0fb3a4b12cf83d4b450a1fca81f82addd8d58c14