     for (auto i = queue_id; i < size; i += queue_stride) {
         auto src_vtx = hornet.vertex(array[i].x);
         auto dst_vtx = hornet.vertex(array[i].y);
-        int srcLen = src_vtx.out_degree();
-        int destLen = dst_vtx.out_degree();
+        int srcLen = src_vtx.degree();
+        int destLen = dst_vtx.degree();
         int total_work = srcLen + destLen;
         vid_t src = src_vtx.id();
         vid_t dest = dst_vtx.id();

        int flag = 0;
        // FIXME: change Operator and its args as well
        if (hd_queue_info().queue_sizes[bin] == 0) continue;
        if (bin == 0 || true) {
            threads_per = 1;
            TM.start();
            forAllEdgesAdjUnionSequential(hornet, hd_queue_info().queues[bin], op, flag);
            TM.stop();
            TM.print("running next bin");
            TM.reset();

            vi_begin = 0;
            ui_begin = 0;
        } else if (diag_id < total_work - 1) {
            vi_begin = vi_curr;
            ui_begin = ui_curr;
            vi_inBounds = (vi_curr < v_len-1);
            ui_inBounds = (ui_curr < u_len-1);
            if (vi_inBounds && ui_inBounds) {
                int comp = (u_nodes[ui_curr+1] >= v_nodes[vi_curr+1]);
                vi_begin += comp;
                ui_begin += !comp;
            } else {
