diff --git a/app/models/group.rb b/app/models/group.rb
new file mode 100644
index 0000000000000000000000000000000000000000..f18b7d57650ae4214e3280fdafeeaf8a6615745a
--- /dev/null
+++ b/app/models/group.rb
@@ -0,0 +1,22 @@
+# == Schema Information
+#
+# Table name: groups
+#
+#  id         :integer         not null, primary key
+#  name       :string(255)     not null
+#  code       :string(255)     not null
+#  owner_id   :integer         not null
+#  created_at :datetime        not null
+#  updated_at :datetime        not null
+#
+
+class Group < ActiveRecord::Base
+  attr_accessible :code, :name, :owner_id
+
+  has_many :projects
+  belongs_to :owner, class_name: "User"
+
+  validates :name, presence: true, uniqueness: true
+  validates :code, presence: true, uniqueness: true
+  validates :owner_id, presence: true
+end
diff --git a/app/models/project.rb b/app/models/project.rb
index 9b13de62e826d1da2a38df67e0bf09c0badb7551..9d2b99e599b8b125a7382da4b6cc364a732283d3 100644
--- a/app/models/project.rb
+++ b/app/models/project.rb
@@ -11,6 +11,7 @@ class Project < ActiveRecord::Base
   attr_accessor :error_code
 
   # Relations
+  belongs_to :group
   belongs_to :owner, class_name: "User"
   has_many :users,          through: :users_projects
   has_many :events,         dependent: :destroy
@@ -173,4 +174,6 @@ end
 #  wall_enabled           :boolean         default(TRUE), not null
 #  merge_requests_enabled :boolean         default(TRUE), not null
 #  wiki_enabled           :boolean         default(TRUE), not null
+#  group_id               :integer
 #
+
diff --git a/db/migrate/20121002150926_create_groups.rb b/db/migrate/20121002150926_create_groups.rb
new file mode 100644
index 0000000000000000000000000000000000000000..ac178294c0279c2bc106f5cacb587e06b2a89acb
--- /dev/null
+++ b/db/migrate/20121002150926_create_groups.rb
@@ -0,0 +1,11 @@
+class CreateGroups < ActiveRecord::Migration
+  def change
+    create_table :groups do |t|
+      t.string :name, null: false
+      t.string :code, null: false
+      t.integer :owner_id, null: false
+
+      t.timestamps
+    end
+  end
+end
diff --git a/db/migrate/20121002151033_add_group_id_to_project.rb b/db/migrate/20121002151033_add_group_id_to_project.rb
new file mode 100644
index 0000000000000000000000000000000000000000..683fbfec5137edf7ff84e38c0b0aee315d19dcb7
--- /dev/null
+++ b/db/migrate/20121002151033_add_group_id_to_project.rb
@@ -0,0 +1,5 @@
+class AddGroupIdToProject < ActiveRecord::Migration
+  def change
+    add_column :projects, :group_id, :integer
+  end
+end
diff --git a/db/schema.rb b/db/schema.rb
index 00bb55234af668359c6f26365cbdb68a212644fe..ec4729c0c085914656cda36044aab32a593199f4 100644
--- a/db/schema.rb
+++ b/db/schema.rb
@@ -11,7 +11,7 @@
 #
 # It's strongly recommended to check this file into your version control system.
 
-ActiveRecord::Schema.define(:version => 20120905043334) do
+ActiveRecord::Schema.define(:version => 20121002151033) do
 
   create_table "events", :force => true do |t|
     t.string   "target_type"
@@ -25,6 +25,14 @@ ActiveRecord::Schema.define(:version => 20120905043334) do
     t.integer  "author_id"
   end
 
+  create_table "groups", :force => true do |t|
+    t.string   "name",       :null => false
+    t.string   "code",       :null => false
+    t.integer  "owner_id",   :null => false
+    t.datetime "created_at", :null => false
+    t.datetime "updated_at", :null => false
+  end
+
   create_table "issues", :force => true do |t|
     t.string   "title"
     t.integer  "assignee_id"
@@ -108,6 +116,7 @@ ActiveRecord::Schema.define(:version => 20120905043334) do
     t.boolean  "wall_enabled",           :default => true, :null => false
     t.boolean  "merge_requests_enabled", :default => true, :null => false
     t.boolean  "wiki_enabled",           :default => true, :null => false
+    t.integer  "group_id"
   end
 
   create_table "protected_branches", :force => true do |t|
diff --git a/spec/factories/groups.rb b/spec/factories/groups.rb
new file mode 100644
index 0000000000000000000000000000000000000000..d583b186fed5c490a193573c3cf0f701c87156dd
--- /dev/null
+++ b/spec/factories/groups.rb
@@ -0,0 +1,21 @@
+# == Schema Information
+#
+# Table name: groups
+#
+#  id         :integer         not null, primary key
+#  name       :string(255)     not null
+#  code       :string(255)     not null
+#  owner_id   :integer         not null
+#  created_at :datetime        not null
+#  updated_at :datetime        not null
+#
+
+# Read about factories at https://github.com/thoughtbot/factory_girl
+
+FactoryGirl.define do
+  factory :group do
+    name "MyString"
+    code "MyString"
+    owner_id 1
+  end
+end
diff --git a/spec/models/group_spec.rb b/spec/models/group_spec.rb
new file mode 100644
index 0000000000000000000000000000000000000000..eea196fd86499c21af2492d266565557088a8faf
--- /dev/null
+++ b/spec/models/group_spec.rb
@@ -0,0 +1,22 @@
+# == Schema Information
+#
+# Table name: groups
+#
+#  id         :integer         not null, primary key
+#  name       :string(255)     not null
+#  code       :string(255)     not null
+#  owner_id   :integer         not null
+#  created_at :datetime        not null
+#  updated_at :datetime        not null
+#
+
+require 'spec_helper'
+
+describe Group do
+  it { should have_many :projects }
+  it { should validate_presence_of :name }
+  it { should validate_uniqueness_of(:name) }
+  it { should validate_presence_of :code }
+  it { should validate_uniqueness_of(:code) }
+  it { should validate_presence_of :owner_id }
+end
diff --git a/spec/models/project_spec.rb b/spec/models/project_spec.rb
index bb975a93dfd1fc986427011c43b0806dc13a4b56..b7d846e8c5782281843d5c76f28dddf6db7e61e7 100644
--- a/spec/models/project_spec.rb
+++ b/spec/models/project_spec.rb
@@ -1,7 +1,29 @@
+# == Schema Information
+#
+# Table name: projects
+#
+#  id                     :integer         not null, primary key
+#  name                   :string(255)
+#  path                   :string(255)
+#  description            :text
+#  created_at             :datetime        not null
+#  updated_at             :datetime        not null
+#  private_flag           :boolean         default(TRUE), not null
+#  code                   :string(255)
+#  owner_id               :integer
+#  default_branch         :string(255)
+#  issues_enabled         :boolean         default(TRUE), not null
+#  wall_enabled           :boolean         default(TRUE), not null
+#  merge_requests_enabled :boolean         default(TRUE), not null
+#  wiki_enabled           :boolean         default(TRUE), not null
+#  group_id               :integer
+#
+
 require 'spec_helper'
 
 describe Project do
   describe "Associations" do
+    it { should belong_to(:group) }
     it { should belong_to(:owner).class_name('User') }
     it { should have_many(:users) }
     it { should have_many(:events).dependent(:destroy) }