public void nextDay( final List<LifeformModel> neighbors,
            final List<Cardinal> freeSpace ) {
        final int move = Rand.randInt( 0, 100 );
        if( ( move > 50 ) && ( freeSpace.size( ) > 0 ) ) {
            final int cardinal = Rand.randInt( 0, freeSpace.size( ) - 1 );
            GridModel.move( freeSpace.get( cardinal ), this.column, this.line );
        }
        if( ( this.disease == null ) && !this.immune ) {
            for( int i = 0; i < neighbors.size( ); i++ ) {
                if( !( neighbors.get( i ).state instanceof ContagiousModel ) ) {
                    return;
                }
                final int infectionRate = ( ( Double ) neighbors.get( i ).disease
                        .getInfectionRate( ).get( this.getLifeformType( ) ) )
                        .intValue( );
                final int randomInt = Rand.randInt( 0, 100 );
                if( randomInt <= infectionRate ) {

                    try {
                        this.disease = neighbors.get( i ).disease.getClass( )
                                .getConstructor( LifeformModel.class )
                                .newInstance( this );
                    } catch( InstantiationException | IllegalAccessException
                            | IllegalArgumentException
                            | InvocationTargetException | NoSuchMethodException
                            | SecurityException e ) {
                        FroshController.LOGGER.severe( e.getStackTrace( )
                                .toString( ) );
                    }

                    return;
                }
            }
        }

        if( this.disease != null ) {
            this.disease.nextDay( );
        }
    }