Index: source/ariba/communication/BaseCommunication.cpp
===================================================================
--- source/ariba/communication/BaseCommunication.cpp	(revision 5618)
+++ source/ariba/communication/BaseCommunication.cpp	(revision 5624)
@@ -244,5 +244,5 @@
 	} else {
 		LinkDescriptor& linkDesc = queryLocalLink(link);
-		if (linkDesc.isUnspecified()) return EndpointDescriptor::UNSPECIFIED;
+		if (linkDesc.isUnspecified()) return EndpointDescriptor::UNSPECIFIED();
 		return linkDesc.remoteEndpoint;
 	}
@@ -534,7 +534,5 @@
 		if (linkSet[i]->localLink == link) return (LinkDescriptor&)*linkSet[i];
 
-	LinkDescriptor ret;
-	ret.unspecified = true;
-	return ret;
+	return LinkDescriptor::UNSPECIFIED();
 }
 
@@ -544,7 +542,5 @@
 		if (linkSet[i]->remoteLink == link) return (LinkDescriptor&)*linkSet[i];
 
-	LinkDescriptor ret;
-	ret.unspecified = true;
-	return ret;
+	return LinkDescriptor::UNSPECIFIED();
 }
 
Index: source/ariba/communication/BaseCommunication.h
===================================================================
--- source/ariba/communication/BaseCommunication.h	(revision 5618)
+++ source/ariba/communication/BaseCommunication.h	(revision 5624)
@@ -234,5 +234,5 @@
 			localLink(LinkID::UNSPECIFIED), localLocator(NULL),
 			remoteLink(LinkID::UNSPECIFIED), remoteLocator(NULL),
-			remoteEndpoint(EndpointDescriptor::UNSPECIFIED), up(false), unspecified(false) {
+			up(false) {
 		}
 
@@ -243,5 +243,11 @@
 
 		bool isUnspecified() const {
-			return unspecified;
+			return (this == &UNSPECIFIED());
+		}
+
+		static LinkDescriptor& UNSPECIFIED(){
+			static LinkDescriptor* unspec = NULL;
+			if(unspec == NULL) unspec = new LinkDescriptor();
+			return *unspec;
 		}
 
Index: source/ariba/communication/EndpointDescriptor.cpp
===================================================================
--- source/ariba/communication/EndpointDescriptor.cpp	(revision 5618)
+++ source/ariba/communication/EndpointDescriptor.cpp	(revision 5624)
@@ -42,23 +42,22 @@
 namespace communication {
 
-const EndpointDescriptor EndpointDescriptor::UNSPECIFIED;
 vsznDefault(EndpointDescriptor);
 
-EndpointDescriptor::EndpointDescriptor() {
+EndpointDescriptor::EndpointDescriptor(){
 }
 
-EndpointDescriptor::~EndpointDescriptor() {
+EndpointDescriptor::~EndpointDescriptor(){
 
 }
 
 EndpointDescriptor::EndpointDescriptor(const EndpointDescriptor& rh) :
-	endpoints(rh.endpoints) {
+	endpoints(rh.endpoints){
 }
 
 EndpointDescriptor::EndpointDescriptor(const endpoint_set& endpoints ) :
-	endpoints(endpoints) {
+	endpoints(endpoints){
 }
 
-EndpointDescriptor::EndpointDescriptor(const string& str) : endpoints(str) {
+EndpointDescriptor::EndpointDescriptor(const string& str) : endpoints(str){
 }
 
Index: source/ariba/communication/EndpointDescriptor.h
===================================================================
--- source/ariba/communication/EndpointDescriptor.h	(revision 5618)
+++ source/ariba/communication/EndpointDescriptor.h	(revision 5624)
@@ -56,7 +56,4 @@
 
 public:
-	/// the unspecified endpoint descriptor
-	static const EndpointDescriptor UNSPECIFIED;
-
 	/// creates an empty endpoint descriptor with zero endpoints
 	EndpointDescriptor();
@@ -79,7 +76,14 @@
 	}
 
+	static EndpointDescriptor& UNSPECIFIED() {
+		static EndpointDescriptor* unspec = NULL;
+		if(unspec == NULL) unspec = new EndpointDescriptor();
+
+		return *unspec;
+	}
+
 	/// returns true, if this object is the unspecified object
 	bool isUnspecified() const {
-		return this == &UNSPECIFIED;
+		return (this == &UNSPECIFIED());
 	}
 
