diff --git a/HsDirectoryConfig.h.in b/HsDirectoryConfig.h.in
new file mode 100644
--- /dev/null
+++ b/HsDirectoryConfig.h.in
@@ -0,0 +1,64 @@
+/* HsDirectoryConfig.h.in.  Generated from configure.ac by autoheader.  */
+
+/* Filename extension of executable files */
+#undef EXE_EXTENSION
+
+/* Define to 1 if you have the <fcntl.h> header file. */
+#undef HAVE_FCNTL_H
+
+/* Define to 1 if you have the <inttypes.h> header file. */
+#undef HAVE_INTTYPES_H
+
+/* Define to 1 if you have the <limits.h> header file. */
+#undef HAVE_LIMITS_H
+
+/* Define to 1 if you have the <memory.h> header file. */
+#undef HAVE_MEMORY_H
+
+/* Define to 1 if you have the <stdint.h> header file. */
+#undef HAVE_STDINT_H
+
+/* Define to 1 if you have the <stdlib.h> header file. */
+#undef HAVE_STDLIB_H
+
+/* Define to 1 if you have the <strings.h> header file. */
+#undef HAVE_STRINGS_H
+
+/* Define to 1 if you have the <string.h> header file. */
+#undef HAVE_STRING_H
+
+/* Define to 1 if you have the <sys/stat.h> header file. */
+#undef HAVE_SYS_STAT_H
+
+/* Define to 1 if you have the <sys/types.h> header file. */
+#undef HAVE_SYS_TYPES_H
+
+/* Define to 1 if you have the <time.h> header file. */
+#undef HAVE_TIME_H
+
+/* Define to 1 if you have the <unistd.h> header file. */
+#undef HAVE_UNISTD_H
+
+/* Define to 1 if you have the `utimensat' function. */
+#undef HAVE_UTIMENSAT
+
+/* Define to the address where bug reports for this package should be sent. */
+#undef PACKAGE_BUGREPORT
+
+/* Define to the full name of this package. */
+#undef PACKAGE_NAME
+
+/* Define to the full name and version of this package. */
+#undef PACKAGE_STRING
+
+/* Define to the one symbol short name of this package. */
+#undef PACKAGE_TARNAME
+
+/* Define to the home page for this package. */
+#undef PACKAGE_URL
+
+/* Define to the version of this package. */
+#undef PACKAGE_VERSION
+
+/* Define to 1 if you have the ANSI C header files. */
+#undef STDC_HEADERS
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -24,6 +24,6 @@
 [hl]: https://hackage.haskell.org/package/directory
 [bi]: https://travis-ci.org/haskell/directory.svg?branch=master
 [bl]: https://travis-ci.org/haskell/directory
-[wi]: https://ci.appveyor.com/api/projects/status/github/haskell/directory
+[wi]: https://ci.appveyor.com/api/projects/status/github/haskell/directory?svg=true
 [wl]: https://ci.appveyor.com/project/Rufflewind/directory
 [ac]: https://gnu.org/software/autoconf
diff --git a/System/Directory.hs b/System/Directory.hs
--- a/System/Directory.hs
+++ b/System/Directory.hs
@@ -100,6 +100,9 @@
 import Control.Exception (bracket, mask, onException)
 import Control.Monad ( when, unless )
 #ifdef mingw32_HOST_OS
+#if !MIN_VERSION_base(4, 8, 0)
+import Control.Applicative ((<*>))
+#endif
 import Data.Function (on)
 #endif
 #if !MIN_VERSION_base(4, 8, 0)
@@ -161,18 +164,6 @@
 
 import System.Directory.Internal
 
