diff -Naur flickcurl-1.26.orig/configure.ac flickcurl-1.26/configure.ac
--- flickcurl-1.26.orig/configure.ac	2014-01-14 08:16:05.000000000 +0100
+++ flickcurl-1.26/configure.ac	2016-10-29 09:49:02.381685500 +0200
@@ -9,6 +9,9 @@
 AC_CONFIG_MACRO_DIR(build)
 AM_INIT_AUTOMAKE([1.11 check-news std-options -Wobsolete -Wportability -Wsyntax -Wunsupported -Wextra-portability])
 
+AC_LIBTOOL_WIN32_DLL
+AM_PROG_LIBTOOL
+
 AM_MAINTAINER_MODE
 
 if test "$USE_MAINTAINER_MODE" = yes; then 
@@ -68,7 +71,7 @@
 #     then set AGE to 0.
 #
 # syntax: CURRENT[:REVISION[:AGE]]
-LIBFLICKCURL_LIBTOOL_VERSION=0:0:0
+LIBFLICKCURL_LIBTOOL_VERSION=1:0:0
 AC_SUBST(LIBFLICKCURL_LIBTOOL_VERSION)
 
 
@@ -88,7 +91,8 @@
 AC_MSG_RESULT($CC_IS_CLANG)
 
 dnl Initialize libtool
-LT_INIT
+# LT_INIT
+LT_INIT([win32-dll])
 
 # Checks for libraries.
 
diff -Naur flickcurl-1.26.orig/src/common.c flickcurl-1.26/src/common.c
--- flickcurl-1.26.orig/src/common.c	2014-06-01 20:02:58.000000000 +0200
+++ flickcurl-1.26/src/common.c	2016-10-29 07:17:04.695581600 +0200
@@ -1516,14 +1516,18 @@
 }
 
 
+/*
+ * INTERNAL - free a form.
+ */
 void
-flickcurl_free_form(char **form, int count)
+flickcurl_free_form(char **form)
 {
   if(!form)
     return;
 
   /* free content which is the first key */
-  free(form[0]);
+  if(form[0])
+    free(form[0]);
 
   free(form);
 }
@@ -1537,10 +1541,16 @@
 * INTERNAL - decoded content from current request as HTTP FORM and return fields
 *
 * NOTE: The result may be an empty array with just two NULL
-* terminating pointers if there are no fields.
+* terminating pointers if there are no fields or no content.
+*
+* If @count_p is not NULL, *@count_p is set to the number of pairs of
+* fields.
+*
+* Index 0 is used to store the raw content.
+*
+* Return value: NULL on failure or an array of [char* field name,
+* char* field value] starting at index 1, terminated by a NULL pair.
 *
-* Return value: array of [char* field name, char* field value] with
-* NULL pair terminating or NULL on failure
 */
 char**
 flickcurl_invoke_get_form_content(flickcurl *fc, int* count_p)
@@ -1562,21 +1572,24 @@
     count++; /* counting separators so need +1 for number of contents */
   }
   
-  /* Allocate count + 1 sized array of char* (key, value) pointers
+  /* Allocate 1+ count + 1 sized array of char* (key, value) pointers
    * The last pair are always (NULL, NULL).
    *
    * The pointers are into the 'content' buffer which is kept around
    * and owned by this array and stored in form[0].
    */
-  form = (char**)calloc(2*(count + 1), sizeof(char*));
+  form = (char**)calloc(1 + 2*(count + 1), sizeof(char*));
   if(!form) {
     if(content)
       free(content);
     return NULL;
   }
 
