diff --git a/gitlab-haskell.cabal b/gitlab-haskell.cabal
--- a/gitlab-haskell.cabal
+++ b/gitlab-haskell.cabal
@@ -1,7 +1,7 @@
 cabal-version: 2.4
 name:           gitlab-haskell
 category:       Git
-version:        0.1.0.2
+version:        0.1.1
 synopsis:       A Haskell library for the GitLab web API
 description:
   This Haskell library queries and updates the database of a GitLab instance using the GitLab web API: <https://docs.gitlab.com/ee/api/>
@@ -40,8 +40,7 @@
                 , GitLab.API.Repositories
                 , GitLab.API.MergeRequests
                 , GitLab.API.RepositoryFiles
-  other-modules:
-                GitLab.WebRequests.GitLabWebCalls
+                , GitLab.WebRequests.GitLabWebCalls
   hs-source-dirs:
                  src
   build-depends:
diff --git a/src/GitLab/API/Groups.hs b/src/GitLab/API/Groups.hs
--- a/src/GitLab/API/Groups.hs
+++ b/src/GitLab/API/Groups.hs
@@ -12,6 +12,7 @@
 module GitLab.API.Groups where
 
 import Control.Monad.IO.Class
+import Control.Monad.IO.Unlift
 import Data.Maybe
 import Data.Text (Text)
 import qualified Data.Text as T
@@ -21,6 +22,16 @@
 import GitLab.API.Users
 import GitLab.Types
 import GitLab.WebRequests.GitLabWebCalls
+
+-- | gets groups with the given group name.
+--
+-- > projectsWithName "group1"
+groupsWithName :: (MonadUnliftIO m, MonadIO m)
+  => Text -- ^ group name being searched for.
+  -> GitLab m [Group]
+groupsWithName groupName =
+  filter (\group -> groupName == group_path group) <$>
+  gitlabWithAttrs "/groups" ("&search=" <> groupName)
 
 -- | adds all registered users to a group.
 addAllUsersToGroup ::
diff --git a/src/GitLab/API/Projects.hs b/src/GitLab/API/Projects.hs
--- a/src/GitLab/API/Projects.hs
+++ b/src/GitLab/API/Projects.hs
@@ -19,10 +19,12 @@
 import qualified Data.Text as T
 import qualified Data.Text.Encoding as T
 import Network.HTTP.Types.URI
+import Network.HTTP.Types.Status
 import UnliftIO.Async
 
 import GitLab.API.Commits
 import GitLab.API.Issues
+import GitLab.API.Members
 import GitLab.API.Pipelines
 import GitLab.API.Users
 import GitLab.Types
@@ -201,3 +203,39 @@
   case user_maybe of
     Nothing -> return Nothing
     Just usr -> return (Just (user_id usr))
+
+-- | gets all diffs in a project for a given commit SHA.
+projectDiffs :: (MonadIO m) => Project -> Text -> GitLab m [Diff]
+projectDiffs proj commitSha =
+  projectDiffs' (project_id proj) commitSha
+
+-- | gets all diffs in a project for a given project ID, for a given
+-- commit SHA.
+projectDiffs' :: (MonadIO m) => Int -> Text -> GitLab m [Diff]
+projectDiffs' projId commitSha =
+  gitlab
+  ("/projects/"
+   <> T.pack (show projId)
+   <> "/repository/commits/"
+   <> commitSha
+   <> "/diff/")
+
+-- | share a project with a group.
+shareProjectWithGroup ::
+     (MonadIO m)
+  => Int -- ^ group ID
+  -> Int -- ^ project ID
+  -> AccessLevel -- ^ level of access granted
+  -> GitLab m (Either Status GroupShare)
+shareProjectWithGroup groupId projectId access =
+  gitlabPost addr dataBody
+  where
+    dataBody :: Text
+    dataBody =
+      "group_id="
+      <> T.pack (show groupId)
+      <> "&group_access="
+      <> T.pack (show access)
+    addr = "/projects/"
+           <> T.pack (show projectId)
+           <> "/share"
diff --git a/src/GitLab/Types.hs b/src/GitLab/Types.hs
--- a/src/GitLab/Types.hs
+++ b/src/GitLab/Types.hs
@@ -29,9 +29,12 @@
   , Pipeline(..)
   , Commit(..)
   , CommitStats(..)
