diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/common/util/NCUtils.scala b/nlpcraft/src/main/scala/org/apache/nlpcraft/common/util/NCUtils.scala
index db9082f..782760c 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/common/util/NCUtils.scala
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/common/util/NCUtils.scala
@@ -1420,28 +1420,28 @@
      * @return
      */
     def colorJson(json: String): String = {
-        val buf = mutable.Buffer.empty[String]
+        val buf = new StringBuilder
 
         var inQuotes = false
 
         for (ch ← json) {
             ch match {
-                case ':' if !inQuotes ⇒ buf += s"$ansiBold$ansiRedFg:$ansiReset"
-                case '[' | ']' | '{' | '}' if !inQuotes ⇒ buf += s"$ansiBold$ansiYellowFg$ch$ansiReset"
-                case ',' if !inQuotes ⇒ buf += s"$ansiBold$ansiGreenFg$ch$ansiReset"
+                case ':' if !inQuotes ⇒ buf ++= s"$ansiRedFg:$ansiReset"
+                case '[' | ']' | '{' | '}' if !inQuotes ⇒ buf ++= s"$ansiYellowFg$ch$ansiReset"
+                case ',' if !inQuotes ⇒ buf ++= s"$ansiGreenFg$ch$ansiReset"
                 case '"' ⇒
                     if (inQuotes)
-                        buf += s"$ansiReset$ansiBlueFg$ch$ansiReset"
+                        buf ++= s"$ansiBlueFg$ch$ansiReset"
                     else
-                        buf += s"$ansiBlueFg$ch$ansiCyanFg"
+                        buf ++= s"$ansiBlueFg$ch$ansiCyanFg"
 
                     inQuotes = !inQuotes
 
-                case _ ⇒ buf += s"$ch"
+                case _ ⇒ buf ++= s"$ch"
             }
         }
 
-        buf.mkString
+        buf.toString()
     }
 
     /**
diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/examples/misc/darksky/DarkSkyService.java b/nlpcraft/src/main/scala/org/apache/nlpcraft/examples/misc/darksky/DarkSkyService.java
index ef8d353..ed53b19 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/examples/misc/darksky/DarkSkyService.java
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/examples/misc/darksky/DarkSkyService.java
@@ -189,7 +189,7 @@
                     return p.get();
                 }
                 catch (ExecutionException | InterruptedException e) {
-                    throw new DarkSkyException("Error execution weather request.", e);
+                    throw new DarkSkyException("Error executing weather request.", e);
                 }
             }).
             sorted(Comparator.comparing(Pair::getLeft)).
diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/model/NCModelManager.scala b/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/model/NCModelManager.scala
index 313e175..296a299 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/model/NCModelManager.scala
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/model/NCModelManager.scala
@@ -23,6 +23,7 @@
 import org.apache.nlpcraft.model._
 import org.apache.nlpcraft.probe.mgrs.NCProbeModel
 import org.apache.nlpcraft.probe.mgrs.deploy._
+import org.apache.nlpcraft.common.ansi.NCAnsiColor._
 
 import scala.collection.convert.DecorateAsScala
 import scala.util.control.Exception._
@@ -45,7 +46,7 @@
      */
     @throws[NCE]
     override def start(parent: Span = null): NCService = startScopedSpan("start", parent) { span ⇒
-        val tbl = NCAsciiTable("Model ID", "Name", "Ver.", "Elements", "Synonyms", "Intents")
+        val tbl = NCAsciiTable("Model", "Intents")
 
         mux.synchronized {
             data = NCDeployManager.getModels.map(w ⇒ {
@@ -58,16 +59,22 @@
                 val mdl = w.model
 
                 val synCnt = w.synonyms.values.flatMap(_.values).flatten.size
+                val elmCnt = w.elements.keySet.size
 
                 tbl += (
-                    mdl.getId,
-                    mdl.getName,
-                    mdl.getVersion,
-                    w.elements.keySet.size,
-                    synCnt,
+                    Seq(
+                        s"${mdl.getName}",
+                        s"ID: $ansiBold${mdl.getId}$ansiReset, ver: ${mdl.getVersion}",
+                        s"Elements: $elmCnt" + (if (elmCnt == 0) s" $ansiRedFg(!)$ansiReset" else ""),
+                        s"Synonyms: $synCnt" + (if (synCnt == 0) s" $ansiRedFg(!)$ansiReset" else "")
+                    ),
                     w.intents
                         .map(_.toDslString)
-                        .flatMap(s ⇒ s.replaceAll(" term", "\n  term").split("\n"))
+                        .flatMap(s ⇒
+                            s
+                            .replaceAll("intent=", s"${ansiGreenFg}intent$ansiReset=")
+                            .replaceAll(" term", s"\n  ${ansiCyanFg}term$ansiReset").split("\n")
+                        )
                 )
             })
         }
diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/server/query/NCQueryManager.scala b/nlpcraft/src/main/scala/org/apache/nlpcraft/server/query/NCQueryManager.scala
index 91d09a0..6eb5e9b 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/server/query/NCQueryManager.scala
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/server/query/NCQueryManager.scala
@@ -261,7 +261,7 @@
             startScopedSpan("future", parent, "srvReqId" → srvReqId) { span ⇒
                 val tbl = NCAsciiTable()
 
-                tbl += (s"${ansiBlueFg}Text$ansiReset", txt0)
+                tbl += (s"${ansiBlueFg}Text$ansiReset", s"$ansiGreenFg$txt0$ansiReset")
                 tbl += (s"${ansiBlueFg}User ID$ansiReset", usr.id)
                 tbl += (s"${ansiBlueFg}Model ID$ansiReset", mdlId)
                 tbl += (s"${ansiBlueFg}Agent$ansiReset", usrAgent.getOrElse("<n/a>"))
diff --git a/nlpcraft/src/test/scala/org/apache/nlpcraft/NCTestExampleModelsSpec.scala b/nlpcraft/src/test/scala/org/apache/nlpcraft/NCTestExampleModelsSpec.scala
index ae550a3..2e57177 100644
--- a/nlpcraft/src/test/scala/org/apache/nlpcraft/NCTestExampleModelsSpec.scala
+++ b/nlpcraft/src/test/scala/org/apache/nlpcraft/NCTestExampleModelsSpec.scala
@@ -30,8 +30,7 @@
             "org.apache.nlpcraft.examples.alarm.AlarmModel," +
             "org.apache.nlpcraft.examples.time.TimeModel," +
             "org.apache.nlpcraft.examples.lightswitch.LightSwitchModel," +
-            "org.apache.nlpcraft.examples.echo.EchoModel," +
-            "org.apache.nlpcraft.examples.weather.WeatherModel"
+            "org.apache.nlpcraft.examples.echo.EchoModel"
 
         // Instruct auto-validator what models to test.
         System.setProperty("NLPCRAFT_TEST_MODELS", models)
diff --git a/nlpcraft/src/test/scala/org/apache/nlpcraft/server/rest/NCRestSpec.scala b/nlpcraft/src/test/scala/org/apache/nlpcraft/server/rest/NCRestSpec.scala
index 85f40c3..908277e 100644
--- a/nlpcraft/src/test/scala/org/apache/nlpcraft/server/rest/NCRestSpec.scala
+++ b/nlpcraft/src/test/scala/org/apache/nlpcraft/server/rest/NCRestSpec.scala
@@ -32,6 +32,7 @@
 import org.apache.nlpcraft.NCTestContext
 import org.junit.jupiter.api.Assertions._
 import org.junit.jupiter.api.{AfterEach, BeforeEach}
+import org.apache.nlpcraft.common._
 
 import scala.collection.JavaConverters._
 
@@ -190,13 +191,15 @@
         checkStatus(resp)
 
         println("Checked POST:")
-        println(GSON.toJson(
-            Map(
-                "url" → url,
-                "params" → new java.util.HashMap[String, Any](ps.toMap.asJava),
-                "response" → resp.asJava
-            ).asJava
-        ))
+        println(U.colorJson(
+            GSON.toJson(
+                Map(
+                    "url" → url,
+                    "params" → new java.util.HashMap[String, Any](ps.toMap.asJava),
+                    "response" → resp.asJava
+                ).asJava
+            ))
+        )
 
         val ctx = JsonPath.parse(GSON.toJson(resp.asJava))
 
