diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,11 @@
 # TidalCycles log of changes
 
+## 0.96
+
+### Enhancements
+
+* Added `chord` for chord patterns and `scaleP` for scale patterns
+
 ## 0.9.5
 
 ### Enhancements
diff --git a/Sound/Tidal/Chords.hs b/Sound/Tidal/Chords.hs
--- a/Sound/Tidal/Chords.hs
+++ b/Sound/Tidal/Chords.hs
@@ -104,3 +104,58 @@
 -- will create a pattern of a C-major chord followed by a G-minor chord.
 enchord :: Num a => [[a]] -> Pattern a -> Pattern Int -> Pattern a
 enchord chords pn pc = flatpat $ (chordate chords) <$> pn <*> pc
+
+chordTable :: Num a => [(String, [a])]
+chordTable = [("major", major),
+              ("minor", minor),
+              ("major7", major7),
+              ("dom7", dom7),
+              ("minor7", minor7),
+              ("aug", aug),
+              ("dim", dim),
+              ("dim7", dim7),
+              ("one", one),
+              ("five", five),
+              ("plus", plus),
+              ("sharp5", sharp5),
+              ("msharp5", msharp5),
+              ("sus2", sus2),
+              ("sus4", sus4),
+              ("six", six),
+              ("m6", m6),
+              ("sevenSus2", sevenSus2),
+              ("sevenSus4", sevenSus4),
+              ("sevenFlat5", sevenFlat5),
+              ("m7flat5", m7flat5),
+              ("sevenSharp5", sevenSharp5),
+              ("m7sharp5", m7sharp5),
+              ("nine", nine),
+              ("m9", m9),
+              ("m7sharp9", m7sharp9),
+              ("maj9", maj9),
+              ("nineSus4", nineSus4),
+              ("sixby9", sixby9),
+              ("m6by9", m6by9),
+              ("sevenFlat9", sevenFlat9),
+              ("m7flat9", m7flat9),
+              ("sevenFlat10", sevenFlat10),
+              ("nineSharp5", nineSharp5),
+              ("m9sharp5", m9sharp5),
+              ("sevenSharp5flat9", sevenSharp5flat9),
+              ("m7sharp5flat9", m7sharp5flat9),
+              ("eleven", eleven),
+              ("m11", m11),
+              ("maj11", maj11),
+              ("evelenSharp", evelenSharp),
+              ("m11sharp", m11sharp),
+              ("thirteen", thirteen),
+              ("m13", m13)
+             ]
+
+chordL :: Num a => Pattern String -> Pattern [a]
+chordL p = (\name -> fromMaybe [] $ lookup name chordTable) <$> p
+
+-- | @chord p@ turns a pattern of chord names into a pattern of
+-- numbers, representing note value offsets for the chords
+chord :: Num a => Pattern String -> Pattern a
+chord p = flatpat $ chordL p
diff --git a/Sound/Tidal/Context.hs b/Sound/Tidal/Context.hs
--- a/Sound/Tidal/Context.hs
+++ b/Sound/Tidal/Context.hs
@@ -18,6 +18,9 @@
 import Sound.Tidal.Params as C
 import Sound.Tidal.Transition as C
 import Sound.Tidal.Version as C
-import qualified Sound.Tidal.Scales as Scales
-import qualified Sound.Tidal.Chords as Chords
+import Sound.Tidal.Chords as C (chord)
+import Sound.Tidal.Scales as C (scaleP)
+
+import qualified Sound.Tidal.Scales as C.Scales
+import qualified Sound.Tidal.Chords as C.Chords
 
