docs: void insertPoint(Point p){
  		
  		//check if there is enough space in the first bucket
  		int cursize = this.buckets[0].cursize;	
  		if(cursize >= this.maxBucketsize) {
  			//printf("Bucket 0 full \n");
  			//start spillover process
  			int curbucket  = 0;
  			int nextbucket = 1;
  
  			//check if the next bucket is empty
  			if(this.buckets[nextbucket].cursize == 0){
  				//copy the bucket	
  				int i;
  				for(i=0; i<this.maxBucketsize; i++){
  					this.buckets[nextbucket].points[i] = this.buckets[curbucket].points[i].clone();
  					//copyPointWithoutInit: we should not copy coordinates? 
  				}
  				//bucket is now full
  				this.buckets[nextbucket].cursize = this.maxBucketsize;
  				//first bucket is now empty
  				this.buckets[curbucket].cursize = 0;
  				cursize = 0;
  			} else {
  				//printf("Bucket %d full \n",nextbucket);
  				//copy bucket to spillover and continue
  				int i;
  				for(i=0;i<this.maxBucketsize;i++){
  					this.buckets[nextbucket].spillover[i] = this.buckets[curbucket].points[i].clone();
  					//copyPointWithoutInit: we should not copy coordinates? 
  				}
  				this.buckets[0].cursize=0;
  				cursize = 0;
  				curbucket++;
  				nextbucket++;
  				/*
  				as long as the next bucket is full output the coreset to the spillover of the next bucket
  				*/
  				while(this.buckets[nextbucket].cursize == this.maxBucketsize){
  					//printf("Bucket %d full \n",nextbucket);
  					this.treeCoreset.unionTreeCoreset(this.maxBucketsize,this.maxBucketsize,
  						this.maxBucketsize,p.dimension, 
  						this.buckets[curbucket].points,this.buckets[curbucket].spillover,
  						this.buckets[nextbucket].spillover, this.clustererRandom);
  					//bucket now empty
  					this.buckets[curbucket].cursize = 0;
  					curbucket++;
  					nextbucket++;
  				}
  				this.treeCoreset.unionTreeCoreset(this.maxBucketsize,this.maxBucketsize,
  						this.maxBucketsize,p.dimension, 
  						this.buckets[curbucket].points,this.buckets[curbucket].spillover,
  						this.buckets[nextbucket].points, this.clustererRandom);
  				this.buckets[curbucket].cursize = 0;
  				this.buckets[nextbucket].cursize = this.maxBucketsize;
  			}
  		}
  		//insert point into the first bucket
  		this.buckets[0].points[cursize] = p.clone();
  		//copyPointWithoutInit: we should not copy coordinates? 
  		this.buckets[0].cursize++;
  	}