diff --git a/modules/base/src/pod_vector.hh b/modules/base/src/pod_vector.hh
index a4da274b7f3d77da393fd803e74242a5986146e5..46b05bef7a01bd9343aed777fe91b8442b606f26 100644
--- a/modules/base/src/pod_vector.hh
+++ b/modules/base/src/pod_vector.hh
@@ -25,10 +25,11 @@
 
 #include <ost/module_config.hh>
 
+#include <cassert>
 #include <memory>
 #include <iterator>
 #include <string>
-
+#include <iostream>
 namespace ost {
 
 /// \brief vector container that treats its data as POD - even if it isn't in 
@@ -37,6 +38,17 @@ template <typename T>
 class TEMPLATE_DEF_EXPORT PodVector {
 public:
   PodVector(): begin_(NULL), end_(NULL), capacity_(NULL) {}
+  PodVector(const PodVector<T>& rhs)
+  {
+    this->do_reserve(rhs.capacity());
+    this->raw_set(rhs.data(), rhs.size());
+  }
+  ~PodVector()
+  {
+    if (begin_) {
+      free(begin_);
+    }
+  }
   typedef T value_type;
   typedef T& reference;
   typedef const T& const_reference;
@@ -75,7 +87,7 @@ public:
   
   void push_back(const_reference val)
   {
-    if (end_<=capacity_) {
+    if (end_>=capacity_) {
       this->do_reserve(this->capacity()*2);
     }
     memcpy(end_, &val, sizeof(value_type));
@@ -87,7 +99,11 @@ public:
     --end_;
   }
   
-  void clear() { return this->do_reserve(0); }
+  void clear()
+  {
+    this->do_reserve(0);
+    end_=begin_;
+  }
   
   void reserve(size_t n)
   {
@@ -102,6 +118,16 @@ public:
   {
     return begin_[index];
   }
+  T* data() { return begin_; }
+
+  const T* data() const { return begin_; }
+
+  void raw_set(T* data, size_t n)
+  {
+    this->do_reserve(n);
+    memcpy(begin_, data, sizeof(T)*n);
+    end_=begin_+n;
+  }
 private:
   void do_reserve(size_t n);
   value_type*    begin_;