diff --git a/src/db/zone-mgr.cpp b/src/db/zone-mgr.cpp
new file mode 100644
index 0000000..cc0b613
--- /dev/null
+++ b/src/db/zone-mgr.cpp
@@ -0,0 +1,77 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/**
+ * Copyright (c) 2014, Regents of the University of California.
+ *
+ * This file is part of NDNS (Named Data Networking Domain Name Service).
+ * See AUTHORS.md for complete list of NDNS authors and contributors.
+ *
+ * NDNS is free software: you can redistribute it and/or modify it under the terms
+ * of the GNU General Public License as published by the Free Software Foundation,
+ * either version 3 of the License, or (at your option) any later version.
+ *
+ * NDNS 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
+ * NDNS, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "zone-mgr.hpp"
+
+
+namespace ndn {
+namespace ndns {
+
+ZoneMgr::ZoneMgr( Zone& zone)
+: m_zone(zone)
+{
+  this->lookupId();
+}
+
+void
+ZoneMgr::lookupId(const Name& name)
+{
+  this->open();
+  std::string sql = "SELECT id FROM zones WHERE name=\'"+name.toUri()+"\'";
+  //sql = "SELECT * FROM ZONES";
+  std::cout<<"sql="<<sql<<std::endl;
+  //std::cout<<"*this="<<this<<" m_zone.id="<<m_zone.getId()<<" zoneId="<<&m_zone<<std::endl;
+  this->execute(sql, static_callback_setId, this);
+  //std::cout<<"*this="<<this<<" m_zone.id="<<m_zone.getId()<<" zoneId="<<&m_zone<<std::endl;
+  this->close();
+
+}
+int
+ZoneMgr::callback_setId(int argc, char **argv, char **azColName)
+{
+  //Zone zone = this->getZone();
+  this->addResultNum();
+
+  Zone zone = this->m_zone;
+
+  if (argc < 1)
+  {
+    this->setErr("No Zone with Name "+zone.getAuthorizedName().toUri());
+    return -1;
+  }
+  //std::cout<<"id="<<(uint32_t)std::atoi(argv[0])<<" "<<std::endl;
+  int t1 = std::atoi(argv[0]);
+
+
+  m_zone.setId(t1);
+
+  return 0;
+}
+void
+ZoneMgr::lookupId()
+{
+  lookupId(this->m_zone.getAuthorizedName());
+}
+
+
+}//namepsace ndns
+}//namespace ndn
+
+
+
