Index: trunk/FACT++/dim/src/dic.c
===================================================================
--- trunk/FACT++/dim/src/dic.c	(revision 14575)
+++ trunk/FACT++/dim/src/dic.c	(revision 14580)
@@ -757,5 +757,5 @@
 				if(servp->fill_size > 0)
 					free( servp->fill_address );
-				fillp = 0;
+				fillp = serv_address;
 				if(serv_size > 0)
 				{
@@ -814,5 +814,5 @@
 	newp->user_routine = routine;
 	newp->tag = tag;
-	fillp = 0;
+	fillp = fill_addr;
 	if(fill_size > 0)
 	{
@@ -885,5 +885,5 @@
 	if(servp->fill_size > 0)
 		free( servp->fill_address );
-	fillp = 0;
+	fillp = fill_addr;
 	if(fill_size > 0)
 	{
Index: trunk/FACT++/dim/src/diccpp.cxx
===================================================================
--- trunk/FACT++/dim/src/diccpp.cxx	(revision 14575)
+++ trunk/FACT++/dim/src/diccpp.cxx	(revision 14580)
@@ -168,4 +168,6 @@
 	itsName = new char[strlen(name)+1];
 	strcpy(itsName,name);
+	itsNolinkBuf = nolink;
+	itsNolinkSize = nolinksize;
 	if(nolinksize > 0)
 	{
@@ -253,4 +255,6 @@
 	itsName = new char[strlen(name)+1];
 	strcpy(itsName,name);
+	itsNolinkBuf = nolink;
+	itsNolinkSize = nolinksize;
 	if(nolinksize > 0)
 	{
@@ -311,4 +315,6 @@
 	itsName = new char[strlen(name)+1];
 	strcpy(itsName,name);
+	itsNolinkBuf = nolink;
+	itsNolinkSize = nolinksize;
 	if(nolinksize > 0)
 	{
@@ -400,4 +406,6 @@
 	itsName = new char[strlen(name)+1];
 	strcpy(itsName,name);
+	itsNolinkBuf = nolink;
+	itsNolinkSize = nolinksize;
 	if(nolinksize > 0)
 	{
@@ -687,7 +695,12 @@
 	itsDataOutSize = 0;
 	itsDataOut = 0;
-	itsNolinkBuf = new char[nolinksize];
+	itsNolinkBuf = nolink;
 	itsNolinkSize = nolinksize;
-	memcpy(itsNolinkBuf, nolink, nolinksize);
+	if(nolinksize > 0)
+	{
+		itsNolinkBuf = new char[nolinksize];
+		itsNolinkSize = nolinksize;
+		memcpy(itsNolinkBuf, nolink, nolinksize);
+	}
 	itsNameOut = new char[strlen(name)+1+10];
 	strcpy(itsNameOut,name);
