further restruct