diff --git a/asterix-aql/src/main/javacc/AQL.jj b/asterix-aql/src/main/javacc/AQL.jj
index 544e855..1fa40b8 100644
--- a/asterix-aql/src/main/javacc/AQL.jj
+++ b/asterix-aql/src/main/javacc/AQL.jj
@@ -37,6 +37,7 @@
 import edu.uci.ics.asterix.aql.context.RootScopeFactory;
 import edu.uci.ics.asterix.common.annotations.*;
 import edu.uci.ics.asterix.common.exceptions.AsterixException;
+import edu.uci.ics.asterix.om.functions.AsterixFunction;
 
 
 public class AQLParser extends ScopeChecker {
@@ -1027,7 +1028,8 @@
 FunctionDecl FunctionDeclaration() throws ParseException:
 {
   FunctionDecl func = new FunctionDecl();
-  FunIdentifier ident = new FunIdentifier();
+  AsterixFunction ident;
+  String functionName;
   int arity = 0;
   List<VarIdentifier> paramList = new ArrayList<VarIdentifier>();
   Expression funcBody;
@@ -1039,7 +1041,7 @@
     <IDENTIFIER>
 	{
 	  Token t = getToken(0);
-	  ident.setValue(t.toString());
+	  functionName = t.toString();
 	}
     <LEFTPAREN> (<VARIABLE>
     {
@@ -1059,7 +1061,7 @@
     })*)? <RIGHTPAREN> "{" funcBody = Expression() "}"
 
     {
-      ident.setArity(arity);
+      ident = new AsterixFunction(functionName,arity);
       getCurrentScope().addFunctionDescriptor(ident, false);
       func.setIdent(ident);
       func.setFuncBody(funcBody);
@@ -1071,7 +1073,8 @@
 CreateFunctionStatement FunctionCreation() throws ParseException:
 {
   CreateFunctionStatement cfs = null;
-  FunIdentifier ident = new FunIdentifier();
+  AsterixFunction ident;
+  String functionName;
   int arity = 0;
   boolean ifNotExists = false;
   List<VarIdentifier> paramList = new ArrayList<VarIdentifier>();
@@ -1084,7 +1087,7 @@
     <IDENTIFIER>
 	{
 	  Token t = getToken(0);
-	  ident.setValue(t.toString());
+	  functionName= t.toString();
 	}
 	
 	(
@@ -1115,7 +1118,7 @@
           }
           "}"
     {
-      ident.setArity(arity);
+      ident = new AsterixFunction(functionName, arity);
       getCurrentScope().addFunctionDescriptor(ident, false);
       cfs = new CreateFunctionStatement(ident, paramList, funcBody, ifNotExists);
       return cfs;
@@ -1728,10 +1731,10 @@
      } ("," tmp = Expression() { argList.add(tmp); arity++; })*)? <RIGHTPAREN>
 
      {
-       FunIdentifier fd = lookupFunctionSignature(funcName.toString(), arity);
+       AsterixFunction fd = lookupFunctionSignature(funcName.toString(), arity);
 	     if(fd == null)
 	     {
-	        fd = new FunIdentifier(funcName.toString(), arity);
+	        fd = new AsterixFunction(funcName.toString(), arity);
 //	     	notFoundFunctionList.add(fd);
 	     }
 //	     	throw new ParseException("can't find function "+ funcName.toString() + "@" + arity);
