Index: trunk/src/core/logger.cc
===================================================================
--- trunk/src/core/logger.cc	(revision 374)
+++ trunk/src/core/logger.cc	(revision 376)
@@ -8,5 +8,5 @@
 #include "nv/core/time.hh"
 #include <cstdio>
-#if NV_PLATFORM == NV_WINDOWS
+#if NV_COMPILER == NV_MSVC 
 #define WIN32_LEAN_AND_MEAN
 #include <Windows.h>
@@ -51,5 +51,5 @@
 #define NV_LOG_LEVEL_NAME_PAD(level) (log_level_names_pad[ (level) / 10 ])
 
-#if NV_PLATFORM == NV_WINDOWS 
+#if NV_COMPILER == NV_MSVC 
 static unsigned short log_color[] =
 {
@@ -145,5 +145,5 @@
 	size_t ssize = timestamp( stamp );
 
-#if NV_PLATFORM == NV_WINDOWS 
+#if NV_COMPILER == NV_MSVC 
 	if ( m_color ) SetConsoleTextAttribute( m_handle, FOREGROUND_INTENSITY );
 	WriteConsole( m_handle, stamp, ssize, nullptr, nullptr );
@@ -170,5 +170,5 @@
 	else
 		fwrite( "] ", 2, 1, stdout );
-	fwrite( stamp.data(), stamp.size(), 1, stdout );
+	fwrite( message.data(), message.size(), 1, stdout );
 	fwrite( "\n", 1, 1, stdout );
 #endif
@@ -233,5 +233,5 @@
 	: m_color( coloring )
 {
-#if NV_PLATFORM == NV_WINDOWS 
+#if NV_COMPILER == NV_MSVC 
 	m_handle = GetStdHandle( STD_OUTPUT_HANDLE );
 #else
@@ -240,5 +240,5 @@
 }
 
-size_t nv::log_sink::timestamp( char* buffer ) const
+nv::size_t nv::log_sink::timestamp( char* buffer ) const
 {
 	uint32 ms = get_system_ms();
@@ -248,5 +248,5 @@
 	unsigned int m    = (unsigned int)(secs / 60) % 60;
 	unsigned int s    = secs % 60;
-#if NV_PLATFORM == NV_WINDOWS 
+#if NV_COMPILER == NV_MSVC 
 	sprintf_s( buffer, 16, "%02d:%02d:%02d.%02d", h, m, s, mm );
 #else
Index: trunk/src/core/profiler.cc
===================================================================
--- trunk/src/core/profiler.cc	(revision 374)
+++ trunk/src/core/profiler.cc	(revision 376)
@@ -12,5 +12,5 @@
 using namespace nv;
 
-#ifdef NV_MSVC
+#if NV_COMPILER == NV_MSVC
 #define snprintf sprintf_s
 #endif
Index: trunk/src/core/time.cc
===================================================================
--- trunk/src/core/time.cc	(revision 374)
+++ trunk/src/core/time.cc	(revision 376)
@@ -7,4 +7,6 @@
 #include "nv/core/logging.hh"
 
+#include <ctime>
+
 #if NV_COMPILER == NV_MSVC
 #define WIN32_LEAN_AND_MEAN 
@@ -13,9 +15,18 @@
 #pragma intrinsic(__rdtsc)
 #else
-#include <unistd.h>
+#if NV_COMPILER == NV_GNUC && NV_PLATFORM == NV_WINDOWS
+// mingw doesn't have usleep nor nanosleep...
+#include <windows.h>
+#endif
+// #include <unistd.h>
+// #include <time.h>
+// #include <sys/time.h>
+// #include <sys/types.h>
+#include <stdio.h> 
+#include <time.h> 
 #include <sys/time.h>
 #endif
 
-#include <ctime>
+
 
 struct timer_impl
@@ -58,5 +69,13 @@
 	Sleep( ms );
 #else
-	usleep( ms * 1000 );
+#if NV_COMPILER == NV_GNUC && NV_PLATFORM == NV_WINDOWS
+	Sleep( ms );
+#else
+	struct timespec ts;
+	ts.tv_sec = 0;
+	ts.tv_nsec = ms * 1000000;
+	nanosleep(&ts, NULL);
+//	usleep( ms * 1000 );
+#endif
 #endif
 }
Index: trunk/src/formats/assimp_loader.cc
===================================================================
--- trunk/src/formats/assimp_loader.cc	(revision 374)
+++ trunk/src/formats/assimp_loader.cc	(revision 376)
@@ -479,5 +479,5 @@
 }
 
