@Override
        public void update(ChiVertex<VertexDataType, EdgeDataType> vertex, GraphChiContext context) {
            try {
            /* Buffer management. TODO: think, this is too complex after adding the multiplex */
                if (context.getThreadLocal() == null) {
                    ArrayList<LocalWalkBuffer> multiplexedLocalBuffers = new ArrayList<LocalWalkBuffer>(drivers.size());
                    for(DrunkardDriver driver: drivers) {
                        LocalWalkBuffer buf = factory.createLocalWalkBuffer();
                        driver.addLocalBuffer(buf);
                        multiplexedLocalBuffers.add(buf);
                    }
                    context.setThreadLocal(multiplexedLocalBuffers);
                }

                final ArrayList<LocalWalkBuffer> multiplexedLocalBuffers = (ArrayList<LocalWalkBuffer>) context.getThreadLocal();

                int i = 0;
                for(DrunkardDriver driver : drivers) {
                    driver.update(vertex, context, multiplexedLocalBuffers.get(i++));
                }
            } catch (Exception err) {
                err.printStackTrace();
            }
        }