diff --git a/src/fetcher.cc b/src/fetcher.cc
new file mode 100644
index 0000000..e021540
--- /dev/null
+++ b/src/fetcher.cc
@@ -0,0 +1,70 @@
+/* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil -*- */
+/*
+ * Copyright (c) 2012 University of California, Los Angeles
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Author: Alexander Afanasyev <alexander.afanasyev@ucla.edu>
+ *	   Zhenkai Zhu <zhenkai@cs.ucla.edu>
+ */
+
+#include "fetcher.h"
+#include <boost/make_shared.hpp>
+#include <boost/ref.hpp>
+#include <boost/throw_exception.hpp>
+
+using namespace boost;
+using namespace std;
+namespace fs = boost::filesystem;
+
+const std::string INIT_DATABASE = "\
+PRAGMA foreign_keys = ON;           \
+                                    \
+CREATE TABLE                                     \
+    Queue(                                       \
+        name     BLOB NOT NULL PRIMARY KEY,      \
+        seq_no_rcvd INTEGER,                     \
+        seq_no_available INTEGER,                \
+    );                                           \
+";
+
+Fetcher::Fetcher (const fs::path &path, const string &name)
+{
+  fs::path chronoshareDirectory = path / ".chronoshare";
+  fs::create_directories (chronoshareDirectory);
+  
+  int res = sqlite3_open((chronoshareDirectory / (name+".db")).c_str (), &m_db);
+  if (res != SQLITE_OK)
+    {
+      BOOST_THROW_EXCEPTION (Error::Fetcher ()
+                             << errmsg_info_str ("Cannot open/create dabatabase: [" + (chronoshareDirectory / (name+".db")).string () + "]"));
+    }
+  
+  char *errmsg = 0;
+  res = sqlite3_exec (m_db, INIT_DATABASE.c_str (), NULL, NULL, &errmsg);
+  if (res != SQLITE_OK && errmsg != 0)
+    {
+      // std::cerr << "DEBUG: " << errmsg << std::endl;
+      sqlite3_free (errmsg);
+    }
+}
+
+Fetcher::~Fetcher ()
+{
+  int res = sqlite3_close (m_db);
+  if (res != SQLITE_OK)
+    {
+      // complain
+    }
+}
diff --git a/src/fetcher.h b/src/fetcher.h
new file mode 100644
index 0000000..8cb4664
--- /dev/null
+++ b/src/fetcher.h
@@ -0,0 +1,52 @@
+/* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil -*- */
+/*
+ * Copyright (c) 2012-2013 University of California, Los Angeles
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Author: Alexander Afanasyev <alexander.afanasyev@ucla.edu>
+ *	   Zhenkai Zhu <zhenkai@cs.ucla.edu>
+ */
+
+#ifndef FETCHER_H
+#define FETCHER_H
+
+#include <stdint.h>
+#include <sqlite3.h>
+#include <boost/exception/all.hpp>
+#include <string>
+#include <boost/filesystem.hpp>
+
+typedef boost::error_info<struct tag_errmsg, std::string> errmsg_info_str; 
+
+class Fetcher
+{
+public:
+  Fetcher (const boost::filesystem::path &path, const std::string &name);
+  virtual ~Fetcher ();
+  
+private:
+
+protected:
+  sqlite3 *m_db;
+};
+
+namespace Error {
+struct Fetcher : virtual boost::exception, virtual std::exception { };
+}
+
+typedef boost::shared_ptr<Fetcher> FetcherPtr;
+
+
+#endif // FETCHER_H
