diff --git a/src/paraview-plugins/Allwmake b/src/paraview-plugins/Allwmake
index 6dbaa022247a9c663c09b83e72f1c662317d7a9b..2cc1bfa6ecc0b0ab5bb0aa1604159e0f7695476b 100755
--- a/src/paraview-plugins/Allwmake
+++ b/src/paraview-plugins/Allwmake
@@ -3,7 +3,19 @@ cd "${0%/*}" || exit                                # Run from this directory
 export WM_CONTINUE_ON_ERROR=true                    # Optional unit
 . ${WM_PROJECT_DIR:?}/wmake/scripts/AllwmakeParseArguments
 . ${WM_PROJECT_DIR:?}/wmake/scripts/paraviewFunctions # CMake, PV functions
-# -----------------------------------------------------------------------------
+#------------------------------------------------------------------------------
+# Copyright (C) 2020 OpenCFD Ltd.
+# This file is part of OpenFOAM, distributed under GPL-3.0-or-later.
+#
+# Note
+#     For paraview-5.7 (and later?) plugins are built into their own subdirs.
+#     It also is not possible to suppress creation of static libraries in the
+#     process.
+#
+# Current solution (ugly)
+#     - install into a local "staged" location (within the build directory)
+#     - use rsync to relocate to the .so files to the plugin directory
+#------------------------------------------------------------------------------
 
 warnIncomplete()
 {
@@ -20,6 +32,7 @@ then
     wmakeLibPv foamReader/library
 
     unset cmakeOpts cmakeType
+    unset installDir
 
     if [ "$targetType" != objects ]
     then
@@ -28,16 +41,50 @@ then
             cmakeType="cmakePv"
             ;;
         (*)
-            # cmakeType="cmakePvInstall"
-            warnIncomplete "(unknown/unsupported version: $PARAVIEW_API)"
+            if installDir=$(findObjectDir '.')
+            then
+                installDir="$installDir/install-prefix"
+
+                # Require an absolute directory for CMake
+                if [ "${installDir#/}" = "$installDir" ]
+                then
+                    installDir="$PWD/$installDir"
+                fi
+
+                cmakeOpts="$cmakeOpts -DSTAGED_INSTALL_PREFIX=$installDir"
+                cmakeType="cmakePvInstall"
+            else
+                cmakeType="cmakePv"  # cmakeType="cmakePvInstall"
+            fi
             ;;
         esac
     fi
 
+    rm -rf "$installDir"
+
     if [ -n "$cmakeType" ]
     then
-        "$cmakeType" $PWD/blockMeshReader "$cmakeOpts" || warnIncomplete "blockMesh"
-        "$cmakeType" $PWD/foamReader "$cmakeOpts" || warnIncomplete "OpenFOAM"
+        "$cmakeType" "$PWD"/blockMeshReader "$cmakeOpts" || warnIncomplete "blockMesh"
+        "$cmakeType" "$PWD"/foamReader "$cmakeOpts" || warnIncomplete "OpenFOAM"
+    fi
+
+    if [ -d "$installDir" ]
+    then
+        [ -d "$FOAM_PV_PLUGIN_LIBBIN" ] || mkdir -p "$FOAM_PV_PLUGIN_LIBBIN"
+
+        # TODO: handle via targets via CMake
+        for dir in "$installDir/lib" "$installDir/lib64"
+        do
+            if [ -d "$dir" ]
+            then
+                echo
+                for libName in $(find "$dir" -name '*.so')
+                do
+                    echo "Plugin: ${FOAM_PV_PLUGIN_LIBBIN##*/}/${libName##*/}"
+                    rsync -a "$libName" "$FOAM_PV_PLUGIN_LIBBIN"
+                done
+            fi
+        done
     fi
 )
 fi
diff --git a/src/paraview-plugins/blockMeshReader/CMakeLists-Project57.txt b/src/paraview-plugins/blockMeshReader/CMakeLists-Project57.txt
index 718a5318de5b489510b773a0795ac2aaf3a82f3f..600f23f2bf10ce8012384acfeb056195c455472f 100644
--- a/src/paraview-plugins/blockMeshReader/CMakeLists-Project57.txt
+++ b/src/paraview-plugins/blockMeshReader/CMakeLists-Project57.txt
@@ -1,6 +1,46 @@
 #-----------------------------------------------------------------------------
 # OpenFOAM blockMeshDict reader plugin for ParaView GUI (5.7+)
 
