diff --git a/pugs-compat.cabal b/pugs-compat.cabal
--- a/pugs-compat.cabal
+++ b/pugs-compat.cabal
@@ -1,5 +1,5 @@
 Name           : pugs-compat
-Version        : 0.0.1
+Version        : 0.0.2
 Build-type     : Simple
 Category       : Pugs
 License        : BSD3
@@ -14,22 +14,21 @@
                     TypeSynonymInstances, FlexibleInstances, PatternGuards,
                     UndecidableInstances, FlexibleContexts, OverlappingInstances
 
-  Build-depends   : base
+  Build-depends   : base, haskell98, time, directory, process, regex-pcre-builtin, regex-base,
+                    random, network, containers, bytestring, array, mtl, stm, utf8-string, stringtable-atom
   Exposed-modules : Pugs.Compat
   Other-modules   : Pugs.Compat.Cast Pugs.Compat.Global Pugs.Compat.ID
                     Pugs.Compat.Monads Pugs.Compat.Posix Pugs.Compat.String
+                    Pugs.Compat.Regex
 
   Ghc-Options     : -fparr
 
   Hs-source-dirs  : src
 
   if os(windows)
-    Build-depends : base, haskell98, time, directory, process,
-                    random, network, containers, bytestring, array, mtl, stm, utf8-string, stringtable-atom
     Extensions    : GeneralizedNewtypeDeriving, ForeignFunctionInterface, DeriveDataTypeable
   else
-    Build-depends : base, haskell98, unix, time, directory, process,
-                    random, network, containers, bytestring, array, mtl, stm, utf8-string, stringtable-atom
+    Build-depends : unix
     Extensions    : ForeignFunctionInterface
     CPP-options   : -DPUGS_HAVE_POSIX
 }
diff --git a/src/Pugs/Compat.hs b/src/Pugs/Compat.hs
--- a/src/Pugs/Compat.hs
+++ b/src/Pugs/Compat.hs
@@ -19,6 +19,7 @@
 import Pugs.Compat.Monads     as X 
 import Pugs.Compat.String     as X 
 import Pugs.Compat.Posix      as X 
+import Pugs.Compat.Regex      as X 
 
 import Control.Concurrent     as X 
 import Control.Concurrent.STM as X 
@@ -70,6 +71,9 @@
 import System.Mem.Weak        as X 
 import System.Process         as X 
 import System.Random          as X hiding (split)
+
+import Text.Regex.Base        as X hiding (empty)
+import Text.Regex.PCRE        as X hiding (empty)
 
 -- Instances.
 instance Show Unique where
diff --git a/src/Pugs/Compat/ID.hs b/src/Pugs/Compat/ID.hs
--- a/src/Pugs/Compat/ID.hs
+++ b/src/Pugs/Compat/ID.hs
@@ -1,11 +1,13 @@
 {-# OPTIONS_GHC -fno-full-laziness -fno-cse -cpp #-}
 
 module Pugs.Compat.ID (
-    ID, bufToID, hashNew,
-    __, (+++), nullID, 
+    ID, bufToID, hashNew, hashByteString,
+    __, (+++), nullID, idKey, idBuf, AtomMap, AtomSet
 ) where
 
 import StringTable.Atom
+import StringTable.AtomMap (AtomMap)
+import StringTable.AtomSet (AtomSet)
 import Pugs.Compat.Cast
 import Data.Int
 import Data.Bits
@@ -18,6 +20,12 @@
 
 bufToID :: ByteString -> ID
 bufToID = toAtom
+
+idBuf :: ID -> ByteString
+idBuf = fromAtom
+
+idKey :: ID -> Int
+idKey = fromAtom
 
 {-# INLINE hashNew #-}
 hashNew :: IO (H.HashTable ByteString a)
diff --git a/src/Pugs/Compat/Regex.hs b/src/Pugs/Compat/Regex.hs
new file mode 100644
--- /dev/null
+++ b/src/Pugs/Compat/Regex.hs
@@ -0,0 +1,9 @@
+module Pugs.Compat.Regex (
+    compilePCRE,
+    executePCRE
+) where
+
+import qualified Text.Regex.PCRE.String as PCRE
+
+compilePCRE = PCRE.compile
+executePCRE = PCRE.execute
