diff --git a/src/chatdialog.cpp b/src/chatdialog.cpp
index 9046f2c..10d97f2 100644
--- a/src/chatdialog.cpp
+++ b/src/chatdialog.cpp
@@ -136,7 +136,12 @@
 
   m_keychain = ndn::Ptr<ndn::security::Keychain>(new ndn::security::Keychain(m_identityManager, m_invitationPolicyManager, NULL));
 
-  m_handler = ndn::Ptr<ndn::Wrapper>(new ndn::Wrapper(m_keychain));
+  try{
+    m_handler = ndn::Ptr<ndn::Wrapper>(new ndn::Wrapper(m_keychain));
+  }catch(ndn::Error::ndnOperation& e){
+    emit noNdnConnection(QString::fromStdString("Cannot conect to ndnd!\n Have you started your ndnd?"));
+  }
+
 
   if(trial == true)
     {
diff --git a/src/chatdialog.h b/src/chatdialog.h
index 4e7ab59..2e6ea1c 100644
--- a/src/chatdialog.h
+++ b/src/chatdialog.h
@@ -195,6 +195,9 @@
   void
   closeChatDialog(const ndn::Name& chatroomPrefix);
 
+  void
+  noNdnConnection(const QString& msg);
+
 public slots:
   void 
   processTreeUpdate(const std::vector<Sync::MissingDataInfo>);
diff --git a/src/contact-manager.cpp b/src/contact-manager.cpp
index 371a317..eac5c51 100644
--- a/src/contact-manager.cpp
+++ b/src/contact-manager.cpp
@@ -26,16 +26,13 @@
 
 INIT_LOGGER("ContactManager");
 
-ContactManager::ContactManager(Ptr<ContactStorage> contactStorage,
-                               Ptr<DnsStorage> dnsStorage,
-                               QObject* parent)
+ContactManager::ContactManager(QObject* parent)
   : QObject(parent)
-  , m_contactStorage(contactStorage)
-  , m_dnsStorage(dnsStorage)
 {
-  setKeychain();
+  m_contactStorage = Ptr<ContactStorage>::Create();
+  m_dnsStorage = Ptr<DnsStorage>::Create();
 
-  m_wrapper = Ptr<Wrapper>(new Wrapper(m_keychain));
+  setKeychain();
 }
 
 ContactManager::~ContactManager()
@@ -43,6 +40,16 @@
 }
 
 void
+ContactManager::setWrapper()
+{
+  try{
+    m_wrapper = Ptr<Wrapper>(new Wrapper(m_keychain));
+  }catch(ndn::Error::ndnOperation& e){
+    emit noNdnConnection(QString::fromStdString("Cannot conect to ndnd!\n Have you started your ndnd?"));
+  }
+}
+
+void
 ContactManager::setKeychain()
 {
   Ptr<IdentityManager> identityManager = Ptr<IdentityManager>::Create();
diff --git a/src/contact-manager.h b/src/contact-manager.h
index 26a2a63..6de23d4 100644
--- a/src/contact-manager.h
+++ b/src/contact-manager.h
@@ -27,13 +27,14 @@
   Q_OBJECT
 
 public:
-  ContactManager(ndn::Ptr<ContactStorage> contactStorage,
-                 ndn::Ptr<DnsStorage> dnsStorage,
-                 QObject* parent = 0);
+  ContactManager(QObject* parent = 0);
 
   ~ContactManager();
 
   void
+  setWrapper();
+
+  void
   fetchSelfEndorseCertificate(const ndn::Name& identity);
 
   void
@@ -137,6 +138,9 @@
   
 
 signals:
+  void
+  noNdnConnection(const QString& msg);
+  
   void 
   contactFetched(const EndorseCertificate& endorseCertificate);
   
diff --git a/src/contactpanel.cpp b/src/contactpanel.cpp
index 56db0a7..a63f9f9 100644
--- a/src/contactpanel.cpp
+++ b/src/contactpanel.cpp
@@ -42,9 +42,10 @@
 Q_DECLARE_METATYPE(ndn::security::IdentityCertificate)
 Q_DECLARE_METATYPE(ChronosInvitation)
 
-ContactPanel::ContactPanel(Ptr<ContactManager> contactManager, QWidget *parent) 
+ContactPanel::ContactPanel(QWidget *parent) 
   : QDialog(parent)
   , ui(new Ui::ContactPanel)
+  , m_warningDialog(new WarningDialog)
   , m_contactListModel(new QStringListModel)
   , m_startChatDialog(new StartChatDialog)
   , m_invitationDialog(new InvitationDialog)
@@ -55,8 +56,13 @@
   
   createAction();
 
-  m_contactManager = contactManager;
+  m_contactManager = Ptr<ContactManager>::Create();
 
+  connect(&*m_contactManager, SIGNAL(noNdnConnection(const QString&)),
+          this, SLOT(showError(const QString&)));
+
+  m_contactManager->setWrapper();
+  
   openDB();    
 
   refreshContactList();
@@ -71,13 +77,18 @@
   m_profileEditor = new ProfileEditor(m_contactManager);
   m_profileEditor->setCurrentIdentity(m_defaultIdentity);
 
-  m_addContactPanel = new AddContactPanel(contactManager);
-  m_browseContactDialog = new BrowseContactDialog(contactManager);
-  m_setAliasDialog = new SetAliasDialog(contactManager);
+  m_addContactPanel = new AddContactPanel(m_contactManager);
+  m_browseContactDialog = new BrowseContactDialog(m_contactManager);
+  m_setAliasDialog = new SetAliasDialog(m_contactManager);
  
   ui->setupUi(this);
 
-  m_handler = Ptr<Wrapper>(new Wrapper(m_keychain));  
+  try{
+    m_handler = Ptr<Wrapper>(new Wrapper(m_keychain));  
+  }catch(ndn::Error::ndnOperation& e){
+    showError(QString::fromStdString("Cannot conect to ndnd!\n Have you started your ndnd?"));
+  }
+  
 
   setLocalPrefix();
     
@@ -415,6 +426,12 @@
 }
 
 void