-message(FATAL_ERROR "paraview-${pv_api} not yet supported")
+set(CMAKE_BUILD_TYPE Release)
+
+cmake_minimum_required(VERSION 3.8)
+project(ParaFoamBlockReader)
+find_package(ParaView REQUIRED)
+
+include(GNUInstallDirs)
+if (STAGED_INSTALL_PREFIX)
+    set(CMAKE_INSTALL_PREFIX "${STAGED_INSTALL_PREFIX}")
+    ## message("use staged install: ${STAGED_INSTALL_PREFIX}")
+else()
+    set(CMAKE_INSTALL_PREFIX "${CMAKE_CURRENT_BINARY_DIR}")
+endif()
+
+set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_INSTALL_BINDIR}")
+set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR}")
+set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR}")
+
+set(PARAVIEW_PLUGIN_ENABLE_ParaFoamBlockReader TRUE)
+
+set("_paraview_plugin_default_${CMAKE_PROJECT_NAME}" ON)
+paraview_plugin_scan(
+  PLUGIN_FILES      "${CMAKE_CURRENT_SOURCE_DIR}/plugin/paraview.plugin"
+  PROVIDES_PLUGINS  plugins
+  REQUIRES_MODULES  required_modules)
+
+foreach(module IN LISTS required_modules)
+  if(NOT TARGET "${module}")
+    message("Missing required module: ${module}")
+    return()
+  endif()
+endforeach()
+
+# Install under <platform>/<arch>/lib, not lib64
+paraview_plugin_build(
+  PLUGINS ${plugins}
+  AUTOLOAD ${plugins}
+  RUNTIME_DESTINATION "${CMAKE_INSTALL_BINDIR}"
+  LIBRARY_DESTINATION "${CMAKE_INSTALL_LIBDIR}"
+  LIBRARY_SUBDIRECTORY "${PARAVIEW_PLUGIN_SUBDIR}"
+)
 
 #-----------------------------------------------------------------------------
