int Proxy::processCarString(const string &s){
            // Load configuration
            // TODO move it?
            KeyValueConfiguration kv = getKeyValueConfiguration();
            // TODO Use vectors and sensor_count ?(tokens[5] and arr_size)
            const uint32_t sensor_count = kv.getValue<uint32_t>("proxy.numberOfSensors");

            const uint LENGTH_RULE = kv.getValue<uint>("proxy.arduinoStringLength");

            const string sensor0_token = kv.getValue<string>("proxy.sensor0.token");
            const string sensor1_token = kv.getValue<string>("proxy.sensor1.token");
            const string sensor2_token = kv.getValue<string>("proxy.sensor2.token");
            const string sensor3_token = kv.getValue<string>("proxy.sensor3.token");
            const string sensor4_token = kv.getValue<string>("proxy.sensor4.token");

            const int sensor0_id = kv.getValue<int>("proxy.sensor0.id");;
            const int sensor1_id = kv.getValue<int>("proxy.sensor1.id");;
            const int sensor2_id = kv.getValue<int>("proxy.sensor2.id");;
            const int sensor3_id = kv.getValue<int>("proxy.sensor3.id");;
            const int sensor4_id = kv.getValue<int>("proxy.sensor4.id");;

            string payload = s;
            // Use tokens[sensor_count] instead of tokens[5]. Need to learn vector and its operators.
            string tokens[5] = {sensor0_token, sensor1_token, sensor2_token, sensor3_token, sensor4_token};

            int arr_size = sizeof(tokens)/sizeof(tokens[0]);
            size_t idx;
            int i;
            int digits;
            int problem;

            Container containerSensorBoardData = getKeyValueDataStore().get(automotive::miniature::SensorBoardData::ID());
            SensorBoardData sbd = containerSensorBoardData.getData<SensorBoardData> ();

            // Set the number of sensors to sensor_count
            sbd.setNumberOfSensors(sensor_count);

            // Check length
            if(payload.length() != LENGTH_RULE){
                //cout << "BAD LENGTH SHOULD FAIL" << endl;
            }
            
            // For each token
            for(i=0;i<arr_size;i++){
                problem = 0;

                string key = payload.substr(0,tokens[i].length());    

                //cout << i << ". Token=" << tokens[i] << " key=" << key << endl;

                if(key == tokens[i]){
                    payload = payload.substr(tokens[i].length()+1,string::npos); // Remove token and space

                    try {
                        digits = stoi(payload, &idx, 10); // get number
                    } catch (...) {
                        problem = 1;
                    }

                } else {
                    return -2;
                }
                // TODO fix ifs
                if(!problem){                    
                    // Add to SBD
                    //cout << "We parsed token:" << tokens[i] << " and got value:" << digits << endl;
                    
                    if(tokens[i] == sensor0_token){
                        sbd.putTo_MapOfDistances(sensor0_id, digits);
                    } else
                    if(tokens[i] == sensor1_token){
                        sbd.putTo_MapOfDistances(sensor1_id, digits);
                    } else
                    if(tokens[i] == sensor2_token){
                        sbd.putTo_MapOfDistances(sensor2_id, digits );
                    } else
                    if(tokens[i] == sensor3_token){
                        sbd.putTo_MapOfDistances(sensor3_id, digits );
                    } else
                    if(tokens[i] == sensor4_token){
                        sbd.putTo_MapOfDistances(sensor4_id, digits );
                    }

                    if(i < arr_size - 1){
                    payload = payload.substr(idx + 1,string::npos); // We need to remove digit values + a space
                    } else {
                        payload = payload.substr(idx,string::npos); // We only need to remove digit values
                    }

                } else {
                    return -3;
                }

            }

            if(payload.length() == 0){
                //cout << "Finished parsing: " << sbd.toString() << endl;
                // TODO Invoke something with SBD instead of sending it from here.
                Container sbdc(sbd);
                getConference().send(sbdc);
                return 1;
            } else {
                return 0; // TO DO: Should never happen check
            }
        }