diff --git a/Sound/Tidal/Dirt.hs b/Sound/Tidal/Dirt.hs
--- a/Sound/Tidal/Dirt.hs
+++ b/Sound/Tidal/Dirt.hs
@@ -1,7 +1,7 @@
 {-# LANGUAGE NoMonomorphismRestriction #-}
 module Sound.Tidal.Dirt where
 
-import Sound.OSC.FD (Datum)
+import Sound.OSC.Datum (Datum)
 import qualified Data.Map as Map
 import Control.Applicative
 import Control.Concurrent.MVar
diff --git a/Sound/Tidal/Scales.hs b/Sound/Tidal/Scales.hs
--- a/Sound/Tidal/Scales.hs
+++ b/Sound/Tidal/Scales.hs
@@ -1,5 +1,11 @@
 module Sound.Tidal.Scales where
 
+import Data.Maybe
+
+import Sound.Tidal.Pattern
+import Sound.Tidal.Utils
+import Control.Applicative
+
 -- five notes scales
 minPent :: Num a => [a]
 minPent = [0,3,5,7,10]
@@ -147,3 +153,72 @@
 -- 12 note scales
 chromatic :: Num a => [a]
 chromatic = [0,1,2,3,4,5,6,7,8,9,10,11]
+
+scaleP :: Pattern String -> Pattern Int -> Pattern Int
+scaleP sp p = (\n scaleName -> noteInScale (fromMaybe [0] $ lookup scaleName scaleTable) n) <$> p <*> sp
+   where octave s x = x `div` (length s)
+         noteInScale s x = (s !!! x) + (12 * octave s x)
+
+scaleTable :: Num a => [(String, [a])]
+scaleTable = [("minPent", minPent),
+              ("majPent", majPent),
+              ("ritusen", ritusen),
+              ("egyptian", egyptian),
+              ("kumai", kumai),
+              ("hirajoshi", hirajoshi),
+              ("iwato", iwato),
+              ("chinese", chinese),
+              ("indian", indian),
+              ("pelog", pelog),
+              ("prometheus", prometheus),
+              ("scriabin", scriabin),
+              ("gong", gong),
+              ("shang", shang),
+              ("jiao", jiao),
+              ("zhi", zhi),
+              ("yu", yu),
+              ("whole", whole),
+              ("augmented", augmented),
+              ("augmented2", augmented2),
+              ("hexMajor7", hexMajor7),
+              ("hexDorian", hexDorian),
+              ("hexPhrygian", hexPhrygian),
+              ("hexSus", hexSus),
+              ("hexMajor6", hexMajor6),
+              ("hexAeolian", hexAeolian),
+              ("major", major),
+              ("ionian", ionian),
+              ("dorian", dorian),
+              ("phrygian", phrygian),
+              ("lydian", lydian),
+              ("mixolydian", mixolydian),
+              ("aeolian", aeolian),
+              ("minor", minor),
+              ("locrian", locrian),
+              ("harmonicMinor", harmonicMinor),
+              ("harmonicMajor", harmonicMajor),
+              ("melodicMinor", melodicMinor),
+              ("melodicMinorDesc", melodicMinorDesc),
+              ("melodicMajor", melodicMajor),
+              ("bartok", bartok),
+              ("hindu", hindu),
+              ("todi", todi),
+              ("purvi", purvi),
+              ("marva", marva),
+              ("bhairav", bhairav),
+              ("ahirbhairav", ahirbhairav),
+              ("superLocrian", superLocrian),
+              ("romanianMinor", romanianMinor),
+              ("hungarianMinor", hungarianMinor),
+              ("neapolitanMinor", neapolitanMinor),
+              ("enigmatic", enigmatic),
+              ("spanish", spanish),
+              ("leadingWhole", leadingWhole),
+              ("lydianMinor", lydianMinor),
+              ("neapolitanMajor", neapolitanMajor),
+              ("locrianMajor", locrianMajor),
+              ("diminished", diminished),
+              ("diminished2", diminished2),
+              ("chromatic", chromatic)
+             ]
+
diff --git a/Sound/Tidal/SuperCollider.hs b/Sound/Tidal/SuperCollider.hs
--- a/Sound/Tidal/SuperCollider.hs
+++ b/Sound/Tidal/SuperCollider.hs
@@ -5,7 +5,7 @@
 import Sound.Tidal.Stream
 import Sound.Tidal.Pattern
 import Sound.Tidal.Parse
-import Sound.OSC.FD
+import Sound.OSC.Datum
 import Sound.Tidal.OscStream
 
 supercollider :: [Param] -> Double -> Shape
diff --git a/Sound/Tidal/Tempo.hs b/Sound/Tidal/Tempo.hs
--- a/Sound/Tidal/Tempo.hs
+++ b/Sound/Tidal/Tempo.hs
@@ -20,6 +20,7 @@
 import System.Environment (lookupEnv)
 import qualified System.IO.Error as Error
 import GHC.Conc.Sync (ThreadId)
+import Sound.OSC.Datum.Datem
 import Sound.OSC.FD
 
 import Sound.Tidal.Utils
diff --git a/Sound/Tidal/Version.hs b/Sound/Tidal/Version.hs
--- a/Sound/Tidal/Version.hs
+++ b/Sound/Tidal/Version.hs
@@ -1,4 +1,4 @@
 
 module Sound.Tidal.Version where
 
-tidal_version = "0.9.5"
+tidal_version = "0.9.6"
diff --git a/tidal.cabal b/tidal.cabal
--- a/tidal.cabal
+++ b/tidal.cabal
@@ -1,5 +1,5 @@
 name:                tidal
-version:             0.9.5
+version:             0.9.6
 synopsis:            Pattern language for improvised music
 -- description:
 homepage:            http://tidalcycles.org/
@@ -46,7 +46,7 @@
     , containers
     , hashable
     , colour
-    , hosc > 0.13, hosc <= 0.15
+    , hosc >= 0.16
     , text
     , mersenne-random-pure64
     , time