+  /* the form owns the content array */
+  form[0] = content;
+
   if(content) {
-    for(p = content, i = 0; *p; p++) {
+    for(p = content, i = 1; *p; p++) {
       char *start = p;
 
       while(*p && *p != '&' && *p != '=')
@@ -1590,8 +1603,6 @@
     }
     form[i++] = NULL;
     form[i] = NULL;
-
-    free(content);
   }
 
   if(count_p)
diff -Naur flickcurl-1.26.orig/src/flickcurl.h flickcurl-1.26/src/flickcurl.h
--- flickcurl-1.26.orig/src/flickcurl.h	2013-08-31 23:27:06.000000000 +0200
+++ flickcurl-1.26/src/flickcurl.h	2016-10-29 09:44:18.243165800 +0200
@@ -1945,6 +1945,7 @@
 /* flickr.commons */
 FLICKCURL_API
 flickcurl_institution** flickcurl_commons_getInstitutions(flickcurl* fc);
+FLICKCURL_API
 const char* flickcurl_get_institution_url_type_label(flickcurl_institution_url_type url_type);
 
 /* flickr.favorites */
@@ -2198,6 +2199,7 @@
 flickcurl_place* flickcurl_places_resolvePlaceURL(flickcurl* fc, const char* url);
 FLICKCURL_API
 const char* flickcurl_get_place_type_label(flickcurl_place_type place_type);
+FLICKCURL_API
 flickcurl_place_type flickcurl_get_place_type_by_label(const char* place_label);
 FLICKCURL_API
 flickcurl_place_type_info** flickcurl_places_getPlaceTypes(flickcurl* fc);
diff -Naur flickcurl-1.26.orig/src/flickcurl_internal.h flickcurl-1.26/src/flickcurl_internal.h
--- flickcurl-1.26.orig/src/flickcurl_internal.h	2013-06-17 19:42:59.000000000 +0200
+++ flickcurl-1.26/src/flickcurl_internal.h	2016-10-29 07:17:04.695581600 +0200
@@ -119,7 +119,7 @@
 char* flickcurl_invoke_get_content(flickcurl *fc, size_t* size_p);
 /* Invoke URI prepared above and get back 'count' key/values */
 char** flickcurl_invoke_get_form_content(flickcurl *fc, int* count_p);
-void flickcurl_free_form(char **form, int count);
+void flickcurl_free_form(char **form);
 
 /* args.c */
 void flickcurl_free_arg(flickcurl_arg *arg);
diff -Naur flickcurl-1.26.orig/src/Makefile.am flickcurl-1.26/src/Makefile.am
--- flickcurl-1.26.orig/src/Makefile.am	2014-01-14 08:16:05.000000000 +0100
+++ flickcurl-1.26/src/Makefile.am	2016-10-29 09:32:42.292000100 +0200
@@ -97,7 +97,7 @@
 libflickcurl_la_LIBADD = $(top_builddir)/libmtwist/libmtwist.la
 libflickcurl_la_DEPENDENCIES = $(top_builddir)/libmtwist/libmtwist.la
 
-libflickcurl_la_LDFLAGS = -version-info @LIBFLICKCURL_LIBTOOL_VERSION@
+libflickcurl_la_LDFLAGS = -no-undefined -version-info @LIBFLICKCURL_LIBTOOL_VERSION@
 
 $(top_builddir)/libmtwist/libmtwist.la:
 	cd $(top_builddir)/libmtwist && $(MAKE) libmtwist.la
diff -Naur flickcurl-1.26.orig/src/oauth.c flickcurl-1.26/src/oauth.c
--- flickcurl-1.26.orig/src/oauth.c	2014-06-01 20:02:58.000000000 +0200
+++ flickcurl-1.26/src/oauth.c	2016-10-29 09:23:47.302693700 +0200
@@ -29,6 +29,11 @@
 #include <flickcurl.h>
 #include <flickcurl_internal.h>
 
+#if defined(HAVE_GETTIMEOFDAY) && defined(WIN32)
+/* have it as an external function */
+int gettimeofday(struct timeval* tp, void *tzp);
+#endif
+
 /* Only used in the test in this file so needs to be in the library */
 int flickcurl_oauth_build_key(flickcurl_oauth_data* od);
 
@@ -741,11 +746,12 @@
           uri, count);
 #endif
 
