diff --git a/db/migrate/20160608140300_add_space_permissions.rb b/db/migrate/20160608140300_add_space_permissions.rb
index 0fe2f83d604f0f8099dc8291616e0c59a110b8e9..96291a3444a94cdde66aaaaaaad7dcecd789d9e3 100644
--- a/db/migrate/20160608140300_add_space_permissions.rb
+++ b/db/migrate/20160608140300_add_space_permissions.rb
@@ -9,7 +9,7 @@ class AddSpacePermissions < ActiveRecord::Migration
 	end
 
 	def down
-		remove_column :user_has_permissions, :service_space_id, :integer, :default => 1
+		remove_column :user_has_permissions, :service_space_id
 
 		Permission.find_by(:id => 8).delete
 	end
diff --git a/db/migrate/20160623134800_add_minutes_ranges.rb b/db/migrate/20160623134800_add_minutes_ranges.rb
new file mode 100644
index 0000000000000000000000000000000000000000..43df8e4c260229ea3e3eb625e7efa8a2c1a82be2
--- /dev/null
+++ b/db/migrate/20160623134800_add_minutes_ranges.rb
@@ -0,0 +1,10 @@
+require 'active_record'
+
+class AddMinutesRanges < ActiveRecord::Migration
+	def change
+		add_column :resources, :time_slot_type, :string, :default => 'exact'
+		add_column :resources, :min_minutes_per_reservation, :integer
+		add_column :resources, :max_minutes_per_reservation, :integer
+		add_column :resources, :increment_minutes_per_reservation, :integer
+	end
+end
\ No newline at end of file
diff --git a/routes/admin/resources.rb b/routes/admin/resources.rb
index 4da73e8e1f5c2ba94bf289867a87a2c9d42406f4..a645db6a5c2a575eeca1f2dda403e36767c2fb29 100644
--- a/routes/admin/resources.rb
+++ b/routes/admin/resources.rb
@@ -32,7 +32,11 @@ post '/:service_space_url_name/admin/resources/create/?' do
 	resource.service_space_id = @space.id
 	resource.needs_authorization = true
 	resource.is_reservable = params.checked?('is_reservable')
+	resource.time_slot_type = params[:time_slot_type]
 	resource.minutes_per_reservation = params[:minutes_per_reservation]
+	resource.min_minutes_per_reservation = params[:min_minutes_per_reservation]
+	resource.max_minutes_per_reservation = params[:max_minutes_per_reservation]
+	resource.increment_minutes_per_reservation = params[:increment_minutes_per_reservation]
 	resource.needs_approval = false
 	resource.max_reservations_per_slot = 5
 	resource.save
@@ -68,7 +72,11 @@ post '/:service_space_url_name/admin/resources/:resource_id/edit/?' do
 	resource.model = params[:model]
 	resource.description = params[:description]
 	resource.is_reservable = params.checked?('is_reservable')
+	resource.time_slot_type = params[:time_slot_type]
 	resource.minutes_per_reservation = params[:minutes_per_reservation]
+	resource.min_minutes_per_reservation = params[:min_minutes_per_reservation]
+	resource.max_minutes_per_reservation = params[:max_minutes_per_reservation]
+	resource.increment_minutes_per_reservation = params[:increment_minutes_per_reservation]
 	resource.save
 
 	flash(:success, 'Resource Updated', "Your resource #{resource.name} has been updated.")
diff --git a/routes/resources.rb b/routes/resources.rb
index 2a6582ec55bee25fc77ef7b964cc7a6fbdcebd90..a0e344c06015ec8d68738ef446485009584fbfa7 100644
--- a/routes/resources.rb
+++ b/routes/resources.rb
@@ -47,17 +47,17 @@ get '/:service_space_url_name/resources/:resource_id/reserve/?' do
 	# calculate the available start times for reservation
 	if space_hour.nil?
 		start = 0
-		while start + (resource.minutes_per_reservation || 15) <= 1440
+		while start + (resource.minutes_per_reservation || resource.min_minutes_per_reservation || 15) <= 1440
 			available_start_times << start
-			start += (resource.minutes_per_reservation || 15)
+			start += (resource.minutes_per_reservation || resource.min_minutes_per_reservation || 15)
 		end
 	else
 		space_hour.hours.sort{|x,y| x[:start] <=> y[:start]}.each do |record|
 			if record[:status] == 'open'
 				start = record[:start]
-				while start + (resource.minutes_per_reservation || 15) <= record[:end]
+				while start + (resource.minutes_per_reservation || resource.min_minutes_per_reservation || 15) <= record[:end]
 					available_start_times << start
-					start += (resource.minutes_per_reservation || 15)
+					start += (resource.minutes_per_reservation || resource.min_minutes_per_reservation || 15)
 				end
 			end
 		end
diff --git a/utils/language.rb b/utils/language.rb
index f878ccab2d1c31658585132783d55b523dc46a2f..c267ce1f815170c45bfc29399fdc3043bc49fdc2 100644
--- a/utils/language.rb
+++ b/utils/language.rb
@@ -30,6 +30,14 @@ class Integer
     "$#{self / 100.0}"
   end
 
