diff --git a/asterix-bad/src/main/java/org/apache/asterix/bad/lang/statement/CreateProcedureStatement.java b/asterix-bad/src/main/java/org/apache/asterix/bad/lang/statement/CreateProcedureStatement.java
index eb56e35..3d7d7de 100644
--- a/asterix-bad/src/main/java/org/apache/asterix/bad/lang/statement/CreateProcedureStatement.java
+++ b/asterix-bad/src/main/java/org/apache/asterix/bad/lang/statement/CreateProcedureStatement.java
@@ -192,16 +192,12 @@
         } else if (getProcedureBodyStatement().getKind() == Statement.Kind.QUERY) {
             //TODO: Fix type dependency computation
             SqlppRewriterFactory fact = new SqlppRewriterFactory(new SqlppParserFactory());
-            dependencies.get(1)
-                    .addAll(FunctionUtil.getFunctionDependencies(fact.createQueryRewriter(),
-                            ((Query) getProcedureBodyStatement()).getBody(), metadataProvider, new ArrayList<>())
-                            .get(1));
+            dependencies.get(1).addAll(FunctionUtil.getFunctionDependencies(fact.createQueryRewriter(),
+                    ((Query) getProcedureBodyStatement()).getBody(), metadataProvider).get(1));
             Pair<JobSpecification, PrecompiledType> pair = new Pair<>(BADJobService.compileQueryJob(statementExecutor,
                     metadataProvider, hcc, (Query) getProcedureBodyStatement()), PrecompiledType.QUERY);
-            dependencies.get(0)
-                    .addAll(FunctionUtil.getFunctionDependencies(fact.createQueryRewriter(),
-                            ((Query) getProcedureBodyStatement()).getBody(), metadataProvider, new ArrayList<>())
-                            .get(0));
+            dependencies.get(0).addAll(FunctionUtil.getFunctionDependencies(fact.createQueryRewriter(),
+                    ((Query) getProcedureBodyStatement()).getBody(), metadataProvider).get(0));
             return pair;
         } else if (getProcedureBodyStatement().getKind() == Statement.Kind.DELETE) {
             getProcedureBodyStatement().accept(SqlppDeleteRewriteVisitor.INSTANCE, metadataProvider);
@@ -209,7 +205,7 @@
 
             SqlppRewriterFactory fact = new SqlppRewriterFactory(new SqlppParserFactory());
             dependencies = FunctionUtil.getFunctionDependencies(fact.createQueryRewriter(), delete.getQuery().getBody(),
-                    metadataProvider, new ArrayList<>());
+                    metadataProvider);
             Pair<JobSpecification, PrecompiledType> pair =
                     new Pair<>(((QueryTranslator) statementExecutor).handleDeleteStatement(metadataProvider,
                             getProcedureBodyStatement(), hcc, true, null, null), PrecompiledType.DELETE);
