diff --git a/oracleddlparser/src/main/java/org/eclipse/persistence/tools/oracleddl/metadata/PLSQLCursorType.java b/oracleddlparser/src/main/java/org/eclipse/persistence/tools/oracleddl/metadata/PLSQLCursorType.java
index d4bc4da..ac8d862 100644
--- a/oracleddlparser/src/main/java/org/eclipse/persistence/tools/oracleddl/metadata/PLSQLCursorType.java
+++ b/oracleddlparser/src/main/java/org/eclipse/persistence/tools/oracleddl/metadata/PLSQLCursorType.java
@@ -19,6 +19,7 @@
 
     static final String REF_CURSOR = "REF CURSOR";
     protected String cursorName;
+    protected PLSQLPackageType parentType;
 
     public PLSQLCursorType(String cursorName) {
 		super(null);
@@ -41,7 +42,15 @@
 		return enclosedType == null;
 	}
 
-	public boolean isResolved() {
+    public PLSQLPackageType getParentType() {
+        return parentType;
+    }
+    
+    public void setParentType(PLSQLPackageType parentType) {
+        this.parentType = parentType;
+    }
+    
+    public boolean isResolved() {
         // if the dataType is unresolved, then this PLSQLCursor is a weakly-typed REF CURSOR
 		if (enclosedType == null) {
 			return false;
diff --git a/oracleddlparser/src/main/java/org/eclipse/persistence/tools/oracleddl/parser/DDLParser.java b/oracleddlparser/src/main/java/org/eclipse/persistence/tools/oracleddl/parser/DDLParser.java
index 5f9aa44..feeaa56 100644
--- a/oracleddlparser/src/main/java/org/eclipse/persistence/tools/oracleddl/parser/DDLParser.java
+++ b/oracleddlparser/src/main/java/org/eclipse/persistence/tools/oracleddl/parser/DDLParser.java
@@ -2954,6 +2954,7 @@
     jj_consume_token(K_REF);
     jj_consume_token(R_CURSOR);
         cursorType = new PLSQLCursorType(cursorTypeName);
+        cursorType.setParentType(packageType);
         packageType.addCursor(cursorType);
         localTypes.put(cursorTypeName, cursorType);
     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
@@ -3763,13 +3764,13 @@
     return false;
   }
 
-  private boolean jj_3R_20() {
-    if (jj_scan_token(K_NATURAL)) return true;
+  private boolean jj_3_13() {
+    if (jj_scan_token(K_OUT)) return true;
     return false;
   }
 
-  private boolean jj_3_13() {
-    if (jj_scan_token(K_OUT)) return true;
+  private boolean jj_3R_20() {
+    if (jj_scan_token(K_NATURAL)) return true;
     return false;
   }
 
@@ -3924,14 +3925,14 @@
     return false;
   }
 
-  private boolean jj_3R_72() {
-    if (jj_scan_token(O_OPENPAREN)) return true;
-    if (jj_scan_token(S_NUMBER)) return true;
+  private boolean jj_3R_85() {
+    if (jj_scan_token(S_QUOTED_IDENTIFIER)) return true;
     return false;
   }
 
-  private boolean jj_3R_85() {
-    if (jj_scan_token(S_QUOTED_IDENTIFIER)) return true;
+  private boolean jj_3R_72() {
+    if (jj_scan_token(O_OPENPAREN)) return true;
+    if (jj_scan_token(S_NUMBER)) return true;
     return false;
   }
 
@@ -3989,11 +3990,6 @@
     return false;
   }
 
-  private boolean jj_3R_47() {
-    if (jj_scan_token(K_ROWID)) return true;
-    return false;
-  }
-
   private boolean jj_3_14() {
     if (jj_scan_token(R_IN)) return true;
     Token xsp;
@@ -4002,6 +3998,11 @@
     return false;
   }
 
+  private boolean jj_3R_47() {
+    if (jj_scan_token(K_ROWID)) return true;
+    return false;
+  }
+
   private boolean jj_3R_46() {
     if (jj_scan_token(K_BFILE)) return true;
     return false;
@@ -4027,6 +4028,16 @@
     return false;
   }
 
+  private boolean jj_3R_15() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3_14()) {
+    jj_scanpos = xsp;
+    if (jj_3R_63()) return true;
+    }
+    return false;
+  }
+
   private boolean jj_3R_60() {
     Token xsp;
     xsp = jj_scanpos;
@@ -4040,16 +4051,6 @@
     return false;
   }
 
-  private boolean jj_3R_15() {
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3_14()) {
-    jj_scanpos = xsp;
-    if (jj_3R_63()) return true;
-    }
-    return false;
-  }
-
   private boolean jj_3_5() {
     if (jj_scan_token(R_EXCEPTION)) return true;
     return false;
@@ -4306,14 +4307,14 @@
     return false;
   }
 
-  private boolean jj_3R_65() {
-    if (jj_scan_token(O_OPENPAREN)) return true;
-    if (jj_scan_token(S_NUMBER)) return true;
+  private boolean jj_3_11() {
+    if (jj_3R_15()) return true;
     return false;
   }
 
-  private boolean jj_3_11() {
-    if (jj_3R_15()) return true;
+  private boolean jj_3R_65() {
+    if (jj_scan_token(O_OPENPAREN)) return true;
+    if (jj_scan_token(S_NUMBER)) return true;
     return false;
   }
 
@@ -4626,14 +4627,14 @@
     return false;
   }
 
-  private boolean jj_3R_79() {
-    if (jj_scan_token(O_OPENPAREN)) return true;
-    if (jj_scan_token(S_NUMBER)) return true;
+  private boolean jj_3R_6() {
+    if (jj_scan_token(K_CONSTRUCTOR)) return true;
     return false;
   }
 
-  private boolean jj_3R_6() {
-    if (jj_scan_token(K_CONSTRUCTOR)) return true;
+  private boolean jj_3R_79() {
+    if (jj_scan_token(O_OPENPAREN)) return true;
+    if (jj_scan_token(S_NUMBER)) return true;
     return false;
   }
 
diff --git a/oracleddlparser/src/main/java/org/eclipse/persistence/tools/oracleddl/parser/DDLParser.jj b/oracleddlparser/src/main/java/org/eclipse/persistence/tools/oracleddl/parser/DDLParser.jj
index 32ccede..623f483 100644
--- a/oracleddlparser/src/main/java/org/eclipse/persistence/tools/oracleddl/parser/DDLParser.jj
+++ b/oracleddlparser/src/main/java/org/eclipse/persistence/tools/oracleddl/parser/DDLParser.jj
Binary files differ
diff --git a/oracleddlparser/src/main/java/org/eclipse/persistence/tools/oracleddl/parser/DDLParser.jjt b/oracleddlparser/src/main/java/org/eclipse/persistence/tools/oracleddl/parser/DDLParser.jjt
index 0af6b09..5fa378d 100644
--- a/oracleddlparser/src/main/java/org/eclipse/persistence/tools/oracleddl/parser/DDLParser.jjt
+++ b/oracleddlparser/src/main/java/org/eclipse/persistence/tools/oracleddl/parser/DDLParser.jjt
Binary files differ
diff --git a/oracleddlparser/src/main/java/org/eclipse/persistence/tools/oracleddl/util/DatabaseTypeBuilder.java b/oracleddlparser/src/main/java/org/eclipse/persistence/tools/oracleddl/util/DatabaseTypeBuilder.java
index 94b6381..8938904 100644
--- a/oracleddlparser/src/main/java/org/eclipse/persistence/tools/oracleddl/util/DatabaseTypeBuilder.java
+++ b/oracleddlparser/src/main/java/org/eclipse/persistence/tools/oracleddl/util/DatabaseTypeBuilder.java
@@ -23,6 +23,7 @@
 import java.sql.SQLException;
 import java.util.ArrayList;
 import java.util.Collections;
+import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
@@ -206,21 +207,25 @@
                 TreeSet<String> distinctDDLs = new TreeSet<String>();
                 distinctDDLs.addAll(ddls);
                 packageTypes = new ArrayList<PLSQLPackageType>();
+                Map<PLSQLPackageType, DDLParser> parserMap = new HashMap<PLSQLPackageType, DDLParser>();
                 for (String ddl : distinctDDLs) {
                     DDLParser parser = newDDLParser(ddl, copyOfSchemaPatterns);
                     PLSQLPackageType packageType = parser.parsePLSQLPackage();
                     if (packageType != null) {
                         packageTypes.add(packageType);
-                        if (resolveTypes) {
-                            UnresolvedTypesVisitor unresolvedTypesVisitor = new UnresolvedTypesVisitor();
-                            unresolvedTypesVisitor.visit(packageType);
-                            if (!unresolvedTypesVisitor.getUnresolvedTypes().isEmpty()) {
-                                resolvedTypes(conn, packageType.getSchema(), parser, 
-                                        unresolvedTypesVisitor.getUnresolvedTypes(), packageType, packageTypes);
-                            }
-                        }
+                        parserMap.put(packageType, parser);
                     }
                 }
+                if (!parserMap.isEmpty() && resolveTypes) {
+                	for (PLSQLPackageType packageType : parserMap.keySet()) {
+                		DDLParser parser = parserMap.get(packageType);
+	                    UnresolvedTypesVisitor unresolvedTypesVisitor = new UnresolvedTypesVisitor();
+	                    unresolvedTypesVisitor.visit(packageType);
+	                    if (!unresolvedTypesVisitor.getUnresolvedTypes().isEmpty()) {
+	                        resolvedTypes(conn, packageType.getSchema(), parser, unresolvedTypesVisitor.getUnresolvedTypes(), packageType, packageTypes);
+	                    }
+                	}
+                }
             }
         }
         return packageTypes;
@@ -515,7 +520,6 @@
      */
     protected void resolvedTypes(Connection conn, String schemaPattern, DDLParser parser,
         List<UnresolvedType> unresolvedTypes, DatabaseType databaseType, List<PLSQLPackageType> processedPackages) throws ParseException {
-        
         // need to process non '%' named items 1st such that we can resolve the '%' ones later
         List<String> percentNameList = new ArrayList<String>();
         List<String> nonPercentNameList = new ArrayList<String>();
@@ -658,6 +662,7 @@
                                 for (PLSQLPackageType pkg : processedPackages) {
                                     if (pkg.getPackageName().equals(typeName1)) {
                                         plsqlPkg = pkg;
+                                        break;
                                     }
                                 }
                             }
