public void parse(MC2Parser mc2p) throws MC2ParserException,
            IOException {
        if (LOG.isInfo()) {
            LOG.info("RouteMC2Request.parse(mc2Parser)", "at route_reply");
        }
        
        // turns out we only need route ID and bounding box

        /*
         * <!ELEMENT route_reply ( ( route_reply_header, route_origin,
         * route_destination, route_reply_items ) | ( status_code,
         * status_message ) )>
         */
        /*
         * <!ATTLIST route_reply transaction_id ID #REQUIRED route_id CDATA
         * #REQUIRED > ptui %number; #IMPLIED >
         */

        final String route_id = mc2p.attribute(MC2Strings.aroute_id);

        mc2p.children();

        //check and report status code 
        ServerError status = mc2p.getErrorIfExists();
        if (status != null) {
            error(status);
            return;
        }
        
        //TODO most of the stuff the skipped, see with server how to 
        //optimize this
        int north_lat = 0, south_lat = 0, east_lon = 0, west_lon = 0;
        do {
            if (mc2p.nameRefEq(MC2Strings.troute_reply_header)) {

                /*
                 * <!ELEMENT route_reply_header ( total_distance,
                 * total_distance_nbr, total_time, total_time_nbr,
                 * total_standstilltime, total_standstilltime_nbr,
                 * average_speed, average_speed_nbr, routing_vehicle,
                 * routing_vehicle_type, boundingbox, route_overview_link?,
                 * route_overview_width?, route_overview_height? )>
                 */
                mc2p.children();// we are at the first child of
                               // route_reply_header
                do {
                    if (mc2p.nameRefEq(MC2Strings.tboundingbox)) {
                        north_lat = mc2p
                                .attributeAsInt(MC2Strings.anorth_lat);
                        south_lat = mc2p
                                .attributeAsInt(MC2Strings.asouth_lat);
                        east_lon = mc2p
                                .attributeAsInt(MC2Strings.aeast_lon);
                        west_lon = mc2p
                                .attributeAsInt(MC2Strings.awest_lon);
                    }
                    // skip the rest
                } while (mc2p.advance());
            } // skip the rest
        } while (mc2p.advance());

        final BoundingBox boundingbox = new BoundingBox(north_lat, south_lat,
                east_lon, west_lon);

        if (LOG.isInfo()) {
            LOG.info("RouteMC2Request.parse(mc2Parser)",
            "finished parsing route reply");
        }
        m_replyListener.routeMC2ReplyDone(m_requestID, route_id,
                boundingbox);
    }