diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/common/makro/NCMacroJavaParser.java b/nlpcraft/src/main/scala/org/apache/nlpcraft/common/makro/NCMacroJavaParser.java
new file mode 100644
index 0000000..d10aa2d
--- /dev/null
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/common/makro/NCMacroJavaParser.java
@@ -0,0 +1,77 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.nlpcraft.common.makro;
+
+import java.util.Set;
+
+/**
+ * Java adapter for macro parser (so that Java reflection could work).
+ */
+public class NCMacroJavaParser implements NCMacroJavaParserTrait {
+    private final NCMacroParser impl = new NCMacroParser();
+
+    /**
+     * Expands given macro DSL string.
+     *
+     * @param s Macro DSL string to expand.
+     * @return Set of macro expansions for a given macro DSL string.
+     */
+    public Set<String> expand(String s) {
+        return impl.expandJava(s);
+    }
+
+    /**
+     * Adds or overrides given macro.
+     *
+     * @param name Macro name (typically an upper case string).
+     *     It must start with '&lt;' and end with '&gt;' symbol.
+     * @param macro Value of the macro (any arbitrary string).
+     * @return {@code true} if an existing macro was overridden, {@code false} otherwise.
+     */
+    public boolean addMacro(String name, String macro) {
+        boolean f = impl.hasMacro(name);
+
+        impl.addMacro(name, macro);
+
+        return f;
+    }
+
+    /**
+     * Removes macro.
+     *
+     * @param name Name of the macro to remove.
+     * @return {@code true} if given macro was indeed found and removed, {@code false} otherwise.
+     */
+    public boolean removeMacro(String name) {
+        boolean f = impl.hasMacro(name);
+
+        impl.removeMacro(name);
+
+        return f;
+    }
+
+    /**
+     * Tests whether this processor has given macro.
+     *
+     * @param name Name of the macro to test.
+     * @return {@code true} if macro was found, {@code false} otherwise.
+     */
+    public boolean hasMacro(String name) {
+        return impl.hasMacro(name);
+    }
+}
diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/common/makro/NCMacroJavaParserTrait.java b/nlpcraft/src/main/scala/org/apache/nlpcraft/common/makro/NCMacroJavaParserTrait.java
new file mode 100644
index 0000000..58d5452
--- /dev/null
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/common/makro/NCMacroJavaParserTrait.java
@@ -0,0 +1,59 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.nlpcraft.common.makro;
+
+import java.util.Set;
+
+/**
+ * Necessary plug for Javadoc to work on mixed Java/Scala project.
+ */
+public interface NCMacroJavaParserTrait {
+    /**
+     * Expands given macro DSL string.
+     *
+     * @param s Macro DSL string to expand.
+     * @return Set of macro expansions for a given macro DSL string.
+     */
+    Set<String> expand(String s);
+
+    /**
+     * Adds or overrides given macro.
+     *
+     * @param name Macro name (typically an upper case string).
+     *     It must start with '&lt;' and end with '&gt;' symbol.
+     * @param macro Value of the macro (any arbitrary string).
+     * @return {@code true} if an existing macro was overridden, {@code false} otherwise.
+     */
+    boolean addMacro(String name, String macro);
+
+    /**
+     * Removes macro.
+     *
+     * @param name Name of the macro to remove.
+     * @return {@code true} if given macro was indeed found and removed, {@code false} otherwise.
+     */
+    boolean removeMacro(String name);
+
+    /**
+     * Tests whether this processor has given macro.
+     *
+     * @param name Name of the macro to test.
+     * @return {@code true} if macro was found, {@code false} otherwise.
+     */
+    boolean hasMacro(String name);
+}
diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/NCMacroProcessor.java b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/NCMacroProcessor.java
index 8a1460e..5c87a43 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/NCMacroProcessor.java
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/NCMacroProcessor.java
@@ -17,31 +17,46 @@
 
 package org.apache.nlpcraft.model;
 
