// Now get the pointer value from the string and save in dest
 
-  f << tab4 << "if (" << src << ") {\n"
-    << tab8 << "if (" << src << " == Py_None) { " << dest << " = NULL; }\n"
-    << tab8 << "else if (SWIG_GetPtrObj(" << src << ",(void **) &" << dest << ",";
+    if (t->is_reference)
+        f << tab4 << "if (" << src << ") {\n"
+          << tab8 << "if (SWIG_GetPtrObj(" << src << ",(void **) &" << dest << ",";
+    else
+        f << tab4 << "if (" << src << ") {\n"
+          << tab8 << "if (" << src << " == Py_None) { " << dest << " = NULL; }\n"
+          << tab8 << "else if (SWIG_GetPtrObj(" << src << ",(void **) &" << dest << ",";
 
   // If we're passing a void pointer, we give the pointer conversion a NULL
   // pointer, otherwise pass in the expected type.