Restructure & genericise