-#ifdef mingw32_HOST_OS
-win32_cSIDL_LOCAL_APPDATA :: Win32.CSIDL
-win32_fILE_SHARE_DELETE   :: Win32.ShareMode
-#if MIN_VERSION_Win32(2, 3, 1)
-win32_cSIDL_LOCAL_APPDATA = Win32.cSIDL_LOCAL_APPDATA -- only on HEAD atm
-win32_fILE_SHARE_DELETE   = Win32.fILE_SHARE_DELETE   -- added in 2.3.0.2
-#else
-win32_cSIDL_LOCAL_APPDATA = 0x001c
-win32_fILE_SHARE_DELETE   = 0x00000004
-#endif
-#endif
-
 {- $intro
 A directory contains a series of entries, each of which is a named
 reference to a file system object (file, directory etc.).  Some
@@ -336,11 +327,6 @@
    modifyBit True  m b = m .|. b
 #endif
 
-#ifdef mingw32_HOST_OS
-foreign import ccall unsafe "_wchmod"
-   c_wchmod :: CWString -> CMode -> IO CInt
-#endif
-
 copyPermissions :: FilePath -> FilePath -> IO ()
 copyPermissions source dest =
 #ifdef mingw32_HOST_OS
@@ -1375,8 +1361,7 @@
 #ifdef mingw32_HOST_OS
     isReparsePoint <$> Win32.getFileAttributes path
   where
-    fILE_ATTRIBUTE_REPARSE_POINT = 0x400
-    isReparsePoint attr = attr .&. fILE_ATTRIBUTE_REPARSE_POINT /= 0
+    isReparsePoint attr = attr .&. win32_fILE_ATTRIBUTE_REPARSE_POINT /= 0
 #else
     Posix.isSymbolicLink <$> Posix.getSymbolicLinkStatus path
 #endif
diff --git a/System/Directory/Internal.hs b/System/Directory/Internal.hs
new file mode 100644
--- /dev/null
+++ b/System/Directory/Internal.hs
@@ -0,0 +1,28 @@
+{-# LANGUAGE CPP #-}
+#include <HsDirectoryConfig.h>
+
+module System.Directory.Internal
+  ( module System.Directory.Internal.Config
+
+#ifdef HAVE_UTIMENSAT
+  , module System.Directory.Internal.C_utimensat
+#endif
+
+#ifdef mingw32_HOST_OS
+  , module System.Directory.Internal.Windows
+#else
+  , module System.Directory.Internal.Posix
+#endif
+
+  ) where
+import System.Directory.Internal.Config
+
+#ifdef HAVE_UTIMENSAT
+import System.Directory.Internal.C_utimensat
+#endif
+
+#ifdef mingw32_HOST_OS
+import System.Directory.Internal.Windows
+#else
+import System.Directory.Internal.Posix
+#endif
diff --git a/System/Directory/Internal.hsc b/System/Directory/Internal.hsc
deleted file mode 100644
--- a/System/Directory/Internal.hsc
+++ /dev/null
@@ -1,27 +0,0 @@
-#include <HsDirectoryConfig.h>
-
-module System.Directory.Internal
-  ( module System.Directory.Internal.Config
-
-#ifdef HAVE_UTIMENSAT
-  , module System.Directory.Internal.C_utimensat
-#endif
-
-#ifdef mingw32_HOST_OS
-  , module System.Directory.Internal.Windows
-#else
-  , module System.Directory.Internal.Posix
-#endif
-
-  ) where
-import System.Directory.Internal.Config
-
-#ifdef HAVE_UTIMENSAT
-import System.Directory.Internal.C_utimensat
-#endif
-
-#ifdef mingw32_HOST_OS
-import System.Directory.Internal.Windows
-#else
-import System.Directory.Internal.Posix
-#endif
diff --git a/System/Directory/Internal/C_utimensat.hsc b/System/Directory/Internal/C_utimensat.hsc
--- a/System/Directory/Internal/C_utimensat.hsc
+++ b/System/Directory/Internal/C_utimensat.hsc
@@ -1,5 +1,6 @@
+module System.Directory.Internal.C_utimensat where
 #include <HsDirectoryConfig.h>
-
+#ifdef HAVE_UTIMENSAT
 #ifdef HAVE_FCNTL_H
 # include <fcntl.h>
 #endif
@@ -9,9 +10,6 @@
 #ifdef HAVE_SYS_STAT_H
 # include <sys/stat.h>
 #endif
-
-module System.Directory.Internal.C_utimensat where
-#ifdef HAVE_UTIMENSAT
 import Foreign
 import Foreign.C
 import Data.Time.Clock.POSIX (POSIXTime)
diff --git a/System/Directory/Internal/Posix.hsc b/System/Directory/Internal/Posix.hsc
--- a/System/Directory/Internal/Posix.hsc
+++ b/System/Directory/Internal/Posix.hsc
@@ -1,11 +1,9 @@
+module System.Directory.Internal.Posix where
 #include <HsDirectoryConfig.h>
-
+#ifndef mingw32_HOST_OS
 #ifdef HAVE_LIMITS_H
 # include <limits.h>
 #endif
-
-module System.Directory.Internal.Posix where
-#ifndef mingw32_HOST_OS
 import Control.Monad ((>=>))
 import Control.Exception (bracket)
 import Foreign
diff --git a/System/Directory/Internal/Windows.hsc b/System/Directory/Internal/Windows.hsc
--- a/System/Directory/Internal/Windows.hsc
+++ b/System/Directory/Internal/Windows.hsc
@@ -1,12 +1,34 @@
+module System.Directory.Internal.Windows where
 #include <HsDirectoryConfig.h>
-
+#ifdef mingw32_HOST_OS
+#include <shlobj.h>
+#include <windows.h>
 #ifdef HAVE_SYS_STAT_H
 # include <sys/stat.h>
 #endif
-
-module System.Directory.Internal.Windows where
-#ifdef mingw32_HOST_OS
+import Foreign.C
 import System.Posix.Types
+import qualified System.Win32 as Win32
+
+win32_cSIDL_LOCAL_APPDATA :: Win32.CSIDL
+#if MIN_VERSION_Win32(2, 3, 1)
+win32_cSIDL_LOCAL_APPDATA = Win32.cSIDL_LOCAL_APPDATA
+#else
+win32_cSIDL_LOCAL_APPDATA = (#const CSIDL_LOCAL_APPDATA)
+#endif
+
+win32_fILE_ATTRIBUTE_REPARSE_POINT :: Win32.FileAttributeOrFlag
+win32_fILE_ATTRIBUTE_REPARSE_POINT = (#const FILE_ATTRIBUTE_REPARSE_POINT)
+
+win32_fILE_SHARE_DELETE :: Win32.ShareMode
+#if MIN_VERSION_Win32(2, 3, 1)
+win32_fILE_SHARE_DELETE = Win32.fILE_SHARE_DELETE -- added in 2.3.0.2
+#else
+win32_fILE_SHARE_DELETE = (#const FILE_SHARE_DELETE)
+#endif
+
+foreign import ccall unsafe "_wchmod"
+  c_wchmod :: CWString -> CMode -> IO CInt
 
 s_IRUSR :: CMode
 s_IRUSR = (#const S_IRUSR)
diff --git a/changelog.md b/changelog.md
--- a/changelog.md
+++ b/changelog.md
@@ -1,6 +1,11 @@
 Changelog for the [`directory`][1] package
 ==========================================
 
+## 1.2.6.3 (May 2015)
+
+  * Add missing import of `(<*>)` on Windows for `base` earlier than 4.8.0.0
+    ([#53](https://github.com/haskell/directory/issues/53))
+
 ## 1.2.6.2 (April 2015)
 
   * Fix typo in file time functions when `utimensat` is not available and
diff --git a/configure b/configure
--- a/configure
+++ b/configure
@@ -585,7 +585,7 @@
 PACKAGE_BUGREPORT='libraries@haskell.org'
 PACKAGE_URL=''
 
-ac_unique_file="include/HsDirectory.h"
+ac_unique_file="System/Directory.hs"
 # Factoring default headers for most tests.
 ac_includes_default="\
 #include <stdio.h>
@@ -2095,7 +2095,7 @@
 # Safety check: Ensure that we are in the correct source directory.
 
 
-ac_config_headers="$ac_config_headers include/HsDirectoryConfig.h"
+ac_config_headers="$ac_config_headers HsDirectoryConfig.h"
 
 
 # Autoconf chokes on spaces, but we may receive a path from Cabal containing
@@ -4020,7 +4020,7 @@
 for ac_config_target in $ac_config_targets
 do
   case $ac_config_target in
-    "include/HsDirectoryConfig.h") CONFIG_HEADERS="$CONFIG_HEADERS include/HsDirectoryConfig.h" ;;
+    "HsDirectoryConfig.h") CONFIG_HEADERS="$CONFIG_HEADERS HsDirectoryConfig.h" ;;
 
   *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;;
   esac
diff --git a/configure.ac b/configure.ac
--- a/configure.ac
+++ b/configure.ac
@@ -1,9 +1,9 @@
 AC_INIT([Haskell directory package], [1.0], [libraries@haskell.org], [directory])
 
 # Safety check: Ensure that we are in the correct source directory.
-AC_CONFIG_SRCDIR([include/HsDirectory.h])
+AC_CONFIG_SRCDIR([System/Directory.hs])
 
-AC_CONFIG_HEADERS([include/HsDirectoryConfig.h])
+AC_CONFIG_HEADERS([HsDirectoryConfig.h])
 
 # Autoconf chokes on spaces, but we may receive a path from Cabal containing
 # spaces.  In that case, we just ignore Cabal's suggestion.
diff --git a/directory.cabal b/directory.cabal
--- a/directory.cabal
+++ b/directory.cabal
@@ -1,5 +1,5 @@
 name:           directory
-version:        1.2.6.2
+version:        1.2.6.3
 -- NOTE: Don't forget to update ./changelog.md
 license:        BSD3
 license-file:   LICENSE
@@ -18,7 +18,7 @@
     autom4te.cache
     config.log
     config.status
-    include/HsDirectoryConfig.h
+    HsDirectoryConfig.h
 
 extra-source-files:
     changelog.md
@@ -26,7 +26,7 @@
     configure
     configure.ac
     directory.buildinfo
-    include/HsDirectoryConfig.h.in
+    HsDirectoryConfig.h.in
     tests/*.hs
     tests/util.inl
 
@@ -51,7 +51,7 @@
 
     c-sources:
         cbits/directory.c
-    include-dirs: include
+    include-dirs: . include
     includes:
         HsDirectory.h
     install-includes:
diff --git a/include/HsDirectoryConfig.h.in b/include/HsDirectoryConfig.h.in
deleted file mode 100644
--- a/include/HsDirectoryConfig.h.in
+++ /dev/null
@@ -1,64 +0,0 @@
-/* include/HsDirectoryConfig.h.in.  Generated from configure.ac by autoheader.  */
-
-/* Filename extension of executable files */
-#undef EXE_EXTENSION
-
-/* Define to 1 if you have the <fcntl.h> header file. */
-#undef HAVE_FCNTL_H
-
-/* Define to 1 if you have the <inttypes.h> header file. */
-#undef HAVE_INTTYPES_H
-
-/* Define to 1 if you have the <limits.h> header file. */
-#undef HAVE_LIMITS_H
-
-/* Define to 1 if you have the <memory.h> header file. */
-#undef HAVE_MEMORY_H
-
-/* Define to 1 if you have the <stdint.h> header file. */
-#undef HAVE_STDINT_H
-
-/* Define to 1 if you have the <stdlib.h> header file. */
-#undef HAVE_STDLIB_H
-
-/* Define to 1 if you have the <strings.h> header file. */
-#undef HAVE_STRINGS_H
-
-/* Define to 1 if you have the <string.h> header file. */
-#undef HAVE_STRING_H
-
-/* Define to 1 if you have the <sys/stat.h> header file. */
-#undef HAVE_SYS_STAT_H
-
-/* Define to 1 if you have the <sys/types.h> header file. */
-#undef HAVE_SYS_TYPES_H
-
-/* Define to 1 if you have the <time.h> header file. */
-#undef HAVE_TIME_H
-
-/* Define to 1 if you have the <unistd.h> header file. */
-#undef HAVE_UNISTD_H
-
-/* Define to 1 if you have the `utimensat' function. */
-#undef HAVE_UTIMENSAT
-
-/* Define to the address where bug reports for this package should be sent. */
-#undef PACKAGE_BUGREPORT
-
-/* Define to the full name of this package. */
-#undef PACKAGE_NAME
-
-/* Define to the full name and version of this package. */
-#undef PACKAGE_STRING
-
-/* Define to the one symbol short name of this package. */
-#undef PACKAGE_TARNAME
-
-/* Define to the home page for this package. */
-#undef PACKAGE_URL
-
-/* Define to the version of this package. */
-#undef PACKAGE_VERSION
-
-/* Define to 1 if you have the ANSI C header files. */
-#undef STDC_HEADERS