-import org.apache.nlpcraft.common.makro.NCMacroParser;
+import org.apache.nlpcraft.common.NCException;
+import org.apache.nlpcraft.common.makro.NCMacroJavaParserTrait;
 
 import java.util.Set;
 
 /**
  * Standalone synonym macro DSL processor.
  * <p>
- * This processor provides the same macro support as the built-in macro support in YAML/JSON models. It is
- * requires when the model is generated programmatically rather than using YAML/JSON, and synonyms need to be
- * processed in the same way. In such cases, this class can be used to manually process synonyms macro DSL.
+ * This processor provides the same macro support as the built-in macro support in data models.
+ * It is a general purpose macro-processor and it can be used standalone when testing synonyms,
+ * developing NERs, visualizing synonyms in toolchains, etc.
  * <p>
- * Read full documentation in <a target=_ href="https://nlpcraft.apache.org/data-model.html">Data Model</a> section and review
+ * Read full documentation on synonym macro DSL in <a target=_ href="https://nlpcraft.apache.org/data-model.html">Data Model</a> section and review
  * <a target=_ href="https://github.com/apache/incubator-nlpcraft/tree/master/nlpcraft/src/main/scala/org/apache/nlpcraft/examples/">examples</a>.
  */
 public class NCMacroProcessor {
-    private final NCMacroParser impl = new NCMacroParser();
+    private final NCMacroJavaParserTrait impl = mkImpl();
+
+    // Need to do that in order to avoid Javadoc failures due to mixed Scala/Java project.
+    private static NCMacroJavaParserTrait mkImpl() {
+        try {
+            return (NCMacroJavaParserTrait)Class.forName("org.apache.nlpcraft.common.makro.NCMacroJavaParser")
+                .getDeclaredConstructor().newInstance();
+        }
+        catch (Exception e) {
+            throw new NCException("Error initializing object of type: org.apache.nlpcraft.common.makro.NCMacroJavaParser", e);
+        }
+    }
 
     /**
      * Expands given macro DSL string.
+     * <p>
+     * Read full documentation on synonym macro DSL in <a target=_ href="https://nlpcraft.apache.org/data-model.html">Data Model</a> section and review
+     * <a target=_ href="https://github.com/apache/incubator-nlpcraft/tree/master/nlpcraft/src/main/scala/org/apache/nlpcraft/examples/">examples</a>.
      *
      * @param s Macro DSL string to expand.
      * @return Set of macro expansions for a given macro DSL string.
      */
     public Set<String> expand(String s) {
-        return impl.expandJava(s);
+        return impl.expand(s);
     }
 
     /**
diff --git a/nlpcraft/src/test/scala/org/apache/nlpcraft/common/makro/NCMacroParserSpec.scala b/nlpcraft/src/test/scala/org/apache/nlpcraft/common/makro/NCMacroParserSpec.scala
index 497f8aa..9d7dcf1 100644
--- a/nlpcraft/src/test/scala/org/apache/nlpcraft/common/makro/NCMacroParserSpec.scala
+++ b/nlpcraft/src/test/scala/org/apache/nlpcraft/common/makro/NCMacroParserSpec.scala
@@ -18,21 +18,23 @@
 package org.apache.nlpcraft.common.makro
 
 import org.apache.nlpcraft.common._
+import org.apache.nlpcraft.model.NCMacroProcessor
 import org.junit.jupiter.api.Assertions.assertTrue
 import org.junit.jupiter.api.Test
 
 import scala.compat.Platform._
-import scala.util.control.Exception._
+import scala.collection.JavaConverters._
 
 /**
   * Tests for text parser.
   */
 class NCMacroParserSpec  {
-    private val parser = NCMacroParser(
-        "<A>" → "aaa",
-        "<B>" → "<A> bbb",
-        "<C>" → "<A> bbb {z|w}"
-    )
+    private val parser = new NCMacroProcessor()
+
+    parser.addMacro("<A>", "aaa")
+    parser.addMacro("<B>", "<A> bbb")
+    parser.addMacro("<C>", "<A> bbb {z|w}")
+
     
     // Add macros for testing...
     parser.addMacro("<OF>", "{of|for|per}")
@@ -52,16 +54,14 @@
     parser.addMacro("<METRICS_A>", "{analytics|statistics|measurements|analysis|report|efficiency|performance}")
     parser.addMacro("<METRICS_B>", "{metrics|data|info|information|facts}")
     parser.addMacro("<METRICS>","{<METRICS_A>|<METRICS_B>|<METRICS_A> <METRICS_B>|<METRICS_B> <METRICS_A>}")
-    
-    private val ignoreNCE = ignoring(classOf[NCE])
-    
+
     /**
       *
       * @param txt Text to expand.
       * @param exp Expected expansion strings.
       */
     def checkEq(txt: String, exp: Seq[String]): Unit = {
-        val z = parser.expand(txt).sorted
+        val z = parser.expand(txt).asScala.toSeq.sorted
         val w = exp.sorted
 
         if (z != w)
