public void step() {
		final Map<Particle, Future<?>> futures;
		futures = new HashMap<Particle, Future<?>>();
		final AbstractModel model = this;
		
		for (final Particle p : this.p) {
			futures.put(p, pool.submit(new Runnable() {
				@Override
				public void run() {
					p.interact(model);
				}
			}));
		}
		for(Particle p : futures.keySet()){
			try {
				futures.get(p).get();
			} catch (InterruptedException e) {
				e.printStackTrace();
			} catch (ExecutionException e) {
				e.printStackTrace();
			}
		}
		
		
		
		
		mergeParticles();
		for (Particle p : this.p) {
			p.move(this);
		}
		updateGraphicalRepresentation();
	}