-  for(i = 0; i < (2 * count); i += 2) {
-    if(!strcmp(form[i], "oauth_token")) {
-      request_token = form[i+1];
-    } else if(!strcmp(form[i], "oauth_token_secret")) {
-      request_token_secret = form[i+1];
+  for(i = 0; i < count; i++) {
+    int offset = 1 + (2 * i);
+    if(!strcmp(form[offset], "oauth_token")) {
+      request_token = form[offset+1];
+    } else if(!strcmp(form[offset], "oauth_token_secret")) {
+      request_token_secret = form[offset+1];
     }
   }
 
@@ -771,7 +777,7 @@
   
   tidy:
   if(form)
-    flickcurl_free_form(form, count);
+    flickcurl_free_form(form);
   
   return rc;
 }
@@ -888,15 +894,16 @@
           uri, count);
 #endif
 
-  for(i = 0; i < (2 * count); i += 2) {
-    if(!strcmp(form[i], "oauth_token")) {
-      access_token = form[i+1];
-    } else if(!strcmp(form[i], "oauth_token_secret")) {
-      access_token_secret = form[i+1];
-    } else if(!strcmp(form[i], "username")) {
-      username = form[i+1];
-    } else if(!strcmp(form[i], "user_nsid")) {
-      user_nsid = form[i+1];
+  for(i = 0; i < count; i++) {
+    int offset = 1 + (2 * i);
+    if(!strcmp(form[offset], "oauth_token")) {
+      access_token = form[offset+1];
+    } else if(!strcmp(form[offset], "oauth_token_secret")) {
+      access_token_secret = form[offset+1];
+    } else if(!strcmp(form[offset], "username")) {
+      username = form[offset+1];
+    } else if(!strcmp(form[offset], "user_nsid")) {
+      user_nsid = form[offset+1];
     }
     /* ignoring: fullname */
   }
@@ -952,7 +959,7 @@
   
   tidy:
   if(form)
-    flickcurl_free_form(form, count);
+    flickcurl_free_form(form);
   
   return rc;
 }
diff -Naur flickcurl-1.26.orig/src/win32_flickcurl_config.h flickcurl-1.26/src/win32_flickcurl_config.h
--- flickcurl-1.26.orig/src/win32_flickcurl_config.h	1970-01-01 01:00:00.000000000 +0100
+++ flickcurl-1.26/src/win32_flickcurl_config.h	2016-10-24 22:58:09.148220000 +0200
@@ -0,0 +1,65 @@
+/* -*- Mode: c; c-basic-offset: 2 -*-
+ *
+ * win32_flickcurl_config.h - Flickcurl WIN32 hard-coded config
+ *
+ * Copyright (C) 2008-2012, David Beckett http://www.dajobe.org/
+ * 
+ * It is licensed under the following three licenses as alternatives:
+ *   1. GNU Lesser General Public License (LGPL) V2.1 or any newer version
+ *   2. GNU General Public License (GPL) V2 or any newer version
+ *   3. Apache License, V2.0 or any newer version
+ * 
+ * You may not use this file except in compliance with at least one of
+ * the above three licenses.
+ * 
+ * See LICENSE.html or LICENSE.txt at the top of this package for the
+ * complete terms and further detail along with the license texts for
+ * the licenses in COPYING.LIB, COPYING and LICENSE-2.0.txt respectively.
+ * 
+ * 
+ */
+
+
+#ifndef WIN32_CONFIG_H
+#define WIN32_CONFIG_H
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <winsock2.h>
+#include <windows.h>
+#include <io.h>
+#include <memory.h>
+
+
+/* MS names for these functions */
+#define vsnprintf _vsnprintf
+#define access _access
+
+/* define missing flag for access() - the only one used here */
+#ifndef R_OK
+#define R_OK 4
+#endif
+
+
+/* 
+ * All defines from config.h should be added here with appropriate values
+ */
+
+#undef HAVE_NANOSLEEP
+
+/* not quite true - but it's called something else and the define above
+ * handles it
+ */
+#define HAVE_VSNPRINTF 1
+
+/* FIXME - rest of win32 config defines should go here */
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
\ No newline at end of file