diff --git a/src/paraview-plugins/blockMeshReader/plugin/CMakeLists.txt b/src/paraview-plugins/blockMeshReader/plugin/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..ee33da956cc68612252e60f13ed25352388ecdb5
--- /dev/null
+++ b/src/paraview-plugins/blockMeshReader/plugin/CMakeLists.txt
@@ -0,0 +1,32 @@
+#-----------------------------------------------------------------------------
+# OpenFOAM blockMesh reader plugin for ParaView GUI
+
+qt5_wrap_cpp(MOC_SRCS pqFoamBlockMeshControls.h)
+
+paraview_plugin_add_property_widget(
+    KIND        GROUP_WIDGET
+    TYPE        "openfoam_blockreader_general_controls"
+    CLASS_NAME  pqFoamBlockMeshControls
+    INTERFACES  IFACES0
+    SOURCES     IFACES0_SRCS)
+
+set(BUILD_SHARED_LIBS_BACKUP ${BUILD_SHARED_LIBS})
+set(BUILD_SHARED_LIBS ON)
+paraview_add_plugin(ParaFoamBlockReader
+    VERSION "${foam_api}"
+    UI_INTERFACES
+        ${IFACES0}
+    SOURCES
+        ${IFACES0_SRCS}
+        ${MOC_SRCS}
+        pqFoamBlockMeshControls.cxx
+    MODULES blockMeshReader
+    MODULE_FILES "${CMAKE_CURRENT_SOURCE_DIR}/reader/vtk.module"
+    SERVER_MANAGER_XML ParaFoamBlockReader.xml
+)
+set(BUILD_SHARED_LIBS ${BUILD_SHARED_LIBS_BACKUP})
+
+target_link_libraries(ParaFoamBlockReader
+  PUBLIC ParaView::pqApplicationComponents)
+
+#-----------------------------------------------------------------------------
diff --git a/src/paraview-plugins/blockMeshReader/plugin/paraview.plugin b/src/paraview-plugins/blockMeshReader/plugin/paraview.plugin
new file mode 100644
index 0000000000000000000000000000000000000000..8a8fa77738ab6389367a07195ec48f1034785697
--- /dev/null
+++ b/src/paraview-plugins/blockMeshReader/plugin/paraview.plugin
@@ -0,0 +1,12 @@
+NAME
+  ParaFoamBlockReader
+DESCRIPTION
+  Provides an OpenFOAM blockMesh reader plugin for ParaView GUI
+CONDITION
+  PARAVIEW_BUILD_QT_GUI
+REQUIRES_MODULES
+  ParaView::Core
+  ParaView::ClientServerCoreCore
+  ParaView::ServerManagerCore
+  ParaView::ServerManagerRendering
+  ParaView::pqApplicationComponents
diff --git a/src/paraview-plugins/blockMeshReader/plugin/reader/CMakeLists.txt b/src/paraview-plugins/blockMeshReader/plugin/reader/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..6e0fb65ae3410f8552de31cd53adcd8166c1ed73
--- /dev/null
+++ b/src/paraview-plugins/blockMeshReader/plugin/reader/CMakeLists.txt
@@ -0,0 +1,64 @@
+#-----------------------------------------------------------------------------
+set(classes vtkPVblockMeshReader)
+
+vtk_module_add_module(blockMeshReader
+  FORCE_STATIC
+  CLASSES ${classes})
+
+target_include_directories(blockMeshReader
+    PUBLIC
+    ${LIB_SRC}/OpenFOAM/include
+    ${LIB_SRC}/OpenFOAM/lnInclude
+    ${LIB_SRC}/OSspecific/${WM_OSTYPE}/lnInclude
+    ${LIB_SRC}/fileFormats/lnInclude
+    ${LIB_SRC}/conversion/lnInclude
+    ${LIB_SRC}/meshTools/lnInclude
+    ${PROJECT_SOURCE_DIR}/../common
+    ${PROJECT_SOURCE_DIR}/library
+)
+
+set(OPENFOAM_LIBNAMES
+    OpenFOAM
+    fileFormats
+    conversion
+    meshTools
+)
+
+
+# With cmake 3.12 and newer, can simply use target_link_directories
+
+# target_link_directories(blockMeshReader
+#     PUBLIC
+#     $ENV{FOAM_LIBBIN}
+# )
+
+# target_link_libraries(blockMeshReader
+#     PUBLIC
+#     vtkPVFoamCommon${foamPvLibQualifier}
+#     vtkPVblockReader${foamPvLibQualifier}
+#     ${OPENFOAM_LIBNAMES}
+# )
+
+
+# Older cmake. Do manually
+
+link_directories(
+    $ENV{FOAM_LIBBIN}
+)
+
+unset(OPENFOAM_LIBS)
+
+foreach(libname ${OPENFOAM_LIBNAMES})
+    unset(libpath CACHE)
+    find_library(libpath ${libname} PATHS $ENV{FOAM_LIBBIN})
+    list(APPEND OPENFOAM_LIBS ${libpath})
+endforeach(libname)
+
+target_link_libraries(blockMeshReader
+    PUBLIC
+    vtkPVFoamCommon${foamPvLibQualifier}
+    vtkPVblockReader${foamPvLibQualifier}
+    ${OPENFOAM_LIBS}
+)
+
+#-----------------------------------------------------------------------------
diff --git a/src/paraview-plugins/blockMeshReader/plugin/reader/vtk.module b/src/paraview-plugins/blockMeshReader/plugin/reader/vtk.module
new file mode 100644
index 0000000000000000000000000000000000000000..9d12c71a93822b01581ee9106714f58a349ae3d7
--- /dev/null
+++ b/src/paraview-plugins/blockMeshReader/plugin/reader/vtk.module
@@ -0,0 +1,9 @@
+NAME
+  blockMeshReader
+DEPENDS
+  VTK::CommonCore
+  VTK::CommonDataModel
+  VTK::CommonExecutionModel
+PRIVATE_DEPENDS
+  ParaView::pqCore
+  ParaView::ServerManagerRendering
diff --git a/src/paraview-plugins/foamReader/CMakeLists-Project57.txt b/src/paraview-plugins/foamReader/CMakeLists-Project57.txt
index c5d5236a59a79c43a1c2f1a10b0cfec8e94cc4b9..6e2da83584afc1239fab66ba2d1d5dd8bbf92715 100644
--- a/src/paraview-plugins/foamReader/CMakeLists-Project57.txt
+++ b/src/paraview-plugins/foamReader/CMakeLists-Project57.txt
@@ -1,6 +1,45 @@
 #-----------------------------------------------------------------------------
 # OpenFOAM reader plugin for ParaView GUI (5.7+)
 
