diff --git a/src/cache.c b/src/cache.c
index cabd286..5a9b841 100644
--- a/src/cache.c
+++ b/src/cache.c
@@ -39,12 +39,12 @@
 
 GIT_INLINE(void) cached_obj_incref(git_cached_obj *obj)
 {
-	obj->refcount++;
+	git_atomic_inc(&obj->refcount);
 }
 
 GIT_INLINE(void) cached_obj_decref(git_cached_obj *obj, git_cached_obj_freeptr free_obj)
 {
-	if (--obj->refcount == 0)
+	if (git_atomic_dec(&obj->refcount) == 0)
 		free_obj(obj);
 }
 
diff --git a/src/cache.h b/src/cache.h
index a84267b..9f525e6 100644
--- a/src/cache.h
+++ b/src/cache.h
@@ -11,7 +11,7 @@
 
 typedef struct {
 	git_oid oid;
-	unsigned int refcount;
+	git_atomic refcount;
 } git_cached_obj;
 
 typedef struct {
diff --git a/src/thread-utils.h b/src/thread-utils.h
index ee26ad2..1cf0e34 100644
--- a/src/thread-utils.h
+++ b/src/thread-utils.h
@@ -1,6 +1,18 @@
 #ifndef INCLUDE_thread_utils_h__
 #define INCLUDE_thread_utils_h__
 
+
+
+/* Common operations even if threading has been disabled */
+typedef struct {
+	volatile int val;
+} git_atomic;
+
+static inline void git_atomic_set(git_atomic *a, int val)
+{
+	a->val = val;
+}
+
 #ifdef GIT_THREADS
 
 #define git_thread pthread_t
@@ -16,13 +28,35 @@
 #define git_mutex_unlock(a) pthread_mutex_unlock(a)
 #define git_mutex_free(a)   pthread_mutex_destroy(a)
 
-/* Pthreads condition vars */
-#define git_cond pthread_cond_t
-#define git_cond_init(c, a)	pthread_cond_init(c, a)
-#define git_cond_free(c)		pthread_cond_destroy(c)
-#define git_cond_wait(c, l)	pthread_cond_wait(c, l)
-#define git_cond_signal(c)		pthread_cond_signal(c)
-#define git_cond_broadcast(c)	pthread_cond_broadcast(c)
+/* Pthreads condition vars -- disabled by now */
+#define git_cond unsigned int //pthread_cond_t
+#define git_cond_init(c, a)	(void)0		//pthread_cond_init(c, a)
+#define git_cond_free(c) (void)0		//pthread_cond_destroy(c)
+#define git_cond_wait(c, l)	(void)0		//pthread_cond_wait(c, l)
+#define git_cond_signal(c)	(void)0		//pthread_cond_signal(c)
+#define git_cond_broadcast(c) (void)0	//pthread_cond_broadcast(c)
+
+static inline int git_atomic_inc(git_atomic *a)
+{
+#ifdef __GNUC__
+	return __sync_add_and_fetch(&a->val, 1);
+#elif defined(_MSC_VER)
+	return InterlockedIncrement(&a->val);
+#else
+#	error "Unsupported architecture for atomic operations"
+#endif
+}
+
+static inline int git_atomic_dec(git_atomic *a)
+{
+#ifdef __GNUC__
+	return __sync_sub_and_fetch(&a->val, 1);
+#elif defined(_MSC_VER)
+	return InterlockedDecrement(&a->val);
+#else
+#	error "Unsupported architecture for atomic operations"
+#endif
+}
 
 #else
 
@@ -47,6 +81,16 @@
 #define git_cond_signal(c) (void)0
 #define git_cond_broadcast(c) (void)0
 
+static inline int git_atomic_inc(git_atomic *a)
+{
+	return ++a->val;
+}
+
+static inline int git_atomic_dec(git_atomic *a)
+{
+	return --a->val;
+}
+
 #endif
 
 extern int git_online_cpus(void);
diff --git a/src/win32/pthread.c b/src/win32/pthread.c
index fffff81..f47364a 100644
--- a/src/win32/pthread.c
+++ b/src/win32/pthread.c
@@ -36,17 +36,27 @@
 	return *thread ? GIT_SUCCESS : GIT_EOSERR;
 }
 
