diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..2fa7ce7
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1 @@
+config.ini
diff --git a/config.sample.ini b/config.sample.ini
new file mode 100644
index 0000000..22a5b08
--- /dev/null
+++ b/config.sample.ini
@@ -0,0 +1,17 @@
+[yahoomessenger]
+username=PLEASE_CHANGE_ME
+password=PLEASE_CHANGE_ME
+admin=PLEASE_CHANGE_ME
+report_to=PLEASE_CHANGE_ME
+report_message=PLEASE_CHANGE_ME
+status=PLEASE_CHANGE_ME
+
+[db]
+host=PLEASE_CHANGE_ME
+name=PLEASE_CHANGE_ME
+username=PLEASE_CHANGE_ME
+password=PLEASE_CHANGE_ME
+
+
+[httpserver]
+listen_port=18881
diff --git a/db.js b/db.js
new file mode 100644
index 0000000..ee45c9d
--- /dev/null
+++ b/db.js
@@ -0,0 +1,22 @@
+var mysql = require('mysql');
+
+function start(db_host, db_user, db_pass, db_name, logger) {
+    var connection = mysql.createConnection({
+        host: db_host,
+        user: db_user,
+        password: db_pass,
+        database: db_name
+    });
+
+    logger.info("Connecting to db");
+    connection.connect();
+
+    connection.on('error', function(err) {
+        logger.error("DB error: " + err.code); // 'ER_BAD_DB_ERROR'
+    });
+
+
+    return connection;
+}
+
+exports.start = start
diff --git a/httpserver.js b/httpserver.js
new file mode 100644
index 0000000..826a5b2
--- /dev/null
+++ b/httpserver.js
@@ -0,0 +1,20 @@
+var http = require('http');
+var url = require('url');
+
+function start() {
+    function onHttpRequest(request, response) {
+        var pathname = url.parse(request.url).pathname;
+        console.log('Request for ' + pathname + ' received');
+
+        console.log(url.parse(request.url, true));
+
+        response.writeHead(200, {"Content-Type": "text/html"});
+        response.write("Hello");
+        response.end();
+    }
+
+    http.createServer(onHttpRequest).listen(18881);
+    console.log("HTTP server started");
+}
+
+exports.start = start;
diff --git a/index.js b/index.js
new file mode 100644
index 0000000..728e266
--- /dev/null
+++ b/index.js
@@ -0,0 +1,142 @@
+var iniparser = require('iniparser');
+var config = iniparser.parseSync('./config.ini');
+
+var strftime = require('strftime');
+
+var POLLING_INTERVAL = 3600 * 1000;
+var pollingTimer;
+
+var lastDataOnPM;
+
+var logger = require('winston');
+logger.remove(logger.transports.Console);
+logger.add(logger.transports.Console, { timestamp: function() { return (strftime('%F %T'));  }});
+
+var db = require('./db.js');
+db_connection = db.start(config.db.host, config.db.username, config.db.password, config.db.name, logger);
+
+function absen() {
+    broadcast(config.yahoomessenger.report_message, config.yahoomessenger.report_to);
+}
+
+function broadcast(destinations, message) {
+    var destinations = destinations.split(',');
+    var destinationCount = destinations.length;
+
+    for (var i=0; i < destinationCount; i++) {
+        destination = destinations[i]
+        logger.info('Sending message to ' + destination);
+        YahooMessenger.sendPM(destination, message);
+    }
+}
+
+var pollingLoop = function() {
+    logger.info('Polling loop');
+
+    absen();
+
+    pollingTimer = setTimeout(pollingLoop, POLLING_INTERVAL);
+}
+
+function insertMessages(db_connection, logger_id, direction, partner, message, sentdate) {
+
+    db_connection.query(
+        'INSERT INTO messages SET ?',
+        {
+            transport: 'YAHOO',
+            logger: logger_id,
+            direction: direction,
+            partner: partner,
+            message: message,
+            sentdate: sentdate,
+        },
+
+        function(err) {
+            if (err != null) {
+                logger.error("Error on inserting messages to DB, error: " + err);
+            }
+        }
+    );
+}
+
+var striptags = require('striptags');
+
+var YahooMessenger = require("yahoomessenger");
+YahooMessenger.newInstance();
+
+YahooMessenger.on('ready', function onReady(){
+    logger.info("Going to online on YM")
+    YahooMessenger.login(config.yahoomessenger.username, config.yahoomessenger.password);
+});
+
+YahooMessenger.on('loginSuccessful', function onLoginSuccessful(data){
+    logger.info('Online on YM as ' + data.user_id + ' (' + data.firstname + ' ' + data.lastname + ')');
+
+    if (config.yahoomessenger.status) {
+        logger.info('Set status to: ' + config.yahoomessenger.status);
+        YahooMessenger.setCustomAwayStatus(config.yahoomessenger.status);
+    };
+
+    pollingLoop();
+});
+
+YahooMessenger.on('pm', function(data){
+    //console.log(data);
+
+    if (lastDataOnPM != null) {
+        if ((lastDataOnPM.sender == data.sender) && (lastDataOnPM.message == data.message)) {
+            //logger.info('Ignoring duplicate message detected');
+            return;
+        }
+    }
+
+    lastDataOnPM = data;
+
+    var message = striptags(data.message)
+    console.log("message: " + message);
+
+    logger.info('New message received from ' + data.user_id + ': ' + message);
+
+    var sentdate = Date.parse(data.time);
+    var strftime = require('strftime');
+    sentdate = strftime('%Y-%m-%d %H:%M:%S', sentdate);
+
+    insertMessages(
+        db_connection,
+        data.user_id,
+        'IN',
+        data.sender,
+        message,
+        sentdate
+    );
+
+    broadcast(config.yahoomessenger.report_to, data.sender + '-> ' + message);
+
+});
+
+YahooMessenger.on('buddyAddRequest', function(data) {
+    logger.info("Got request to add buddy from " + data.username);
+    YahooMessenger.acceptAddBuddy(data.username);
+});
+
+function isSenderIsAdmin(ym, data) {
+
+}
+
+var http = require('http');
+var url = require('url');
+
+function onHttpRequest(request, response) {
+    var pathname = url.parse(request.url).pathname;
+    logger.info('Got HTTP request on ' + pathname);
+
+    var queries = url.parse(request.url, true).query;
+    console.log(queries);
+
+    response.writeHead(200, {"Content-Type": "text/html"});
+    response.write("Hello");
+    response.end();
+}
+
+http.createServer(onHttpRequest).listen(config.httpserver.listen_port);
+logger.info("HTTP server listening on " + config.httpserver.listen_port);