diff --git a/app.js b/app.js
index 2c46f4d8ac7bb4e21206e451071fe6610aba72cd..4cf99e4531993e748ac12aae96407812efb6d8ca 100644
--- a/app.js
+++ b/app.js
@@ -6,7 +6,7 @@
 
 // User Imports.
 const config = require('./config.js');
-const { create_message, generate_users, test_db_functions } = require('./src/database_functions.js');
+const { checkUserExist, create_message, createMessageFrom, getUsersWithMessages, generate_users, test_db_functions } = require('./src/database_functions.js');
 const { userConfirmation } = require('./src/helper_functions.js');
 const { Logging, testLogLevels } = require('./src/logging.js');
 const MySql = require('./src/mysql.js');
@@ -23,24 +23,64 @@ async function main() {
     logger.info('Starting program.');
     logger.log('');
 
+    // testLogLevels(logger);
+
     // Create MySql helper class.
-    var debug = false;
+    var debug = true;
     const mysql = await new MySql(config['mysql'], debug);
 
     // Connect to database.
     await mysql.open_conn();
 
-    // Reset database by emptying all tables.
-    await mysql.reset_db(true);
+    // // Reset database by emptying all tables.
+    // await mysql.reset_db(true);
+    //
+    // // Generate database users.
+    // generate_users(mysql);
+    //
+    // // Generate 100,0000 messages.
+    // for (let index = 0; index < 100000; index++) {
+    //     create_message(mysql);
+    // }
 
-    // Generate database users.
-    generate_users(mysql);
+    // Theoretical addUser function.
+    try {
+        addUser();
+    } catch (err) {
 
-    // Generate 100,0000 messages.
-    for (let index = 0; index < 100000; index++) {
-        create_message(mysql);
     }
 
+    // Check for users with an expected name.
+    await checkUserExist(mysql, 'Bob', debug);
+
+    // Check for users with an unexpected name.
+    await checkUserExist(mysql, 'Potato', debug);
+
+    // Add a duplicate expected name and check results again.
+    let query = 'INSERT INTO user (name) VALUES (?);';
+    let parameters = ['Bob'];
+    await mysql.query(query, parameters);
+    await checkUserExist(mysql, 'Bob', debug);
+
+    // Now we want to check what users have created messages.
+    // First clear messages.
+    await mysql.reset_db(true);
+    await generate_users(mysql);
+
+    // Check with no messages created.
+    await getUsersWithMessages(mysql, debug);
+
+    // Create messages from Johnny and Sarah.
+    createMessageFrom(mysql, 2);
+    createMessageFrom(mysql, 2);
+    createMessageFrom(mysql, 4);
+    createMessageFrom(mysql, 4);
+    createMessageFrom(mysql, 4);
+    createMessageFrom(mysql, 4);
+
+    // Check again, now that 6 messages have been made.
+    await getUsersWithMessages(mysql, debug);
+
     // Close existing database connections.
     await mysql.close_conn();
 
diff --git a/src/database_functions.js b/src/database_functions.js
index b39cfbd901e18c008bc06bef757daac50e629213..8812e6ca967db87d76564b4ba012ebc0dc29e72a 100644
--- a/src/database_functions.js
+++ b/src/database_functions.js
@@ -75,7 +75,7 @@ async function generate_users(mysql, debug) {
 async function create_message(mysql, debug) {
     if (debug) {
         logger.log('');
-        logger.debug('Executing `generate_users()` function:');
+        logger.debug('Executing `create_message()` function:');
     }
 
     // Get pk of sender. Sender is chosen at random.
@@ -90,8 +90,101 @@ async function create_message(mysql, debug) {
 }
 
 
+/**
+ * Creates a single message from a given user.
+ * :param mysql: Instance of MySQL connector class.
+ * :param debug: Bool indicating if debug mode or not.
+ */
+async function createMessageFrom(mysql, senderId, debug) {
+    if (debug) {
+        logger.log('');
+        logger.debug('Executing `createMessageFrom()` function:');
+        logger.debug('    senderId: {}'.format(senderId));
+    }
+
+    // Here, we would normally generate a message too. But we're lazy.
+    message = 'Test Message.';
+
+    // Add message to database.
+    mysql.query('INSERT INTO message (user_id, message) VALUES (?, ?)', [senderId, message]);
+}
+
+
+/**
+ * Checks if user exist for given username. If so, returns user id.
+ * :param mysql: Instance of MySQL connector class.
+ * :param userName: Username to check for.
+ * :param debug: Bool indicating if debug mode or not.
+ */
+async function checkUserExist(mysql, userName, debug) {
+    if (debug) {
+        logger.log('');
+        logger.debug('Executing `checkUserExist()` function:');
+        logger.debug('    mysql: {}'.format(mysql));
+        logger.debug('    userName: {}'.format(userName));
+        logger.debug('    debug: {}'.format(debug));
+    }
+
+    // Execute query.
+    let query = 'SELECT COUNT(name) AS userCount FROM user WHERE name = ?;';
+    let parameters = [userName];
+    logger.sql_q(query, parameters);
+    let results = await mysql.query(query, parameters);
+
+    // Check results.
+    if (results.length < 1) {
+        // No results found.
+        logger.info('User with name "{}" not found.'.format(userName));
+        return [];
+    } else {
+        // One or more results found.
+        let userCount = results[0]['userCount'];
+        logger.info('Found {} users with name "{}".'.format(userCount, userName));
+        return userCount;
+    }
+}
+
+/**
+ * Returns all users that have sent a message.
+ * :param mysql: Instance of MySQL connector class.
+ * :param debug: Bool indicating if debug mode or not.
+ */
+async function getUsersWithMessages(mysql, debug) {
+    if (debug) {
+        logger.log('');
+        logger.debug('Executing `getUsersWithMessages()` function:');
+        logger.debug('    mysql: {}'.format(mysql));
+        logger.debug('    debug: {}'.format(debug));
+    }
+
+    // Get list of all messages.
+    // let query = 'SELECT UNIQUE user_id FROM message;';
+    let query = 'SELECT UNIQUE user.name AS name, message.user_id AS user_id FROM message INNER JOIN user ON message.user_id = user.id;';
+    logger.sql_q(query);
+    let results = await mysql.query(query);
+
+    // Check results.
+    if (results.length < 1) {
+        logger.info('No users have sent messages yet.');
+        return [];
+    } else {
+        // Get user names in list.
+        let user_list = []
+        for (let index = 0; index < results.length; index++) {
+            user_list.push(results[index]['name']);
+        }
+        logger.info('Users have sent messages: {}'.format(user_list));
+        return user_list;
+    }
+
+}
+
+
 module.exports = {
+    checkUserExist,
     create_message,
+    createMessageFrom,
+    getUsersWithMessages,
     generate_users,
     test_db_functions,
 };
diff --git a/src/mysql.js b/src/mysql.js
index b37a963b375bd27409e16302e1485ee401920428..a8c515108712a1d3770f72f3d40d35677b0b2352 100644
--- a/src/mysql.js
+++ b/src/mysql.js
@@ -75,6 +75,9 @@ class MySql {
             logger.debug('Closing MySql connection...');
         }
 
+        // Wait 2 seconds before trying anything. Helps ensure queries can at least queue up before closing.
+        await sleep(2000);
+
         // Check if connection pool is currently open.
         if (this.connection_pool != null) {
             // Connection pool currently exists. Check if associated connections are still running.