Index: src/examples/wrapper/src/main.c
===================================================================
--- src/examples/wrapper/src/main.c	(revision 19de7b700f6ba72d3f31a10589e5cc57707911ca)
+++ src/examples/wrapper/src/main.c	(revision bf1ee05002b42073ed8a65565fc4529b31d05f79)
@@ -3,5 +3,5 @@
 int main(int argc, char const *argv[])
 {
-	wrapper_t p;
+	wrapper_t p = wrap(6);
 	return 0;
 }
Index: src/examples/wrapper/src/pointer.h
===================================================================
--- src/examples/wrapper/src/pointer.h	(revision 19de7b700f6ba72d3f31a10589e5cc57707911ca)
+++ src/examples/wrapper/src/pointer.h	(revision bf1ee05002b42073ed8a65565fc4529b31d05f79)
@@ -38,10 +38,4 @@
 }
 
-void ?{}(content_t* this)
-{
-	sout | "Constructing content" | endl;
-	this->count = 0;
-}
-
 void ^?{}(content_t* this)
 {
@@ -57,28 +51,25 @@
 };
 
-wrapper_t wrap(int val)
+void ?{}(wrapper_t* this)
 {
-	wrapper_t w;
-	content_t* c = malloc;
-	c{};
-	c->value = val;
-	reset(&w, c);
-	return w;
+	sout | "Constructing empty ref pointer" | endl;
+	this->ptr = NULL;
 }
 
-void ?{}(wrapper_t* this)
+void ?{}(wrapper_t* this, wrapper_t rhs)
 {
-	this->ptr = new();
+	sout | "Constructing ref pointer from copy" | endl;
+	this->ptr = rhs.ptr;
 	this->ptr->count++;
-	sout | "Constructing empty ref pointer" | endl;
 }
 
 void ^?{}(wrapper_t* this)
 {
+	if(this->ptr)
 	{
+		sout | "Destroying ref pointer" | endl;
 		this->ptr->count--;
+		sout | "Reference is " | (int)this->ptr->count | endl;
 		if(!this->ptr->count) delete(this->ptr);
-		sout | "Destroying ref pointer" | endl;
-		sout | "Reference is " | this->ptr->count | endl;
 	}
 	else
@@ -91,5 +82,16 @@
 {
 	this->ptr = c;
+	this->ptr->count++;
 	sout | "Setting ref pointer" | endl;
 	sout | "Reference is " | this->ptr->count | endl;
 }
+
+wrapper_t wrap(int val)
+{
+	wrapper_t w;
+	content_t* c = malloc();
+	c{};
+	c->value = val;
+	set(&w, c);
+	return w;
+}
