diff --git a/std/npc/info.c b/std/npc/info.c
index 63e768a..6b868f0 100644
--- a/std/npc/info.c
+++ b/std/npc/info.c
@@ -320,30 +320,27 @@
 public varargs void AddSpecialInfo(string|string* key, string functionname,
                string indent, int|string silent, string|closure casebased)
 {
-  // Externe Aufrufer durfen keine Closures auf static oder protected lfuns
-  // erstellen.
+  closure cl = symbol_function(functionname,this_object());
+  if (!cl)
+  {
+      raise_error(sprintf(
+          "%s existiert nicht oder ist private.\n", functionname));
+  }
+
+  // Funktion existiert, aber externe Aufrufer durfen keine Closures auf
+  // static oder protected lfuns erstellen.
   if (extern_call())
   {
       <string|int>* fexist = function_exists(functionname,
                                              FEXISTS_ALL|NAME_HIDDEN);
-      // Gar nicht existierende/gefundene lfuns fuehren auch in diesem Fall
-      // weiter unten zum stillschweigenden return ohne Fehler, um das
-      // Verhalten konsistent bei internem wie externem Aufruf zu halten.
-      //TODO: Allerdings halte ich in beiden Faellen einen Fehler fuer das
-      //TODO::bessere Verhalten.
-      if (fexist
-          && (fexist[FEXISTS_FLAGS] & (TYPE_MOD_STATIC|TYPE_MOD_PROTECTED)))
+      if (fexist[FEXISTS_FLAGS] & (TYPE_MOD_STATIC|TYPE_MOD_PROTECTED) )
       {
           raise_error(sprintf(
-                "%s ist static oder protected und darf nicht durch"
-                "externe Aufrufer eingetragen werden.\n",
-                functionname));
+                "%s ist static oder protected und darf nicht durch "
+                "externe Aufrufer eingetragen werden.\n", functionname));
       }
   }
-  closure cl = symbol_function(functionname,this_object());
 
-  if (!cl)
-    return;
   return AddInfo(key, cl, indent, silent, casebased);
 }
 