+  def minutes_output
+    if self < 60
+      "#{self} minutes"
+    else
+      "#{(self / 60)} hours #{self % 60} minutes"
+    end
+  end
+
   alias_method :second, :seconds
   alias_method :minute, :minutes
   alias_method :hour, :hours
diff --git a/views/admin/edit_resource.erb b/views/admin/edit_resource.erb
index 720c247c5296f66766c105b63ec29bfa5b6d67f4..b967df12618216daa6f5030c6d6ecd97b5acc8a9 100644
--- a/views/admin/edit_resource.erb
+++ b/views/admin/edit_resource.erb
@@ -6,9 +6,6 @@
 	<label for="name">Name</label>
 	<input type="text" name="name" id="name" value='<%= resource.name %>'/>
 
-	<label for="model">Model</label>
-	<input type="text" name="model" id="model" value='<%= resource.model %>'/>
-
 	<label for="description">Description</label>
 	<textarea id="description" name="description"><%= resource.description %></textarea>
 
@@ -17,8 +14,14 @@
 		<label for="is-reservable">Requires Reservation?</label>
 	</div>
 	<div>
-		<label for="minutes-per-reservation">Minutes Per Reservation</label>
-		<input type="number" name="minutes_per_reservation" id="minutes-per-reservation" value="<%= resource.minutes_per_reservation %>">
+		<label for="minutes-per-reservation">Minutes Per Reservation</label><br>
+		<input type="radio" name="time_slot_type" id="time-slot-type-exact" value="exact" <%= 'checked="checked"' if resource.time_slot_type == 'exact' %>>
+		<label for="time-slot-type-exact">Exactly:</label> <input type="number" name="minutes_per_reservation" id="minutes-per-reservation" value="<%= resource.minutes_per_reservation %>"><br><br>
+		<input type="radio" name="time_slot_type" id="time-slot-type-range" value="range" <%= 'checked="checked"' if resource.time_slot_type == 'range' %>>
+		<label for="time-slot-type-range">Range:</label>
+		<label for="min-minutes-per-reservation">Min:</label> <input style="width: 100px" type="number" name="min_minutes_per_reservation" id="min-minutes-per-reservation" value="<%= resource.min_minutes_per_reservation %>">
+		<label for="max-minutes-per-reservation">Max:</label> <input style="width: 100px" type="number" name="max_minutes_per_reservation" id="max-minutes-per-reservation" value="<%= resource.max_minutes_per_reservation %>">
+		<label for="increment-minutes-per-reservation">Increment:</label> <input style="width: 100px" type="number" name="increment_minutes_per_reservation" id="increment-minutes-per-reservation" value="<%= resource.increment_minutes_per_reservation %>">
 	</div>
 	<br>
 
diff --git a/views/reserve.erb b/views/reserve.erb
index ec070653cb1c6466f7c7af690363fad9d864ccfd..b791fe303e57bc24a1bf21229c84ae5b68c7c8df 100644
--- a/views/reserve.erb
+++ b/views/reserve.erb
@@ -155,17 +155,25 @@ end %>
         </div>
 
         <label for="reservation-length">Reserve resource for:</label><br>
-        <% if resource.minutes_per_reservation.nil? %>
+        <% if resource.time_slot_type == 'exact' %>
+            <input style="width: 50px" disabled="disabled" value="<%= resource.minutes_per_reservation %>" />&nbsp;&nbsp;<label>minutes</label>
+            <input type="hidden" name="length" value="<%= resource.minutes_per_reservation %>" />
+        <% elsif resource.time_slot_type == 'range' %>
+            <select id="reservation-length" name="length">
+                <% i = resource.min_minutes_per_reservation %>
+                <% while i <= resource.max_minutes_per_reservation %>
+                <option value="<%= i %>"><%= i.minutes_output %></option>
+                <% i += resource.increment_minutes_per_reservation %>
+                <% end %>
+            </select>
+        <% else resource.minutes_per_reservation.nil? %>
         <select id="reservation-length" name="length">
-        	<% (1..4).each do |i| %>
-        	<option value="<%=i*15%>"><%=i*15%> minutes</option>
-        	<% end %>
-        	<option value="90">1.5 hours</option>
-        	<option value="120">2 hours</option>
+            <% (1..4).each do |i| %>
+            <option value="<%=i*15%>"><%=i*15%> minutes</option>
+            <% end %>
+            <option value="90">1.5 hours</option>
+            <option value="120">2 hours</option>
         </select>
-        <% else %>
-        <input style="width: 50px" disabled="disabled" value="<%= resource.minutes_per_reservation %>" />&nbsp;&nbsp;<label>minutes</label>
-        <input type="hidden" name="length" value="<%= resource.minutes_per_reservation %>" />
         <% end %>
         <br><br>
         <button type="submit" class="wdn-button wdn-button-brand"><%= reservation.nil? ? 'Reserve' : 'Update' %></button>