-size_t nv::assimp_loader::get_nodes_data_count() const
+nv::size_t nv::assimp_loader::get_nodes_data_count() const
 {
 	if ( m_scene == nullptr ) return 0;
Index: trunk/src/formats/md2_loader.cc
===================================================================
--- trunk/src/formats/md2_loader.cc	(revision 374)
+++ trunk/src/formats/md2_loader.cc	(revision 376)
@@ -167,14 +167,14 @@
 	
 	source.seek( md2->header.offset_skins, origin::SET );
-	source.read( md2->skins, sizeof(md2_skin_t), static_cast<size_t>( md2->header.num_skins ) );
+	source.read( md2->skins, sizeof( md2_skin_t ), static_cast<nv::size_t>( md2->header.num_skins ) );
 
 	source.seek( md2->header.offset_st, origin::SET );
-	source.read( md2->texcoords, sizeof(md2_texcoord_t), static_cast<size_t>( md2->header.num_st ) );
+	source.read( md2->texcoords, sizeof( md2_texcoord_t ), static_cast<nv::size_t>( md2->header.num_st ) );
 
 	source.seek( md2->header.offset_tris, origin::SET );
-	source.read( md2->triangles, sizeof(md2_triangle_t), static_cast<size_t>( md2->header.num_tris ) );
+	source.read( md2->triangles, sizeof( md2_triangle_t ), static_cast<nv::size_t>( md2->header.num_tris ) );
 
 	source.seek( md2->header.offset_glcmds, origin::SET);
-	source.read( md2->glcmds, sizeof(int), static_cast<size_t>( md2->header.num_glcmds ) );
+	source.read( md2->glcmds, sizeof( int ), static_cast<nv::size_t>( md2->header.num_glcmds ) );
 
 	md2->frames    = new md2_frame_t   [ md2->header.num_frames ];
Index: trunk/src/formats/md3_loader.cc
===================================================================
--- trunk/src/formats/md3_loader.cc	(revision 374)
+++ trunk/src/formats/md3_loader.cc	(revision 376)
@@ -161,16 +161,16 @@
 
 	source.seek( pos + surface->header.ofs_shaders, origin::SET );
-	source.read( surface->shaders, sizeof( md3_shader_t ), static_cast<size_t>( surface->header.num_shaders ) );
+	source.read( surface->shaders, sizeof( md3_shader_t ), static_cast<nv::size_t>( surface->header.num_shaders ) );
 
 	source.seek( pos + surface->header.ofs_triangles, origin::SET );
-	source.read( surface->triangles, sizeof( md3_triangle_t ), static_cast<size_t>( surface->header.num_triangles ) );
+	source.read( surface->triangles, sizeof( md3_triangle_t ), static_cast<nv::size_t>( surface->header.num_triangles ) );
 
 	source.seek( pos + surface->header.ofs_st, origin::SET );
-	source.read( surface->st, sizeof( md3_texcoord_t ), static_cast<size_t>( surface->header.num_verts ) );
+	source.read( surface->st, sizeof( md3_texcoord_t ), static_cast<nv::size_t>( surface->header.num_verts ) );
 
 	source.seek( pos + surface->header.ofs_xyznormal, origin::SET );
-	source.read( surface->vertices, sizeof( md3_vertex_t ), static_cast<size_t>( surface->header.num_verts * surface->header.num_frames ) );
-
-	if ( source.tell() != static_cast<size_t>( pos + surface->header.ofs_end ) ) return false;
+	source.read( surface->vertices, sizeof( md3_vertex_t ), static_cast<nv::size_t>( surface->header.num_verts * surface->header.num_frames ) );
+
+	if ( source.tell() != static_cast<nv::size_t>( pos + surface->header.ofs_end ) ) return false;
 
 	return true;
@@ -198,13 +198,13 @@
 	md3->tags     = new md3_tag_t    [ md3->header.num_tags * md3->header.num_frames ];
 	md3->surfaces = new md3_surface_t[ md3->header.num_surfaces ];
-	std::memset( md3->surfaces, 0, static_cast< size_t >( md3->header.num_surfaces ) * sizeof(md3_surface_t) );
+	std::memset( md3->surfaces, 0, static_cast< nv::size_t >( md3->header.num_surfaces ) * sizeof( md3_surface_t ) );
 
 	source.seek( md3->header.ofs_frames, origin::SET );
-	source.read( md3->frames, sizeof( md3_frame_t ), static_cast<size_t>( md3->header.num_frames ) );
+	source.read( md3->frames, sizeof( md3_frame_t ), static_cast<nv::size_t>( md3->header.num_frames ) );
 
 	if ( md3->header.num_tags > 0 )
 	{
 		source.seek( md3->header.ofs_tags, origin::SET );
-		source.read( md3->tags, sizeof( md3_tag_t ), static_cast<size_t>( md3->header.num_tags * md3->header.num_frames ) );
+		source.read( md3->tags, sizeof( md3_tag_t ), static_cast<nv::size_t>( md3->header.num_tags * md3->header.num_frames ) );
 	}
 
@@ -321,5 +321,5 @@
 };
 