+  , Diff(..)
   , Repository(..)
   , Job(..)
   , Artifact(..)
+  , Group(..)
+  , GroupShare(..)
   , Branch(..)
   , RepositoryFile(..)
   , MergeRequest(..)
@@ -288,6 +291,18 @@
   , total :: Int
   } deriving (Generic, Show)
 
+data Diff =
+  Diff
+  { diff :: Text
+  , new_path :: Text
+  , old_path :: Text
+  , a_mode :: Maybe Text
+  , b_mode :: Maybe Text
+  , new_file :: Bool
+  , renamed_file :: Bool
+  , deleted_file :: Bool
+  } deriving (Generic, Show)
+
 -- | repositories.
 data Repository =
   Repository
@@ -331,6 +346,36 @@
   , file_format :: Maybe Text
   } deriving (Generic, Show)
 
+-- | groups.
+data Group =
+  Group
+  {
+    group_id :: Int
+  , group_name :: Text
+  , group_path :: Text
+  , group_description :: Text
+  , group_visibility :: Text
+  , group_lfs_enabled :: Bool
+  , group_avatar_url :: Maybe Text
+  , group_web_url :: Text
+  , group_request_access_enabled :: Bool
+  , group_full_name :: Text
+  , group_full_path :: Text
+  , group_file_template_project_id :: Maybe Int
+  , group_parent_id :: Maybe Int
+  } deriving (Generic, Show)
+
+  
+-- | response to sharing a project with a group.
+data GroupShare =
+  GroupShare
+  { share_id :: Int
+  , share_project_id :: Int
+  , share_group_id :: Int
+  , share_group_access :: Int
+  , share_expires_at :: Maybe Text
+  } deriving (Generic, Show)
+
 -- | code branches.
 data Branch =
   Branch
@@ -512,8 +557,27 @@
 bodyNoPrefix "project_stats" = "statistics"
 bodyNoPrefix "commit_stats" = "stats"
 
+bodyNoPrefix "share_id" = "id"
+bodyNoPrefix "share_project_id" = "project_id"
+bodyNoPrefix "share_group_id" = "group_id"
+bodyNoPrefix "share_group_access" = "group_access"
+bodyNoPrefix "share_expires_at" = "expires_at"
 
+bodyNoPrefix "group_id" = "id"
+bodyNoPrefix "group_name" = "name"
+bodyNoPrefix "group_path" = "path"
+bodyNoPrefix "group_description" = "description"
+bodyNoPrefix "group_visibility" = "visibility"
+bodyNoPrefix "group_lfs_enabled" = "lfs_enabled"
+bodyNoPrefix "group_avatar_url" = "avatar_url"
+bodyNoPrefix "group_web_url" = "web_url"
+bodyNoPrefix "group_request_access_enabled" = "request_access_enabled"
+bodyNoPrefix "group_full_name" = "full_name"
+bodyNoPrefix "group_full_path" = "full_path"
+bodyNoPrefix "group_file_template_project_id" = "file_template_project_id"
+bodyNoPrefix "group_parent_id" = "parent_id"
 
+
 -- TODO field names for Issues data type
 bodyNoPrefix s = s
 
@@ -602,6 +666,16 @@
               (defaultOptions
                { fieldLabelModifier = bodyNoPrefix })
 
+instance FromJSON Group where
+  parseJSON = genericParseJSON
+              (defaultOptions
+               { fieldLabelModifier = bodyNoPrefix })
+
+instance FromJSON GroupShare where
+  parseJSON = genericParseJSON
+              (defaultOptions
+               { fieldLabelModifier = bodyNoPrefix })
+
 instance FromJSON Branch where
   parseJSON = genericParseJSON
               (defaultOptions
@@ -613,6 +687,11 @@
                { fieldLabelModifier = bodyNoPrefix })
 
 instance FromJSON MergeRequest where
+  parseJSON = genericParseJSON
+              (defaultOptions
+               { fieldLabelModifier = bodyNoPrefix })
+
+instance FromJSON Diff where
   parseJSON = genericParseJSON
               (defaultOptions
                { fieldLabelModifier = bodyNoPrefix })
