docs: private Entry insertBreadthFirst(ClusKernel newPoint, Budget budget, long timestamp) {
      	//check all leaf nodes and get the one with the closest entry to newPoint
  		Node bestFit = findBestLeafNode(newPoint);
      	bestFit.makeOlder(timestamp, negLambda);
      	Entry parent = bestFit.getEntries()[0].getParentEntry(); 	
      	// Search for an Entry with a weight under the threshold.
     	    Entry irrelevantEntry = bestFit.getIrrelevantEntry(this.weightThreshold);
          int numFreeEntries = bestFit.numFreeEntries();
          Entry newEntry = new Entry(newPoint.getCenter().length,
      			newPoint, timestamp, parent, bestFit);
          //if there is space, add it to the node ( doesn't ever occur, since nodes are created with 3 entries) 
          if (numFreeEntries>0){
          	bestFit.addEntry(newEntry, timestamp);
          }
          //if outdated cluster in this best fitting node, replace it
           else if (irrelevantEntry != null) {
  	        irrelevantEntry.overwriteOldEntry(newEntry);
          }
          //if there is space/outdated cluster on path to top, split. Else merge without split
          else {
          	if (existsOutdatedEntryOnPath(bestFit)||!this.hasMaximalSize()){
  	            // We have to split.
  	        	insertHereWithSplit(newEntry, bestFit, timestamp);
  	        }
          	else {
  	            mergeEntryWithoutSplit(bestFit, newEntry,
  	                    timestamp);
  	        }
          }
          //update all nodes on path to top.
          if (bestFit.getEntries()[0].getParentEntry()!=null)
          	updateToTop(bestFit.getEntries()[0].getParentEntry().getNode());
          return null;
      }