finally ported everything