20x4 I2C LCD crashing on Spark Core

I use 5V to power LCD and i have 4,7k resistors in place.
I have to use lcd->init(); (in first post i wrote clear(); it was typo) for lcd to display properly again once corrupt letters appear.

Unfortunetly there is no way i can port or modify library since my programming skills are weak at best.

My curreny code (sketch to test sensors and lcd):

// This #include statement was automatically added by the Spark IDE.
#include "OneWire/OneWire.h"

// This #include statement was automatically added by the Spark IDE.
#include "spark-dallas-temperature/spark-dallas-temperature.h"






//#include "application.h"
#include "LiquidCrystal_I2C.h"
#include "SparkTime/SparkTime.h" 




DallasTemperature dallas(new OneWire(D3));

int led1 = D4;

LiquidCrystal_I2C *lcd;
UDP UDPClient;
SparkTime rtc;

unsigned long currentTime;
unsigned long lastTime = 0UL;
String timeStr;

void setup(){
    dallas.begin();
    rtc.begin(&UDPClient, "north-america.pool.ntp.org");
    rtc.setTimeZone(+2); // gmt offset
    Serial.begin(9600);
    lcd = new LiquidCrystal_I2C(0x27, 20, 4); // set the LCD address to 0x20 for a 16x2 //SparkCore bug, address is actually 27 but shifted (0x27*2)
    lcd->init(); // initialize the lcd
    lcd->backlight();
    lcd->clear();
    pinMode(led1, OUTPUT);
    }
    

void loop(){
 
    currentTime = rtc.now();
    if (currentTime != lastTime) {
        byte sec = rtc.second(currentTime);
        
         
        // Just the time in 12 hour format
        timeStr = "";
        timeStr += rtc.hour12String(currentTime);
        timeStr += ":";
        timeStr += rtc.minuteString(currentTime);
        timeStr += ":";
        timeStr += rtc.secondString(currentTime);    
        timeStr += " ";    
        timeStr += rtc.AMPMString(currentTime);
        
        lastTime = currentTime;
    }
    
    lcd->setCursor(5,0);
    lcd->print(timeStr);

    dallas.requestTemperatures();
    delay(1000);

    float Radikasse = dallas.getTempCByIndex( 0 );
    float Toatemp = dallas.getTempCByIndex( 1 );
    float Toatemp2 = dallas.getTempCByIndex( 2 );

    Serial.println("Temperature: "); Serial.println(Radikasse) ;Serial.println(Toatemp) ;
    lcd->setCursor(5,1);
    lcd->print(Radikasse, 1);
    lcd->setCursor(5,2);
    lcd->print(Toatemp, 1);  
    lcd->setCursor(5,3);
    lcd->print(Toatemp2, 1);
    
    if (Toatemp <23) {
        digitalWrite(led1, LOW);
    } else {
        lcd->init();
        //digitalWrite(led1,HIGH);
    }
    

}