Index: src/examples/wrapper/src/main.c
===================================================================
--- src/examples/wrapper/src/main.c	(revision bf1ee05002b42073ed8a65565fc4529b31d05f79)
+++ src/examples/wrapper/src/main.c	(revision 21995bcc5c902a2a43cb6fedb971d92bed446a37)
@@ -1,7 +1,25 @@
 #include "pointer.h"
+
+wrapper_t make_copy(wrapper_t copy)
+{
+	return copy;
+}
 
 int main(int argc, char const *argv[])
 {
 	wrapper_t p = wrap(6);
+
+	sout | endl | "test started" | endl;
+
+	wrapper_t p2 = p;
+
+	clear(&p);
+
+	p = p2;
+
+	wrapper_t p3 = make_copy(p2);
+
+	sout | endl | "test ended" | endl;
+
 	return 0;
 }
Index: src/examples/wrapper/src/pointer.h
===================================================================
--- src/examples/wrapper/src/pointer.h	(revision bf1ee05002b42073ed8a65565fc4529b31d05f79)
+++ src/examples/wrapper/src/pointer.h	(revision 21995bcc5c902a2a43cb6fedb971d92bed446a37)
@@ -53,5 +53,5 @@
 void ?{}(wrapper_t* this)
 {
-	sout | "Constructing empty ref pointer" | endl;
+	sout | "Constructing empty ref pointer" | endl | endl;
 	this->ptr = NULL;
 }
@@ -62,4 +62,5 @@
 	this->ptr = rhs.ptr;
 	this->ptr->count++;
+	sout | "Reference is " | this->ptr->count | endl | endl;
 }
 
@@ -70,11 +71,25 @@
 		sout | "Destroying ref pointer" | endl;
 		this->ptr->count--;
-		sout | "Reference is " | (int)this->ptr->count | endl;
+		sout | "Reference is " | this->ptr->count | endl | endl;
 		if(!this->ptr->count) delete(this->ptr);
 	}
 	else
 	{
-		sout | "Destroying empty ref pointer" | endl;
+		sout | "Destroying empty ref pointer" | endl | endl;
 	}
+}
+
+wrapper_t ?=?(wrapper_t* this, wrapper_t rhs)
+{
+	sout | "Setting ref pointer" | endl;
+	if(this->ptr)
+	{
+		this->ptr->count--;
+		sout | "Reference is " | this->ptr->count | endl | endl;
+		if(!this->ptr->count) delete(this->ptr);
+	}
+	this->ptr = rhs.ptr;
+	this->ptr->count++;
+	sout | "Reference is " | this->ptr->count | endl | endl;
 }
 
@@ -84,6 +99,16 @@
 	this->ptr->count++;
 	sout | "Setting ref pointer" | endl;
-	sout | "Reference is " | this->ptr->count | endl;
+	sout | "Reference is " | this->ptr->count | endl | endl;
 }
+
+void clear(wrapper_t* this)
+{
+	sout | "Clearing ref pointer" | endl;
+	this->ptr->count--;
+	sout | "Reference is " | this->ptr->count | endl | endl;
+	if(!this->ptr->count) delete(this->ptr);
+	this->ptr = NULL;
+}
+
 
 wrapper_t wrap(int val)
