diff --git a/src/OpenFOAM/db/dictionary/functionEntries/codeStream/codeStream.C b/src/OpenFOAM/db/dictionary/functionEntries/codeStream/codeStream.C
index 5eb948eee1eb6626f321fd4b4ac4148be2ef1214..9fae385a493612a5afe88abadb58ea119151ed97 100644
--- a/src/OpenFOAM/db/dictionary/functionEntries/codeStream/codeStream.C
+++ b/src/OpenFOAM/db/dictionary/functionEntries/codeStream/codeStream.C
@@ -114,31 +114,46 @@ bool Foam::functionEntries::codeStream::execute
         sha = os.digest();
     }
 
-    // write code into _SHA1 subdirectory
-    fileName dir;
-    if (isA<IOdictionary>(parentDict))
-    {
-        const IOdictionary& d = static_cast<const IOdictionary&>(parentDict);
-        dir = d.db().time().constantPath()/"codeStream"/"_" + sha.str();
-    }
-    else
-    {
-        dir = fileName("codeStream")/"_" + sha.str();
-    }
 
-    fileName name = "codeStream_" + sha.str();
-    fileName libPath
+    // the code name = prefix + sha1
+    const fileName codeName("codeStream_" + sha.str());
+
+    // local directory for compile/link
+    const fileName baseDir
+    (
+        stringOps::expandEnv("$FOAM_CASE/codeStream")
+    );
+
+    // code is written into _SHA1 subdir
+    const fileName codeDir
     (
-        Foam::getEnv("FOAM_USER_LIBBIN")/"lib" + name + ".so"
+        baseDir
+      / "_" + sha.str()
     );
 
+    // library is written into platforms/$WM_OPTIONS/lib subdir
+    const fileName libPath
+    (
+        baseDir
+      / stringOps::expandEnv("platforms/$WM_OPTIONS/lib")
+      / "lib" + codeName + ".so"
+    );
+
+
     void* lib = dlLibraryTable::findLibrary(libPath);
 
+    // try to load if not already loaded
+    if (!lib && dlLibraryTable::open(libPath, false))
+    {
+        lib = dlLibraryTable::findLibrary(libPath);
+    }
+
+    // did not load - need to compile it
     if (!lib)
     {
         if (Pstream::master())
         {
-            if (!codeStreamTools::upToDate(dir, sha))
+            if (!codeStreamTools::upToDate(codeDir, sha))
             {
                 Info<< "Creating new library in " << libPath << endl;
 
@@ -175,15 +190,16 @@ bool Foam::functionEntries::codeStream::execute
                 filesContents[0].first() = "Make/files";
                 filesContents[0].second() =
                     codeTemplateC + "\n\n"
-                    "LIB = $(FOAM_USER_LIBBIN)/lib" + name;
+                    "LIB = $(PWD)/../platforms/$(WM_OPTIONS)/lib/lib"
+                    + codeName;
 
                 // Write Make/options
                 filesContents[1].first() = "Make/options";
                 filesContents[1].second() =
                     "EXE_INC = -g \\\n" + codeOptions + "\n\nLIB_LIBS =";
 
-                codeStreamTools writer(name, copyFiles, filesContents);
-                if (!writer.copyFilesContents(dir))
+                codeStreamTools writer(codeName, copyFiles, filesContents);
+                if (!writer.copyFilesContents(codeDir))
                 {
                     FatalIOErrorIn
                     (
@@ -196,7 +212,7 @@ bool Foam::functionEntries::codeStream::execute
                 }
             }
 
-            Foam::string wmakeCmd("wmake libso " + dir);
+            const Foam::string wmakeCmd("wmake libso " + codeDir);
             Info<< "Invoking " << wmakeCmd << endl;
             if (Foam::system(wmakeCmd))
             {
@@ -209,7 +225,10 @@ bool Foam::functionEntries::codeStream::execute
             }
         }
 
-        if (!dlLibraryTable::open(libPath))
+        bool dummy = true;
+        reduce(dummy, orOp<bool>());
+
+        if (!dlLibraryTable::open(libPath, false))
         {
             FatalIOErrorIn
             (
@@ -231,7 +250,7 @@ bool Foam::functionEntries::codeStream::execute
     void (*function)(const dictionary&, Ostream&);
     function = reinterpret_cast<void(*)(const dictionary&, Ostream&)>
     (
-        dlSym(lib, name)
+        dlSym(lib, codeName)
     );
 
     if (!function)
@@ -240,7 +259,7 @@ bool Foam::functionEntries::codeStream::execute
         (
             "functionEntries::codeStream::execute(..)",
             parentDict
-        )   << "Failed looking up symbol " << name
+        )   << "Failed looking up symbol " << codeName
             << " in library " << lib << exit(FatalIOError);
     }
 
diff --git a/src/OpenFOAM/db/dictionary/functionEntries/codeStream/codeStream.H b/src/OpenFOAM/db/dictionary/functionEntries/codeStream/codeStream.H
index ecfbd1836a9cc9ab9f46fe32215b89b490ade855..4aaf375b6d56d621b114cd1a8215fbf5664f7a20 100644
--- a/src/OpenFOAM/db/dictionary/functionEntries/codeStream/codeStream.H
+++ b/src/OpenFOAM/db/dictionary/functionEntries/codeStream/codeStream.H
@@ -76,6 +76,14 @@ Description
     - probably some other limitations (uses string::expand which expands
       \c \$ and \c ~ sequences)
 
+Note
+    The code to be compiled is stored under the local \f codeStream directory
+    with a subdirectory name corresponding to the SHA1 of the contents.
+
+    The corresponding library code is located under the local
+    \f codeStream/platforms/$WM_OPTIONS/lib directory in a library
+    \f libcodeStream_SHA1.so
+
 SourceFiles
     codeStream.C