Refatcoring some structures

refactor the structure ; add some un-implemented options :-P