diff --git a/asterix-bad/src/main/java/org/apache/asterix/bad/rules/RewriteChannelTimeFunctionToLocalVarRule.java b/asterix-bad/src/main/java/org/apache/asterix/bad/rules/RewriteChannelTimeFunctionToLocalVarRule.java
index ec922e7..56f5e39 100644
--- a/asterix-bad/src/main/java/org/apache/asterix/bad/rules/RewriteChannelTimeFunctionToLocalVarRule.java
+++ b/asterix-bad/src/main/java/org/apache/asterix/bad/rules/RewriteChannelTimeFunctionToLocalVarRule.java
@@ -138,7 +138,7 @@
             if (needPrevDsSet.contains(dsVar) || needActiveDsSet.contains(dsVar)) {
                 LogicalVariable channelTimeVar = context.newVar();
                 ILogicalExpression previousChannelTimeExpr = new ScalarFunctionCallExpression(
-                        BuiltinFunctions.getAsterixFunctionInfo(BADFunctions.PREVIOUS_CHANNEL_TIME),
+                        BuiltinFunctions.getBuiltinFunctionInfo(BADFunctions.PREVIOUS_CHANNEL_TIME),
                         new MutableObject<>(
                                 new ConstantExpression(new AsterixConstantValue(new AString(channelName)))));
                 AssignOperator assignOp =
@@ -151,7 +151,7 @@
             if (needCurrDsSet.contains(dsVar) || needActiveDsSet.contains(dsVar)) {
                 LogicalVariable channelTimeVar = context.newVar();
                 ILogicalExpression previousChannelTimeExpr = new ScalarFunctionCallExpression(
-                        BuiltinFunctions.getAsterixFunctionInfo(BADFunctions.CURRENT_CHANNEL_TIME), new MutableObject<>(
+                        BuiltinFunctions.getBuiltinFunctionInfo(BADFunctions.CURRENT_CHANNEL_TIME), new MutableObject<>(
                                 new ConstantExpression(new AsterixConstantValue(new AString(channelName)))));
                 AssignOperator assignOp =
                         new AssignOperator(channelTimeVar, new MutableObject<>(previousChannelTimeExpr));
diff --git a/asterix-bad/src/main/resources/lang-extension/lang.txt b/asterix-bad/src/main/resources/lang-extension/lang.txt
index 8b8c507..49f0cb4 100644
--- a/asterix-bad/src/main/resources/lang-extension/lang.txt
+++ b/asterix-bad/src/main/resources/lang-extension/lang.txt
@@ -255,7 +255,7 @@
       removeCurrentScope();
       defaultDataverse = currentDataverse;
       ensureNoTypeDeclsInFunction(fctName.function, params, returnType, startStmtToken);
-      CreateFunctionStatement stmt = new CreateFunctionStatement(signature, params, functionBody, functionBodyExpr, false);
+      CreateFunctionStatement stmt = new CreateFunctionStatement(signature, params, functionBody, functionBodyExpr, true, false);
       ccs =  new CreateContinuousChannelStatement(fctName.dataverse, new Identifier(fctName.function), period, push, stmt);
       return addSourceLocation(ccs, startStmtToken);
     }
diff --git a/asterix-bad/src/test/resources/runtimets/testsuite_bad.xml b/asterix-bad/src/test/resources/runtimets/testsuite_bad.xml
index 5f130e9..51f1cda 100644
--- a/asterix-bad/src/test/resources/runtimets/testsuite_bad.xml
+++ b/asterix-bad/src/test/resources/runtimets/testsuite_bad.xml
@@ -77,7 +77,7 @@
     <test-case FilePath="procedure">
       <compilation-unit name="delete_procedure_drop_function">
         <output-dir compare="Text">delete_procedure_drop_function</output-dir>
-        <expected-error>Cannot drop function two.really_contains@2. two.deleteSome(Procedure) depends on it!</expected-error>
+        <expected-error>Cannot drop function two.really_contains</expected-error>
       </compilation-unit>
     </test-case>
     <test-case FilePath="procedure">
@@ -95,7 +95,7 @@
     <test-case FilePath="procedure">
       <compilation-unit name="query_procedure_drop_function">
         <output-dir compare="Text">query_procedure_drop_function</output-dir>
-        <expected-error>Cannot drop function channels.really_contains@2. two.selectSome(Procedure) depends on it!</expected-error>
+        <expected-error>Cannot drop function channels.really_contains</expected-error>
       </compilation-unit>
     </test-case>
     <test-case FilePath="procedure">
@@ -133,7 +133,7 @@
     <test-case FilePath="bad_rq">
       <compilation-unit name="drop_function">
         <output-dir compare="Text">drop_function</output-dir>
-        <expected-error>Cannot drop function channels.NearbyTweetsContainingText@2. two.nearbyTweetChannel(Channel) depends on it!</expected-error>
+        <expected-error>Cannot drop function channels.NearbyTweetsContainingText</expected-error>
       </compilation-unit>
     </test-case>
     <test-case FilePath="bad_rq">
