public void arrange(int iterationCounter){
		Collections.sort(books);
		
		BookNode bi, bj;
		float vx, vy, vLen;
		
		if(books.size()>1){
		for(int i=0; i<books.size();i++){
			bi=books.get(i);
			
			for(int j=i+1;j<books.size();j++){
				if(i!=j){
					bj = books.get(j);
					
					float dx = bj.getX() - bi.getX();
			        float dy = bj.getY() - bi.getY();
			        float r = bi.getPaddedRadius() + bj.getPaddedRadius();
			        float d = (dx*dx) + (dy*dy);
			        if (d < (r * r) - 0.01 ) {

			          vx = dx;
			          vy = dy;

			          vLen = (float)Math.sqrt(vx*vx + vy*vy);
			          vx=vx/vLen;
			          vy=vy/vLen;
			          
			          float temp=(float)((r-Math.sqrt(d))*0.5);
			          vx=vx*temp;
			          vy=vy*temp;
			          
			          bj.setX(bj.getX()+vx);
			          bj.setY(bj.getY()+ vy);
			          
			          bi.setX(bi.getX()-vx);
			          bi.setY(bi.getY()-vy);
			        }
			        books.set(j, bj);
				}
				
			}
			books.set(i,bi);
		}
		
		  //Contract
		  float damping = (float)0.1/(float)(iterationCounter);
		  for (int i=0; i<books.size(); i++) {
		    BookNode c = books.get(i);
		      vx = c.getX();
		      vy = c.getY();
		      
		      vx=vx*damping;
		      vy=vy*damping;
		      
		      c.setX(c.getX() - vx);
		      c.setY(c.getY() - vy);
		  }
		}else if(books.size()>0){
			books.get(0).setX(0);
			books.get(0).setY(0);
		}
	}