diff --git a/binaries/data/config/default.cfg b/binaries/data/config/default.cfg
index f02f2ed..486080f 100644
--- a/binaries/data/config/default.cfg
diff --git a/build/premake/premake4.lua b/build/premake/premake4.lua
index 72422e8..a38a5c2 100644
--- a/build/premake/premake4.lua
+++ b/build/premake/premake4.lua
@@ -26,7 +26,7 @@ rootdir = "../.."
 
 dofile("extern_libs4.lua")
 
--- detect CPU architecture (simplistic, currently only supports x86 and amd64)
+-- detect CPU architecture (simplistic, currently only supports x86, amd64 and ARM)
 arch = "x86"
 if _OPTIONS["android"] then
 	arch = "arm"
@@ -47,6 +47,8 @@ else
 			arch = "amd64"
 		elseif string.find(machine, "i.86") == 1 then
 			arch = "x86"
+		elseif string.find(machine, "arm") == 1 then
+			arch = "arm"
 		else
 			print("WARNING: Cannot determine architecture from GCC, assuming x86")
 		end
@@ -263,8 +265,8 @@ function project_set_build_flags()
 				-- disable warnings about va_list ABI change
 				buildoptions { "-Wno-psabi" }
 
-				-- target Cortex-A9 CPUs with NEON
-				buildoptions { "-mthumb -mcpu=cortex-a9 -mfpu=neon -mfloat-abi=softfp" }
+				-- target Cortex-A15 CPUs with NEON
+				buildoptions { "-mtune=cortex-a15 -mfpu=neon-vfpv4 -mfloat-abi=hard -Ofast" }
 			end
 
 			if _OPTIONS["coverage"] then
diff --git a/libraries/source/fcollada/src/FCollada/FUtils/FUAssert.cpp b/libraries/source/fcollada/src/FCollada/FUtils/FUAssert.cpp
index 9e7651e..12770a9 100644
--- a/libraries/source/fcollada/src/FCollada/FUtils/FUAssert.cpp
+++ b/libraries/source/fcollada/src/FCollada/FUtils/FUAssert.cpp
@@ -44,6 +44,8 @@ bool FUAssertion::OnAssertionFailed(const char* file, uint32 line)
 #elif defined (__APPLE__)
 		Debugger();
 		//SysBreak();
+#elif defined (__arm__)
+		__asm__("bkpt 0");
 #else
 		// AFAIK This is available on all X86 platforms
 		__asm__("int $0x03");
diff --git a/libraries/source/fcollada/src/Makefile b/libraries/source/fcollada/src/Makefile
index 90d6d1b..341cb11 100644
--- a/libraries/source/fcollada/src/Makefile
+++ b/libraries/source/fcollada/src/Makefile
@@ -1,4 +1,5 @@
 OS_ARCH := $(shell uname -s)
+OS_CPU := $(shell uname -p)
 
 ifeq ($(OS_ARCH),Darwin)
 PIC_FLAGS ?= -fPIC
@@ -9,10 +10,17 @@ endif
 
 CXX ?= g++
 CXXFLAGS += -fvisibility=hidden -W -Wall -Wno-unused-parameter -Wno-unused-function $(OS_DEFINE) $(PIC_FLAGS) $(CPPFLAGS)
-CXXFLAGS_DEBUG := -O0 -g -D_DEBUG -DRETAIL
+# If we're compiling on ARM, target Cortex-A15 CPUs with NEON on GCC >4.3 ***KEEP THESE OPTIONS IN SYNC WITH PREMAKE***
+ifeq (&(OS_CPU),armv7l)
+CXXFLAGS_RELEASE := -Ofast -DNDEBUG -DRETAIL -mtune=cortex-a15 -mfpu=neon-vfpv4 -mfloat-abi=hard
+CXXFLAGS_DEBUG := -O0 -g -D_DEBUG -DRETAIL  -mtune=cortex-a15 -mfpu=neon-vfpv4 -mfloat-abi=hard
+CXXFLAGS_TEST := -O0 -g -D_DEBUG  -mtune=cortex-a15 -mfpu=neon-vfpv4 -mfloat-abi=hard
+else
 CXXFLAGS_RELEASE := -O1 -DNDEBUG -DRETAIL
-# (-O2 with gcc 4.3 causes linker errors when using this library, for unknown reasons, so stick with -O1)
+CXXFLAGS_DEBUG := -O0 -g -D_DEBUG -DRETAIL
 CXXFLAGS_TEST := -O0 -g -D_DEBUG
+# (-O2 with gcc 4.3 causes linker errors when using this library, for unknown reasons, so stick with -O1)
+endif
 LIBS += `pkg-config libxml-2.0 --libs`
 INCLUDES += -IFCollada `pkg-config libxml-2.0 --cflags`
 INCLUDES_TEST := -IFCollada/FColladaTest $(INCLUDES)
diff --git a/libraries/source/nvtt/src/src/nvcore/nvcore.h b/libraries/source/nvtt/src/src/nvcore/nvcore.h
index 5de942d..21bf202 100644
--- a/libraries/source/nvtt/src/src/nvcore/nvcore.h
+++ b/libraries/source/nvtt/src/src/nvcore/nvcore.h
@@ -67,6 +67,7 @@
 // NV_CPU_X86
 // NV_CPU_X86_64
 // NV_CPU_PPC
+// NV_CPU_ARM
 
 #define NV_CPU_STRING 	POSH_CPU_STRING
 
@@ -76,6 +77,8 @@
 #	define NV_CPU_X86 1
 #elif defined POSH_CPU_PPC
 #	define NV_CPU_PPC 1
+#elif defined POSH_CPU_STRONGARM
+#	define NV_CPU_ARM 1
 #else
 #	error "Unsupported CPU"
 #endif
diff --git a/source/lib/sysdep/arch/arm/arm.cpp b/source/lib/sysdep/arch/arm/arm.cpp
index 867e80c..b9b85d5 100644
--- a/source/lib/sysdep/arch/arm/arm.cpp
+++ b/source/lib/sysdep/arch/arm/arm.cpp
@@ -28,7 +28,6 @@
 
 #include "lib/sysdep/cpu.h"
 
-#include <android/log.h>
 intptr_t cpu_AtomicAdd(volatile intptr_t* location, intptr_t increment)
 {
 	return __sync_fetch_and_add(location, increment);
@@ -41,21 +40,7 @@ bool cpu_CAS(volatile intptr_t* location, intptr_t expected, intptr_t newValue)
 
 bool cpu_CAS64(volatile i64* location, i64 expected, i64 newValue)
 {
-	// Current versions of GCC don't implement this on ARM:
-	//   return __sync_bool_compare_and_swap(location, expected, newValue);
-	
-	// http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=40fb79c8a88625504857d44de1bc89dc0341e618
-	// adds support for
-	//   return __kernel_cmpxchg64(&expected, &newValue, (long long*)location) == 0;
-	// but only for Linux kernel 3.1
-	
-	// Maybe we can do it with user-space assembly assuming a modern-enough CPU?
-	// That sounds non-trivial so let's just cheat
-#warning TODO: atomic cpu_CAS64 on ARM
-	if (*location != expected)
-		return false;
-	*location = newValue;
-	return true;
+	return __sync_bool_compare_and_swap(location, expected, newValue);
 }
 
 const char* cpu_IdentifierString()
