merge improvements from experimental branch