diff --git a/CMakeLists.txt b/CMakeLists.txt
index a763453..a3c7f10 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,6 +1,6 @@
 cmake_minimum_required (VERSION 3.7)
 project(core
-        VERSION 0.3.4
+        VERSION 0.3.3
         LANGUAGES C)
 
 add_executable(core src/main.c)
diff --git a/include/models/controller.h b/include/models/controller.h
index e144a0d..028c63b 100644
--- a/include/models/controller.h
+++ b/include/models/controller.h
@@ -42,9 +42,6 @@ controller_get_by_id(int id);
 controller_t*
 controller_get_by_uid(uuid_t uid);
 
-int
-controller_get_id_for_uid(uuid_t uid);
-
 controller_t**
 controller_get_all();
 
diff --git a/include/models/relay.h b/include/models/relay.h
index 529db7f..9826f30 100644
--- a/include/models/relay.h
+++ b/include/models/relay.h
@@ -47,9 +47,6 @@ relay_free_list(relay_t **relays_list);
 relay_t*
 relay_get_by_id(int id);
 
-int
-relay_get_id_for_controller(int controller_id, int relay_num);
-
 relay_t*
 relay_get_for_controller(int controller_id, int relay_num);
 
diff --git a/src/handlers/mqtt.c b/src/handlers/mqtt.c
index 7f26ffc..d7200fe 100644
--- a/src/handlers/mqtt.c
+++ b/src/handlers/mqtt.c
@@ -31,12 +31,13 @@ handle_mqtt_publish_controller(char **topic_save, int controller_id, char *paylo
         {
             return;
         }
-        int relay_id = relay_get_id_for_controller(controller_id, relay_num);
-        if(!relay_id)
+        relay_t *relay = relay_get_for_controller(controller_id, relay_num);
+        if(!relay)
         {
             return;
         }
-        status_update_entry(relay_id, payload[0] == '1');
+        status_update_entry(relay->id, payload[0] == '1');
+        free(relay);
     }
 }
 
@@ -63,10 +64,11 @@ handle_mqtt_publish(struct mg_mqtt_message *msg)
             uuid_t controller_uid;
             if(uuid_parse(controller_uid_str, controller_uid) == 0)
             {
-                int controller_id = controller_get_id_for_uid(controller_uid);
-                if(controller_id)
+                controller_t *controller = controller_get_by_uid(controller_uid);
+                if(controller)
                 {
-                    handle_mqtt_publish_controller(topic_save, controller_id, payload);
+                    handle_mqtt_publish_controller(topic_save, controller->id, payload);
+                    controller_free(controller);
                 }
             }
         }
diff --git a/src/models/controller.c b/src/models/controller.c
index 807853c..6797c56 100644
--- a/src/models/controller.c
+++ b/src/models/controller.c
@@ -324,20 +324,6 @@ controller_get_by_uid(uuid_t uid)
     return result;
 }
 
-int
-controller_get_id_for_uid(uuid_t uid)
-{
-    char uuid_str[UUID_STR_LEN];
-    uuid_unparse(uid, uuid_str);
-    LOGGER_DEBUG("getting controller id [uid=%s] from database\n", uuid_str);
-    sqlite3_stmt *stmt;
-
-    sqlite3_prepare_v2(global_database, "SELECT id FROM controllers WHERE uid = ?1;", -1, &stmt, NULL);
-    sqlite3_bind_blob(stmt, 1, uid, sizeof(uuid_t), SQLITE_STATIC);
-
-    return database_helper_get_id(stmt);
-}
-
 controller_t**
 controller_get_all()
 {
diff --git a/src/models/relay.c b/src/models/relay.c
index df196f0..d2ca8b9 100644
--- a/src/models/relay.c
+++ b/src/models/relay.c
@@ -383,6 +383,22 @@ relay_get_by_id(int id)
     return result;
 }
 
+relay_t*
+relay_get_by_uid(uuid_t uid)
+{
+    sqlite3_stmt *stmt;
+
+    sqlite3_prepare_v2(global_database, "SELECT * FROM relays WHERE uid = ?1;", -1, &stmt, NULL);
+    sqlite3_bind_blob(stmt, 1, uid, sizeof(uuid_t), SQLITE_STATIC);
+
+    relay_t **sql_result = relay_db_select(stmt);
+
+    relay_t *result = sql_result[0];
+    free(sql_result);
+
+    return result;
+}
+
 relay_t**
 relay_get_all()
 {
@@ -425,19 +441,6 @@ relay_get_for_controller(int controller_id, int relay_num)
 
 }
 
-int
-relay_get_id_for_controller(int controller_id, int relay_num)
-{
-    LOGGER_DEBUG("getting relay id [controller_id=%d, relay_num=%d] from database\n", controller_id, relay_num);
-    sqlite3_stmt *stmt;
-
-    sqlite3_prepare_v2(global_database, "SELECT id FROM relays WHERE controller_id = ?1 AND number = ?2;", -1, &stmt, NULL);
-    sqlite3_bind_int(stmt, 1, controller_id);
-    sqlite3_bind_int(stmt, 2, relay_num);
-
-    return database_helper_get_id(stmt);
-}
-
 relay_t**
 relay_get_by_controller_id(int controller_id)
 {