finished porting