diff --git a/Transceiver52M/arch/common/convolve.h b/Transceiver52M/arch/common/convolve.h
index 43db577..095b04c 100644
--- a/Transceiver52M/arch/common/convolve.h
+++ b/Transceiver52M/arch/common/convolve.h
@@ -1,7 +1,7 @@
 #ifndef _CONVOLVE_H_
 #define _CONVOLVE_H_
 
-void *convolve_h_alloc(int num);
+void *convolve_h_alloc(size_t num);
 
 int convolve_real(const float *x, int x_len,
 		  const float *h, int h_len,
diff --git a/Transceiver52M/arch/common/convolve_base.c b/Transceiver52M/arch/common/convolve_base.c
index 71453a1..2eb7124 100644
--- a/Transceiver52M/arch/common/convolve_base.c
+++ b/Transceiver52M/arch/common/convolve_base.c
@@ -146,7 +146,7 @@
 }
 
 /* Aligned filter tap allocation */
-void *convolve_h_alloc(int len)
+void *convolve_h_alloc(size_t len)
 {
 #ifdef HAVE_SSE3
 	return memalign(16, len * 2 * sizeof(float));
diff --git a/Transceiver52M/sigProcLib.cpp b/Transceiver52M/sigProcLib.cpp
index 28c4ded..f720828 100644
--- a/Transceiver52M/sigProcLib.cpp
+++ b/Transceiver52M/sigProcLib.cpp
@@ -84,14 +84,13 @@
  * perform 16-byte memory alignment required by many SSE instructions.
  */
 struct CorrelationSequence {
-  CorrelationSequence() : sequence(NULL), buffer(NULL)
+  CorrelationSequence() : sequence(NULL)
   {
   }
 
   ~CorrelationSequence()
   {
     delete sequence;
-    free(buffer);
   }
 
   signalVector *sequence;
@@ -106,8 +105,7 @@
  * for SSE instructions.
  */
 struct PulseSequence {
-  PulseSequence() : c0(NULL), c1(NULL), c0_inv(NULL), empty(NULL),
-		    c0_buffer(NULL), c1_buffer(NULL), c0_inv_buffer(NULL)
+  PulseSequence() : c0(NULL), c1(NULL), c0_inv(NULL), empty(NULL)
   {
   }
 
@@ -117,17 +115,12 @@
     delete c1;
     delete c0_inv;
     delete empty;
-    free(c0_buffer);
-    free(c1_buffer);
   }
 
   signalVector *c0;
   signalVector *c1;
   signalVector *c0_inv;
   signalVector *empty;
-  void *c0_buffer;
-  void *c1_buffer;
-  void *c0_inv_buffer;
 };
 
 static CorrelationSequence *gMidambles[] = {NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL};
@@ -340,7 +333,7 @@
   if (y && (len > y->size()))
     return NULL;
   if (!y) {
-    y = new signalVector(len);
+    y = new signalVector(len, convolve_h_alloc, free);
     alloc = true;
   }
 
@@ -403,8 +396,7 @@
   if (!pulse)
     return false;
 
-  pulse->c0_inv_buffer = convolve_h_alloc(5);
-  pulse->c0_inv = new signalVector((complex *) pulse->c0_inv_buffer, 0, 5);
+  pulse->c0_inv = new signalVector((complex *) convolve_h_alloc(5), 0, 5, convolve_h_alloc, free);
   pulse->c0_inv->isReal(true);
   pulse->c0_inv->setAligned(false);
 
@@ -433,9 +425,7 @@
     return false;
   }
 
-  pulse->c1_buffer = convolve_h_alloc(len);
-  pulse->c1 = new signalVector((complex *)
-                                  pulse->c1_buffer, 0, len);
+  pulse->c1 = new signalVector((complex *) convolve_h_alloc(len), 0, len, convolve_h_alloc, free);
   pulse->c1->isReal(true);
 
   /* Enable alignment for SSE usage */
@@ -489,8 +479,7 @@
     len = 4;
   }
 
-  pulse->c0_buffer = convolve_h_alloc(len);
-  pulse->c0 = new signalVector((complex *) pulse->c0_buffer, 0, len);
+  pulse->c0 = new signalVector((complex *) convolve_h_alloc(len), 0, len, convolve_h_alloc, free);
   pulse->c0->isReal(true);
 
   /* Enable alingnment for SSE usage */
