diff --git a/jni/pjproject-android/pjsip/include/pjsua2/json.hpp b/jni/pjproject-android/pjsip/include/pjsua2/json.hpp
new file mode 100644
index 0000000..987fb87
--- /dev/null
+++ b/jni/pjproject-android/pjsip/include/pjsua2/json.hpp
@@ -0,0 +1,116 @@
+/* $Id: json.hpp 4704 2014-01-16 05:30:46Z ming $ */
+/*
+ * Copyright (C) 2013 Teluu Inc. (http://www.teluu.com)
+ *
+ * This program 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 2 of the License, or
+ * (at your option) any later version.
+ *
+ * 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
+ */
+#ifndef __PJSUA2_JSON_HPP__
+#define __PJSUA2_JSON_HPP__
+
+/**
+ * @file pjsua2/persistent.hpp
+ * @brief PJSUA2 Persistent Services
+ */
+#include <pjsua2/persistent.hpp>
+#include <pjlib-util/json.h>
+#include <pj/pool.h>
+#include <string>
+
+/** PJSUA2 API is inside pj namespace */
+namespace pj
+{
+
+/**
+ * @defgroup PJSUA2_JSON JSON Persistent Support
+ * @ingroup PJSUA2_PERSISTENT
+ * @{
+ * Provides object serialization and deserialization to/from JSON document.
+ */
+
+using std::string;
+
+/**
+ * Persistent document (file) with JSON format.
+ */
+class JsonDocument : public PersistentDocument
+{
+public:
+    /** Default constructor */
+    JsonDocument();
+
+    /** Destructor */
+    ~JsonDocument();
+
+    /**
+     * Load this document from a file.
+     *
+     * @param filename		The file name.
+     */
+    virtual void   loadFile(const string &filename) throw(Error);
+
+    /**
+     * Load this document from string.
+     *
+     * @param input		The string.
+     */
+    virtual void   loadString(const string &input) throw(Error);
+
+    /**
+     * Write this document to a file.
+     *
+     * @param filename		The file name.
+     */
+    virtual void   saveFile(const string &filename) throw(Error);
+
+    /**
+     * Write this document to string.
+     */
+    virtual string saveString() throw(Error);
+
+    /**
+     * Get the root container node for this document
+     */
+    virtual ContainerNode & getRootContainer() const;
+
+    /**
+     * An internal function to create JSON element.
+     */
+    pj_json_elem*    allocElement() const;
+
+    /**
+     * An internal function to get the pool.
+     */
+    pj_pool_t*	     getPool();
+
+private:
+    pj_caching_pool	  cp;
+    mutable ContainerNode rootNode;
+    mutable pj_json_elem *root;
+    mutable pj_pool_t	 *pool;
+
+    void initRoot() const;
+};
+
+
+
+
+/**
+ * @}  PJSUA2
+ */
+
+} // namespace pj
+
+
+#endif	/* __PJSUA2_JSON_HPP__ */
