@Override
	public String toString() {
		
		StringBuilder stringBuilder = new StringBuilder("InterservicePolicy {\n");
		
		if(remotePublicKeys == null) {
			stringBuilder.append("\tnot restricting remote public keys\n");
		} else {
			stringBuilder.append("\trestricting remote public keys, allowed:\n");
			for(Key remotePublicKey : remotePublicKeys) {
				stringBuilder.append("\t\t");
				stringBuilder.append(remotePublicKey.toString());
				stringBuilder.append("\n");
			}
		}
		
		if(networkTypes == null) {
			stringBuilder.append("\tnot restricting network types\n");
		} else {
			stringBuilder.append("\trestricting network types, allowed:\n");
			for(NetworkType networkType : networkTypes) {
				stringBuilder.append("\t\t");
				stringBuilder.append(networkType.toString());
				stringBuilder.append("\n");
			}
		}
		
		if(allowedIncomingApplicationChannels == null) {
			stringBuilder.append("\tnot permitting any incoming application channel requests\n");
		} else {
			stringBuilder.append("\tpermitting incoming requests for application channels:\n");
			for(ApplicationChannel applicationChannel : allowedIncomingApplicationChannels.values()) {
				stringBuilder.append("\t\t");
				stringBuilder.append(applicationChannel.toString());
				stringBuilder.append("\n");
			}
		}
		
		if(requestApplicationChannelsLocal == null) {
			stringBuilder.append("\tnot requesting any application channels\n");
		} else {
			stringBuilder.append("\trequesting application channels:\n");
			for(Map.Entry<Address, List<ApplicationChannel>> entry : requestApplicationChannelsLocal.entrySet()) {
				stringBuilder.append("\t\t");
				stringBuilder.append(entry.getValue().size());
				stringBuilder.append(" from ");
				stringBuilder.append(entry.getKey().toString());
				stringBuilder.append(":\n");
				for(ApplicationChannel applicationChannel : entry.getValue()) {
					stringBuilder.append("\t\t\t");
					stringBuilder.append(applicationChannel.toString());
					stringBuilder.append("\n");
				}
			}
		}
		
		stringBuilder.append("}");
		return stringBuilder.toString();
		
	}