diff --git a/controller.ini b/controller.ini
index 9075748..21281d6 100644
--- a/controller.ini
+++ b/controller.ini
@@ -5,6 +5,7 @@ name = new emgauwa device
 discovery-port = 4421
 : 1886 for testing; 1885 for dev-env; 1884 for testing-env; 1883 for prod-env
 mqtt-port = 1885
+mqtt-host = localhost
 
 relay-count = 10
 database = controller_db.lmdb
diff --git a/include/config.h b/include/config.h
index 19ce6de..930d184 100644
--- a/include/config.h
+++ b/include/config.h
@@ -17,12 +17,13 @@ typedef struct
 typedef struct
 {
     char *file;
-    char *database;
+    char database[256];
     log_level_t log_level;
     run_type_t run_type;
     char name[MAX_NAME_LENGTH + 1];
     uint16_t discovery_port;
     uint16_t mqtt_port;
+    char mqtt_host[256];
     uint8_t relay_count;
     config_relay_t *relay_configs;
 } config_t;
diff --git a/src/connections.c b/src/connections.c
index 2f2b2f2..7b886aa 100644
--- a/src/connections.c
+++ b/src/connections.c
@@ -10,7 +10,7 @@ struct mg_connection *global_connection_mqtt;
 struct mg_connection*
 connection_discovery_bind(struct mg_mgr *mgr)
 {
-    char address[100];
+    char address[32];
     sprintf(address, "udp://0.0.0.0:%u", global_controller->discovery_port);
     struct mg_connection *c = mg_bind(mgr, address, handler_discovery);
     return c;
@@ -19,7 +19,7 @@ connection_discovery_bind(struct mg_mgr *mgr)
 struct mg_connection*
 connection_command_bind(struct mg_mgr *mgr)
 {
-    char address[100];
+    char address[32];
     sprintf(address, "tcp://0.0.0.0:%u", global_controller->command_port);
     struct mg_connection *c = mg_bind(mgr, address, handler_command);
     return c;
@@ -28,8 +28,8 @@ connection_command_bind(struct mg_mgr *mgr)
 struct mg_connection*
 connection_mqtt_connect(struct mg_mgr *mgr)
 {
-    char address[100];
-    sprintf(address, "tcp://127.0.0.1:%u", global_config.mqtt_port);
+    char address[512];
+    sprintf(address, "tcp://%s:%u", global_config.mqtt_host, global_config.mqtt_port);
     struct mg_connection *c = mg_connect(mgr, address, handler_mqtt);
     return c;
 }
diff --git a/src/helpers/load_config.c b/src/helpers/load_config.c
index 71c0be0..589c88c 100644
--- a/src/helpers/load_config.c
+++ b/src/helpers/load_config.c
@@ -26,7 +26,6 @@ helper_load_config(IniDispatch *disp, void *config_void)
         }
         if(CONFINI_IS_KEY("controller", "database"))
         {
-            config->database = malloc(sizeof(char) * (strlen(disp->value) + 1));
             strcpy(config->database, disp->value);
             return 0;
         }
@@ -75,6 +74,11 @@ helper_load_config(IniDispatch *disp, void *config_void)
             config->mqtt_port = atoi(disp->value);
             return 0;
         }
+        if(CONFINI_IS_KEY("controller", "mqtt-host"))
+        {
+            strcpy(config->mqtt_host, disp->value);
+            return 0;
+        }
         if(CONFINI_IS_KEY("controller", "relay-count"))
         {
             config->relay_count = atoi(disp->value);
diff --git a/src/main.c b/src/main.c
index 4736efe..16a4365 100644
--- a/src/main.c
+++ b/src/main.c
@@ -43,8 +43,6 @@ terminate(int signum)
     LOG_DEBUG("freeing global controller\n");
     controller_free(global_controller);
 
-    LOG_DEBUG("freeing database config\n");
-    free(global_config.database);
     LOG_DEBUG("freeing relay configs config\n");
     free(global_config.relay_configs);