@@ -1019,7 +1008,7 @@
 
   for (int i = 0; i < DELAYFILTS; i++) {
     data = (complex *) convolve_h_alloc(h_len);
-    h = new signalVector(data, 0, h_len);
+    h = new signalVector(data, 0, h_len, convolve_h_alloc, free);
     h->setAligned(true);
     h->isReal(true);
 
@@ -1263,7 +1252,7 @@
 
   /* For SSE alignment, reallocate the midamble sequence on 16-byte boundary */
   data = (complex *) convolve_h_alloc(midMidamble->size());
-  _midMidamble = new signalVector(data, 0, midMidamble->size());
+  _midMidamble = new signalVector(data, 0, midMidamble->size(), convolve_h_alloc, free);
   _midMidamble->setAligned(true);
   midMidamble->copyTo(*_midMidamble);
 
@@ -1274,7 +1263,6 @@
   }
 
   gMidambles[tsc] = new CorrelationSequence;
-  gMidambles[tsc]->buffer = data;
   gMidambles[tsc]->sequence = _midMidamble;
   gMidambles[tsc]->gain = peakDetect(*autocorr, &toa, NULL);
 
@@ -1319,13 +1307,12 @@
   conjugateVector(*midamble);
 
   data = (complex *) convolve_h_alloc(midamble->size());
-  _midamble = new signalVector(data, 0, midamble->size());
+  _midamble = new signalVector(data, 0, midamble->size(), convolve_h_alloc, free);
   _midamble->setAligned(true);
   midamble->copyTo(*_midamble);
 
   /* Channel gain is an empirically measured value */
   seq = new CorrelationSequence;
-  seq->buffer = data;
   seq->sequence = _midamble;
   seq->gain = Complex<float>(-19.6432, 19.5006) / 1.18;
   seq->toa = 0;
@@ -1360,7 +1347,7 @@
 
   /* For SSE alignment, reallocate the midamble sequence on 16-byte boundary */
   data = (complex *) convolve_h_alloc(seq1->size());
-  _seq1 = new signalVector(data, 0, seq1->size());
+  _seq1 = new signalVector(data, 0, seq1->size(), convolve_h_alloc, free);
   _seq1->setAligned(true);
   seq1->copyTo(*_seq1);
 
@@ -1372,7 +1359,6 @@
 
   *seq = new CorrelationSequence;
   (*seq)->sequence = _seq1;
-  (*seq)->buffer = data;
   (*seq)->gain = peakDetect(*autocorr, &toa, NULL);
 
   /* For 1 sps only
diff --git a/Transceiver52M/signalVector.cpp b/Transceiver52M/signalVector.cpp
index fc8157e..710eda5 100644
--- a/Transceiver52M/signalVector.cpp
+++ b/Transceiver52M/signalVector.cpp
@@ -1,20 +1,20 @@
 #include "signalVector.h"
 
-signalVector::signalVector(size_t size)
-	: Vector<complex>(size),
+signalVector::signalVector(size_t size, vector_alloc_func wAllocFunc, vector_free_func wFreeFunc)
+	: Vector<complex>(size, wAllocFunc, wFreeFunc),
 	  real(false), aligned(false), symmetry(NONE)
 {
 }
 
-signalVector::signalVector(size_t size, size_t start)
-	: Vector<complex>(size + start),
+signalVector::signalVector(size_t size, size_t start, vector_alloc_func wAllocFunc, vector_free_func wFreeFunc)
+	: Vector<complex>(size + start, wAllocFunc, wFreeFunc),
 	  real(false), aligned(false), symmetry(NONE)
 {
 	mStart = mData + start;
 }
 
-signalVector::signalVector(complex *data, size_t start, size_t span)
-	: Vector<complex>(NULL, data + start, data + start + span),
+signalVector::signalVector(complex *data, size_t start, size_t span, vector_alloc_func wAllocFunc, vector_free_func wFreeFunc)
+	: Vector<complex>(data, data + start, data + start + span, wAllocFunc, wFreeFunc),
 	  real(false), aligned(false), symmetry(NONE)
 {
 }
diff --git a/Transceiver52M/signalVector.h b/Transceiver52M/signalVector.h
index 83f141e..d9486af 100644
--- a/Transceiver52M/signalVector.h
+++ b/Transceiver52M/signalVector.h
@@ -13,13 +13,13 @@
 class signalVector: public Vector<complex> {
 public:
 	/** Default constructor */
-	signalVector(size_t size = 0);
+	signalVector(size_t size = 0, vector_alloc_func wAllocFunc = NULL, vector_free_func wFreeFunc = NULL);
 
 	/** Construct with head room */
-	signalVector(size_t size, size_t start);
+	signalVector(size_t size, size_t start, vector_alloc_func wAllocFunc = NULL, vector_free_func wFreeFunc = NULL);
 
 	/** Construct from existing buffer data (buffer not managed) */
-	signalVector(complex *data, size_t start, size_t span);
+	signalVector(complex *data, size_t start, size_t span, vector_alloc_func wAllocFunc = NULL, vector_free_func wFreeFunc = NULL);
 
 	/** Construct by from existing vector */
 	signalVector(const signalVector &vector);
