diff --git a/Changelog.md b/Changelog.md
--- a/Changelog.md
+++ b/Changelog.md
@@ -1,3 +1,9 @@
+### 1.2.4
+
+- Use qualified names of custom types in the implementation of typed services.
+  This enables qualified imports of custom types in the module where the service
+  gets instantiated.
+
 ### 1.2.3.2
 
 - Suggest the synchronous initialization hook *ngxExportInitHook* from
diff --git a/NgxExport/Tools/SimpleService.hs b/NgxExport/Tools/SimpleService.hs
--- a/NgxExport/Tools/SimpleService.hs
+++ b/NgxExport/Tools/SimpleService.hs
@@ -54,15 +54,29 @@
 --
 -- This module implements a number of exporters for /simple services/. Here
 -- /simplicity/ means avoiding boilerplate code regarding to efficient reading
--- of typed configurations and timed restarts of services. All simple services
--- have type
+-- of typed configurations and timed restarts of services.
 --
+-- All simple services are classified as /untyped/ or /typed/. The untyped
+-- services have type
+--
 -- @
 -- 'ByteString' -> 'Prelude.Bool' -> 'IO' 'L.ByteString'
 -- @
 --
--- which corresponds to the type of usual services from module "NgxExport".
+-- which corresponds to the type of usual services from module "NgxExport". The
+-- typed services are backed by functions from module "NgxExport.Tools.Read"
+-- and may have two different types:
 --
+-- @
+-- 'Read' a => a -> 'Prelude.Bool' -> 'IO' 'L.ByteString'
+-- @
+-- @
+-- t'Data.Aeson.FromJSON' a => a -> 'Prelude.Bool' -> 'IO' 'L.ByteString'
+-- @
+--
+-- The choice of a certain type of a typed service depends on the format in
+-- which the typed data will be passed from the Nginx configuration.
+--
 -- Below is a simple example.
 --
 -- ==== File /test_tools.hs/
@@ -288,21 +302,14 @@
         hasConf = isJust c
         (sNameC, typeC, readConf, unreadableConfMsg) =
             if hasConf
-                then let (tName, isJSON) = first nameBase $ fromJust c
-                     in (mkName $ "storage_" ++ tName ++ '_' : nameF
-                        -- FIXME: using base name of the type means that it is
-                        -- not possible to pass here qualified types from
-                        -- external modules. Using showName instead of nameBase
-                        -- won't help, as it adds static qualified names like
-                        -- GHC.Types.Int that can be unexpected in the context
-                        -- of the user's module scope, instead of adding the
-                        -- dynamic namespace (possibly not qualified) specified
-                        -- in the import clause of the user's module.
-                        ,conT $ mkName tName
+                then let ((tName, tNameBase), isJSON) =
+                             first (id &&& nameBase) $ fromJust c
+                     in (mkName $ "storage_" ++ tNameBase ++ '_' : nameF
+                        ,conT tName
                         ,if isJSON
                              then [|readFromByteStringAsJSON|]
                              else [|readFromByteString|]
-                        ,"Configuration " ++ tName ++ " is not readable"
+                        ,"Configuration " ++ tNameBase ++ " is not readable"
                         )
                 else undefined
         initConf =
diff --git a/ngx-export-tools.cabal b/ngx-export-tools.cabal
--- a/ngx-export-tools.cabal
+++ b/ngx-export-tools.cabal
@@ -1,5 +1,5 @@
 name:                       ngx-export-tools
-version:                    1.2.3.2
+version:                    1.2.4
 synopsis:                   Extra tools for Nginx Haskell module
 description:                Extra tools for
         <https://github.com/lyokha/nginx-haskell-module Nginx Haskell module>.