-message(FATAL_ERROR "paraview-${pv_api} not yet supported")
+set(CMAKE_BUILD_TYPE Release)
+
+cmake_minimum_required(VERSION 3.8)
+project(ParaFoamReader)
+find_package(ParaView REQUIRED)
+
+include(GNUInstallDirs)
+if (STAGED_INSTALL_PREFIX)
+    set(CMAKE_INSTALL_PREFIX "${STAGED_INSTALL_PREFIX}")
+    ## message("use staged install: ${STAGED_INSTALL_PREFIX}")
+else()
+    set(CMAKE_INSTALL_PREFIX "${CMAKE_CURRENT_BINARY_DIR}")
+endif()
+
+set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_INSTALL_BINDIR}")
+set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR}")
+set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR}")
+
+set(PARAVIEW_PLUGIN_ENABLE_ParaFoamReader TRUE)
+
+set("_paraview_plugin_default_${CMAKE_PROJECT_NAME}" ON)
+paraview_plugin_scan(
+  PLUGIN_FILES      "${CMAKE_CURRENT_SOURCE_DIR}/plugin/paraview.plugin"
+  PROVIDES_PLUGINS  plugins
+  REQUIRES_MODULES  required_modules)
+
+foreach(module IN LISTS required_modules)
+  if(NOT TARGET "${module}")
+    message("Missing required module: ${module}")
+    return()
+  endif()
+endforeach()
+
+paraview_plugin_build(
+  PLUGINS ${plugins}
+  AUTOLOAD ${plugins}
+  RUNTIME_DESTINATION "${CMAKE_INSTALL_BINDIR}"
+  LIBRARY_DESTINATION "${CMAKE_INSTALL_LIBDIR}"
+  LIBRARY_SUBDIRECTORY "${PARAVIEW_PLUGIN_SUBDIR}"
+)
 
 #-----------------------------------------------------------------------------
