diff --git a/src/main/java/org/apache/ws/scout/util/ScoutUddiJaxrHelper.java b/src/main/java/org/apache/ws/scout/util/ScoutUddiJaxrHelper.java
index c56cdd6..13e56e3 100644
--- a/src/main/java/org/apache/ws/scout/util/ScoutUddiJaxrHelper.java
+++ b/src/main/java/org/apache/ws/scout/util/ScoutUddiJaxrHelper.java
@@ -117,8 +117,7 @@
 		Organization org = new OrganizationImpl(lifeCycleManager);
 		if ((namesList != null) && (namesList.size() > 0)) {
 			InternationalString is = null;
-			for (int i = 0; i < namesList.size(); i++)  {
-				Name n = namesList.get(i);
+			for (Name n : namesList)  {
 				if (is == null) {
 					is = getIString(n.getLang(), n.getValue(), lifeCycleManager);
 				} else {
@@ -129,8 +128,7 @@
 		}
 		if ((descriptionList != null) && (descriptionList.size() > 0)) {
 			InternationalString is = null;
-			for (int i = 0; i < descriptionList.size(); i++)  {
-				Description desc = descriptionList.get(i);
+			for (Description desc : descriptionList)  {
 				if (is == null) {
 					is = getIString(desc.getLang(), desc.getValue(), lifeCycleManager);
 				} else {
@@ -215,8 +213,7 @@
 		Organization org = new OrganizationImpl(lifeCycleManager);
 		if ((namesList != null) && (namesList.size() > 0)) {
 			InternationalString is = null;
-			for (int i = 0; i < namesList.size(); i++)  {
-				Name n = namesList.get(i);
+			for (Name n : namesList)  {
 				if (is == null) {
 					is = getIString(n.getLang(), n.getValue(), lifeCycleManager);
 				} else {
@@ -227,8 +224,7 @@
 		}
 		if ((descriptionList != null) && (descriptionList.size() > 0)) {
 			InternationalString is = null;
-			for (int i = 0; i < descriptionList.size(); i++)  {
-				Description desc = descriptionList.get(i);
+			for (Description desc : descriptionList)  {
 				if (is == null) {
 					is = getIString(desc.getLang(), desc.getValue(), lifeCycleManager);
 				} else {
@@ -385,8 +381,7 @@
 		List<Description> descriptionList = businessService.getDescription();
 
 		InternationalString is = null;
-		for (int i = 0; i < namesList.size(); i++) {
-			Name n = namesList.get(i);
+		for (Name n : namesList) {
 			if (is == null) {
 				is = lifeCycleManager.createInternationalString(getLocale(n.getLang()), n.getValue());
 			} else {
@@ -396,13 +391,15 @@
 		serve.setName(is);
 		
 		InternationalString dis = null;
+		for (Description desc : descriptionList) {
+            if (dis == null) {
+                dis = lifeCycleManager.createInternationalString(getLocale(desc.getLang()), desc.getValue());
+            } else {
+                dis.setValue(getLocale(desc.getLang()), desc.getValue());
+            }
+        }
 		for (int i = 0; i < namesList.size(); i++) {
-			Description desc = descriptionList.get(i);
-			if (dis == null) {
-				dis = lifeCycleManager.createInternationalString(getLocale(desc.getLang()), desc.getValue());
-			} else {
-				dis.setValue(getLocale(desc.getLang()), desc.getValue());
-			}
+			
 		}
 		serve.setDescription(dis);
 		
@@ -431,8 +428,7 @@
 
 		List<Name> namesList = serviceInfo.getName();
 		InternationalString is = null;
-		for (int i = 0; i < namesList.size(); i++) {
-			Name n = namesList.get(i);
+		for (Name n : namesList) {
 			if (is == null) {
 				is = lifeCycleManager.createInternationalString(getLocale(n.getLang()), n.getValue());
 			} else {
diff --git a/src/main/java/org/apache/ws/scout/util/ScoutUddiV3JaxrHelper.java b/src/main/java/org/apache/ws/scout/util/ScoutUddiV3JaxrHelper.java
index e2ab3e4..1080300 100644
--- a/src/main/java/org/apache/ws/scout/util/ScoutUddiV3JaxrHelper.java
+++ b/src/main/java/org/apache/ws/scout/util/ScoutUddiV3JaxrHelper.java
@@ -89,8 +89,7 @@
 		List<Name> namesList = businessEntity.getName();
 		if ((namesList != null) && (namesList.size() > 0)) {
 			InternationalString is = null;
-			for (int i = 0; i < namesList.size(); i++)  {
-				Name n = namesList.get(i);
+			for (Name n : namesList)  {
 				if (is == null) {
 					is = getIString(n.getLang(), n.getValue(), lifeCycleManager);
 				} else {
@@ -103,8 +102,7 @@
 		List<Description> descriptionList = businessEntity.getDescription();
 		if ((descriptionList != null) && (descriptionList.size() > 0)) {
 			InternationalString is = null;
-			for (int i = 0; i < descriptionList.size(); i++)  {
-				Description desc = descriptionList.get(i);
+			for (Description desc : descriptionList)  {
 				if (is == null) {
 					is = getIString(desc.getLang(), desc.getValue(), lifeCycleManager);
 				} else {
@@ -190,8 +188,7 @@
 		List<Name> namesList = entity.getName();
 		if ((namesList != null) && (namesList.size() > 0)) {
 			InternationalString is = null;
-			for (int i = 0; i < namesList.size(); i++)  {
-				Name n = namesList.get(i);
+			for (Name n : namesList)  {
 				if (is == null) {
 					is = getIString(n.getLang(), n.getValue(), lifeCycleManager);
 				} else {
@@ -204,8 +201,7 @@
 		List<Description> descriptionList = entity.getDescription();
 		if ((descriptionList != null) && (descriptionList.size() > 0)) {
 			InternationalString is = null;
-			for (int i = 0; i < descriptionList.size(); i++)  {
-				Description desc = descriptionList.get(i);
+			for (Description desc : descriptionList)  {
 				if (is == null) {
 					is = getIString(desc.getLang(), desc.getValue(), lifeCycleManager);
 				} else {
@@ -367,8 +363,7 @@
 
 		List<Name> namesList = businessService.getName();
 		InternationalString is = null;
-		for (int i = 0; i < namesList.size(); i++) {
-			Name n = namesList.get(i);
+		for (Name n : namesList) {
 			if (is == null) {
 				is = lifeCycleManager.createInternationalString(getLocale(n.getLang()), n.getValue());
 			} else {
@@ -379,8 +374,7 @@
 		
 		List<Description> descriptionList = businessService.getDescription();
 		InternationalString dis = null;
-		for (int i = 0; i < descriptionList.size(); i++) {
-			Description desc = descriptionList.get(i);
+		for (Description desc : descriptionList) {
 			if (dis == null) {
 				dis = lifeCycleManager.createInternationalString(getLocale(desc.getLang()), desc.getValue());
 			} else {
@@ -416,8 +410,7 @@
 
 		List<Name> namesList = serviceInfo.getName();
 		InternationalString is = null;
-		for (int i = 0; i < namesList.size(); i++) {
-			Name n = namesList.get(i);
+		for (Name n : namesList) {
 			if (is == null) {
 				is = lifeCycleManager.createInternationalString(getLocale(n.getLang()), n.getValue());
 			} else {
