diff --git a/README.md b/README.md
index 10d03630a1..069ab3f3ec 100644
--- a/README.md
+++ b/README.md
@@ -24,7 +24,8 @@ Dependencies
* [SWIG](http://www.swig.org/), [Python](https://www.python.org/) libraries - *optional*
For building the IfcOpenShell Python interface and the Blender add-on
* 3ds Max SDK - *optional*
- For building the 3ds Max plug-in
+ For building the 3ds Max plug-in.
+ All recent versions of 3ds Max (2014 and newer) are 64-bit only, so a 64-bit installation is assumed.
Compiling on Windows
diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt
index 71963665ca..27e71cb278 100644
--- a/cmake/CMakeLists.txt
+++ b/cmake/CMakeLists.txt
@@ -29,6 +29,7 @@ OPTION(USE_IFC4 "Use IFC 4 instead of IFC 2x3 (full rebuild recommended when swi
OPTION(BUILD_IFCPYTHON "Build IfcPython." ON)
OPTION(BUILD_EXAMPLES "Build example applications." ON)
OPTION(USE_VLD "Use Visual Leak Detector for debugging memory leaks, MSVC-only." OFF)
+OPTION(BUILD_IFCMAX "Build IfcMax, a 3ds Max plug-in, Windows-only." OFF)
# TODO QtViewer is deprecated ATM as it uses the 0.4 API
# OPTION(BUILD_QTVIEWER "Build IfcOpenShell Qt GUI Viewer (requires Qt 4 framework)." OFF)
@@ -48,6 +49,9 @@ UNIFY_ENVVARS_AND_CACHE(OPENCOLLADA_INCLUDE_DIR)
UNIFY_ENVVARS_AND_CACHE(OPENCOLLADA_LIBRARY_DIR)
UNIFY_ENVVARS_AND_CACHE(PCRE_LIBRARY_DIR)
UNIFY_ENVVARS_AND_CACHE(PYTHON_EXECUTABLE)
+IF(WIN32)
+ UNIFY_ENVVARS_AND_CACHE(THREEDS_MAX_SDK_HOME)
+ENDIF()
# Find Boost
IF(MSVC)
@@ -419,6 +423,10 @@ IF(BUILD_EXAMPLES)
ADD_SUBDIRECTORY(../src/examples examples)
ENDIF()
+IF(BUILD_IFCMAX)
+ ADD_SUBDIRECTORY(../src/ifcmax ifcmax)
+ENDIF()
+
# CMake installation targets
INSTALL(FILES ${IFCPARSE_H_FILES} DESTINATION include/ifcparse)
INSTALL(FILES ${IFCGEOM_H_FILES} DESTINATION include/ifcgeom)
diff --git a/src/ifcmax/CMakeLists.txt b/src/ifcmax/CMakeLists.txt
new file mode 100644
index 0000000000..923532b073
--- /dev/null
+++ b/src/ifcmax/CMakeLists.txt
@@ -0,0 +1,39 @@
+################################################################################
+# #
+# This file is part of IfcOpenShell. #
+# #
+# IfcOpenShell is free software: you can redistribute it and/or modify #
+# it under the terms of the Lesser GNU General Public License as published by #
+# the Free Software Foundation, either version 3.0 of the License, or #
+# (at your option) any later version. #
+# #
+# IfcOpenShell is distributed in the hope that it will be useful, #
+# but WITHOUT ANY WARRANTY; without even the implied warranty of #
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
+# Lesser GNU General Public License for more details. #
+# #
+# You should have received a copy of the Lesser GNU General Public License #
+# along with this program. If not, see . #
+# #
+################################################################################
+
+INCLUDE_DIRECTORIES(${INCLUDE_DIRECTORIES} ${OCC_INCLUDE_DIR} ${OPENCOLLADA_INCLUDE_DIRS} ${ICU_INCLUDE_DIR}
+ ${Boost_INCLUDE_DIRS} ${THREEDS_MAX_SDK_HOME}/include
+)
+
+# All recent versions of 3ds Max (2014 and newer) are 64-bit only so assume lib/x64 directory
+LINK_DIRECTORIES(${LINK_DIRECTORIES} ${IfcOpenShell_BINARY_DIR} ${OCC_LIBRARY_DIR} ${OPENCOLLADA_LIBRARY_DIR}
+ ${ICU_LIBRARY_DIR} ${Boost_LIBRARY_DIRS} ${THREEDS_MAX_SDK_HOME}/lib/x64/Release
+)
+
+ADD_LIBRARY(IfcMax SHARED IfcMax.h IfcMax.cpp)
+
+TARGET_LINK_LIBRARIES(IfcMax IfcParse IfcGeom Comctl32.lib zlibdll.lib bmm.lib core.lib CustDlg.lib edmodel.lib expr.lib
+ flt.lib geom.lib gfx.lib gup.lib imageViewers.lib ManipSys.lib maxnet.lib Maxscrpt.lib
+ maxutil.lib MenuMan.lib menus.lib mesh.lib MNMath.lib Paramblk2.lib particle.lib Poly.lib RenderUtil.lib
+ tessint.lib viewfile.lib ${OPENCASCADE_LIBRARIES}
+)
+
+SET_TARGET_PROPERTIES(IfcMax PROPERTIES SUFFIX ".dli")
+
+INSTALL(TARGETS IfcMax RUNTIME DESTINATION bin)
diff --git a/src/ifcmax/IfcMax.cpp b/src/ifcmax/IfcMax.cpp
index dde5cc8547..46bf0f39f8 100644
--- a/src/ifcmax/IfcMax.cpp
+++ b/src/ifcmax/IfcMax.cpp
@@ -20,49 +20,54 @@
#include