diff --git a/slang_rs.cpp b/slang_rs.cpp
index 98b9771..3c0fd9c 100644
--- a/slang_rs.cpp
+++ b/slang_rs.cpp
@@ -74,15 +74,11 @@
 }
 
 bool SlangRS::reflectToJava(const std::string &OutputPathBase,
-                            const std::string &OutputPackageName,
-                            const std::string &RSPackageName,
-                            std::string *RealPackageName) {
+                            const std::string &RSPackageName) {
   return mRSContext->reflectToJava(OutputPathBase,
-                                   OutputPackageName,
                                    RSPackageName,
                                    getInputFileName(),
-                                   getOutputFileName(),
-                                   RealPackageName);
+                                   getOutputFileName());
 }
 
 bool SlangRS::generateBitcodeAccessor(const std::string &OutputPathBase,
@@ -337,16 +333,17 @@
     if (!setOutput(OutputFile))
       return false;
 
-    if (!JavaReflectionPackageName.empty()) {
-      mRSContext->setReflectJavaPackageName(
-          JavaReflectionPackageName);
-    }
-
     mIsFilterscript = isFilterscript(InputFile);
 
     if (Slang::compile() > 0)
       return false;
 
+    if (!JavaReflectionPackageName.empty()) {
+      mRSContext->setReflectJavaPackageName(JavaReflectionPackageName);
+    }
+    const std::string &RealPackageName =
+        mRSContext->getReflectJavaPackageName();
+
     if (OutputType != Slang::OT_Dependency) {
 
       if (BitcodeStorage == BCST_CPP_CODE) {
@@ -357,10 +354,7 @@
           }
       } else {
 
-        if (!reflectToJava(JavaReflectionPathBase,
-                           JavaReflectionPackageName,
-                           RSPackageName,
-                           &RealPackageName)) {
+        if (!reflectToJava(JavaReflectionPathBase, RSPackageName)) {
           return false;
         }
 
diff --git a/slang_rs.h b/slang_rs.h
index 08b6674..7f3cd3f 100644
--- a/slang_rs.h
+++ b/slang_rs.h
@@ -62,11 +62,8 @@
   typedef llvm::StringMap<ReflectedDefinitionTy> ReflectedDefinitionListTy;
   ReflectedDefinitionListTy ReflectedDefinitions;
 
-  // The package name that's really applied will be filled in RealPackageName.
   bool reflectToJava(const std::string &OutputPathBase,
-                     const std::string &OutputPackageName,
-                     const std::string &RSPackageName,
-                     std::string *RealPackageName);
+                     const std::string &RSPackageName);
 
   bool generateBitcodeAccessor(const std::string &OutputPathBase,
                                const std::string &PackageName);
diff --git a/slang_rs_context.cpp b/slang_rs_context.cpp
index 7ed387e..bc3b2ed 100644
--- a/slang_rs_context.cpp
+++ b/slang_rs_context.cpp
@@ -284,22 +284,9 @@
 }
 
 bool RSContext::reflectToJava(const std::string &OutputPathBase,
-                              const std::string &OutputPackageName,
                               const std::string &RSPackageName,
                               const std::string &InputFileName,
-                              const std::string &OutputBCFileName,
-                              std::string *RealPackageName) {
-  if (RealPackageName != NULL)
-    RealPackageName->clear();
-
-  const std::string &PackageName =
-      ((OutputPackageName.empty()) ? mReflectJavaPackageName :
-                                     OutputPackageName);
-  slangAssert(!PackageName.empty());
-
-  // Copy back the really applied package name
-  RealPackageName->assign(PackageName);
-
+                              const std::string &OutputBCFileName) {
   if (!RSPackageName.empty()) {
     mRSPackageName = RSPackageName;
   }
@@ -311,7 +298,7 @@
   }
 
   RSReflection *R = new RSReflection(this, mGeneratedFileNames);
-  bool ret = R->reflect(OutputPathBase, PackageName, mRSPackageName,
+  bool ret = R->reflect(OutputPathBase, mReflectJavaPackageName, mRSPackageName,
                         InputFileName, OutputBCFileName);
   if (!ret)
     fprintf(stderr, "RSContext::reflectToJava : failed to do reflection "
diff --git a/slang_rs_context.h b/slang_rs_context.h
index 946393b..7dbd409 100644
--- a/slang_rs_context.h
+++ b/slang_rs_context.h
@@ -219,11 +219,9 @@
   bool insertExportType(const llvm::StringRef &TypeName, RSExportType *Type);
 
   bool reflectToJava(const std::string &OutputPathBase,
-                     const std::string &OutputPackageName,
                      const std::string &RSPackageName,
                      const std::string &InputFileName,
-                     const std::string &OutputBCFileName,
-                     std::string *RealPackageName);
+                     const std::string &OutputBCFileName);
 
   int getVersion() const { return version; }
   void setVersion(int v) {
diff --git a/slang_rs_reflection_base.cpp b/slang_rs_reflection_base.cpp
index a4a0d35..65da696 100644
--- a/slang_rs_reflection_base.cpp
+++ b/slang_rs_reflection_base.cpp
@@ -60,7 +60,8 @@
 "\n";
 
 
-RSReflectionBase::RSReflectionBase(const RSContext *con) {
+RSReflectionBase::RSReflectionBase(const RSContext *con)
+  : mVerbose(true) {
   mRSContext = con;
   mLicenseNote = gApacheLicenseNote;
 
