diff --git a/src/utility/boost-log.hpp b/src/utility/boost-log.hpp
deleted file mode 100644
index 53743ae..0000000
--- a/src/utility/boost-log.hpp
+++ /dev/null
@@ -1,23 +0,0 @@
-/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/**
- * Copyright (c) 2014 University of Memphis,
- *                    Regents of the University of California
- *
- * See COPYING for copyright and distribution information.
- */
-
-#ifndef NLSR_UTIL_BOOST_LOG_HPP
-#define NLSR_UTIL_BOOST_LOG_HPP
-
-// suppress boost::log warnings
-#pragma GCC system_header
-#pragma clang system_header
-
-#include <boost/log/common.hpp>
-#include <boost/log/expressions.hpp>
-#include <boost/log/attributes.hpp>
-#include <boost/log/sources/logger.hpp>
-#include <boost/log/sinks/sync_frontend.hpp>
-#include <boost/log/sinks/text_file_backend.hpp>
-
-#endif // NLSR_UTIL_BOOST_LOG_HPP
diff --git a/src/utility/logger.cpp b/src/utility/logger.cpp
deleted file mode 100644
index 3d9a804..0000000
--- a/src/utility/logger.cpp
+++ /dev/null
@@ -1,59 +0,0 @@
-#include "logger.hpp"
-
-namespace nlsr {
-
-string
-Logger::getEpochTime()
-{
-  std::stringstream ss;
-  boost::posix_time::ptime time_t_epoch(boost::gregorian::date(1970, 1, 1));
-  boost::posix_time::ptime now = boost::posix_time::microsec_clock::local_time();
-  boost::posix_time::time_duration diff = now - time_t_epoch;
-  ss << diff.total_seconds() << "." << boost::format("%06i") %
-     (diff.total_microseconds()
-      % 1000000);
-  return ss.str();
-}
-
-string
-Logger::getUserHomeDirectory()
-{
-  string homeDirPath(getpwuid(getuid())->pw_dir);
-  if (homeDirPath.empty())
-  {
-    homeDirPath = getenv("HOME");
-  }
-  return homeDirPath;
-}
-
-void
-Logger::initialize(std::string dirPath)
-{
-  string logDirPath(dirPath);
-  if (dirPath.empty())
-  {
-    logDirPath = getUserHomeDirectory() + "/nlsrLog";
-  }
-  cout << "Log Dir Path: " << logDirPath << endl;
-  typedef sinks::synchronous_sink<sinks::text_file_backend> file_sink;
-  shared_ptr<file_sink> sink(new file_sink(
-                               keywords::file_name = logDirPath
-                                                     + "/NLSR%Y%m%d%H%M%S_%3N.log",
-                               keywords::rotation_size = 16 * 1024 * 1024,
-                               keywords::time_based_rotation = sinks::file::rotation_at_time_point(12, 0, 0),
-                               keywords::auto_flush = true
-                             ));
-  sink->locked_backend()->set_file_collector(sinks::file::make_collector(
-                                               keywords::target = logDirPath,
-                                               //keywords::max_size =  512 * 1024 * 1024,
-                                               keywords::min_free_space = 64 * 1024 * 1024
-                                             ));
-  sink->set_formatter(
-    expr::format("%1% %2%")
-    % getEpochTime()
-    % expr::smessage
-  );
-  logging::core::get()->add_sink(sink);
-}
-
-}//namespace nlsr
diff --git a/src/utility/logger.hpp b/src/utility/logger.hpp
deleted file mode 100644
index 97b8df4..0000000
--- a/src/utility/logger.hpp
+++ /dev/null
@@ -1,64 +0,0 @@
-#ifndef NLSR_LOGGER_HPP
-#define NLSR_LOGGER_HPP
-
-#define BOOST_LOG_DYN_LINK 1
-#include "boost-log.hpp"
-
-#include <stdexcept>
-#include <string>
-#include <iostream>
-#include <sstream>
-#include <pwd.h>
-#include <cstdlib>
-#include <string>
-#include <unistd.h>
-#include <boost/format.hpp>
-#include <boost/smart_ptr/shared_ptr.hpp>
-#include <boost/date_time/posix_time/posix_time.hpp>
-#include <boost/date_time/local_time/local_time.hpp>
-
-
-
-
-namespace nlsr {
-
-namespace logging = boost::log;
-namespace attrs = boost::log::attributes;
-namespace src = boost::log::sources;
-namespace sinks = boost::log::sinks;
-namespace expr = boost::log::expressions;
-namespace keywords = boost::log::keywords;
-
-using boost::shared_ptr;
-using namespace std;
-
-
-class Logger
-{
-public:
-  Logger()
-  {
-  }
-
-  void
-  initialize(std::string dirPath);
-
-  src::logger&
-  getLogger()
-  {
-    return m_Logger;
-  }
-
-private:
-  string
-  getEpochTime();
-
-  string
-  getUserHomeDirectory();
-
-private:
-  src::logger m_Logger;
-};
-
-}//namespace nlsr
-#endif //NLSR_LOGGER_HPP
diff --git a/src/utility/tokenizer.cpp b/src/utility/tokenizer.cpp
index 52473b2..095e55d 100644
--- a/src/utility/tokenizer.cpp
+++ b/src/utility/tokenizer.cpp
@@ -42,8 +42,8 @@
 uint32_t
 Tokenizer::getTokenPosition(string& token)
 {
-  int pos = -1;
-  int i = 0;
+  uint32_t pos = -1;
+  uint32_t i = 0;
   for (std::list<string>::iterator it = m_tokenList.begin();
        it != m_tokenList.end(); it++)
   {
@@ -67,7 +67,7 @@
   if ((to < m_tokenList.size()) &&
       (to >= from && to < m_tokenList.size()))
   {
-    for (int i = from; i <= to; i++)
+    for (uint32_t i = from; i <= to; i++)
     {
       returnString += m_seps;
       returnString += m_vTokenList[i];
