diff --git a/.gitignore b/.gitignore
index 65e463fd0f63efb968e1877046f3f020b03d072d..df9d14471f99b82edfa3c97279e146aff645a160 100644
--- a/.gitignore
+++ b/.gitignore
@@ -116,6 +116,8 @@ Introjucer/Builds/MacOSX/The Introjucer.xcodeproj/*.pbxuser
 Introjucer/Builds/MacOSX/The Introjucer.xcodeproj/xcuserdata
 Introjucer/Builds/MacOSX/The Introjucer.xcodeproj/project.xcworkspace
 Introjucer/Builds/MacOSX/build
+Projucer/Builds/MacOSX/Projucer.xcodeproj/xcuserdata
+Projucer/Builds/MacOSX/Projucer.xcodeproj/project.xcworkspace
 
 # 9. Plugin build dirs
 build/
diff --git a/Builds/MacOSX/Plugins/Config/Plugin.xcconfig b/Builds/MacOSX/Plugins/Config/Plugin.xcconfig
index bd6f72140ea786656ceb0039af7a75e1f0ad1bd6..02a08aba05f5b0ba5c2fa4f4ff3e57a97fd58a75 100644
--- a/Builds/MacOSX/Plugins/Config/Plugin.xcconfig
+++ b/Builds/MacOSX/Plugins/Config/Plugin.xcconfig
@@ -32,7 +32,6 @@ DEBUG_INFORMATION_FORMAT = dwarf
 ENABLE_STRICT_OBJC_MSGSEND = YES
 GCC_C_LANGUAGE_STANDARD = c99
 GCC_GENERATE_DEBUGGING_SYMBOLS = YES
-GCC_INLINES_ARE_PRIVATE_EXTERN = YES
 GCC_NO_COMMON_BLOCKS = YES
 GCC_OPTIMIZATION_LEVEL = 3
 GCC_PREPROCESSOR_DEFINITIONS = $(inherited) OEPLUGIN JUCER_XCODE_MAC_F6D2F4CF=1 JUCE_APP_VERSION=0.4.1 JUCE_APP_VERSION_HEX=0x401
diff --git a/Builds/MacOSX/Plugins/Config/Plugin_Debug.xcconfig b/Builds/MacOSX/Plugins/Config/Plugin_Debug.xcconfig
index 29c8d2333a77469fe2ceeb0fdaaff23a1c6353be..24d46f6a8f04c87e2b99fdbc4576f35a528f663c 100644
--- a/Builds/MacOSX/Plugins/Config/Plugin_Debug.xcconfig
+++ b/Builds/MacOSX/Plugins/Config/Plugin_Debug.xcconfig
@@ -2,6 +2,7 @@
 
 ENABLE_TESTABILITY = YES
 GCC_DYNAMIC_NO_PIC = NO
+GCC_INLINES_ARE_PRIVATE_EXTERN = NO
 GCC_PREPROCESSOR_DEFINITIONS = $(inherited) DEBUG=1 _DEBUG=1
 MTL_ENABLE_DEBUG_INFO = YES
 ONLY_ACTIVE_ARCH = YES
diff --git a/Builds/MacOSX/open-ephys.xcodeproj/project.pbxproj b/Builds/MacOSX/open-ephys.xcodeproj/project.pbxproj
index 9d405e3be649fa8d4c62751d8a8dc441ddd0c831..df6a97eacfa8b27fab762b2e8aef28da47613946 100644
--- a/Builds/MacOSX/open-ephys.xcodeproj/project.pbxproj
+++ b/Builds/MacOSX/open-ephys.xcodeproj/project.pbxproj
@@ -2020,7 +2020,7 @@
 					9069CE21141F5A4C5721BCF3,
 					65F4459CC1832883FFF6C166,
 					9069CE21141F5A4C5721BCF3, ); name = "juce_audio_devices"; sourceTree = "<group>"; };
-		43D700D1965DF684964ACAE6 = {isa = PBXGroup; children = (
+		217479BAEDCDC02C29C466EB = {isa = PBXGroup; children = (
 					B47FEE41896F01CE6EB42B36,
 					92A6643073EB8E38F6BBD39C,
 					30B1B20F186FC5FBA93D4C90,
@@ -2037,15 +2037,15 @@
 					9493FB479E4B4FA2D5C86724,
 					BE15A2B0B537B5CC343EF6F9,
 					63E801199DEC51DCFBB61890, ); name = private; sourceTree = "<group>"; };
-		81ED6AB2A5472FC995B6653F = {isa = PBXGroup; children = (
+		35E22AE46A6F6A700C3B3D94 = {isa = PBXGroup; children = (
 					AC91C85D2437C7D1286AFAAB,
 					D1B150DF1455287F67E629B2,
 					FE88B876367616EBFEA00713, ); name = protected; sourceTree = "<group>"; };
-		178CBDC0FAC7D537E3CC7E78 = {isa = PBXGroup; children = (
-					43D700D1965DF684964ACAE6,
-					81ED6AB2A5472FC995B6653F, ); name = include; sourceTree = "<group>"; };
-		DC301071305052CAAA2F0AB6 = {isa = PBXGroup; children = (
-					178CBDC0FAC7D537E3CC7E78,
+		17A7656AF0E66E5C7AD93D8E = {isa = PBXGroup; children = (
+					217479BAEDCDC02C29C466EB,
+					35E22AE46A6F6A700C3B3D94, ); name = include; sourceTree = "<group>"; };
+		2FC2E6E13664F64828C03461 = {isa = PBXGroup; children = (
+					17A7656AF0E66E5C7AD93D8E,
 					AD9B515651FF2143CA089351,
 					6C12F08C8B6CBD125DC897AF,
 					5F8BCA4580A738F645A05D8A,
@@ -2062,7 +2062,7 @@
 					D45F7C723822356F362B8262,
 					AF2216C76163EB0A76390FE9, ); name = libFLAC; sourceTree = "<group>"; };
 		1EA82693D5711953C949B39F = {isa = PBXGroup; children = (
-					DC301071305052CAAA2F0AB6,
+					2FC2E6E13664F64828C03461,
 					C68F078AF94886343CBF6DAD,
 					18ADA4B7F8ABC14FC3ABCD39,
 					BFD1914F80C897BF775D7C92,
@@ -3340,6 +3340,7 @@
 				CONFIGURATION_BUILD_DIR = "$(PROJECT_DIR)/build/$(CONFIGURATION)";
 				COPY_PHASE_STRIP = NO;
 				GCC_DYNAMIC_NO_PIC = NO;
+				GCC_INLINES_ARE_PRIVATE_EXTERN = NO;
 				GCC_OPTIMIZATION_LEVEL = 3;
 				GCC_PREPROCESSOR_DEFINITIONS = (
 					"_DEBUG=1",
diff --git a/PluginGenerator/JuceLibraryCode/BinaryData.cpp b/PluginGenerator/JuceLibraryCode/BinaryData.cpp
index c91014dbec17e5681996655e64a0df5ca4c7d010..ff01c2aa8d0c5a6a7e300336e6f09d95f3d4c0ed 100644
--- a/PluginGenerator/JuceLibraryCode/BinaryData.cpp
+++ b/PluginGenerator/JuceLibraryCode/BinaryData.cpp
@@ -610,7 +610,7 @@ static const unsigned char temp_binary_data_6[] =
 "    #include <Windows.h>\n"
 "    #define EXPORT __declspec(dllexport)\n"
 "#else\n"
-"    #define EXPORT\n"
+"    #define EXPORT __attribute__((visibility(\"default\")))\n"
 "#endif\n"
 "\n"
 "using namespace Plugin;\n"
@@ -6076,7 +6076,7 @@ const char* getNamedResource (const char* resourceNameUTF8, int& numBytes) throw
         case 0x9a9516bc:  numBytes = 1817; return openEphys_DataThreadPluginTemplate_h;
         case 0xd768da9a:  numBytes = 1487; return openEphys_FileSourcePluginTemplate_cpp;
         case 0xdc872b1f:  numBytes = 1450; return openEphys_FileSourcePluginTemplate_h;
-        case 0x354e9a48:  numBytes = 4216; return openEphys_OpenEphysLibTemplate_cpp;
+        case 0x354e9a48:  numBytes = 4255; return openEphys_OpenEphysLibTemplate_cpp;
         case 0xbf9557ba:  numBytes = 923; return openEphys_PluginMakefile_example;
         case 0x0d98caa2:  numBytes = 2993; return openEphys_ProcessorContentComponentTemplate_cpp;
         case 0x20837d27:  numBytes = 2348; return openEphys_ProcessorContentComponentTemplate_h;
diff --git a/PluginGenerator/JuceLibraryCode/BinaryData.h b/PluginGenerator/JuceLibraryCode/BinaryData.h
index 98fd2224fc609075c02d08cd1323deb9402c8872..bb16afc9909a5268465c4c05d9b767b084f3cca6 100644
--- a/PluginGenerator/JuceLibraryCode/BinaryData.h
+++ b/PluginGenerator/JuceLibraryCode/BinaryData.h
@@ -28,7 +28,7 @@ namespace BinaryData
     const int            openEphys_FileSourcePluginTemplate_hSize = 1450;
 
     extern const char*   openEphys_OpenEphysLibTemplate_cpp;
-    const int            openEphys_OpenEphysLibTemplate_cppSize = 4216;
+    const int            openEphys_OpenEphysLibTemplate_cppSize = 4255;
 
     extern const char*   openEphys_PluginMakefile_example;
     const int            openEphys_PluginMakefile_exampleSize = 923;
diff --git a/Source/Plugins/ArduinoOutput/OpenEphysLib.cpp b/Source/Plugins/ArduinoOutput/OpenEphysLib.cpp
index d564b4def3f00f75da11e0dee1183210939c6544..b77ef50226fd7f9ee230875767fb3fc9fc89c4c0 100644
--- a/Source/Plugins/ArduinoOutput/OpenEphysLib.cpp
+++ b/Source/Plugins/ArduinoOutput/OpenEphysLib.cpp
@@ -28,7 +28,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #include <Windows.h>
 #define EXPORT __declspec(dllexport)
 #else
-#define EXPORT
+#define EXPORT __attribute__((visibility("default")))
 #endif
 
 using namespace Plugin;
diff --git a/Source/Plugins/BasicSpikeDisplay/OpenEphysLib.cpp b/Source/Plugins/BasicSpikeDisplay/OpenEphysLib.cpp
index fc63bf6cf1c6fb47616c9b33d33ae294e3fa15b3..1260bd62ac5518a27fc2c8fee5148045910c5ecf 100644
--- a/Source/Plugins/BasicSpikeDisplay/OpenEphysLib.cpp
+++ b/Source/Plugins/BasicSpikeDisplay/OpenEphysLib.cpp
@@ -29,7 +29,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #include <Windows.h>
 #define EXPORT __declspec(dllexport)
 #else
-#define EXPORT
+#define EXPORT __attribute__((visibility("default")))
 #endif
 
 using namespace Plugin;
diff --git a/Source/Plugins/BinaryWriter/OpenEphysLib.cpp b/Source/Plugins/BinaryWriter/OpenEphysLib.cpp
index 0c8f7e3de94644a2b575fcd6158373833da14457..4f5679530f00050aec315534c8005d465ad82189 100644
--- a/Source/Plugins/BinaryWriter/OpenEphysLib.cpp
+++ b/Source/Plugins/BinaryWriter/OpenEphysLib.cpp
@@ -28,7 +28,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #include <Windows.h>
 #define EXPORT __declspec(dllexport)
 #else
-#define EXPORT
+#define EXPORT __attribute__((visibility("default")))
 #endif
 
 
diff --git a/Source/Plugins/CAR/OpenEphysLib.cpp b/Source/Plugins/CAR/OpenEphysLib.cpp
index f589163f9980685e23aaa8169f1821d000e13f0f..e4d9b3efc1fdf19dba3e23844eb39ca273811293 100644
--- a/Source/Plugins/CAR/OpenEphysLib.cpp
+++ b/Source/Plugins/CAR/OpenEphysLib.cpp
@@ -28,7 +28,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #include <Windows.h>
 #define EXPORT __declspec(dllexport)
 #else
-#define EXPORT
+#define EXPORT __attribute__((visibility("default")))
 #endif
 
 using namespace Plugin;
diff --git a/Source/Plugins/ChannelMappingNode/OpenEphysLib.cpp b/Source/Plugins/ChannelMappingNode/OpenEphysLib.cpp
index 3ad2a98fe28f2cd7b699fd6a02fe6d5e11b3b943..0345874ef889619d40772610c82109ea642501bc 100644
--- a/Source/Plugins/ChannelMappingNode/OpenEphysLib.cpp
+++ b/Source/Plugins/ChannelMappingNode/OpenEphysLib.cpp
@@ -28,7 +28,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #include <Windows.h>
 #define EXPORT __declspec(dllexport)
 #else
-#define EXPORT
+#define EXPORT __attribute__((visibility("default")))
 #endif
 
 using namespace Plugin;
diff --git a/Source/Plugins/EcubeSource/OpenEphysLib.cpp b/Source/Plugins/EcubeSource/OpenEphysLib.cpp
index e446f3c253bea18c7e9c999c04f563c26d27dab2..d4872f70083e2651c141281fce0b44dcef3364d9 100644
--- a/Source/Plugins/EcubeSource/OpenEphysLib.cpp
+++ b/Source/Plugins/EcubeSource/OpenEphysLib.cpp
@@ -28,7 +28,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #include <Windows.h>
 #define EXPORT __declspec(dllexport)
 #else
-#define EXPORT
+#define EXPORT __attribute__((visibility("default")))
 #endif
 
 using namespace Plugin;
diff --git a/Source/Plugins/EventBroadcaster/OpenEphysLib.cpp b/Source/Plugins/EventBroadcaster/OpenEphysLib.cpp
index 302b5da63477f283374aa8cc7fc61cf9ab54d489..7c4975352201646e579b4ee34f14a6447a60c10b 100644
--- a/Source/Plugins/EventBroadcaster/OpenEphysLib.cpp
+++ b/Source/Plugins/EventBroadcaster/OpenEphysLib.cpp
@@ -28,7 +28,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #include <Windows.h>
 #define EXPORT __declspec(dllexport)
 #else
-#define EXPORT
+#define EXPORT __attribute__((visibility("default")))
 #endif
 
 using namespace Plugin;
diff --git a/Source/Plugins/FilterNode/OpenEphysLib.cpp b/Source/Plugins/FilterNode/OpenEphysLib.cpp
index 0a012841b5c2177729a4f782c21871057ddb3ccd..a945d2969b19f10613a2f9e7fa975da761bf63d7 100644
--- a/Source/Plugins/FilterNode/OpenEphysLib.cpp
+++ b/Source/Plugins/FilterNode/OpenEphysLib.cpp
@@ -28,7 +28,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #include <Windows.h>
 #define EXPORT __declspec(dllexport)
 #else
-#define EXPORT
+#define EXPORT __attribute__((visibility("default")))
 #endif
 
 using namespace Plugin;
diff --git a/Source/Plugins/JuliaProcessor/OpenEphysLib.cpp b/Source/Plugins/JuliaProcessor/OpenEphysLib.cpp
index 56e0f50192179233e86db52e33eb12645d735912..189d524e917b47a77d329c848787e4b61363e81e 100644
--- a/Source/Plugins/JuliaProcessor/OpenEphysLib.cpp
+++ b/Source/Plugins/JuliaProcessor/OpenEphysLib.cpp
@@ -28,7 +28,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #include <Windows.h>
 #define EXPORT __declspec(dllexport)
 #else
-#define EXPORT
+#define EXPORT __attribute__((visibility("default")))
 #endif
 
 using namespace Plugin;
diff --git a/Source/Plugins/KWIKFormat/OpenEphysLib.cpp b/Source/Plugins/KWIKFormat/OpenEphysLib.cpp
index 07420b133e557a057693959ff97ca5b584eaa1f7..ed107bdc4cfa7ccc94e857fa7ffb2849990d94fc 100644
--- a/Source/Plugins/KWIKFormat/OpenEphysLib.cpp
+++ b/Source/Plugins/KWIKFormat/OpenEphysLib.cpp
@@ -29,7 +29,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #include <Windows.h>
 #define EXPORT __declspec(dllexport)
 #else
-#define EXPORT
+#define EXPORT __attribute__((visibility("default")))
 #endif
 
 
diff --git a/Source/Plugins/LfpDisplayNode/OpenEphysLib.cpp b/Source/Plugins/LfpDisplayNode/OpenEphysLib.cpp
index d2826342f5f94ca828aaf9224ae37cdcab3b82e6..e036db1f9b67bcdb4d9d8a6ff738ccb26f5086bf 100644
--- a/Source/Plugins/LfpDisplayNode/OpenEphysLib.cpp
+++ b/Source/Plugins/LfpDisplayNode/OpenEphysLib.cpp
@@ -28,7 +28,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #include <Windows.h>
 #define EXPORT __declspec(dllexport)
 #else
-#define EXPORT
+#define EXPORT __attribute__((visibility("default")))
 #endif
 
 using namespace Plugin;
diff --git a/Source/Plugins/LfpDisplayNodeBeta/OpenEphysLib.cpp b/Source/Plugins/LfpDisplayNodeBeta/OpenEphysLib.cpp
index e24876c0f96e847effb563af7ac77403e7819134..ab7605a4ca9c1646c4a3040f514ede63a472673b 100644
--- a/Source/Plugins/LfpDisplayNodeBeta/OpenEphysLib.cpp
+++ b/Source/Plugins/LfpDisplayNodeBeta/OpenEphysLib.cpp
@@ -28,7 +28,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #include <Windows.h>
 #define EXPORT __declspec(dllexport)
 #else
-#define EXPORT
+#define EXPORT __attribute__((visibility("default")))
 #endif
 
 using namespace Plugin;
diff --git a/Source/Plugins/NetworkEvents/OpenEphysLib.cpp b/Source/Plugins/NetworkEvents/OpenEphysLib.cpp
index f3f9e804d58d9a18cc70c6a4b40019de1719ba10..c56aabb9fd72640e5bf46e8ba487cd70c6f22bef 100644
--- a/Source/Plugins/NetworkEvents/OpenEphysLib.cpp
+++ b/Source/Plugins/NetworkEvents/OpenEphysLib.cpp
@@ -28,7 +28,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #include <Windows.h>
 #define EXPORT __declspec(dllexport)
 #else
-#define EXPORT
+#define EXPORT __attribute__((visibility("default")))
 #endif
 
 using namespace Plugin;
diff --git a/Source/Plugins/PCIeRhythm/OpenEphysLib.cpp b/Source/Plugins/PCIeRhythm/OpenEphysLib.cpp
index 390227fc9c00efda4bbee4684a7c5a6197410c58..8e932252c35eeeb8435074f41c92127939c97b1d 100644
--- a/Source/Plugins/PCIeRhythm/OpenEphysLib.cpp
+++ b/Source/Plugins/PCIeRhythm/OpenEphysLib.cpp
@@ -28,7 +28,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #include <Windows.h>
 #define EXPORT __declspec(dllexport)
 #else
-#define EXPORT
+#define EXPORT __attribute__((visibility("default")))
 #endif
 
 using namespace Plugin;
diff --git a/Source/Plugins/PhaseDetector/OpenEphysLib.cpp b/Source/Plugins/PhaseDetector/OpenEphysLib.cpp
index 698b59a7ee67f926d437698147c70c2ab0577c3e..efc48b41281dd0a9b6163303e90ef144ceb725f0 100644
--- a/Source/Plugins/PhaseDetector/OpenEphysLib.cpp
+++ b/Source/Plugins/PhaseDetector/OpenEphysLib.cpp
@@ -28,7 +28,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #include <Windows.h>
 #define EXPORT __declspec(dllexport)
 #else
-#define EXPORT
+#define EXPORT __attribute__((visibility("default")))
 #endif
 
 using namespace Plugin;
diff --git a/Source/Plugins/PulsePalOutput/OpenEphysLib.cpp b/Source/Plugins/PulsePalOutput/OpenEphysLib.cpp
index a9d0e4b46327023165ee780411b45b472898350d..19f1a87672201cf3ee7c255ee1825e9eada3d257 100644
--- a/Source/Plugins/PulsePalOutput/OpenEphysLib.cpp
+++ b/Source/Plugins/PulsePalOutput/OpenEphysLib.cpp
@@ -28,7 +28,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #include <Windows.h>
 #define EXPORT __declspec(dllexport)
 #else
-#define EXPORT
+#define EXPORT __attribute__((visibility("default")))
 #endif
 
 using namespace Plugin;
diff --git a/Source/Plugins/RecordControl/OpenEphysLib.cpp b/Source/Plugins/RecordControl/OpenEphysLib.cpp
index 8f99f8631e76cebc3843b86123b911c7eba33b10..f895f4dd853ab43bedf86b417519ed8fe132fecd 100644
--- a/Source/Plugins/RecordControl/OpenEphysLib.cpp
+++ b/Source/Plugins/RecordControl/OpenEphysLib.cpp
@@ -28,7 +28,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #include <Windows.h>
 #define EXPORT __declspec(dllexport)
 #else
-#define EXPORT
+#define EXPORT __attribute__((visibility("default")))
 #endif
 
 using namespace Plugin;
diff --git a/Source/Plugins/Rectifier/OpenEphysLib.cpp b/Source/Plugins/Rectifier/OpenEphysLib.cpp
index 16d2bae31e5505c2236b925c9140474228927000..673281f79869f2e01b28335ae7d689e2eb6cd228 100644
--- a/Source/Plugins/Rectifier/OpenEphysLib.cpp
+++ b/Source/Plugins/Rectifier/OpenEphysLib.cpp
@@ -28,7 +28,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #include <Windows.h>
 #define EXPORT __declspec(dllexport)
 #else
-#define EXPORT
+#define EXPORT __attribute__((visibility("default")))
 #endif
 
 using namespace Plugin;
diff --git a/Source/Plugins/SerialInput/OpenEphysLib.cpp b/Source/Plugins/SerialInput/OpenEphysLib.cpp
index c51ea7237bf9c0986af9dc1c67bf5d4d3bdb6f0c..25dd39c471270b88673f0e2c3a8b0695f09f30e9 100644
--- a/Source/Plugins/SerialInput/OpenEphysLib.cpp
+++ b/Source/Plugins/SerialInput/OpenEphysLib.cpp
@@ -28,7 +28,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #include <Windows.h>
 #define EXPORT __declspec(dllexport)
 #else
-#define EXPORT
+#define EXPORT __attribute__((visibility("default")))
 #endif
 
 using namespace Plugin;
diff --git a/Source/Plugins/SpikeRaster/OpenEphysLib.cpp b/Source/Plugins/SpikeRaster/OpenEphysLib.cpp
index f6784bcb2b363c880d7391b1cdd7484a70c8d74d..abc7fd079a36d46c7d55f58036ffdb0d031ca6d6 100644
--- a/Source/Plugins/SpikeRaster/OpenEphysLib.cpp
+++ b/Source/Plugins/SpikeRaster/OpenEphysLib.cpp
@@ -28,7 +28,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #include <Windows.h>
 #define EXPORT __declspec(dllexport)
 #else
-#define EXPORT
+#define EXPORT __attribute__((visibility("default")))
 #endif
 
 using namespace Plugin;
diff --git a/Source/Plugins/SpikeSorter/OpenEphysLib.cpp b/Source/Plugins/SpikeSorter/OpenEphysLib.cpp
index 2a458487ac49e490cfba5ca399cafdc0c1120592..5f6c6a285807189e39e037e563faa939e899cb56 100644
--- a/Source/Plugins/SpikeSorter/OpenEphysLib.cpp
+++ b/Source/Plugins/SpikeSorter/OpenEphysLib.cpp
@@ -28,7 +28,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #include <Windows.h>
 #define EXPORT __declspec(dllexport)
 #else
-#define EXPORT
+#define EXPORT __attribute__((visibility("default")))
 #endif
 
 using namespace Plugin;
diff --git a/Source/Processors/PluginManager/Templates/openEphys_OpenEphysLibTemplate.cpp b/Source/Processors/PluginManager/Templates/openEphys_OpenEphysLibTemplate.cpp
index 30f12a1991f6a8d3d3ccde68a87ea71f31d91a89..69071a0efb83057f07cba0ef7020e01074b29195 100644
--- a/Source/Processors/PluginManager/Templates/openEphys_OpenEphysLibTemplate.cpp
+++ b/Source/Processors/PluginManager/Templates/openEphys_OpenEphysLibTemplate.cpp
@@ -28,7 +28,7 @@
     #include <Windows.h>
     #define EXPORT __declspec(dllexport)
 #else
-    #define EXPORT
+    #define EXPORT __attribute__((visibility("default")))
 #endif
 
 using namespace Plugin;
diff --git a/Source/Processors/RecordNode/OriginalRecording.cpp b/Source/Processors/RecordNode/OriginalRecording.cpp
index b442142c5b3098306a2dc4c49949a25a4081115d..9f8d0ae116989997ddc50431f34c0e5532da9d13 100644
--- a/Source/Processors/RecordNode/OriginalRecording.cpp
+++ b/Source/Processors/RecordNode/OriginalRecording.cpp
@@ -527,6 +527,7 @@ void OriginalRecording::writeContinuousBuffer(const float* data, int nSamples, i
     //std::cout << channel << " : " << nSamples << " : " << count << std::endl;
 
     jassert(count == nSamples); // make sure all the data was written
+    (void)count;  // Suppress unused variable warning in release builds
 
     diskWriteLock.exit();
 
@@ -719,4 +720,4 @@ RecordEngineManager* OriginalRecording::getEngineManager()
     param = new EngineParameter(EngineParameter::STR, 2, "Renamed files prefix", "CH");
     man->addParameter(param);
     return man;
-}
\ No newline at end of file
+}
diff --git a/open-ephys.jucer b/open-ephys.jucer
index d9dc3f9faaf70416cea010b1370deb315b54ff21..c8fa95d4d9582d25f91964bc28fb1541d9d48a0e 100644
--- a/open-ephys.jucer
+++ b/open-ephys.jucer
@@ -45,7 +45,7 @@
       <CONFIGURATIONS>
         <CONFIGURATION name="Debug" isDebug="1" optimisation="3" targetName="open-ephys"
                        osxSDK="default" osxCompatibility="10.9 SDK" osxArchitecture="default"
-                       headerPath="JuceLibraryCode/" libraryPath="" defines=""/>
+                       headerPath="JuceLibraryCode/" libraryPath="" defines="" customXcodeFlags="GCC_INLINES_ARE_PRIVATE_EXTERN = NO"/>
         <CONFIGURATION name="Release" isDebug="0" optimisation="3" targetName="open-ephys"
                        osxSDK="default" osxCompatibility="10.9 SDK" osxArchitecture="default"
                        headerPath="JuceLibraryCode/" libraryPath="" defines=""/>