   
   //frameAddress is now the address of the desired Frame
   //Read the values
-  currentFrame->transitionTime = EEPROM.readInt(frameAddress);
-  currentFrame->pauseTime =      EEPROM.readInt(frameAddress+2);
-  currentFrame->colorStopCount = EEPROM.read(frameAddress+4);  
-  
-  /*
-  Serial.print("colorStopCount: ");
-  Serial.println(currentFrame->colorStopCount);
-  Serial.print("transitionTime: ");
-  Serial.println(currentFrame->transitionTime);
-  Serial.print("pauseTime: ");
-  Serial.println(currentFrame->pauseTime);
-  Serial.print("availableColorStops: ");
-  Serial.println(availableColorStops);
-  */
-  
-  //free all ColorStops
-  for(i=0; i<availableColorStops; i++) {
-    free(colorStops[i]);
-    
-  } 
-  
-  //free colorStops and allocate new
-  free(colorStops);
-  colorStops = (ColorStop**) malloc(sizeof(struct ColorStop*) * currentFrame->colorStopCount);
-  
-  //Serial.println("ColorStops: ");
-
+  frame->transitionTime = EEPROM.readInt(frameAddress);
+  frame->pauseTime =      EEPROM.readInt(frameAddress+2);
+  frame->colorStopCount = EEPROM.read(frameAddress+4);  
+  
+  if(*colorStopsPointer == NULL) {
+    struct ColorStop** array =  (struct ColorStop**) malloc(sizeof(struct ColorStop) * frame->colorStopCount);
+    *colorStopsPointer = array;
+  
+  }  
+  
+  struct ColorStop** colorStops = *colorStopsPointer;
+  
   //Load ColorStops
-  for(i=0; i<currentFrame->colorStopCount; i++) {
+  for(i=0; i<frame->colorStopCount; i++) {
     colorStops[i] = (ColorStop*) malloc(sizeof(struct ColorStop));
-    loadColorStop(i, frameAddress, colorStops[i]);
-    
-    /*
-    Serial.println(i);
-    Serial.print("  ledIndex: ");
-    Serial.println(colorStops[i]->ledIndex);
-    Serial.print("  r: ");
-    Serial.println(colorStops[i]->r);
-    Serial.print("  g: ");
-    Serial.println(colorStops[i]->g);
-    Serial.print("  b: ");
-    Serial.println(colorStops[i]->b);
-    */
-    
+    loadColorStop(i, frameAddress,  colorStops[i]);
+       
   }
 }
 


void applyProfile() {
  currentFrameIndex = 0;
  loadFrame(currentFrameIndex);

}

void loadFrame(uint8_t index) {
  uint8_t i;
  
  //Create a Frame struct if not allocated
  if(currentFrame == NULL) {
    currentFrame = (struct Frame*) malloc(sizeof(struct Frame));
    currentFrame->transitionTime = 0;
    currentFrame->pauseTime =      0;
    currentFrame->colorStopCount = 0;  
  
  }
  
  uint8_t availableColorStops = currentFrame->colorStopCount;
  
  //Init Frame address with the porfile start
  uint16_t frameAddress = EEPROM_CURRENT_PROFILE_START;
  
  //Iterate over all Frames until the desired one
  for(i=0; i<index; i++) {
    //Read how many ColorStops the Frame contains and multiply it by the size of one ColorStop, add it to Address

  uint16_t receivedCount = 9;
  transmissionLength -= receivedCount;
  
  int64_t checksum = 0;
  int8_t buffer;
  
  while(!EEPROM.isReady());
  