-mesh_data* nv::md3_loader::release_mesh_data( size_t index )
+mesh_data* nv::md3_loader::release_mesh_data( nv::size_t index )
 {
 	mesh_data* data = new mesh_data;
@@ -417,5 +417,5 @@
 }
 
-mesh_nodes_data* nv::md3_loader::release_mesh_nodes_data( size_t )
+mesh_nodes_data* nv::md3_loader::release_mesh_nodes_data( nv::size_t )
 {
 	md3_t* md3 = (md3_t*)m_md3;
@@ -464,5 +464,5 @@
 }
 
-size_t md3_loader::get_max_frames() const
+nv::size_t md3_loader::get_max_frames() const
 {
 	return static_cast< size_t >( ((md3_t*)m_md3)->header.num_frames );
Index: trunk/src/formats/md5_loader.cc
===================================================================
--- trunk/src/formats/md5_loader.cc	(revision 374)
+++ trunk/src/formats/md5_loader.cc	(revision 376)
@@ -24,5 +24,5 @@
 static void remove_quotes( std::string& str )
 {
-	size_t n;
+	nv::size_t n;
 	while ( ( n = str.find('\"') ) != std::string::npos ) str.erase(n,1);
 }
Index: trunk/src/formats/obj_loader.cc
===================================================================
--- trunk/src/formats/obj_loader.cc	(revision 374)
+++ trunk/src/formats/obj_loader.cc	(revision 376)
@@ -53,11 +53,11 @@
 	std::string next_name;
 
-	size_t size;
+	nv::size_t size;
 	bool   eof;
 
 	obj_reader();
 	bool read_stream( std::istream& stream );
-	virtual size_t add_face( uint32* vi, uint32* ti, uint32* ni, size_t count ) = 0;
-	virtual size_t raw_size() const = 0;
+	virtual nv::size_t add_face( uint32* vi, uint32* ti, uint32* ni, nv::size_t count ) = 0;
+	virtual nv::size_t raw_size() const = 0;
 	virtual void reset() = 0;
 	virtual const uint8* raw_pointer() const = 0;
@@ -172,5 +172,5 @@
 {
 	mesh_data_reader( bool normals ) : m_normals( normals ) {}
-	virtual size_t add_face( uint32* vi, uint32* ti, uint32* ni, size_t count )
+	virtual nv::size_t add_face( uint32* vi, uint32* ti, uint32* ni, nv::size_t count )
 	{
 		if ( count < 3 ) return 0; // TODO : report error?
@@ -178,10 +178,10 @@
 		// TODO : support if normals not present;
 		vec3 nullvec;
-		size_t result = 0;
+		nv::size_t result = 0;
 		// Simple triangulation - obj's shouldn't have more than quads anyway
 
 		if ( m_normals )
 		{
-			for ( size_t i = 2; i < count; ++i )
+			for ( nv::size_t i = 2; i < count; ++i )
 			{
 				result++;
@@ -193,5 +193,5 @@
 		else
 		{
-			for ( size_t i = 2; i < count; ++i )
+			for ( nv::size_t i = 2; i < count; ++i )
 			{
 				result++;
@@ -206,5 +206,5 @@
 	std::vector< VTX > m_data;
 	virtual void reset() { m_data.clear(); }
-	virtual size_t raw_size() const { return m_data.size() * sizeof( VTX ); }
+	virtual nv::size_t raw_size() const { return m_data.size() * sizeof( VTX ); }
 	virtual const uint8* raw_pointer() const { return (const uint8*)m_data.data(); }
 };
@@ -233,15 +233,15 @@
 		//		std::vector< vec3 >& tg = m_mesh->get_tangents();
 
-		size_t count  = m_data.size();
-		size_t tcount = count / 3;
+		nv::size_t count = m_data.size();
+		nv::size_t tcount = count / 3;
 
 		std::vector< vec3 > tan1( count );
 		std::vector< vec3 > tan2( count );
 
-		for (size_t a = 0; a < tcount; ++a )
-		{
-			size_t i1 = a * 3;
-			size_t i2 = a * 3 + 1;
-			size_t i3 = a * 3 + 2;
+		for ( nv::size_t a = 0; a < tcount; ++a )
+		{
+			nv::size_t i1 = a * 3;
+			nv::size_t i2 = a * 3 + 1;
+			nv::size_t i3 = a * 3 + 2;
 			obj_vertex_vtnt& vtx1 = m_data[ i1 ];
 			obj_vertex_vtnt& vtx2 = m_data[ i2 ];
@@ -278,5 +278,5 @@
 		}
 
-		for (size_t a = 0; a < count; ++a )
+		for ( nv::size_t a = 0; a < count; ++a )
 		{
 			const vec3& n = m_data[a].normal;
Index: trunk/src/gfx/image.cc
===================================================================
--- trunk/src/gfx/image.cc	(revision 374)
+++ trunk/src/gfx/image.cc	(revision 376)
@@ -7,5 +7,5 @@
 using namespace nv;
 
-image::image( glm::ivec2 size, size_t depth )
+image::image( glm::ivec2 size, nv::size_t depth )
 	: m_size( size ), m_depth( depth ), m_data( nullptr )
 {
@@ -20,5 +20,5 @@
 
 
-image::image( glm::ivec2 size, size_t depth, const uint8 * data, bool reversed )
+image::image( glm::ivec2 size, nv::size_t depth, const uint8 * data, bool reversed )
 	: m_size( size ), m_depth( depth ), m_data( nullptr )
 {
Index: trunk/src/gfx/keyframed_mesh.cc
===================================================================
--- trunk/src/gfx/keyframed_mesh.cc	(revision 374)
+++ trunk/src/gfx/keyframed_mesh.cc	(revision 376)
@@ -36,5 +36,5 @@
 }
 
-size_t keyframed_mesh::get_max_frames() const
+nv::size_t keyframed_mesh::get_max_frames() const
 {
 	return m_frame_count;
Index: trunk/src/gfx/texture_atlas.cc
===================================================================
--- trunk/src/gfx/texture_atlas.cc	(revision 374)
+++ trunk/src/gfx/texture_atlas.cc	(revision 376)
@@ -11,5 +11,5 @@
 using namespace nv;
 
-texture_atlas::texture_atlas( glm::ivec2 size, size_t depth, size_t border /*= 1*/ )
+texture_atlas::texture_atlas( glm::ivec2 size, nv::size_t depth, nv::size_t border /*= 1*/ )
 	: image( size, depth ), m_used( 0 ), m_border( border )
 {
@@ -82,5 +82,5 @@
 }
 
-int texture_atlas::fit( size_t index, glm::ivec2 size )
+int texture_atlas::fit( nv::size_t index, glm::ivec2 size )
 {
 	glm::ivec3 node = m_nodes[ index ];
Index: trunk/src/gl/gl_context.cc
===================================================================
--- trunk/src/gl/gl_context.cc	(revision 374)
+++ trunk/src/gl/gl_context.cc	(revision 376)
@@ -329,5 +329,5 @@
 }
 
-void gl_context::update( buffer b, const void* data, size_t offset, size_t size )
+void gl_context::update( buffer b, const void* data, nv::size_t offset, nv::size_t size )
 {
 	const gl_buffer_info* info = static_cast< const gl_buffer_info* >( m_device->get_buffer_info( b ) );
@@ -748,5 +748,5 @@
 }
 
-void gl_context::draw( primitive prim, const render_state& rs, program p, vertex_array va, size_t count )
+void gl_context::draw( primitive prim, const render_state& rs, program p, vertex_array va, nv::size_t count )
 {
 	apply_render_state( rs );
Index: trunk/src/gui/gui_gfx_renderer.cc
===================================================================
--- trunk/src/gui/gui_gfx_renderer.cc	(revision 374)
+++ trunk/src/gui/gui_gfx_renderer.cc	(revision 376)
@@ -107,5 +107,5 @@
 {
 public:
-	screen_render_data( context* actx, size_t initial_size )
+	screen_render_data( context* actx, nv::size_t initial_size )
 		: buffer( actx, VERTEX_BUFFER, DYNAMIC_DRAW, initial_size ), ctx( actx ), varray(), shader()
 	{
@@ -175,5 +175,5 @@
 }
 
-texture_font* gfx_renderer::get_font( size_t name ) const
+texture_font* gfx_renderer::get_font( nv::size_t name ) const
 {
 	if ( name >= m_fonts.size() ) return nullptr;
@@ -181,5 +181,5 @@
 }
 
-const image_info* gfx_renderer::get_image( size_t name ) const
+const image_info* gfx_renderer::get_image( nv::size_t name ) const
 {
 	if ( name >= m_images.size() ) return nullptr;
@@ -187,5 +187,5 @@
 }
 
-size_t gfx_renderer::load_font( const std::string& filename, size_t size )
+nv::size_t gfx_renderer::load_font( const std::string& filename, nv::size_t size )
 {
 	std::string id_name( filename );
@@ -205,5 +205,5 @@
 }
 
-size_t gfx_renderer::load_image( const std::string& filename )
+nv::size_t gfx_renderer::load_image( const std::string& filename )
 {
 	auto i = m_image_names.find( filename );
Index: trunk/src/io/c_stream.cc
===================================================================
--- trunk/src/io/c_stream.cc	(revision 374)
+++ trunk/src/io/c_stream.cc	(revision 376)
@@ -3,7 +3,7 @@
 // For conditions of distribution and use, see copyright notice in nv.hh
 
+#include "nv/io/c_stream.hh"
 #include <cstdio>
 #include <sys/stat.h> 
-#include "nv/io/c_stream.hh"
 
 using namespace nv;
@@ -33,5 +33,5 @@
 }
 
-size_t c_stream::read( void* buffer, size_t size, size_t count )
+nv::size_t c_stream::read( void* buffer, nv::size_t size, nv::size_t count )
 {
 	NV_ASSERT( buffer != nullptr && size != 0 && count != 0, "Bad parameter passed to read!" );
@@ -39,5 +39,5 @@
 }
 
-size_t c_stream::write( const void* buffer, size_t size, size_t count )
+nv::size_t c_stream::write( const void* buffer, nv::size_t size, nv::size_t count )
 {
 	NV_ASSERT( buffer != nullptr && size != 0 && count != 0, "Bad parameter passed to write!" );
@@ -50,10 +50,10 @@
 }
 
-size_t c_stream::tell()
+nv::size_t c_stream::tell()
 {
-	return m_file != nullptr ? static_cast< size_t >( ::ftell( (FILE*)m_file ) ) : 0;
+	return m_file != nullptr ? static_cast< nv::size_t >( ::ftell( (FILE*)m_file ) ) : 0;
 }
 
-size_t c_stream::size()
+nv::size_t c_stream::size()
 {
 	if ( m_file == nullptr || m_file_name == nullptr )
Index: trunk/src/lua/lua_path.cc
===================================================================
--- trunk/src/lua/lua_path.cc	(revision 374)
+++ trunk/src/lua/lua_path.cc	(revision 376)
@@ -32,5 +32,5 @@
 }
 
-void lua::path::push( size_t value )
+void lua::path::push( nv::size_t value )
 {
 	m_elements[ m_count ].value  = value;
Index: trunk/src/lua/lua_state.cc
===================================================================
--- trunk/src/lua/lua_state.cc	(revision 374)
+++ trunk/src/lua/lua_state.cc	(revision 376)
@@ -166,5 +166,5 @@
 }
 
-size_t lua::table_guard::get_size()
+nv::size_t lua::table_guard::get_size()
 {
 	return lua_rawlen( m_state, -1 );
Index: trunk/src/stl/assert.cc
===================================================================
--- trunk/src/stl/assert.cc	(revision 376)
+++ trunk/src/stl/assert.cc	(revision 376)
@@ -0,0 +1,53 @@
+// Copyright (C) 2015 ChaosForge Ltd
+// http://chaosforge.org/
+//
+// This file is part of NV Libraries.
+// For conditions of distribution and use, see copyright notice in nv.hh
+
+#define NV_CORE_COMMON_HH
+#define NV_INTERNAL_INCLUDE
+#include "nv/stl/assert.hh"
+#undef NV_CORE_COMMON_HH
+
+#if NV_COMPILER == NV_MSVC
+
+#	if NV_DEBUG
+
+extern "C" {
+	void __cdecl _wassert( const wchar_t * _Message, const wchar_t *_File, unsigned _Line );
+}
+
+void nv_internal_assert( const wchar_t * message, const wchar_t* file, unsigned line )
+{
+	_wassert( message, file, line );
+}
+#	else  
+	void nv_internal_assert( const wchar_t *, const wchar_t*, unsigned ) {}
+#	endif  // NV_DEBUG
+#else // NV_COMPILER
+
+#	if NV_DEBUG
+#	if NV_COMPILER == NV_CLANG
+extern "C" {
+	extern void __assert(const char *, const char *, unsigned int, const char *)
+		throw() __attribute__ ((__noreturn__));
+}
+#	else
+#include <assert.h>
+#	endif
+void nv_internal_assert( const char * assertion, const char * file, unsigned int line, const char * function )
+{
+#	if NV_COMPILER == NV_CLANG
+	__assert(assertion, file, line, function );
+#	else
+	__assert_fail(assertion, file, line, function );
+#	endif
+}
+#	else
+void nv_internal_assert( const char * , const char * , unsigned int , const char * )
+{
+}
+#	endif
+
+#endif // NV_COMPILER
+
Index: trunk/src/stl/capi.cc
===================================================================
--- trunk/src/stl/capi.cc	(revision 376)
+++ trunk/src/stl/capi.cc	(revision 376)
@@ -0,0 +1,7 @@
+// Copyright (C) 2015 ChaosForge Ltd
+// http://chaosforge.org/
+//
+// This file is part of NV Libraries.
+// For conditions of distribution and use, see copyright notice in nv.hh
+
+#include "nv/stl/capi.hh"
