implemented join