+ContactPanel::showError(const QString& msg){
+  QMessageBox::critical(this, tr("Chronos"), msg, QMessageBox::Ok);
+  exit(1);
+}
+
+void
 ContactPanel::updateSelection(const QItemSelection &selected,
 			      const QItemSelection &deselected)
 {
@@ -621,6 +638,8 @@
 
   connect(chatDialog, SIGNAL(closeChatDialog(const ndn::Name&)),
           this, SLOT(removeChatDialog(const ndn::Name&)));
+  connect(chatDialog, SIGNAL(noNdnConnection(const QString&)),
+          this, SLOT(showError(const QString&)));
 
   // send invitation
   chatDialog->sendInvitation(inviteeItem, isIntroducer); 
@@ -642,6 +661,8 @@
 
   connect(chatDialog, SIGNAL(closeChatDialog(const ndn::Name&)),
           this, SLOT(removeChatDialog(const ndn::Name&)));
+  connect(chatDialog, SIGNAL(noNdnConnection(const QString&)),
+          this, SLOT(showError(const QString&)));
 
   chatDialog->addChatDataRule(invitation.getInviterPrefix(), identityCertificate, true);
   chatDialog->publishIntroCert(identityCertificate, true);
diff --git a/src/contactpanel.h b/src/contactpanel.h
index 55f9daf..92bccf3 100644
--- a/src/contactpanel.h
+++ b/src/contactpanel.h
@@ -15,6 +15,7 @@
 #include <QStringListModel>
 #include <QtSql/QSqlDatabase>
 #include <QMenu>
+#include <QMessageBox>
 
 #include "profileeditor.h"
 #include "addcontactpanel.h"
@@ -25,6 +26,7 @@
 #include "chatdialog.h"
 #include "endorse-combobox-delegate.h"
 #include "browsecontactdialog.h"
+#include "warningDialog.h"
 
 #ifndef Q_MOC_RUN
 #include "contact-manager.h"
@@ -42,8 +44,7 @@
   Q_OBJECT
 
 public:
-  explicit ContactPanel(ndn::Ptr<ContactManager> contactManager, 
-                        QWidget *parent = 0);
+  explicit ContactPanel(QWidget *parent = 0);
 
   ~ContactPanel();
 
@@ -118,6 +119,9 @@
 
 private slots:
   void
+  showError(const QString& msg);
+
+  void
   updateSelection(const QItemSelection &selected,
                   const QItemSelection &deselected);
 
@@ -193,6 +197,7 @@
 
 private:
   Ui::ContactPanel *ui;
+  WarningDialog* m_warningDialog;
   ndn::Ptr<ContactManager> m_contactManager;
   QStringListModel* m_contactListModel;
   ProfileEditor* m_profileEditor;
diff --git a/src/main.cpp b/src/main.cpp
index 0ed7fc2..df4511b 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -16,9 +16,7 @@
 #include "dns-storage.h"
 #include "contact-manager.h"
 #include "logging.h"
-#include <ndn.cxx/security/identity/identity-manager.h>
-#include <ndn.cxx/security/identity/osx-privatekey-storage.h>
-#include <ndn.cxx/security/identity/basic-identity-storage.h>
+#include <ndn.cxx/wrapper/wrapper.h>
 
 INIT_LOGGER("MAIN");
 
@@ -33,15 +31,17 @@
 
   bool notify(QObject * receiver, QEvent * event) 
   {
-    try 
-      {
+    try {
         return QApplication::notify(receiver, event);
-      } 
-    catch(std::exception& e) 
-      {
-        std::cerr << "Exception thrown:" << e.what() << endl;
-        return false;
-      }
+    } 
+    catch(ndn::Error::ndnOperation& e){
+      std::cerr << "Canno connect to ndnd!" << endl;
+      return false;
+    }
+    catch(std::exception& e){
+      std::cerr << "Exception thrown:" << e.what() << endl;
+      return false;
+    }
     
   }
 };
@@ -50,21 +50,7 @@
 {
   NewApp app(argc, argv);
 
-  // app.setWindowIcon(QIcon(":/demo.icns"));
-
-  Ptr<ContactStorage> contactStorage = NULL;
-  Ptr<DnsStorage> dnsStorage = NULL;
-  try{
-    contactStorage = Ptr<ContactStorage>::Create();
-    dnsStorage = Ptr<DnsStorage>::Create();
-  }catch(std::exception& e){
-    std::cerr << e.what() << std::endl;
-    exit(1);
-  }
-
-  Ptr<ContactManager> contactManager = Ptr<ContactManager>(new ContactManager(contactStorage, dnsStorage));
-  
-  ContactPanel contactPanel(contactManager);
+  ContactPanel contactPanel;
 
   contactPanel.show ();
   contactPanel.activateWindow ();
