diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -18,9 +18,9 @@
 See the [API documentation on Hackage](http://hackage.haskell.org/package/eros)
 if you want to learn how to use the library.
 
-# Usage - v.0.3.0.1
+# Usage - v.0.3.1.0
 
-This is a usage guide for version 0.3.0.1. There will be more up-to-date usage
+This is a usage guide for version 0.3.1.0. There will be more up-to-date usage
 guides as more versions come, hopefully.
 
 To install, run `cabal install eros`.
@@ -56,8 +56,8 @@
 }
 ```
 
-That is the up-to-date schema, as of version 0.3.0.1 . It is liable to
-change. If the version you downloaded is greater than 0.3.0.1, make sure to
+That is the up-to-date schema, as of version 0.3.1.0 . It is liable to
+change. If the version you downloaded is greater than 0.3.1.0, make sure to
 check the schema (it is distributed with the package) to make sure it is up to
 date. The schema is located in `res/schemata/erosc-input.json`.
 
diff --git a/eros.cabal b/eros.cabal
--- a/eros.cabal
+++ b/eros.cabal
@@ -1,5 +1,5 @@
 name:                eros
-version:             0.3.0.1
+version:             0.3.1.0
 synopsis:            A text censorship library.
 description:
   A Haskell library for censoring text, using
@@ -84,7 +84,8 @@
     , eros
     , text
   hs-source-dirs:   src/client/
-  main-is:        Main.lhs
+  main-is:          Main.lhs
+  other-modules:    Erosc.Processor
   default-language: Haskell2010
   ghc-options:      -Wall
 
diff --git a/src/client/Erosc/Processor.hs b/src/client/Erosc/Processor.hs
new file mode 100644
--- /dev/null
+++ b/src/client/Erosc/Processor.hs
@@ -0,0 +1,94 @@
+{-# LANGUAGE FlexibleInstances #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- |This is the module which actually processes the marshals the
+-- data. As far as erosc goes, this is the meat & potatoes.
+-- 
+-- Basically, Main.hs was getting to be too long, so I created this
+-- file.
+-- 
+-- Copyright (c) 2014, Peter Harpending <pharpend2@gmail.com>. All
+-- Rights Reserved.
+-- 
+-- I'm supposed to say "All Rights Reserved," but this is actuallly
+-- BSD-licensed. So, really you can do whatever you want with
+-- this. Have fun!
+
+module Erosc.Processor where
+
+-- One of these days, I'm going to figure out how to cut down on these
+-- imports. 
+import           Control.Applicative
+import           Control.Monad                         (mzero)
+import           Data.Aeson                     hiding (encode)
+import           Data.Aeson.Encode.Pretty
+import qualified Data.ByteString.Lazy as LzByte
+import qualified Data.Text.Lazy       as LzText
+import           Text.Eros
+
+-- |Okay, here's a function that actually does something. It takes an
+-- 'Input' type, and process it.
+processInput :: Input -> IO Output
+processInput (Input txt lists) = do
+    outLists <- mapM listPair lists
+    return $ Output outLists
+  where
+    listPair :: ErosList -> IO (ErosList, Score)
+    listPair ls = do
+      pmap <- loadPhraseMap ls
+      let scr = messageScore txt pmap
+      return (ls, scr)
+
+-- |This will print JSON in a pretty matter, using 2-space indents. I
+-- have no idea why 4-space indents are the default.
+encode :: ToJSON a => a -> LzByte.ByteString
+encode = encodePretty' defConfig { confIndent = 2
+                                 }
+
+-- |We represent the input data in its own data type. This is needed
+-- for JSON parsing, but it will also be useful down the road, when I
+-- allow input that isn't JSON.
+data Input = Input { text      :: LzText.Text
+                   , erosLists :: [ErosList]
+                   }
+
+-- |This is pretty self-explanatory
+instance FromJSON ErosList where
+  parseJSON (String s) = case erosListByName (LzText.fromStrict s) of
+                           Just list -> return list
+                           Nothing   -> mzero
+  parseJSON _          = mzero
+
+-- |This is pretty self-explanatory
+instance FromJSON Input where
+  parseJSON (Object v) = Input
+    <$> v .: "text"
+    <*> v .: "eros-lists"
+  parseJSON _          = mzero
+
+-- |This is the output data type. I will make an instance of ToJSON
+-- for this data type. Again, at the start, only JSON input and output
+-- is existent.
+data Output = Output { elScore :: [(ErosList, Score)] }
+
+-- |Pretty self-explanatory
+instance ToJSON ErosList where
+  toJSON el = case erosNameByList el of
+                Just nom -> toJSON nom
+                Nothing  -> "There's probably a bug in the JSON parsing \
+                            \library Eros uses. You should file a bug \
+                            \report at https://github.com/pharpend/eros/issues."
+
+-- |Pretty self-explanatory
+instance ToJSON (ErosList, Score) where
+  toJSON (el, sc) = object [ "eros-list" .= el
+                           , "score"     .= sc
+                           ]
+
+-- |Pretty self-explanatory
+instance ToJSON Output where
+  toJSON (Output elm) = toJSON elm
+
+-- |It's convenient to think of Scores as Scores, although, they are
+-- truly ints.
+type Score = Int
