boolean nextImage()
	{
		currentImageName = getNextImageName();

		if( null == currentImageName )
			return false;
		
		String realCurrentImageName = currentImageName; 
		
		boolean variousNucleus = currentImageName.contains("-");

		if ( variousNucleus == true )
		{
			int realLast = currentImageName.lastIndexOf("-");
			realCurrentImageName = currentImageName.substring( 0, realLast ) + currentImageName.substring( realLast+2, currentImageName.length() );
		}
		
		
		try{
			// 	open image (check if it is VoxelMatrix first)
			originalImage = currentImageName.endsWith( ".vm" ) ?
					VoxelMatrixIO.read( originalFilesList[counter].getParent().toString() + "/" + currentImageName ) :
					new ImagePlus( originalFilesList[counter].getParent().toString() + "/" + currentImageName );			
		}catch( Exception ex ){
			IJ.error("Could not load " + originalFilesList[counter].getParent().toString() + "/" + realCurrentImageName);
			ex.printStackTrace();
			return false;
		}
		// read corresponding segmented image
		try{				
			segmentedImage = currentImageName.endsWith( ".vm" ) ?
					VoxelMatrixIO.read( segmentedFilesList[counter].getParent().toString() + "/" + currentImageName ) :
						new ImagePlus( segmentedFilesList[counter].getParent().toString() + "/" + currentImageName );

		}catch( Exception ex ){
			IJ.error("Could not load " + segmentedFilesList[counter].getParent().toString() + "/" + currentImageName);
			ex.printStackTrace();
			return false;
		}
		
		if( null == originalImage || null == segmentedImage )
			return false;

		// assign LUT to segmented image
		segmentedImage.getProcessor().setColorModel( overlayLUT );
		segmentedImage.getImageStack().setColorModel( overlayLUT );
		segmentedImage.setDisplayRange( 0, 255 );
		segmentedImage.updateAndDraw();
				
		// update display image		
		if( null != win )
			repaintWindow();
		updateOverlay();
		
		
		return true;
	}