diff --git a/jni/libucommon/sources/inc/commoncpp/pointer.h b/jni/libucommon/sources/inc/commoncpp/pointer.h
new file mode 100644
index 0000000..7eb5db4
--- /dev/null
+++ b/jni/libucommon/sources/inc/commoncpp/pointer.h
@@ -0,0 +1,135 @@
+// Copyright (C) 2001-2005 Open Source Telecom Corporation.
+// Copyright (C) 2006-2010 David Sugar, Tycho Softworks.
+//
+// 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.
+//
+// As a special exception to the GNU General Public License, permission is
+// granted for additional uses of the text contained in its release
+// of Common C++.
+//
+// The exception is that, if you link the Common C++ library with other
+// files to produce an executable, this does not by itself cause the
+// resulting executable to be covered by the GNU General Public License.
+// Your use of that executable is in no way restricted on account of
+// linking the Common C++ library code into it.
+//
+// This exception does not however invalidate any other reasons why
+// the executable file might be covered by the GNU General Public License.
+//
+// This exception applies only to the code released under the
+// name Common C++.  If you copy code from other releases into a copy of
+// Common C++, as the General Public License permits, the exception does
+// not apply to the code that you add in this way.  To avoid misleading
+// anyone as to the status of such modified files, you must delete
+// this exception notice from them.
+//
+// If you write modifications of your own for Common C++, it is your choice
+// whether to permit this exception to apply to your modifications.
+// If you do not wish that, delete this exception notice.
+
+/**
+ * @file commoncpp/pointer.h
+ * @short Template for creating reference count managed smart pointers.
+ **/
+
+#ifndef COMMONCPP_POINTER_H_
+#define COMMONCPP_POINTER_H_
+
+#ifndef COMMONCPP_CONFIG_H_
+#include <commoncpp/config.h>
+#endif
+
+NAMESPACE_COMMONCPP
+
+/**
+ * Used to create and manage referece counted pointers.
+ *
+ * @author David Sugar <dyfet@gnutelephony.org>
+ * @short reference counted pointer template.
+ */
+template <class T>
+class Pointer
+{
+protected:
+    unsigned *ptrCount;
+    T *ptrObject;
+
+    void ptrDetach(void)
+    {
+        if(ptrCount && --(*ptrCount)==0) {
+            delete ptrObject;
+            delete ptrCount;
+        }
+        ptrObject = NULL;
+        ptrCount = NULL;
+    }
+
+public:
+    explicit Pointer(T* ptr = NULL) : ptrObject(ptr)
+    {
+        ptrCount = new unsigned;
+        *ptrCount = 1;
+    }
+
+    Pointer(const Pointer<T> &ref)
+    {
+        ptrObject = ref.ptrObject;
+        ptrCount = ref.ptrCount;
+        ++(*ptrCount);
+    }
+
+    inline virtual ~Pointer()
+        {ptrDetach();}
+
+
+    Pointer& operator=(const Pointer<T> &ref)
+    {
+        if(this != &ref) {
+            ptrDetach();
+            ptrObject = ref.ptrObject;
+            ptrCount = ref.ptrCount;
+            ++(*ptrCount);
+        }
+        return *this;
+    }
+
+    inline T& operator*() const
+        {return *ptrObject;};
+
+    inline T* getObject() const
+        {return ptrObject;};
+
+    inline T* operator->() const
+        {return ptrObject;};
+
+    inline bool operator!() const
+        {return (*ptrCount == 1);};
+
+    inline int operator++() const
+        {return ++(*ptrCount);};
+
+    int operator--() const
+    {
+        if(*ptrCount == 1) {
+            delete this;
+            return 0;
+        }
+        return --(*ptrCount);
+    }
+};
+
+END_NAMESPACE
+
+#endif