diff --git a/src/paraview-plugins/foamReader/plugin/CMakeLists.txt b/src/paraview-plugins/foamReader/plugin/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..9727894a3446dbe6ad8194a17e7c6cbb6fbe2f72
--- /dev/null
+++ b/src/paraview-plugins/foamReader/plugin/CMakeLists.txt
@@ -0,0 +1,32 @@
+#-----------------------------------------------------------------------------
+# OpenFOAM reader plugin for ParaView GUI
+
+qt5_wrap_cpp(MOC_SRCS pqFoamReaderControls.h)
+
+paraview_plugin_add_property_widget(
+    KIND        GROUP_WIDGET
+    TYPE        "openfoam_reader_general_controls"
+    CLASS_NAME  pqFoamReaderControls
+    INTERFACES  IFACES0
+    SOURCES     IFACES0_SRCS)
+
+set(BUILD_SHARED_LIBS_BACKUP ${BUILD_SHARED_LIBS})
+set(BUILD_SHARED_LIBS ON)
+paraview_add_plugin(ParaFoamReader
+    VERSION "${foam_api}"
+    UI_INTERFACES
+        ${IFACES0}
+    SOURCES
+        ${IFACES0_SRCS}
+        ${MOC_SRCS}
+        pqFoamReaderControls.cxx
+    MODULES FoamReader
+    MODULE_FILES "${CMAKE_CURRENT_SOURCE_DIR}/reader/vtk.module"
+    SERVER_MANAGER_XML ParaFoamReader.xml
+)
+set(BUILD_SHARED_LIBS ${BUILD_SHARED_LIBS_BACKUP})
+
+target_link_libraries(ParaFoamReader
+  PUBLIC ParaView::pqApplicationComponents)
+
+#-----------------------------------------------------------------------------
diff --git a/src/paraview-plugins/foamReader/plugin/paraview.plugin b/src/paraview-plugins/foamReader/plugin/paraview.plugin
new file mode 100644
index 0000000000000000000000000000000000000000..5699c8cd20affba8d2005a6335325c6e993d15ad
--- /dev/null
+++ b/src/paraview-plugins/foamReader/plugin/paraview.plugin
@@ -0,0 +1,12 @@
+NAME
+  ParaFoamReader
+DESCRIPTION
+  Provides an OpenFOAM reader plugin for ParaView GUI
+CONDITION
+  PARAVIEW_BUILD_QT_GUI
+REQUIRES_MODULES
+  ParaView::Core
+  ParaView::ClientServerCoreCore
+  ParaView::ServerManagerCore
+  ParaView::ServerManagerRendering
+  ParaView::pqApplicationComponents
diff --git a/src/paraview-plugins/foamReader/plugin/reader/CMakeLists.txt b/src/paraview-plugins/foamReader/plugin/reader/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..54a2bd605d2fb46387ca293be3cb97929de80292
--- /dev/null
+++ b/src/paraview-plugins/foamReader/plugin/reader/CMakeLists.txt
@@ -0,0 +1,66 @@
+#-----------------------------------------------------------------------------
+set(classes vtkPVFoamReader)
+
+vtk_module_add_module(FoamReader
+  FORCE_STATIC
+  CLASSES ${classes})
+
+target_include_directories(FoamReader
+    PUBLIC
+    ${LIB_SRC}/OpenFOAM/include
+    ${LIB_SRC}/OpenFOAM/lnInclude
+    ${LIB_SRC}/OSspecific/${WM_OSTYPE}/lnInclude
+    ${LIB_SRC}/fileFormats/lnInclude
+    ${LIB_SRC}/conversion/lnInclude
+    ${LIB_SRC}/finiteArea/lnInclude
+    ${LIB_SRC}/finiteVolume/lnInclude
+    ${PROJECT_SOURCE_DIR}/../common
+    ${PROJECT_SOURCE_DIR}/library
+)
+
+set(OPENFOAM_LIBNAMES
+    OpenFOAM
+    fileFormats
+    conversion
+    finiteArea
+    finiteVolume
+)
+
+
+# With cmake 3.12 and newer, can simply use target_link_directories
+
+# target_link_directories(FoamReader
+#     PUBLIC
+#     $ENV{FOAM_LIBBIN}
+# )
+
+# target_link_libraries(FoamReader
+#     PUBLIC
+#     vtkPVFoamCommon${foamPvLibQualifier}
+#     vtkPVFoamReader${foamPvLibQualifier}
+#     ${OPENFOAM_LIBNAMES}
+# )
+
+
+# Older cmake. Do manually
+
+link_directories(
+    $ENV{FOAM_LIBBIN}
+)
+
+unset(OPENFOAM_LIBS)
+
+foreach(libname ${OPENFOAM_LIBNAMES})
+    unset(libpath CACHE)
+    find_library(libpath ${libname} PATHS $ENV{FOAM_LIBBIN})
+    list(APPEND OPENFOAM_LIBS ${libpath})
+endforeach(libname)
+
+target_link_libraries(FoamReader
+    PUBLIC
+    vtkPVFoamCommon${foamPvLibQualifier}
+    vtkPVFoamReader${foamPvLibQualifier}
+    ${OPENFOAM_LIBS}
+)
+
+#-----------------------------------------------------------------------------
diff --git a/src/paraview-plugins/foamReader/plugin/reader/vtk.module b/src/paraview-plugins/foamReader/plugin/reader/vtk.module
new file mode 100644
index 0000000000000000000000000000000000000000..a750e5aa435ad30c184cccd14ca62fb4ee690223
--- /dev/null
+++ b/src/paraview-plugins/foamReader/plugin/reader/vtk.module
@@ -0,0 +1,9 @@
+NAME
+  FoamReader
+DEPENDS
+  VTK::CommonCore
+  VTK::CommonDataModel
+  VTK::CommonExecutionModel
+PRIVATE_DEPENDS
+  ParaView::pqCore
+  ParaView::ServerManagerRendering