-int pthread_cond_signal(pthread_cond_t *cond)
+int pthread_join(pthread_t thread, void **value_ptr)
 {
-    WakeConditionVariable(cond);
+    int ret;
+    ret = WaitForSingleObject(thread, INFINITE);
+    if (ret && value_ptr)
+        GetExitCodeThread(thread, (void*) value_ptr);
+    return -(!!ret);
+}
+
+int pthread_mutex_init(pthread_mutex_t *GIT_RESTRICT mutex,
+                       const pthread_mutexattr_t *GIT_RESTRICT GIT_UNUSED(mutexattr))
+{
+	GIT_UNUSED_ARG(mutexattr);
+    InitializeCriticalSection(mutex);
     return 0;
 }
 
-int pthread_cond_wait(pthread_cond_t *GIT_RESTRICT cond,
-                      pthread_mutex_t *GIT_RESTRICT mutex)
+int pthread_mutex_destroy(pthread_mutex_t *mutex)
 {
     int ret;
-    ret = SleepConditionVariableCS(cond, mutex, INFINITE);
+    ret = CloseHandle(mutex);
     return -(!ret);
 }
 
@@ -62,50 +72,6 @@
     return 0;
 }
 
-int pthread_join(pthread_t thread, void **value_ptr)
-{
-    int ret;
-    ret = WaitForSingleObject(thread, INFINITE);
-    if (ret && value_ptr)
-        GetExitCodeThread(thread, (void*) value_ptr);
-    return -(!!ret);
-}
-
-int pthread_cond_broadcast(pthread_cond_t *cond)
-{
-    WakeAllConditionVariable(cond);
-    return 0;
-}
-
-int pthread_mutex_destroy(pthread_mutex_t *mutex)
-{
-    int ret;
-    ret = CloseHandle(mutex);
-    return -(!ret);
-}
-
-int pthread_cond_destroy(pthread_cond_t *GIT_UNUSED(cond))
-{
-	GIT_UNUSED_ARG(cond);
-    return 0;
-}
-
-int pthread_cond_init(pthread_cond_t *GIT_RESTRICT cond,
-                      const pthread_condattr_t *GIT_RESTRICT GIT_UNUSED(condattr))
-{
-	GIT_UNUSED_ARG(condattr);
-    InitializeConditionVariable(cond);
-    return 0;
-}
-
-int pthread_mutex_init(pthread_mutex_t *GIT_RESTRICT mutex,
-                       const pthread_mutexattr_t *GIT_RESTRICT GIT_UNUSED(mutexattr))
-{
-	GIT_UNUSED_ARG(mutexattr);
-    InitializeCriticalSection(mutex);
-    return 0;
-}
-
 int pthread_num_processors_np(void)
 {
     DWORD_PTR p, s;
diff --git a/src/win32/pthread.h b/src/win32/pthread.h
index ff694e3..10949f1 100644
--- a/src/win32/pthread.h
+++ b/src/win32/pthread.h
@@ -40,7 +40,6 @@
 typedef int pthread_condattr_t;
 typedef int pthread_attr_t;
 typedef CRITICAL_SECTION pthread_mutex_t;
-typedef CONDITION_VARIABLE pthread_cond_t;
 typedef HANDLE pthread_t;
 
 #define PTHREAD_MUTEX_INITIALIZER {(void*)-1};
@@ -56,12 +55,6 @@
 int pthread_mutex_lock(pthread_mutex_t *);
 int pthread_mutex_unlock(pthread_mutex_t *);
 
-int pthread_cond_init(pthread_cond_t *GIT_RESTRICT, const pthread_condattr_t *GIT_RESTRICT);
-int pthread_cond_destroy(pthread_cond_t *);
-int pthread_cond_broadcast(pthread_cond_t *);
-int pthread_cond_signal(pthread_cond_t *);
-int pthread_cond_wait(pthread_cond_t *GIT_RESTRICT, pthread_mutex_t *GIT_RESTRICT);
-
 int pthread_num_processors_np(void);
 
-#endif
\ No newline at end of file
+#endif
diff --git a/tests/t13-threads.c b/tests/t13-threads.c
index 7da1076..62ca73a 100644
--- a/tests/t13-threads.c
+++ b/tests/t13-threads.c
@@ -37,8 +37,6 @@
 	git_cache *cache = (git_cache*)data;
 	unsigned int num;
 
-
-
 }
 
 BEGIN_TEST(cache0, "run several threads polling the cache at the same time")
