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());
 	}
 
Index: source/ariba/overlay/BaseOverlay.cpp
===================================================================
--- source/ariba/overlay/BaseOverlay.cpp	(revision 5618)
+++ source/ariba/overlay/BaseOverlay.cpp	(revision 5624)
@@ -654,5 +654,5 @@
 	// find link descriptor. not found -> return unspecified
 	const LinkDescriptor* ld = getDescriptor(link);
-	if (ld==NULL) return EndpointDescriptor::UNSPECIFIED;
+	if (ld==NULL) return EndpointDescriptor::UNSPECIFIED();
 
 	// return endpoint-descriptor from base communication
@@ -670,5 +670,5 @@
 	if( overlayInterface == NULL ) {
 		logging_error( "overlay interface not set, cannot resolve endpoint" );
-		return EndpointDescriptor::UNSPECIFIED;
+		return EndpointDescriptor::UNSPECIFIED();
 	}
 
Index: source/ariba/overlay/BaseOverlay.h
===================================================================
--- source/ariba/overlay/BaseOverlay.h	(revision 5618)
+++ source/ariba/overlay/BaseOverlay.h	(revision 5624)
@@ -269,5 +269,5 @@
 	 * @param boot A bootstrap node
 	 */
-	void joinSpoVNet(const SpoVNetID& id, const EndpointDescriptor& boot = EndpointDescriptor::UNSPECIFIED);
+	void joinSpoVNet(const SpoVNetID& id, const EndpointDescriptor& boot = EndpointDescriptor::UNSPECIFIED());
 
 	/**
Index: source/ariba/overlay/messages/JoinReply.h
===================================================================
--- source/ariba/overlay/messages/JoinReply.h	(revision 5618)
+++ source/ariba/overlay/messages/JoinReply.h	(revision 5624)
@@ -71,5 +71,5 @@
 		const OverlayParameterSet _param = OverlayParameterSet::DEFAULT,
 		bool _joinAllowed = false,
-		const EndpointDescriptor _bootstrapEp = EndpointDescriptor::UNSPECIFIED
+		const EndpointDescriptor _bootstrapEp = EndpointDescriptor::UNSPECIFIED()
 	);
 
Index: source/ariba/overlay/modules/OverlayInterface.h
===================================================================
--- source/ariba/overlay/modules/OverlayInterface.h	(revision 5618)
+++ source/ariba/overlay/modules/OverlayInterface.h	(revision 5624)
@@ -103,6 +103,5 @@
 	 *    end-point, if this node is the initiator
 	 */
-	virtual void joinOverlay(const EndpointDescriptor& bootstrap =
-		EndpointDescriptor::UNSPECIFIED ) = 0;
+	virtual void joinOverlay(const EndpointDescriptor& bootstrap = EndpointDescriptor::UNSPECIFIED()) = 0;
 
 	/**
Index: source/ariba/overlay/modules/chord/Chord.cpp
===================================================================
--- source/ariba/overlay/modules/chord/Chord.cpp	(revision 5618)
+++ source/ariba/overlay/modules/chord/Chord.cpp	(revision 5624)
@@ -133,5 +133,5 @@
 const EndpointDescriptor& Chord::resolveNode(const NodeID& node) {
 	const route_item* item = table->get(node);
-	if (item == NULL || item->info.isUnspecified()) return EndpointDescriptor::UNSPECIFIED;
+	if (item == NULL || item->info.isUnspecified()) return EndpointDescriptor::UNSPECIFIED();
 	return baseoverlay.getEndpointDescriptor(item->info);
 }
Index: source/ariba/overlay/modules/chord/Chord.h
===================================================================
--- source/ariba/overlay/modules/chord/Chord.h	(revision 5618)
+++ source/ariba/overlay/modules/chord/Chord.h	(revision 5624)
@@ -104,5 +104,5 @@
 	/// @see OverlayInterface.h
 	virtual void joinOverlay(
-		const EndpointDescriptor& boot = EndpointDescriptor::UNSPECIFIED
+		const EndpointDescriptor& boot = EndpointDescriptor::UNSPECIFIED()
 	);
 
Index: source/ariba/overlay/modules/onehop/OneHop.cpp
===================================================================
--- source/ariba/overlay/modules/onehop/OneHop.cpp	(revision 5618)
+++ source/ariba/overlay/modules/onehop/OneHop.cpp	(revision 5624)
@@ -71,5 +71,5 @@
 
 	OverlayNodeMapping::const_iterator i = overlayNodes.find( node );
-	if (i == overlayNodes.end()) return EndpointDescriptor::UNSPECIFIED;
+	if (i == overlayNodes.end()) return EndpointDescriptor::UNSPECIFIED();
 
 	const EndpointDescriptor& ep = baseoverlay.getEndpointDescriptor( i->second );
Index: source/ariba/overlay/modules/onehop/OneHop.h
===================================================================
--- source/ariba/overlay/modules/onehop/OneHop.h	(revision 5618)
+++ source/ariba/overlay/modules/onehop/OneHop.h	(revision 5624)
@@ -72,5 +72,5 @@
 	/// @see OverlayInterface.h
 	virtual void joinOverlay(const EndpointDescriptor& boot =
-			EndpointDescriptor::UNSPECIFIED);
+			EndpointDescriptor::UNSPECIFIED());
 
 	/// @see OverlayInterface.h
